检测资源中.wav文件的持续时间

bRa*_*dOn 6 c#

我正在寻找我的问题的解决方案,因为我的音频文件(.wav)是我的解决方案的资源.我需要检测它会玩多久.

如何计算资源中音频的持续时间?
有没有办法检测在我的资源中播放某个音频文件需要多长时间?

Ben*_*ent 6

您可以使用NAudio读取资源流并获取时长

using NAudio.Wave;
...
WaveFileReader reader = new WaveFileReader(MyProject.Resource.AudioResource);
TimeSpan span = reader.TotalTime;
Run Code Online (Sandbox Code Playgroud)

您也可以按照 Matthew Watson 的建议进行操作,只需将长度保留为额外的字符串资源。

此外,这个 SO 问题有很多不同的方法来确定持续时间,但其中大多数是针对文件的,而不是针对从资源中获取的流。


Leo*_* P. 5

我已经为您的问题提供了更好的解决方案,无需任何库。首先从文件中读取所有字节。(可选地,您也可以使用 FileSteam 仅读取必要的字节)

byte[] allBytes = File.ReadAllBytes(filePath);
Run Code Online (Sandbox Code Playgroud)

从文件中获取所有字节后,您需要获取每秒位数。该值通常存储在索引 28-31 处的字节中。

int byterate = BitConverter.ToInt32(new[] { allBytes[28], allBytes[29], allBytes[30], allBytes[31] }, 0);
Run Code Online (Sandbox Code Playgroud)

现在您已经可以以秒为单位获得持续时间。

int duration = (allBytes.Length - 8) / byterate;
Run Code Online (Sandbox Code Playgroud)