Android:如何合成钢琴音色?

时间:2012-10-29 17:18:19

标签: android audio synthesize piano

我尝试使用SoundPool中的播放速度合成钢琴音色。我听到了声音,但听起来......太丑了。它听起来接近正确的声音频率但不完全正确。它听起来有时比我需要的更高(只是一点点),有时更低 - 但听起来很奇怪:)。

float shift;
for ( int i = 0; i < 13; i++ ) {
    shift = ( float ) i / 12f;
    soundPool.play( soundID, 1, 1, 1, 0, ( float ) 1f + shift );
    try {
        Thread.sleep( 1500 );
    } catch (InterruptedException e) {
        e.printStackTrace();
    }   
}

其中:soundID - 是加载的钢琴C4音符。

也许有人可以告诉我如何在Android中合成钢琴音色?

3 个答案:

答案 0 :(得分:2)

你的主要问题是使用错误的数学来改变声音音调,而不是:

shift = ( float ) i / 12f;

你应该使用:

shift = pow( pow(2.0, 1/12.0), (float) i )

或类似的东西。

你的另一个问题是实时转换的质量通常很差,我建议预先调整12个关键音调,然后改变音调2x,3x等等,这可以通过简单地删除每个第n个样本来完成。而且,如果我是你,我会对整个键盘进行预采样(你的应用程序几乎不需要超过20-25个键,因为屏幕空间有限等),并且所有这些声音都加载在SoundPool和随时准备好玩。

答案 1 :(得分:-1)

答案 2 :(得分:-2)

我找到了一个有用的链接here。但是,建议采用与lenik发布的公式相同的公式,除了它有额外的信息。太