c# - 使用 NAudio 如何将非隔行 32 位浮点格式保存到文件
问题描述
在 C# 中,我试图将 PCM 数据保存到 WAV 文件中。使用 NAudio,我创建了一个 WaveFileWriter。
this.fileWriter = new WaveFileWriter(@"c:\temp\test.wav", new WaveFormat(this.audioParameters.SampleRate, this.channels));
我在浮点数组中捕获 PCM 数据包并写入样本。
var arraySize = noOfFrames * this.channels;
var buffer = new float[arraySize];
Marshal.Copy(data, buffer, 0, arraySize);
this.fileWriter?.WriteSamples(buffer, 0, buffer.Length);
输出的音频文件长度合适,但音频听起来很糟糕。我可以说它是相同的音频,但它是不正确的。
// Non-interlaced 32-bit float format
// ChannelLayout = LayoutStereo
// FramesPerBuffer = 1024
// SampleRate = 44100
// channels = 2
在 NAudio 中,如何使用上述信息从 PCM 流创建 WAV 文件?
解决方案
您将 32 位浮点音频样本放入 16 位 WAV 文件中。用于WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels)
的。WaveFormat
_WaveFileWriter
推荐阅读
- c# - C# 将参数传递给 Postgres Npgsqlcommand DO 块
- javascript - console.log() 会触发垃圾回收吗?
- javascript - 将转换后的 MQTT 字符串传递给 MYSQL
- java - 如何编写用于更新表单的 selenium 测试用例
- javascript - 代码在函数中的行为不同
- sap-cloud-platform - sap 4 hana 路由器注销无法正常工作
- javascript - 如何在 Chartjs 2.x 中使用图表插件 (Chart.pluginService.register) 访问标签数组?
- mysql - MySQL,可以防止两个字段为 NULL 或 NOT NULL?
- firebase - Firebase 部署功能 --non-interactive
- ubuntu - 即使添加了 ssl 密钥,jupyter 笔记本也会出现 ssl 错误