如何计算给定参数的音频样本数?
考虑以下参数:如何计算给定参数的音频样本数?
Sample size: 16
Channel count: 2
Codec: audio/pcm
Byte order: little endian
Sample rate: 11025
Sample type: signed int
如何确定样本数为录制音频的N miliseconds
?我是音频处理方面的新手。编解码器是PCM,所以我猜它是未压缩的音频。
我在Windows 7 Ultimate x64上使用Qt 4.8。
我认为你应该理解这些术语的意思,这样你就可以写上你想要的东西,让你的代码,它是在这里非常重要的。
采样率是每秒音频的采样数,在你的情况下11025(这有时用KHz表示),与CD音频44.1KHz等44100采样率相比这是相当低的,更高的标准如48KHz,96KHz。
接下来你有用于每个样本的位数,通常可以是8/16/24/32位。
接下来,您可以为每个样本设置任意数量的通道。
因此,已发布的代码示例显示了如何将这些数字中的每一个应用到一起,以便将采样速率乘以通道数乘以样本位的采样毫秒数,秒的音频,然后将这个数字除以1000来给你毫秒。
当你开始将这个视频处理成帧数为25/30/50/60帧的帧时,对于基于NTSC的帧为23.98/29.97/59.94帧一秒其次,在这种情况下,您必须进行可怕的计算才能确保它们正确对齐。
希望这会有所帮助。
/**
* 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);
}
如果我理解正确,我认为公式应该是'(int)(((long)ms)* sampleRate * channels/1000)/(sampleSize/8)'。我对吗? – Donotalo 2012-03-06 16:15:45
计算样本数时,样本大小不相关,因为速率没有以字节为单位,而是以样本数量定义。 – perreal 2012-03-06 16:22:03
它看起来像samplesToBytes缺少其乘法中的通道数量。 – rationalcoder 2015-12-03 16:03:10
在这里,在伪代码中的溶液:以Hz
鉴于
持续时间= 20 ...以毫秒为单位& SR = 11025 ... samplingrate
然后样品的数目N
N = sr * dur/1000 = 220.5
您需要将其四舍五入到最接近的整数。
好,但最后没有公式... – UmNyobe 2012-03-06 15:07:31
用户perreal提供了足够的代码示例,所以我认为最好不要重复。 – EdChum 2012-03-06 15:25:13