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

Don*_*alo 5 c++ audio qt signal-processing

给出以下参数:

Sample size: 16
Channel count: 2
Codec: audio/pcm
Byte order: little endian
Sample rate: 11025
Sample type: signed int
Run Code Online (Sandbox Code Playgroud)

如何确定N miliseconds录制音频的样本数?我是音频处理的新手.编解码器是PCM所以我猜它是未压缩的音频.

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

per*_*eal 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);
    }
Run Code Online (Sandbox Code Playgroud)

参考


EdC*_*ica 9

我认为在这里重要的是要了解每个术语的含义,以便您可以编写能够满足您需求的代码.

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

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

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

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

当你开始将这个应用于视频时,这可能会变得相当棘手,这些帧要么像25/30/50/60帧一样好的数字,每秒为23.98/29.97/59.94帧的NTSC帧.你必须做可怕的计算,以确保它们正确对齐.

希望这可以帮助.