【发布时间】:2022-01-17 01:27:43
【问题描述】:
我有一个相当复杂的问题需要在工作中解决。这远远超出了我“Android 应用程序开发人员”的职权范围——我会将其归类为一个非常专业的音频工程问题。
我的任务是开发一个应用程序,该应用程序需要能够将本地音频文件或来自流媒体服务应用程序(例如但不限于 Spotify)的音频通过蓝牙传输到另一台设备。
此外,应用程序需要能够估计流式音频的 BPM(假设所有音频都是音乐)并使用此 BPM 值来控制灯光序列的播放速度。
这个问题是关于如何估计流媒体音乐的 BPM。
对于音频文件在本地的情况,我可以考虑一些解决方案,例如将 BPM 硬编码到应用程序中,在针对音频资源 URL 的映射中。
我还研究并试验了“静态”库 (aubio),它可以从音频文件中估计 BPM,但不能即时估计。它采用 .wav 格式。这对于我们在这里想要实现的目标来说是不够的。
但是,鉴于需要从 Spotify 等流媒体服务应用流式传输外部音频,静态分析解决方案毫无意义,因为该解决方案不适用于流媒体服务案例,而流媒体服务案例解决方案适用于这两种情况.
因此,我得出的结论是,我需要以某种方式即时分析流式音频,可能使用 FFT 或峰值检测算法。
这个问题不是关于实际的 BPM 估计算法本身(或我将如何到达那里的实现细节),而是关于这种解决方案的基本起点:
我该如何获取 A) 本地文件案例和外部流媒体服务应用案例的流式音频的原始字节以及 B) 我如何将这些字节处理成以某种方式表示音频流的数据结构适合在其上运行音频分析算法。
我意识到这是一个非常开放、非常模糊的问题,但这远远超出了我的舒适区,我什至不知道如何提出一个更连贯的问题。
任何帮助将不胜感激!
【问题讨论】: