2013-09-24 2 views
2

Я пытался настроить высоту рекордными части аудио следующий с кодом из:Изменение высоты тона и частота записи аудио

http://developer.android.com/guide/topics/media/audio-capture.html

Моя догадка, что эта корректировка должна осуществляться с MediaRecorder.

http://developer.android.com/reference/android/media/MediaRecorder.html

Однако, я не уверен, какой метод вызвать для изменения высоты?

Просматривая SO, я нашел changing the frequency of a soundfile in android, но я смущен относительно того, как интегрировать SoundPool с элементами в руководстве по аудиозахвату, за которым я следую. Есть ли более простое решение, основанное на руководстве разработчика, которое я использую?

+0

Когда вы говорите «отрегулируйте высоту тона», вы имеете в виду, просто играя образец с другой скоростью (что повлияет на продолжительность воспроизведения), или вы хотите сохранить одну и ту же продолжительность и только изменить высоту тона (шаг сдвигая)? – Michael

+0

@Michael В настоящее время я ищу, чтобы поддерживать ту же продолжительность и только изменять высоту/голос аудиофайла. Если у вас есть какие-либо идеи, сообщите мне. Спасибо заранее. – srinivas

ответ

3
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.

Если у вас по-прежнему возникают проблемы с отправкой кода, и я посмотрю на него.

Смежные вопросы