1

我尝试更改单个声音文件的频率。我设法在 android 中使用 SoundPool 做到了这一点。但结果听起来真的很糟糕。所以我开始讨论傅里叶变换——但我不确定这是否是我正在寻找的。

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


这就是我设法做到的方式。“坏”我的意思是它听起来格格不入。

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

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

4

1 回答 1

0

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

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

速率可以从 0.5f 到 2.0f 不等,尽管极端情况通常听起来不太好,因此您可能需要设置一个可接受的范围(例如 0.4f)和最小速率(例如 0.85f)。然后你可以有一个变量来控制你在那个范围内的位置(例如,一个介于 .0f 和 1.0f 之间的浮点数):

float rate = RATE_RANGE * pitch + MINIMUM_RATE;
于 2010-09-17T19:12:50.980 回答