另请参阅什么是 PCM 格式?
PCM(脉冲编码调制)是一种未压缩的音频格式。我们得到 Wav 文件,它维护(保存)PCM 数据。看看怎么做 什么是 Wav 文件?方法 AudioCompressionManager.GetWaveFormat 有助于调查音频格式。
- FormatTag = 1 是 PCM。
- 声道 = 用于单声道(单声道)、双声道(立体声)、8 个用于 7.1 环绕声(左、右、中、左环绕、右环绕、左后、右后位置。7.1 系统也有 1 个低声道频率效果 (LFE),通常发送到低音炮)。
- SamplesPerSec = 每秒(或采样)的数字化数量值。可以是任何值,但标准值:8000 Hz、11025 Hz、12000 Hz、16000 Hz、22050 Hz、24000 Hz、32000 Hz、44100 Hz、48000 Hz。
- BitsPerSample - 最常见的使用 8 位(1 字节)和 16 位(2 字节)。很少有 24 位(3 字节)、32 位(4 字节)和 64 位(4 字节)。如果我们将 16 位视为基本格式,那么 8 位可以视为一种压缩格式。它的大小要小两倍,但对于 16 位,值的变体只能是 28 = 256 而不是 216 = 65536。这就是为什么 8 位音质会明显低于 16 位的原因。
- BlockAlign = Channels * BitsPerSample / 8。其中 8 是每个字节的位数。
- AvgBytesPerSec(比特率)= Channels * SamplesPerSec * BitsPerSample / 8。
您可以使用下面的代码更具体地分析 PCM 音频格式。
private void WhatIsPcmFormat(string fileName)
{
WaveReader wr = new WaveReader(File.OpenRead(fileName));
IntPtr format = wr.ReadFormat();
wr.Close();
WaveFormat wf = AudioCompressionManager.GetWaveFormat(format);
if (wf.wFormatTag == AudioCompressionManager.PcmFormatTag)
{
int bitsPerByte = 8;
Console.WriteLine("Channels: {0}, SamplesPerSec: {1}, BitsPerSample: {2}, BlockAlignIsEqual: {3}, BytesPerSecIsEqual: {4}",
wf.nChannels, wf.nSamplesPerSec, wf.wBitsPerSample,
(wf.nChannels * wf.wBitsPerSample) / bitsPerByte == wf.nBlockAlign,
(int)(wf.nChannels * wf.nSamplesPerSec * wf.wBitsPerSample) / bitsPerByte == wf.nAvgBytesPerSec);
}
}