小编Mat*_*her的帖子

通过和弦确定歌曲的关键

如何通过了解歌曲的和弦顺序以编程方式找到歌曲的键?
我问过一些人他们如何确定一首歌的关键,他们都说他们是"通过耳朵"或"反复试验"并通过判断一个和弦是否能解决一首歌......对于普通音乐家而言可能很好,但作为一个程序员,真的不是我想要的答案.

所以我开始寻找音乐相关的库,看看是否还有其他人为此编写过算法.但是我在GitHub上找到了一个名为'tonal'的真正大的库:https://danigb.github.io/tonal/api/index.html我找不到一种接受一组和弦并返回键的方法.

我选择的语言将是JavaScript(NodeJs),但我不一定要寻找JavaScript答案.伪代码或可以在没有太多麻烦的情况下翻译成代码的解释就完全没问题了.

正如你们有些人提到的那样,歌曲中的关键可以改变.我不确定是否可以足够可靠地检测到密钥更改.所以,现在让我们说,我正在寻找一种算法,可以很好地逼近给定和弦序列的键.

...在查看五度音程后,我想我找到了一种模式,可以找到属于每个键的所有和弦.我为此写了一个函数getChordsFromKey(key).通过检查每个键的和弦序列的和弦,我可以创建一个数组,其中包含键与给定和弦序列匹配的可能性的概率:calculateKeyProbabilities(chordSequence).然后我添加了另一个函数estimateKey(chordSequence),它获取具有最高概率得分的键,然后检查和弦序列的最后一个和弦是否是其中之一.如果是这种情况,则返回仅包含该和弦的数组,否则返回具有最高概率得分的所有和弦的数组.这样做可以,但它仍然找不到很多歌曲的正确键或返回具有相同概率的多个键.和弦之类的主要问题A5, Asus2, A+, A°, A7sus4, Am7b5, Aadd9, Adim, C/G是不在五分之一圈内.事实上,例如,键C包含与键完全相同的和弦Am,以及G相同的Em等等...
这是我的代码:

'use strict'
const normalizeMap = {
    "Cb":"B",  "Db":"C#",  "Eb":"D#", "Fb":"E",  "Gb":"F#", "Ab":"G#", "Bb":"A#",  "E#":"F",  "B#":"C",
    "Cbm":"Bm","Dbm":"C#m","Eb":"D#m","Fbm":"Em","Gb":"F#m","Ab":"G#m","Bbm":"A#m","E#m":"Fm","B#m":"Cm"
}
const circleOfFifths = {
    majors: ['C', 'G', 'D', 'A',  'E',  'B',  'F#', 'C#', 'G#','D#','A#','F'],
    minors: ['Am','Em','Bm','F#m','C#m','G#m','D#m','A#m','Fm','Cm','Gm','Dm']
}

