如何在c++中保存PCM到Opus (Float*)
How to save PCM to Opus in C++ (Float*)
我正试图弄清楚如何将我的音频保存到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
相关文章:
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 没有从阵列<float>到阵列<int>的可行转换
- 数组下标的类型"float*[float]"无效
- 没有合适的构造函数可以从"float"转换为"_D3DCOLORVALUE"
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 将 **float array 从 C++ Dll 传递给 python
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- float* 已在 Gameobject.obj 中定义
- 如何将 qml 的文本转换为 float 和 int
- 为什么将 1 添加到 numeric_limits<float>::min() 返回 1?
- 有没有比static_cast更优雅的从int到float的演员阵容<float>?
- 编译器给出错误:format 指定类型 'float *',但参数的类型'double' [-Wformat]
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 错误:无法将"float*"转换为"float"
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 缩小从double到float的转换
- 着色器将uint8投射到float,并将其重新解释回uint
- 我一直收到错误"cannot convert 'float*' to 'float' in return"
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 如何在c++中保存PCM到Opus (Float*)