我有一个类似的问题。在我的应用程序中,我必须在开始时播放静音(正弦波幅度为 0),然后在 2 秒后播放幅度 = 10000 的正弦波。
然而有时,即使我开始播放 AudioTrack(静态模式,流是 MUSIC),我什么也听不到,只有在我手动改变音量后,我才开始听到我的声音。在播放任何声音(甚至是静音)之前,我以编程方式将流音量设置为最大,并通过信号幅度控制输出音量。
你弄清楚这其中的原因了吗?
更新:
更深入地研究问题我发现了奇怪的事情,当设备处于这种奇怪的状态时,我对 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.
在第二种情况下,我看到硬件如何将音量设置为最大,然后退出待机状态,但在第一种情况下不会发生。但为什么?相同的代码,唯一的区别是在第二种情况下按下音量按钮后执行它。