android - 在Android中更改声音文件的频率

标签 android audio frequency pitch

我尝试更改单个声音文件的频率。我设法在Android中使用SoundPool做到了这一点。但是结果听起来真的很糟糕。
因此,我迈出了傅立叶变换-但我不确定这是否是我想要的。

我想加载一个文件,并在每次播放该文件时更改该文件的频率。所以我可以用一种音调创作旋律。 android / java有可能吗?

这是我设法做到的方式。 “不好”的意思是听起来不合时宜。

如果要播放文件中音符的下一个频率,则必须将其乘以2 ^(1/12)。但是由于它只是一个浮点数,我想它不够精确,无法获得下一个音符的“真实”频率。

是否有“简单”的方法来实现该目标?

最佳答案

使用SoundPool的最简单方法是调整对play()的调用的速率:

play(aSoundId, leftVolume, rightVolume, 1, 0, rate);

速率可以从.5f到2.0f不等,尽管极端情况通常听起来并不好,所以您可能需要设置一个可接受的范围(例如.4f)和最小速率(例如.85f)。然后,您可以使用一个变量来控制您在该范围内的位置(例如,介于.0f和1.0f之间的float):
float rate = RATE_RANGE * pitch + MINIMUM_RATE;

关于android - 在Android中更改声音文件的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737636/

相关文章:

java - 解析 SignUpCallback() 方法错误

python - 如何在没有音频库的情况下编辑原始 PCM 音频数据?

android - 如何区分音频3gp文件和视频3gp文件

javascript - jQuery Mobile 可折叠集 - 元素关闭时停止音频播放器

c - 按 C 中元素出现频率的降序对数组进行排序

java - 从麦克风 Java 检测频率

android - 检查确切按钮/texview/上的动画是否已经结束

android - 未能解密安全内容条目 : java. io.IOException:getSecretKey 失败:密码不是 ASCII

Android登录按钮在按下时隐藏

excel - 在 Excel 中生成 bin 大小数组