У меня похожая проблема. В моем приложении я должен сначала играть без звука (амплитуда синусоиды равна 0), а затем, через 2 секунды, я играю синусоиду с амплитудой = 10000.
Однако иногда, даже когда я начинаю играть в AudioTrack (статический режим, поток - МУЗЫКА), я ничего не слышу, и только после того, как я изменяю громкость вручную, я начинаю слышать свои звуки. Перед воспроизведением каких-либо звуков (даже тихих) я программно устанавливаю максимальную громкость потока и контролирую выходную громкость по амплитуде сигнала.
Вы выяснили причину этого?
Обновлять:
Углубившись в проблему, я обнаружил странную вещь: пока устройство находится в этом странном состоянии, мои вызовы AudioManager.setStreamVolume не работают. Я проверил это:
int max = mAudioManager.getStreamMaxVolume(SoundConfig.outputStreamType); // max = 15
int v = mAudioManager.getStreamVolume(SoundConfig.outputStreamType); // v = 0
mAudioManager.setStreamVolume(SoundConfig.outputStreamType, max, 0);
v = mAudioManager.getStreamVolume(SoundConfig.outputStreamType); // v = 0
После этого я начал анализировать вывод logcat, что я обнаружил: - в странном состоянии настройка громкости и запуск воспроизведения выглядят так:
12-19 12:45:37.120: D/AudioService(192): getStreamVolume(12)
12-19 12:45:40.970: D/AudioSystem(192): getParameters() ERROR : can't get parameters
12-19 12:45:40.970: D/AudioService(192): getStreamVolume(12)
12-19 12:45:45.680: D/AudioService(192): getStreamVolume(12)
12-19 12:45:50.120: I/AudioPolicyManager(110): startOutput() output 1, stream 3, session 6
12-19 12:45:50.120: I/AudioPolicyManager(110): getDeviceForStrategy() strategy 0, device 4
12-19 12:45:50.120: I/AudioPolicyManager(110): getDeviceForStrategy() strategy 0, device 4
12-19 12:45:50.120: I/AudioFlinger(110): start output streamType (0, 3) for 1
12-19 12:45:50.120: D/AudioHardware(110): AudioStreamOutALSA::setParameters() start_output_streamtype=3
12-19 15:25:02.521: D/AudioHardware(110): AudioHardware pcm playback is exiting standby.
Но в обычном состоянии (после того, как я нажимал кнопки громкости вверх и вниз) это выглядит так:
12-19 15:25:02.481: D/AudioSystem(193): getParameters() ERROR : can't get parameters
12-19 15:25:02.481: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.481: I/AudioService(193): AudioFocus abandonAudioFocus() from android.media.AudioManager#413cbf68com.kinsa.manager.CAndroidManager#414087a0
12-19 15:25:02.491: I/AudioService(193): AudioFocus requestAudioFocus() from android.media.AudioManager#413cbf68com.kinsa.manager.CAndroidManager#414087a0
12-19 15:25:02.491: D/AudioSystem(193): getParameters() ERROR : can't get parameters
12-19 15:25:02.491: D/AudioHardware(110): AudioStreamOutALSA::setParameters() music_volume_index=1
12-19 15:25:02.491: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.491: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.491: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.491: D/AudioSystem(193): getParameters() ERROR : can't get parameters
12-19 15:25:02.501: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.501: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.501: D/AudioService(193): getStreamVolume(12)
12-19 15:25:02.501: D/AudioHardware(110): AudioStreamOutALSA::setParameters() music_volume_index=15
12-19 15:25:02.521: I/AudioPolicyManager(110): startOutput() output 1, stream 3, session 3
12-19 15:25:02.521: I/AudioPolicyManager(110): getDeviceForStrategy() strategy 0, device 4
12-19 15:25:02.521: I/AudioPolicyManager(110): getDeviceForStrategy() strategy 0, device 4
12-19 15:25:02.521: I/AudioFlinger(110): start output streamType (0, 3) for 1
12-19 15:25:02.521: D/AudioHardware(110): AudioStreamOutALSA::setParameters() start_output_streamtype=3
12-19 15:25:02.521: D/AudioHardware(110): AudioHardware pcm playback is exiting standby.
Во втором случае я вижу, как оборудование устанавливает максимальную громкость, а затем выходит из режима ожидания, но в первом случае этого не происходит. Но почему? Тот же код, разница только в том, что он выполняется после нажатия кнопок громкости во втором случае.
person
user2041064
schedule
27.11.2013