【发布时间】:2016-07-10 10:29:05
【问题描述】:
我有一个使用 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
有没有更好的方法来获取设备的采样率?
【问题讨论】:
标签: android android-ndk opensl