Как работает микширование звука Android? - PullRequest
2 голосов
/ 11 февраля 2010

Есть ли какой-нибудь определенный источник, объясняющий, как на самом деле работает микширование звука в Android? Я получаю действительно неожиданное поведение при использовании SoundPool на STREAM_NOTIFICATION, когда он смешивается с музыкой на STREAM_MUSIC.

При воспроизведении музыки, даже если ее громкость намного ниже, звуки, воспроизводимые SoundPool, имеют на 50% уровень громкости, чем при отсутствии воспроизведения музыки.

Это примерно код, который я использую:

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);

Несколько из них:

sound_id = soundPool.load(context, 
                context.getResources().getIdentifier("sound1", 
                      "raw",
                       "com.package.name"),
                1);

А позже это:

final AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
final int volume = manager.getStreamVolume(AudioManager.STREAM_MUSIC);

manager.setStreamVolume(AudioManager.STREAM_MUSIC, volume/2, 0);

soundPool.play(sound_id, 1f, 1f, 1, 0, 1);

new Handler().postDelayed(new Runnable() {
       public void run() {
           manager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
       }
   }, 1000);

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

Какой алгоритм смешивания? Кто-нибудь знает что-нибудь об этом или обойти?

1 Ответ

0 голосов
/ 31 августа 2010

Вы пытались установить громкость на NOTIFICATION_STREAM? У меня похожая проблема, когда я использую MediaPlayer (без звукового пула) и вручную настраиваю громкость звука в уведомлении, одновременно приглушая музыкальный поток, решенный проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...