NAudio中的WaveStream到字节数组?

Posted

技术标签:

【中文标题】NAudio中的WaveStream到字节数组?【英文标题】:WaveStream to Byte Array in NAudio? 【发布时间】:2013-01-23 14:03:36 【问题描述】:

如何使用 NAudio 将 WaveStream 转换为字节数组?

【问题讨论】:

How to write NAudio WaveStream to a Memory Stream? 的可能重复项 【参考方案1】:
public static class StreamExtension

    public static byte[] ToArray(this Stream stream)
    
        byte[] buffer = new byte[4096];
        int reader = 0;
        MemoryStream memoryStream = new MemoryStream();
        while ((reader = stream.Read(buffer, 0, buffer.Length)) != 0)
            memoryStream.Write(buffer, 0, reader);
        return memoryStream.ToArray();
    

【讨论】:

这是正确的方法,但缓冲区大小应可配置为 WaveStream 的块对齐的精确倍数。通常,一次播放一到两秒的音频就很适合阅读了。 visual studio 说不需要在声明时分配给int reader【参考方案2】:

你可以试试这个愿景,应该适合你,试试吧

  MemoryStream memoryStr = new MemoryStream();
            while ((read = stream.Read(buffer, 0, buffer.Length)) != 0)
                memoryStr.Write(buffer, 0, read );

【讨论】:

【参考方案3】:

您可以像使用 System.IO.Stream 一样使用它。 使用读取方法。但要记住。如果您将整个流转换为一个 Bytearray,它可能会导致 OutOfMemoryException。这取决于流有多大。但是你可以使用这样的东西:

byte[] buffer = new byte[stream.Length];
int read = stream.Read(buffer, 0, buffer.Length);

【讨论】:

以上是关于NAudio中的WaveStream到字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

从 WaveStream 将 2 通道样本读入数组的最简单方法

NAudio WaveStream 和多通道

记录来自 NAudio WaveIn 的输入,并将输出保存到字节数组

NAudio C#:如何从 WaveInEventArgs 获取字节数组以进行进一步操作

字节到 sbytes 并返回 - C# NAudio

NAudio - WaveStram 和 BlockAlignReductionStream