C# 保存在wave中的NAudio文件为文件添加了填充
我有这样的代码:C# 保存在wave中的NAudio文件为文件添加了填充,c#,.net,filestream,naudio,naudio-framework,C#,.net,Filestream,Naudio,Naudio Framework,我有这样的代码: mp3File = new Mp3FileReader("someMP3Files.mp3"); WaveChannel32 inputStream = new WaveChannel32(mp3File); streamProcessor = new WaveStreamProcessor(inputStream); CreateWaveFile("test.wav", i
mp3File = new Mp3FileReader("someMP3Files.mp3");
WaveChannel32 inputStream = new WaveChannel32(mp3File);
streamProcessor = new WaveStreamProcessor(inputStream);
CreateWaveFile("test.wav", inputStream);
所以基本上,它把mp3转换成一个叫做test的wave文件。查看转换后的文件,我使用audacity看到了这一点
注意高亮区域为什么它给出空格,并且不重复原样?
有什么想法吗 我的创建波浪方法: public static void CreateWaveFile(string filename, WaveStream stream)
{
using (WaveFileWriter writer = new WaveFileWriter(filename, stream.WaveFormat))
{
byte[] buffer = new byte[stream.Length];
while (true)
{
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
writer.WriteData(buffer, 0, bytesRead);
}
}
}
澄清一下,填充实际上是在创建Mp3FileReader时添加的
MemoryStream mp3Buffered = new MemoryStream();
using (var responseStream = resp.GetResponseStream())
{
byte[] buffer = new byte[65536];
int bytesRead = responseStream.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
mp3Buffered.Write(buffer, 0, bytesRead);
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
}
}
mp3Buffered.Position = 0;
using (var mp3Stream = new Mp3FileReader(mp3Buffered))
{
WaveFileWriter.CreateWaveFile("file.wav", mp3Stream);
}
我不太确定你说的那个问题是什么意思,但是我尽了最大努力进行了研究,所以这就是我发现的。我还认为,当这些文件被转换时,填充会自动添加
注意:如果我的评论有误,请不要责骂我,稍后查看我的个人资料,你就会知道原因。:) 当mp3文件被实例化时,它实际上正在发生。填充是在那个地方添加的。@HansPassant我并没有通过引用获得您所指的内容。顶部图像似乎是一个单声道机架,而底部图像是一对立体声声道。这就是无畏的表现吗?我想知道你是否需要向NAudio提供一些额外的配置来告诉它你想要的输出格式?@Neil不都是立体声的,我只是没有发布整个屏幕。是的,我也这么认为。我会做一些代码检查,看看在哪里。将你的答案标记为有用。我看到了美好的未来:)这真的解决了问题吗?看起来您正在将整个文件读入内存流,然后调用相同的(一组)函数。顺便问一下,这对您有帮助吗?我希望是这样:)另外,@Neil,我基本上就是这么做的,但是进入内存流,然后调用同一组函数,这要灵活得多,因为我会采用这种方法。我测试了代码,它对我很有效。我不明白为什么它“更灵活”。这真的解决了问题吗?流通常是一个更好的解决方案,因为它们不会对大文件占用大量内存。