在Android中有没有一种方法可以监听正在播放的音频的节奏/节拍?

3
我正在构建的Android应用程序需要监听音乐(无论是在手机上播放还是通过设备的麦克风捕获),然后根据音乐采取某些行动
因此,我的想法是监听音乐播放的速度/节拍,然后对所得到的内容进行一些数学计算,以影响应用程序的背景颜色。
我需要类似于Malcolm McRoberts在此处提出的要求的东西——分析音乐,然后采取某些行动。他说他能够使用Echo Nest来实现他的目标,但他尚未解释如何做到这一点。
我需要与elucid135在此处提出的要求非常相似的东西——监听每分钟的节拍(bpm),然后根据此进行动画处理。但我的平台非常不同。
有任何Android的想法吗?

也许有了解Android AudioTrack, MediaPlayer 或者 Audio Capture 的人可以提供一些意见。

编辑:

似乎没有人理解我的问题,所以我会尝试重新表述:

使用Android,我想通过设备的麦克风录制音乐。然后我想分析已记录的音乐以找到节拍。根据那个节拍,我希望在应用程序中发生一些事情。

我知道如何录制音乐。我正在寻求关于如何识别音乐中的节拍的建议。

希望这能澄清问题。


这是一个非常笼统的问题,我们在这里解决具体的问题。摆脱这个问题,你可能想研究一下Visualizer - Lukas Knuth
@Lukas Knuth,不确定您为什么认为这个问题太宽泛。我试图说明我为什么要问这个问题以及我做了哪些研究,以便人们可以看到我已经尽了自己的努力。关键是我想要监听音乐的节奏/ bpm(无论是在手机上播放还是由设备的麦克风捕获)。我认为我已经表达得很清楚了。如果让您有其他感受,我很抱歉。 - marienke
这个问题比较宽泛,因为你并没有实现任何东西,只是在问“怎么做?”如果你有代码并遇到了具体的问题,我们可以提供帮助。 - Lukas Knuth
很多人询问“如何做”,这让我想到在这里提出这样的问题是可以的。是否有其他网站更适合提出“如何做”问题? - marienke
关于Visualizer类:我不需要频率,因为它并不特定于音频中像鼓点这样的节奏,也不能使用采样率,因为它与音频录制时间有关,而不是当前播放的音频。因此,我无法使用Visualizer类的getFft(byte [] fft)或getSamplingRate()方法。 - marienke
2个回答

2

"必须听音乐"
..."要么在手机上播放"
这样不行,Android不支持。

..."要么被设备的麦克风捕获"
在某些情况下可以使用(例如在低噪声环境中使用扬声器时),但质量会很差。

另一种选择是使用Visualizer类从会话0(全局输出混音)中获取音频数据。音频质量会很差,但可能足以进行BPM计算,并且即使音乐路由到耳机,它也能正常工作。


嗨,@Michael,有没有办法从Android音频文件中获取节奏和情感? - Dilip

1

我正在研究类似的问题。尝试查看TarsosDSP link。它是一个基于Java的音频信号处理库,提供可以识别节拍的类,这些类可以用于确定节奏,并且可以与Android一起使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接