【问题标题】:How to give blank data for Oboe library to play as sound?如何为双簧管库提供空白数据以播放声音?
【发布时间】:2020-08-19 01:16:43
【问题描述】:

有时我希望双簧管中的音频输出不播放任何内容,但我不希望它停止,我只是希望它在没有数据到达时保持静音。我试过了:

static void writeBlankData(float* pointer, int numFrames) {
    std::fill_n(pointer, numFrames, 0);
}
oboe::DataCallbackResult PlayRecordingCallback::onAudioReady(
        oboe::AudioStream *audioStream,
        void *audioData,
        int numFrames) {
    float *floatData = (float *) audioData;
    writeBlankData(floatData, numFrames);
    return oboe::DataCallbackResult::Continue;
}

但我在音频输出上听到嗡嗡声而不是静音。 0s 的数组不应该保持沉默吗?我尝试了-1.0f 也给出了不同的嗡嗡声。

【问题讨论】:

    标签: android c++ audio oboe


    【解决方案1】:

    最可能的原因是流是立体声的,因此每帧有 2 个样本。您当前的代码采用单声道流。

    尝试改变:

    writeBlankData(floatData, numFrames);
    

    收件人:

    writeBlankData(floatData, numFrames * audioStream->getChannelCount());
    

    【讨论】:

    • 您好,Don,写入空白数据会导致任何开销吗?像电池消耗等
    • 保持流打开会产生一些额外的功耗。我没有任何关于使用了多少额外电量的数据,但与保持屏幕打开相比,我认为这并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多