从MemoryStream打开音频(wav)文件以确定持续时间

Rob*_*Rob 4 c# audio memorystream stream wav

有没有办法,在框架内或使用P/Invoke来确定在MemoryStream中保存的wav文件的持续时间?

我已经看过Managed DirectX和另一个类似的问题,但是一切似乎都适用于路径,而不是提供任何传递流的方法.我引用的问题中的一个链接(一个简单的C#Wave编辑器 ......)非常清楚我可以解析MemoryStream以确定wav文件的持续时间.理想情况下,我不想重新发明轮子.

Jak*_*ako 6

我同意亚历克斯.我花时间将一个包含三行代码的小程序放在一起,打印出wav文件的持续时间.

        var stream=new MemoryStream(File.ReadAllBytes("test.wav"));
        var wave = new WaveFileReader(stream);
        Console.WriteLine(wave.TotalTime); // wave.TotalTime -> TimeSpan
Run Code Online (Sandbox Code Playgroud)

下载NAudio库:你会在包中找到NAudio.dll.

只需在您的项目中引用NAudio.dll即可.

在撰写本文时,它的版本为1.3.

就像作者在他的博客上说的那样,WaveFileReader也接受了Stream ; 不只是文件路径.

请记住,版本1.3是为x86构建的.如果您希望它在x64上运行,则需要将项目强制为x86.如果您想要NA64.dll for x64(像我一样),您需要使用'any cpu'重新编译.对我来说,两种解决方案都像魅力一样.