Пример звуковой реверберации Android - PullRequest
3 голосов
/ 01 октября 2011

Существует ли пример кода для реверберации звука с использованием класса PresetReverb из 2.3 в Android?


MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, Uri.parse("/sdcard/music/sample.mp3"));
PresetReverb mReverb = new PresetReverb(0,
mMediaPlayer.getAudioSessionId());
mReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
mReverb.setEnabled(true);
mMediaPlayer.attachAuxEffect(mReverb.getId());
mMediaPlayer.setAuxEffectSendLevel(1.0f);
mMediaPlayer.prepare();
mMediaPlayermp.start();

Я выполнил источник выше, но звук не был слышен.

КогдаЯ добавил это предложение после соуса, я слышу звук.

Thread.sleep(10000);
mp.stop();

Однако звук нормальный, не реверберированный.

Кроме того, это разрешение установлено в Manifest.xml.

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

Есть ли что-то еще, что я должен написать, кроме этих?

Ответы [ 4 ]

3 голосов
/ 20 сентября 2013
PresetReverb mReverb = new PresetReverb(0,mMediaPlayer.getAudioSessionId());//<<<<<<<<<<<<<
mReverb.setPreset(PresetReverb.PRESET_SMALLROOM);
mReverb.setEnabled(true);
mMediaPlayer.setAuxEffectSendLevel(1.0f);

Не прикрепляйте его к медиаплееру.он уже подключен, если вы используете getAudioSessionId ().(проверено на> v4)

Чтобы отключить, используйте effect.setEnabled (false);

1 голос
/ 22 февраля 2012

Используя реверберацию, создайте реверберацию на выходном миксе (аудио-сессия "0") (ссылка http://developer.android.com/reference/android/media/audiofx/PresetReverb.html)

Причина

'Аудио-фреймворк' имеет два connectMode: (EFFECT_INSERT,EFFECT_AUXILIARY), «Вспомогательные эффекты» должны быть созданы в сеансе 0 (глобальный выходной микс). (Ссылка http://developer.android.com/reference/android/media/audiofx/AudioEffect.html#EFFECT_AUXILIARY)

Представьте себе РЕАЛЬНУЮ СМЕСИ КОНСОЛЬ.

Пример

PresetReverb mReverb = new PresetReverb(0,0);//<<<<<<<<<<<<<
mReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
mReverb.setEnabled(true);
mMediaPlayer.attachAuxEffect(mReverb.getId());
mMediaPlayer.setAuxEffectSendLevel(1.0f); 
1 голос
/ 03 октября 2011

Создание экземпляра PresetReverb.Вам нужен идентификатор аудио сеанса, к которому PresetReverb должен быть прикреплен.Затем просто установите пресеты, для которых вы будете использовать реверберацию.

PresetReverb reverb = new  PresetReverb(0, mediaPlayer.getAudioSessionId());
        reverb.setPreset( PresetReverb.PRESET_LARGEHALL);
        reverb.setPreset(PresetReverb.PRESET_LARGEROOM);

Также, если вам нужен слушатель параметров, тогда позвольте вашему классу реализовать PresetReverb.OnParameterChangeListener

и затем переопределить не реализованный метод

@Override
    public void onParameterChange(PresetReverb effect, int status, int param,
            short value) {
        // TODO Auto-generated method stub

    }

в точке, где вам нужно применить реверберацию, просто используйте: reverb.setEnabled(true);

0 голосов
/ 18 июня 2013

Совет на один цент,

Разрешение MODIFY_AUDIO_SETTINGS требуется только в том случае, если вы создаете реверберацию в выходном миксе (аудио сеанс 0)

...