How to read Bit rate of .wav file in C#

喜你入骨 提交于 2019-12-30 09:44:07

问题


given that I have a .wav file, what would be best way to read its Bit rate property in C#. I have tried Shell, and asked a question Is "Bit rate" property fixed in index 28? with no asnwers so for. Also I now believe Shell is not the best way to read audio file properties. I have researched on different open source media libraries, cant find much.

TagLib#: This one works alright but have two issues. it does not reflect actual bit rate in some cases where bit rate is very low (like less than 30), it just returns 0. Secondly, I am not sure if I can use it for commercial use. The License says http://opensource.org/licenses/LGPL-2.1

NAudio: Simply does not expose any property to read the bitrate, so I have to calculate it. after research I got this formula to calculate the bit rate. bitrate = Samplerate * Channels * BitsPerSample. This works fine in most cases, however fails if you got BitsPerSample = 0 for some .wav files. Yes the file is absolutely fine, I can play it, but still BitsPerSample is 0.

MediaInfo: again no straight forward property, have to loop through all the properties of audio file and then search for "overall bit rate". moreover have to add two dlls in project, one is .net wraper and other is actual dll.

Apologies for such a long summary, but I dont wanted to ask "hey how can I get the bit rate of audio file" without showing what I already have done. So, if you have a .wav audio file what library/method would you use to get the bitrate?


回答1:


With NAudio, the bitrate is calculated via the AverageBytesPerSecond member of the WaveFormat structure:

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

This will work for all uncompressed audio formats and most compressed. The WAV file format is a container format and can actually contain audio in any codec, even though it's most common use is PCM. But not all codecs are CBR (constant bit rate). Some have a variable bit rate, so the AverageBytesPerSecond property may be an estimate.




回答2:


You can easily read the value at offset 28 in the file.

int bitrate;
using (var f = File.OpenRead(filename))
{
    f.Seek(28, SeekOrigin.Begin);
    byte[] val = new byte[4];
    f.Read(val, 0, 4);
    bitrate = BitConverter.ToInt32(val, 0);
}

That should work for uncompressed WAV files (the most common type). See https://ccrma.stanford.edu/courses/422/projects/WaveFormat/.



来源:https://stackoverflow.com/questions/21567920/how-to-read-bit-rate-of-wav-file-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!