Skip to content

Latest commit

 

History

History
45 lines (32 loc) · 1.69 KB

File metadata and controls

45 lines (32 loc) · 1.69 KB

PCM data format

查看wav左右声道数据存放格式,理解PCM数据流格式

一、参考文档

二、左右声道数据

分析wavfile源代码可知,左右声道的数据是一个一个顺序排列的(一个左声道、一个右声道),不是两个单独的数组;

for(i = 0; i < length / WAVFILE_CHANNELS; i++) {
        double t = (double) i / WAVFILE_SAMPLES_PER_SECOND;

        // start a frame data
        if (WAVFILE_CHANNELS == 2) {
                // left channel
                waveform[i * 2] =  volume * sin(frequency * t * 2 * M_PI);
                // right channel
                waveform[i * 2 + 1] = volume / 2 * sin((frequency / 3) * t * 2 * M_PI);
        } else {
                // singl channel
                waveform[i] = volume * sin(frequency * t * 2 * M_PI);
        }
        // end a frame data
}

audacity看一下数据波形

wavfile_sin.png

三、tinyplay

tinyplay的提示信息的rate是不准确的,如果你没有设置rate,那么他会提示48000 hz的默认值,所以最好将信息都填好

pcm->buffer_size = config->period_count * config->period_size;
每次读写buffer的大小是这么算出来的,period_size是DMA buffer大小,period_count表示内核中一个buffer ring中的buffer含有多少个DMA buffer,这里假装buffer ring中不止一个buffer实体,至少两个,保证数据交换;