sólo - reproducir wav en c#
Cómo leer la velocidad de bits del archivo.wav en C# (2)
Puede leer fácilmente el valor en el desplazamiento 28 en el archivo.
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);
}
Eso debería funcionar para archivos WAV sin comprimir (el tipo más común). Ver https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ .
dado que tengo un archivo .wav, ¿cuál sería la mejor manera de leer su propiedad Bit rate en C #. He intentado con Shell, y he hecho una pregunta. ¿La propiedad "Tasa de bits" está fijada en el índice 28? sin asnwers así que para. También creo que Shell no es la mejor manera de leer las propiedades del archivo de audio. He investigado en diferentes bibliotecas de medios de código abierto, no puedo encontrar mucho.
TagLib #: Este funciona bien, pero tiene dos problemas. no refleja la velocidad de bits real en algunos casos donde la velocidad de bits es muy baja (como menos de 30), simplemente devuelve 0. En segundo lugar, no estoy seguro si puedo usarlo para uso comercial. La licencia dice http://opensource.org/licenses/LGPL-2.1
NAudio: Simplemente no expone ninguna propiedad para leer la velocidad de bits, así que tengo que calcularla. después de la investigación obtuve esta fórmula para calcular la velocidad de bits. bitrate = Samplerate * Channels * BitsPerSample. Esto funciona bien en la mayoría de los casos, sin embargo falla si tiene BitsPerSample = 0 para algunos archivos .wav. Sí, el archivo está absolutamente bien, puedo jugarlo, pero aún así BitsPerSample es 0.
MediaInfo: nuevamente no hay propiedad directa, tiene que recorrer todas las propiedades del archivo de audio y luego buscar "tasa de bit global". además, tiene que agregar dos dlls en el proyecto, uno es .net wraper y el otro es dll real.
Disculpas por un resumen tan largo, pero no quería preguntar "hey cómo puedo obtener la tasa de bits del archivo de audio" sin mostrar lo que ya hice. Entonces, si tiene un archivo de audio .wav, ¿qué biblioteca / método usaría para obtener la tasa de bits?
Con NAudio, la velocidad de bits se calcula mediante el miembro AverageBytesPerSecond
de la estructura de WaveFormat
:
using (var reader = new WaveFileReader(filename))
{
bitrate = reader.WaveFormat.AverageBytesPerSecond * 8;
}
Esto funcionará para todos los formatos de audio sin comprimir y la mayoría de los comprimidos. El formato de archivo WAV es un formato de contenedor y puede contener audio en cualquier códec, aunque su uso más común es PCM. Pero no todos los códecs son CBR (tasa de bits constante). Algunos tienen una velocidad de bits variable, por lo que la propiedad AverageBytesPerSecond
puede ser una estimación.