声音处理 - 在Android上击败匹配的音乐播放器

时间:2009-07-23 14:03:38

标签: java c++ android

所以我想为Android制作一个新的音乐播放器,它将是开源的,如果你觉得这个想法有任何好处,请随时告诉我,也许我们可以继续使用它。

我知道可以加速和减慢一首歌并使声音标准化,以便声音和乐器仍能达到相同的音高。

我想针对慢跑者制作针对Android的媒体播放,这将是;

  • 击败连续歌曲
  • 保持不断的节拍,以便跑到
  • 可以通过加速度计或手动建立节拍
  • 在运行中的点处自动发出警报和通知(地理位置或计时器)

现在我知道这会因许多使用案例而失败(慢歌听起来很愚蠢,歌曲内部的变化搞砸了)但我觉得它们可以被克服。我真正需要知道的是如何开始用C ++编写应用程序(使用Android NDK),它将执行分析并调整流。

动态执行此操作是否可行?你会用什么方法?流到手机的服务器?也许离线分析桌面上通过系绳同步到您设备的歌曲?

如果对于一个帖子来说这个问题太多了,我最感兴趣的是分析MP3波形以找到节拍的最简单方法。最重要的是,如何进行操作,改变节拍,将成为我的下一个兴趣点。

我有一个很小的蹩脚的MP3播放器可以在飞行中做双倍速度,所以我相信它可以做到!

GAV株系

4 个答案:

答案 0 :(得分:1)

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

  1. 找一首歌的节奏并不容易。最常见的方法涉及自动消解,这涉及到相当多的微积分,所以我希望你已经研究过了。
  2. 实际上,在没有音高变换的情况下改变歌曲的节拍会更加困难,并且仍会导致歌曲中的声音伪影。通常以这种方式编辑音频需要很长时间,并且需要大量的修补才能让这首歌听起来不错。实时执行此操作将非常非常困难。实际过程涉及对音频进行傅里叶变换,移动频率,并进行逆傅立叶变换。更多的微积分,这次是虚数。
  3. 如果您真的想参与此课程,我建议您参加电气工程系的信号和系统课程。

    也许是一个更简单的想法:找到用户图书馆中所有歌曲的速度,并专注于播放与慢跑者节奏相近的歌曲。你仍然需要做#1,但你不必担心#2。

答案 1 :(得分:1)

这在智能手机型设备上技术上是可行的,尽管即使在强大的PC上也不是实时地实现良好的音调变换和时间拉伸效果是非常困难的。

可以在相对强大的移动设备上实时实现音高变换和时间延长(我在三星i760智能手机上的.Net CF中完成),而不会对处理器造成过多的负担(简单版本不多)比普通的MP3播放昂贵)。虽然如果音高和时间变化相对较小,但效果并不是很好。

自动确定歌曲的速度可能实时太耗时,但这部分过程可以在播放之前执行,也可以在当前歌曲播放之前的下一首歌曲中完成玩完了。我自己从来没有这样做过,所以我不知道。

你提到的其他一切都比较容易。但是:我不知道Android的API在音频输出方面有多么简单,甚至不知道它是否允许对该项目所需的低级别音频播放访问。

答案 2 :(得分:0)

动态改变音频速度绝对可行;我不确定G1是否可行。

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

答案 3 :(得分:-2)

http://picard.exceed.hu/tcpmp/test/

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