我正在尝试录制 WebRTC 传输的音频PeerConnection
MediaStream
。我在音轨中添加了一个接收器,它实现了AudioTrackSinkInterface
。它实现了OnData
method:
void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) {
size_t valueCount = number_of_channels * number_of_frames;
int16_t *_data = (int16_t*)audio_data;
f.write((char*)&_data, sizeof(int16_t) * valueCount);
f.flush();
}
f
is an ofstream
. 每个样本的位数 is 16, 采样率是16000,channels is 1, frames is 160.
但是,当我使用 AudaCity 原始导入(签名 16 位 PCM、小端、单声道、采样率 16000)打开创建的文件时,我没有获得有意义的音频。
如何正确写入原始音频日期?
结果最后我访问了指针本身存储的数据,而不是它指向的地方,这是一个经典。我的方法的正确实现如下所示:
void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) {
size_t number_of_bytes = number_of_channels * number_of_frames * sizeof(int16_t); //assuming bits_per_sample is 16
f.write(reinterpret_cast<const char*>(audio_data), number_of_bytes);
f.flush();
}
注意:为了对 webrtc 本机检索和发送的音频数据进行更多处理,我现在正在查看自定义 AudioDeviceModule。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)