【问题标题】:Nexus 9 primary sample rateNexus 9 主要采样率
【发布时间】: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


    【解决方案1】:

    是的,有一种方法可以找到设备的首选采样率,尽管它适用于 API 级别 > 16。You can have a look at my answer here

    关于你的SLDataFormat_PCM 结构。你已经用 48k*1k 的采样率初始化了!如果您想以 48k 对 PCM 数据进行采样,请尝试使用下面的代码。

    // configure audio source
    SLDataFormat_PCM format_pcm = {
            SL_DATAFORMAT_PCM,
            aChannels,
            SL_SAMPLINGRATE_48,
            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
    };
    

    我之前没有使用过 Nexus 9,所以我不知道它是否支持 48k 采样率。但是,无论如何,您可以检查它是否支持。

    【讨论】:

      【解决方案2】:

      问题在于回调函数中的互斥锁。

      更新: OpenSLES Readme

      已知问题

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多