mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mSoundPool = new SoundPool(size, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap<Integer, Integer>();
mSoundPoolMap.put(index, mSoundPool.load(context, R.raw.sound, 1));
mSoundPool.play(id, streamVolume, streamVolume, 1, loop, 1f);
頻率是1f部分。如果您將其更改爲介於.5f和2.0f之間的值,這會減慢或加快樣本的速度,從而改變音高。
下面是一些代碼從我的應用程序之一:
private SoundPool soundpool;
private HashMap<Integer, Integer> soundsMap;
protected void onCreate(Bundle savedInstanceState) {
soundpool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundsMap = new HashMap<Integer, Integer>();
soundsMap.put(cowbell1, soundpool.load(this, R.raw.cowbell, 1));
soundsMap.put(cowbell2, soundpool.load(this, R.raw.cowbell1, 1));
soundsMap.put(cowbell3, soundpool.load(this, R.raw.windhh3, 1));
}
public void playSound(int sound, float fSpeed) {
AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent/streamVolumeMax;
soundpool.play(soundsMap.get(sound), volume, volume, 1, 0, fSpeed);
}
要叫一聲我用這個:
playSound(cowbell1, 1.0f);
or
playSound(cowbell2, 1.0f);
速度可以改變通過改變1.0F值。
如果您仍然無法發佈您的代碼,我會看看它。
當你說「調整音高」時,你的意思是簡單地以不同的速度播放樣本(這將影響播放的持續時間),還是你希望保持相同的持續時間,只改變音高(音高移動)? – Michael
@Michael目前我正在尋找保持相同的持續時間,只改變音頻文件的音高/音色。如果您對此有任何想法,請告訴我。提前感謝 – srinivas