function estimateKey(chordSequence) {
    let keyProbabilities = calculateKeyProbabilities(chordSequence)
    let maxProbability = Math.max(...Object.keys(keyProbabilities).map(k=>keyProbabilities[k])) …
Run Code Online (Sandbox Code Playgroud)

javascript node.js music-notation

40
推荐指数
6
解决办法
1505
查看次数

Android使用intent启动音乐播放器

是否有可能从Android中的应用程序打开音乐应用程序,或者最好在我的内部编写一个全新的音乐应用程序.我宁愿使用他们的,因为用户已经习惯了.

android

37
推荐指数
2
解决办法
5万
查看次数

在Android中播放BG音乐

你好!第一次在stackoverflow上问一个问题.精彩!哈哈.

我们正在开发Android游戏,我们为我们的介绍播放一些背景音乐(我们有一个简介活动),但我们希望它继续播放到下一个活动,也许能够从任何地方再次停止或播放音乐应用.

我们目前正在做的是在我们的Intro Activity中使用MediaPlayer播放bgm.但是,一旦用户离开该活动,我们就会停止播放音乐.我们是否必须使用像服务这样的东西?或MediaPlayer/SoundPool足够吗?如果有人知道答案,我们很高兴感谢您与我们分享.谢谢!

java media android background-music

31
推荐指数
3
解决办法
3万
查看次数

在PHP中创建一个图像以显示吉他和弦

我有一个网站,以文本格式显示吉他和弦/标签.这是我目前正在展示的内容:

EM:

| | | | | |
| | | | | |
| 2 2 | | |
| | | | | |
| | | | | |
Run Code Online (Sandbox Code Playgroud)

我了解GD可以为此创建动态图像.但我是PHP的新手,我不知道该怎么做.

在PHP中创建这样的东西以显示图像是否很简单?

谢谢

php image guitar music-notation

31
推荐指数
2
解决办法
1852
查看次数

使用PATH列出MediaStore中的所有音乐

好的,我已经在这个项目上工作了几天,我的大部分时间都在研究如何在列表视图或其他内容列出设备上的所有音乐,我已经搜索了几天了,这是在杀我.我确实在一个文件夹中显示了所有音乐,但是因为大多数人都会有像艺术家和专辑这样的子文件夹,所以我需要一种方法来搜索子文件夹中的MP3或音乐文件.

这是我到目前为止音乐收藏的内容:

package com.androidhive.musicplayer;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;

import android.provider.MediaStore;

public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String(MediaStore.Audio.Media.getContentUri("external").toString());
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

// Constructor
public SongsManager(){

}

/**
 * Function to read all mp3 files from sdcard
 * and store the details in ArrayList
 * */
public ArrayList<HashMap<String, String>> getPlayList(){
    File home = new File(MEDIA_PATH);

    if (home.listFiles(new FileExtensionFilter()).length > 0) {
        for (File file : home.listFiles(new FileExtensionFilter())) …
Run Code Online (Sandbox Code Playgroud)

media android mediastore

31
推荐指数
2
解决办法
5万
查看次数

和弦检测算法?

我正在开发依赖于音乐和弦检测的软件.我知道一些基于倒谱分析或自相关技术的音调检测算法,但它们主要关注单声道材料识别.但我需要使用一些复音识别,即同时进行多个音高,就像在和弦中一样; 有谁知道一些关于这个问题的好的研究或解决方案?

我目前正在开发一些基于FFT的算法,但如果有人对我可以使用的某些算法或技术有所了解,那将会有很大的帮助.

algorithm audio signal-processing music-notation

29
推荐指数
4
解决办法
2万
查看次数

当我的代码在Eclipse(Java)中编译时,我是否可以制作它以便播放?

当我的代码编译时,我总是感到非常高兴,我一直梦想着最终幻想VII的胜利主题或塞尔达宝箱主题与成功的编辑一起播放.

我只编写了两周的编程(除非你在Neopets上包含我8年的HTML).请告诉我我需要做些什么来实现我的梦想.

编辑 - 我知道很多人可能会认为这会在三次编译后变得烦人,但相信我,没关系.每当我收到过去一年的文字时,我都会让猎鹰队长对我说"是",我仍然觉得这很有趣.

eclipse

29
推荐指数
1
解决办法
1341
查看次数

Android停止背景音乐

编辑 - 找到一个简单的5-10线解决方案!看下面我自己的答案!好极了!!!!!!!!!

我搜索了5个小时,数十个SO帖子,没有答案,这似乎是最简单明显的怪异事!

编辑顺便说一句,这不是一个音乐播放器的应用程序,只是一个应用程序来查看图片和文本,打开多个活动,如菜单和关于,查看差异类型的图片等.我只想播放一些简单的背景音乐,同时通过图片看和文字,为什么这么难?

另一个编辑 - 似乎主要的问题是:"为什么按下主页按钮不打开onPause或onStop ???" - 我可以知道何时停止媒体播放器?我在市场上下载的游戏怎么做到这个???

家庭活动开始

然后

媒体播放器开始:

player = MediaPlayer.create(this, R.raw.idil);
player.setLooping(true);
player.setVolume(100,100);
player.start();
Run Code Online (Sandbox Code Playgroud)

玩家在onCreate之外宣布

MediaPlayer player;
Run Code Online (Sandbox Code Playgroud)

当其他活动被打开时,背景音乐继续不间断,这很好,这就是我想要的.

现在,当我完成了我非常简单的应用程序(只显示差异活动中的一些图片和文本)时,我要么多次单击BACK以进入主页/原始活动,然后又一次"退出",或者,我只是按回家"退出",因为我已经完成了这个应用程序,我不再需要听到那个音乐了.


选项1

通话player.stop();中的onPause覆盖,这是不是我想要的,因为当我离开家的活动像"菜单"和"约",我也没有什么用暂停和打开新的活动的时候,因为我做恢复等活动的背景音乐停止不希望漂亮的背景音乐"跳过"或被打断.


方案2

@Override
    protected void onPause() {
        super.onPause();
        if (this.isFinishing()){
            player.stop();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是更好的,因为背景音乐不会在活动之间停止,当我从我的家庭活动按BACK时,音乐停止,我可以继续享受安卓的安卓手机,问题是,当按下HOME时按钮"退出"我的应用程序,那讨厌的背景音乐继续播放.


奇怪

@Override
protected void onStop() {
        super.onStop();
        if (this.isFinishing()){
            player.stop();
        }
    }
Run Code Online (Sandbox Code Playgroud)

与onPause相同(我确实理解实际的差异)

编辑 - 这似乎没关系,如果player.stop(); 高于或低于super.onStop(); 但它影响我无法看到的东西,无论哪种方式,仍然没有解决方案:(

OOOOO

OOOOO

编辑 - 另一个选项 - 但不工作

public void onUserLeaveHint() { …
Run Code Online (Sandbox Code Playgroud)

android background media-player

26
推荐指数
1
解决办法
5万
查看次数

当其他应用播放音乐时,JLayer的音乐会停止

我在Clojure中编写了几百个应用程序,它使用JLayer Java库来处理音频,我在后台运行mp3.这工作正常,但只要我在后台运行任何其他音乐,YouTube等(我正在运行Arch Linux)我的应用程序中的声音完全停止.

我浪费了最后两个小时,并尝试了几十件事来解决这个问题,所以任何建议都值得赞赏.

java clojure jlayer

25
推荐指数
1
解决办法
982
查看次数

跨多种活动的Android全面防故障音乐服务

我知道这个问题已经被问了很多次,可能似乎是几个问题堆集,但我觉得这是相关的,重要的是许多开发人员; 我需要Service为我的Android游戏创建一个可以运行多个活动的背景音乐,这些活动在应用程序终止时结束,并在以下所有情况下暂停:

  1. 一个Activity有自己音乐的东西就开始了.(Activity完成时完成.这恰好是一项AndEngine活动.)
  2. 按下主屏幕,应用程序背景,或终止应用程序.应用程序返回前台时恢复.需要使用onUserLeaveHint().另一个有用的链接
  3. 手机接到电话并中断应用程序.处理呼叫时恢复.需要使用TelephonyManager类似于.
  4. 屏幕已锁定.(简历屏已经被解锁后)需要使用的ACTION_USER_PRESENT,这似乎 非常 有问题的.
  5. 基本上,只要没有显示应用程序或者向用户显示来自#1的特殊活动,音乐就会暂停.

以上是我需要的所有内容以及我拼凑在一起的信息.我目前的代码基本上类似于.

我发现很奇怪,AndEngine他们的音乐没有这些问题,所以也许查看源代码可以帮助寻找答案的人.我正在使用Google Code的最新功能GLES1版本.

我已经看过以下链接以及创建好音乐Service:

我想解决方案Service:

  • BroadcastReceivers尽可能减少使用和Android Manifest添加/权限的最小化
  • 自包含和错误检查

其他说明

  • 目前,所有需要背景音乐的活动都扩展了一个共同的特殊课程.
  • 音乐需要循环,但只运行一个轨道.

提前感谢大家!祝你好运!

编辑 - 这是代码片段,随意改进或忽略:

媒体播放器包装

import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.preference.PreferenceManager;
import android.util.Log;

public class CarefulMediaPlayer {
    final SharedPreferences sp;
    final MediaPlayer mp;
    private …
Run Code Online (Sandbox Code Playgroud)

service android background playback andengine

25
推荐指数
1
解决办法
2644
查看次数