给出一些参数如何计算音频中的样本数?

时间:2012-03-06 14:36:01

标签: 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 miliseconds的样本数?我是音频处理的新手。编解码器是PCM所以我猜它是未压缩的音频。

我在Windows 7旗舰版x64上使用Qt 4.8。

3 个答案:

答案 0 :(得分:10)

   /**
     * 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);
    }

Reference

答案 1 :(得分:9)

我认为在这里了解每个术语的含义非常重要,这样您就可以编写能够满足您需求的代码。

采样率是每秒音频的采样数,在你的情况下为11025(有时以KHz表示)与CD音频相比,这是非常低的44.1KHz所以44100采样率和更高标准如48KHz,96KHz。

接下来,您将获得每个样本使用的位数,通常为8/16/24/32位。

接下来,您可以为每个样本提供任意数量的通道。

因此,已发布的代码示例显示了如何将这些数字组合在一起以获得采样的毫秒数,这样可以简单地将通道数乘以采样率乘以采样率,从而获得一秒钟的数据大小音频,然后将此数字除以1000,得到毫秒。

当你开始将这个应用于视频时,这会变得非常棘手,这些帧可以是每秒25/30/50/60帧的非常好的数字,每秒23.98 / 29.97 / 59.94帧在这种情况下,你必须进行可怕的计算,以确保它们正确对齐。

希望这有帮助。

答案 2 :(得分:1)

这是伪代码的解决方案:

鉴于

持续时间= 20 ...毫秒& sr = 11025 ...以Hz为单位的采样率

然后是样本数N

N = sr * dur / 1000 = 220.5

您需要将其舍入到最接近的整数。