Java 声音处理-Android上的节拍匹配音乐播放器

Java 声音处理-Android上的节拍匹配音乐播放器,java,c++,android,Java,C++,Android,所以我想为Android制作一个新的音乐播放器,它将是开源的,如果你认为这个想法有什么好处,请随时告诉我,也许我们可以做 我知道可以加快或减慢歌曲的速度,使声音正常化,使声音和乐器仍然保持相同的音调 我想为Android做一个媒体剧,目标是慢跑者,这将是一个好消息 节拍匹配连续的歌曲 保持一个恒定的节拍,以便跑完全程 可通过加速计或手动建立节拍 在运行点(地理位置或计时器)自动发出警报和通知 现在我知道这会在很多用例中失败(缓慢的歌曲听起来很愚蠢,歌曲中的节拍变化变得混乱),但我觉得它们是可

所以我想为Android制作一个新的音乐播放器,它将是开源的,如果你认为这个想法有什么好处,请随时告诉我,也许我们可以做

我知道可以加快或减慢歌曲的速度,使声音正常化,使声音和乐器仍然保持相同的音调

我想为Android做一个媒体剧,目标是慢跑者,这将是一个好消息

  • 节拍匹配连续的歌曲
  • 保持一个恒定的节拍,以便跑完全程
  • 可通过加速计或手动建立节拍
  • 在运行点(地理位置或计时器)自动发出警报和通知
现在我知道这会在很多用例中失败(缓慢的歌曲听起来很愚蠢,歌曲中的节拍变化变得混乱),但我觉得它们是可以克服的。我真正需要知道的是如何开始在C++中编写应用程序(使用Android NDK),它将执行分析和调整流。 在飞行中这样做可行吗?你会用什么方法?流式传输到手机的服务器?也许是通过tether将桌面上的歌曲脱机分析同步到您的设备上

如果一篇文章的问题太多,我最感兴趣的是分析MP3波形以找到节拍的最简单方法。除此之外,如何进行操纵,改变节拍,将是我下一个感兴趣的问题

我有一个小的蹩脚的mp3播放器,可以做两倍的速度飞行,所以我相信它可以做到


Gav

实际上,您会遇到两个问题:

  • 找到一首歌的节奏并不容易。最常用的方法是自校正,它涉及到相当多的微积分,所以我希望你已经研究过了
  • 实际上,在不改变音高的情况下改变歌曲的节拍更加困难,而且仍然会导致歌曲中出现声音伪影。通常,以这种方式编辑音频需要很长时间,而且需要大量的修改才能使歌曲听起来很好。要真正做到这一点是非常非常困难的。实际的过程包括对音频进行傅里叶变换,改变频率,然后进行傅里叶逆变换。更多的微积分,这次是虚数
  • 如果你真的想做这方面的工作,我建议你去电气工程系学习信号与系统


    也许更简单的想法是:在用户的音乐库中找到所有歌曲的节奏,然后专注于播放节奏接近慢跑者节奏的歌曲。你仍然需要做#1,但你不需要担心#2。

    这在智能手机类型的设备上在技术上是可行的,尽管即使在功能强大的PC上,也很难实现良好的音高转换和时间拉伸效果,而不是实时的

    在功能相对强大的移动设备上可以实时实现音高变换和时间拉伸(我在三星i760智能手机上的.Net CF中实现了这一点),而不会对处理器造成过度负担(简单版本并不比普通MP3播放贵多少)。效果不是很好,尽管如果音高和时间变化相对较小,听起来也不太糟糕

    自动确定歌曲的节奏可能太耗时,无法实时完成,但这部分过程可以在播放之前执行,也可以在当前歌曲播放结束之前在下一首歌曲上执行。我自己从来没有做过,所以我不知道


    你提到的其他事情都相对容易做。然而:我不知道Android的API在音频输出方面有多容易,甚至不知道它是否允许该项目需要的音频播放的低级访问。

    动态更改音频速度是完全可行的;我不确定它在G1上是否可行

    与其编写自己的源代码,我建议您查看MythTV源代码和/或mplayer源代码。它们都支持在补偿音频的同时加快视频播放速度。


    tcpmp在iddy biddy Palm Centro上完成了您的所有要求。。。还有更多,包括视频!如果它可以在Palm Centro上完成,那么它肯定可以在Android上完成

    进行精确的2倍速度播放(不提高音高)可以比任意(例如1.1032X或0.92345X)移位播放快得多,这就是为什么蹩脚的设备会这样做。很抱歉,重复一个老问题,但你曾经这样做过吗?我有兴趣看到一些代码可以实现这一点。谢谢