0

我有这样的代码:

        mp3File = new Mp3FileReader("someMP3Files.mp3");
        WaveChannel32 inputStream = new WaveChannel32(mp3File);
        streamProcessor = new WaveStreamProcessor(inputStream);
        CreateWaveFile("test.wav", inputStream);

所以基本上它需要 mp3 并将其转换为一个名为 test 的波形文件。查看转换后的文件,我看到了这一点。

请注意突出显示的区域为什么它给出空白空间并且不完全按照原样复制?

检查突出显示的黄色部分

有任何想法吗?

我的创建波浪方法:

    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 时添加的。

4

1 回答 1

1
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);
}

我不太确定你问的那个问题是什么意思,但是我尽力了并进行了研究,所以这就是我发现的。而且我还认为在转换这些文件时会自动添加填充。

注意:如果我在评论中错了,请不要抨击我,稍后检查我的个人资料,你会明白为什么。:)

于 2021-04-16T15:53:06.263 回答