c# - 如何在 C# 中读取 .wav 文件的比特率

标签 c# audio naudio taglib-sharp mediainfo

鉴于我有一个 .wav 文件,在 C# 中读取其比特率属性的最佳方法是什么。 试过Shell,问了个问题Is "Bit rate" property fixed in index 28?没有答案。此外,我现在相信 Shell 不是读取音频文件属性的最佳方式。我研究了不同的开源媒体库,找不到太多。

TagLib#:这个工作正常,但有两个问题。它不反射(reflect)实际比特率在某些比特率很低的情况下(比如小于30),它只是返回0。其次,我不确定是否可以用于商业用途。许可证说 http://opensource.org/licenses/LGPL-2.1

NAudio:根本没有公开任何属性来读取比特率,所以我必须计算它。经过研究,我得到了这个计算比特率的公式。 比特率 = 采样率 * channel 数 * BitsPerSample。这在大多数情况下工作正常,但是如果您为某些 .wav 文件设置了 BitsPerSample = 0,则会失败。是的,文件绝对没问题,我可以播放它,但 BitsPerSample 仍然为 0。

MediaInfo:同样没有直接的属性,必须遍历音频文件的所有属性,然后搜索“整体比特率”。而且必须在项目中添加两个dll,一个是.net wraper,另一个是实际的dll。

对于这么长的总结,我深表歉意,但我不想在不展示我已经完成的工作的情况下问“嘿,我怎样才能获得音频文件的比特率”。 那么,如果您有一个 .wav 音频文件,您会使用什么库/方法来获取比特率?

最佳答案

对于 NAudio,比特率是通过 WaveFormat 结构的 AverageBytesPerSecond 成员计算的:

using (var reader = new WaveFileReader(filename))
{
    bitrate = reader.WaveFormat.AverageBytesPerSecond * 8;
}

这将适用于所有未压缩的音频格式和大多数压缩格式。 WAV 文件格式是一种容器格式,实际上可以在任何 编解码器中包含音频,尽管它最常见的用途是 PCM。但并非所有编解码器都是 CBR(恒定比特率)。有些具有可变比特率,因此 AverageBytesPerSecond 属性可能是一个估计值。

关于c# - 如何在 C# 中读取 .wav 文件的比特率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567920/

相关文章:

c# - 如何在 ASP.NET Web 控件中管理双向数据绑定(bind)?

c# - 检测不止一次鼠标点击

c# - NAudio-如何在结束后立即播放音频而没有任何延迟?

c# - 将 ASP.NET Core WEB API ModelState 错误放入 Angular 6 中的数组

php - 为什么带有 2 个视频的 ffmpeg concat 会丢失第二个音频?

audio - 在openTK中播放音频

java - MP3 文件在读取过程中失真

c# - 使用 .Net 自己的库在 C# 中捕获声音,仅此而已

c# - 如何提高通过声卡传输文件的比特率?

c# - 如何在 C# 中通过 ref 传递它?