2013-07-24 63 views
1

是否有可能让Soundpool以更快的速度播放声音,例如播放速度快50%?使用SoundPool加速声音

private void loadSound(int position, int group_position) { 
    switch (position) { 
     case 0: 
      myVoice = soundPool.load(PhraseActivity.wr.get(), sound[group_position][0], 2); 
      soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
       @Override 
       public void onLoadComplete(SoundPool soundPool, int sampleId, 
        int status) { 
        soundPool.play(myVoice, 20, 20, 1, 0, 1f); 
       } 
      }); 
     break; 
     case 1: 
      myVoice = soundPool.load(PhraseActivity.wr.get(), sound[group_position][1], 2); 
      soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
       @Override 
       public void onLoadComplete(SoundPool soundPool, int sampleId, 
        int status) { 
        soundPool.play(myVoice, 20, 20, 1, 0, 1f); 
       } 
      }); 
     break; 
    } 
} 

回答

2

回放速率允许应用程序改变声音的回放速率(音高)。 1.0值意味着以原始频率播放。值为2.0意味着播放速度快两倍,值为0.5意味着以半速播放。 看到Doc

所以,你需要改变
soundPool.play(myVoice, 20, 20, 1, 0, 1f);

soundPool.play(myVoice, 20, 20, 1, 0, 2f);

2的值将上升的速度50%以上,你想

+0

我的浮点值改为更高 - 是的,它加快速度,但声音文件似乎扭曲。女人的声音变成了小孩的声音。 –

+0

@ user2365568这就是当你加快语音时发生的事情......这是正常的事情......当你放慢速度时,它会变成沉重的声音 – Alamri

0

play()的最后一个参数控制所述回放速率。

参见the docs

参数

soundID:左音量值(范围= 0.0〜1.0)

rightVolume:右音量值(由负载()函数

leftVolume返回soundID范围= 0.0至1.0)

优先级:流优先级(0 =最低优先级)

环:环模式(0 =无环,-1 =循环永远)

率:回放速率(1.0 =正常播放,范围为0.5至2.0)

请注意,可以只将速度从0.5改为2.0,意味着速度的一半到两倍。任何过去的事情,你将不得不提出一个自定义的实现。