gpt4 book ai didi

Android AudioTrack 对象不会播放安静的正弦信号(低于大约 15 分贝)

转载 作者:太空狗 更新时间:2023-10-29 15:20:21 25 4
gpt4 key购买 nike

我在使用 Android API AudioTrack 对象播放生成的正弦音频信号时遇到问题。当正弦信号的振幅高于 40 左右(由于 16 位 PCM 格式,最大可能振幅值为 36535)时一切正常,但是当我将振幅设置为低于 40 时,除非我更改音量级别,否则不会播放任何声音侧面上下按钮(如果我改变它并不重要上或下)。

即使这样,声音也只出现一秒钟然后又消失,应该持续 10 秒钟。我在 SGS 2 上遇到了这个问题。我怀疑这个问题是由于操作系统核心的某些限制造成的,也许它认为这种低信号就像噪音一样。

如果有人知道可能是什么问题并给我一些解决方法,我将不胜感激。

最佳答案

我也有类似的问题。在我的应用程序中,我必须在开始时静音播放(正弦波振幅为 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.

在第二种情况下,我看到硬件如何将音量设置为最大,然后退出待机状态,但在第一种情况下并没有发生。但为什么?相同的代码,唯一的区别是在第二种情况下按下音量按钮后执行它。

关于Android AudioTrack 对象不会播放安静的正弦信号(低于大约 15 分贝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com