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