如何使用MediaPlayer或SoundPool处理Android中的速度和音高

时间:2011-06-08 05:17:31

标签: android

我尝试使用SoundPool处理速度和音高。在play()方法中,如果我们改变速率(最后一个参数),速度和音高都会发生变化。而且我无法使用SoundPool播放完整的声音文件。我在SoundPool中使用FileDescriptor得到了解决方案我们可以提到要播放的文件的长度,但它不起作用。请分享您的想法。

谢谢

2 个答案:

答案 0 :(得分:2)

在Android中尝试改变音高

这可能有些用处。 在尝试了所有内容之后,我决定使用SoundPool来改变音高,播放速率为2.0会使声音以高于其原始频率的频率播放,而播放速率为0.5会使其以原始频率的一半播放。播放速率范围为0.5到2.0。 但它确实适用于较低且高于0.5和2.0的频率。

我发布了我的工作代码,

但是因为它仅用于演示目的,每次安装应用程序时,您需要手动更改“播放速率”,例如:“sp.play(explosion,1,1,0,0,1.5f)”这里“1.5f”是播放速率。可以轻松创建EditView或类似的东西,以便在运行时设置播放速率的值。

在这个应用程序中,您只需点击应用程序的屏幕即可以设定的播放速率播放音乐。

import java.io.IOException;

import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SoundPoolActivity extends Activity implements OnClickListener {

    SoundPool sp;
    int explosion = 0;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

       View v = new View(this);
       v.setOnClickListener(this);
       setContentView(v);
       sp = new SoundPool(1,AudioManager.STREAM_MUSIC,0);
       //explosion = sp.load(this, R.raw.hh,0);
       explosion = sp.load("/sdcard/hh.m4a",0);


    }


    public void onClick(View v){
         if (explosion!=0){

             sp.play(explosion, 1,1,0,0,2.3f);
         }

    }
}

答案 1 :(得分:0)

  

据我所知,Mediaplayer或Soundpool不能让我们独立改变音高和速度(速度)。

您可以尝试使用由xanaduo维护的github项目soundtouch

在网上搜索了2天之后,这是我的一天。