Nexus 9主要采样率

范迪申

我有一个使用OpenSL ES的应用程序。当我尝试在Nexus9 6.0.1上使用它时,听到声音,好像采样率错误。在其他设备上,一切正常。

我的SLDataFormat_PCM结构:

SLDataFormat_PCM format_pcm = {
            SL_DATAFORMAT_PCM,
            aChannels,
            48000 * 1000,
            SL_PCMSAMPLEFORMAT_FIXED_16,
            SL_PCMSAMPLEFORMAT_FIXED_16,
            aChannels == 2 ? SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT
                           : SL_SPEAKER_FRONT_CENTER,
            SL_BYTEORDER_LITTLEENDIAN
    };

当我在此结构中更改采样率(+/- 1Hz)时,输出听起来不错,但我收到一条AudioTrack调试消息:

W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 1, track 47999 Hz, output 48000 Hz

如果Nexus9的频率为48000Hz,为什么在FAST模式下会出现问题?

我使用以下方法检查了它:

jclass clazz = env.getEnv()->FindClass("android/media/AudioSystem");
jmethodID mid = env.getEnv()->GetStaticMethodID(clazz, "getPrimaryOutputSamplingRate", "()I");
int nSampleRate = env.getEnv()->CallStaticIntMethod(clazz, mid);
LOGDEBUG << "Sample Rate: " << nSampleRate;

[ DBG:c894860f] 11:16:14.902: Sample Rate: 48000

有没有更好的方法来获取设备的采样率?

范迪申

问题出在回调函数中有互斥锁。

UPD:OpenSLES自述文件

已知的问题

在48000Hz频率下,Galaxy Nexus和Nexus 10会产生毛刺的输出。在切换活动或显示大型对话框时,Galaxy Nexus在44100Hz时会出现毛刺。触摸声音有时会导致OpenSL出现故障。在音频应用程序中禁用触摸声音可能是一个好主意。这些问题并非特定于opensl_stream,并已在其他设置中重现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章