如何在c++中保存PCM到Opus (Float*)

How to save PCM to Opus in C++ (Float*)

本文关键字:Opus Float PCM c++ 保存      更新时间:2023-10-16

我正试图弄清楚如何将我的音频保存到Opus文件。它被保存在一个Float*中,并且在一个连续的流中添加(这是一个循环,一个恒定的记录)。

我可以毫无问题地将文件保存到Wave,只需写入数据并根据需要重写头文件。

Opus更复杂,我想我可以编码,但我不知道如何保存它,除了原始数据,我不能解码。

        unsigned char *compressed_buffer = new (unsigned char[500]);
        if (number == 1){
            Encoder = opus_encoder_create(48000, 2, OPUS_APPLICATION_AUDIO, 0);
        }
        int u = opus_encode_float(Encoder, mixBuffer.Array(), 480, compressed_buffer, 500);
        float *frame = new (float[480 * 2]);
        out.open("test.opus", std::ios::in | std::ios::binary | std::ios::app);
        out.write((const char*)compressed_buffer, u);
        out.close();

mixBuffer.Array() = Float*每个循环包含10ms的32位Float立体声。

number = 1只在第一次运行,因此Encoder不会在循环中重新生成。

我很确定我错了,但我想我一定做对了什么。

.opus文件实际上是ogg容器,而不是原始Opus数据

见当前草案:http://www.ietf.org/id/draft-ietf-codec-oggopus-03.txt