给定以下参数:
Sample size: 16
Channel count: 2
Codec: audio/pcm
Byte order: little endian
Sample rate: 11025
Sample type: signed int
我该如何确定记录音频
N 毫秒
的样本数?我是音频处理的新手。编解码器是PCM,因此我猜测这是未压缩的音频。我在 Windows 7 Ultimate x64 上使用 Qt 4.8。
给定以下参数:
Sample size: 16
Channel count: 2
Codec: audio/pcm
Byte order: little endian
Sample rate: 11025
Sample type: signed int
N 毫秒
的样本数?我是音频处理的新手。编解码器是PCM,因此我猜测这是未压缩的音频。 /**
* Converts milliseconds to samples of buffer.
* @param ms the time in milliseconds
* @return the size of the buffer in samples
*/
int msToSamples( int ms, int sampleRate, int channels ) {
return (int)(((long) ms) * sampleRate * channels / 1000);
}
/* get size of a buffer to hold nSamples */
int samplesToBytes(int nSamples, int sampleSizeBits) {
return nSamples * (sampleSizeBits / 8);
}
我认为你需要理解这些术语的含义,才能编写代码来实现自己想要的功能。
样本率是音频每秒钟采集的样本数,在您的情况下是11025(这有时用kHz表示),与CD音频相比较低,CD音频通常是44.1kHz,还有更高的标准,例如48kHz、96kHz。
接下来,每个样本使用的位数可以是8/16/24/32位。
接下来,每个样本可以有任意数量的声道。
因此,已发布的代码示例显示如何将这些数字组合在一起,以获取您的毫秒到样本数,这只需将声道数乘以样本位乘以样本率即可得到单秒音频数据大小,然后将这个数字除以1000即可得到毫秒。
当您开始将其应用于涉及帧的视频时,这可能变得非常棘手,因为它们可能是像每秒钟25/30/50/60帧这样美好的数字,也可能是基于NTSC的帧速率,例如23.98/29.97/59.94帧每秒,在这种情况下,您必须进行恶心的计算,以确保它们正确对齐。
希望这能有所帮助。
以下是伪代码的解决方案:
给定
duration = 20 ... 毫秒 & sr = 11025 ... 采样率(单位:赫兹)
则样本数 N
N = sr * dur/1000 = 220.5
您需要将其四舍五入为最接近的整数。
(int)(((long) ms) * sampleRate * channels / 1000) / (sampleSize / 8)
,如果我理解正确的话。我是对的吗? - Donotalo