Есть ли какой-нибудь определенный источник, объясняющий, как на самом деле работает микширование звука в 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% громкости.
Какой алгоритм смешивания? Кто-нибудь знает что-нибудь об этом или обойти?