Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存在wave中的NAudio文件为文件添加了填充_C#_.net_Filestream_Naudio_Naudio Framework - Fatal编程技术网

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,我基本上就是这么做的,但是进入内存流,然后调用同一组函数,这要灵活得多,因为我会采用这种方法。我测试了代码,它对我很有效。我不明白为什么它“更灵活”。这真的解决了问题吗?流通常是一个更好的解决方案,因为它们不会对大文件占用大量内存。