C++ 在给定一些参数的情况下,如何计算音频中的采样数?
给定以下参数:C++ 在给定一些参数的情况下,如何计算音频中的采样数?,c++,qt,audio,signal-processing,C++,Qt,Audio,Signal Processing,给定以下参数: Sample size: 16 Channel count: 2 Codec: audio/pcm Byte order: little endian Sample rate: 11025 Sample type: signed int 如何确定录制音频的N毫秒的采样数?我是音频处理方面的新手。编解码器是PCM,所以我猜它是未压缩的音频 我在Windows7Ultimate x64上使用Qt4.8 /** * Converts milliseconds to s
Sample size: 16
Channel count: 2
Codec: audio/pcm
Byte order: little endian
Sample rate: 11025
Sample type: signed int
如何确定录制音频的N毫秒
的采样数?我是音频处理方面的新手。编解码器是PCM,所以我猜它是未压缩的音频
我在Windows7Ultimate x64上使用Qt4.8
/**
* 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 audio(44.1KHz)相比,这是相当低的,因此采样率为44100,并且有更高的标准,如48KHz、96KHz 接下来是每个样本使用的位数,通常为8/16/24/32位 接下来,您可以为每个采样设置任意数量的通道 因此,已经发布的代码示例展示了如何将这些数字组合在一起,得到采样的毫秒数,即将通道数乘以采样位,再乘以采样率,该采样率给出了一秒钟音频的数据大小,然后将这个数除以1000,得到毫秒数 当你开始将其应用于视频时,这可能会变得相当棘手,视频处理的帧要么是不错的数字,如每秒25/30/50/60帧,要么是基于NTSC的帧,即每秒23.98/29.97/59.94帧,在这种情况下,你必须进行可怕的计算,以确保它们正确对齐
希望这有帮助。这里有一个伪代码解决方案: 鉴于 持续时间=20。。。以毫秒计& sr=11025。。。采样频率(Hz) 然后是样本数N N=sr*dur/1000=220.5
您需要将其四舍五入到最接近的整数。用户perreal提供了足够的代码示例,因此我认为最好不要重复。如果我理解正确,我认为公式应该是
(int)((long)ms)*sampleRate*channels/1000)/(sampleSize/8)
。我说的对吗?在计算样本数时,样本大小不相关,因为速率不是以字节定义的,而是以样本数定义的。看起来samplesToBytes在乘法中缺少通道数。