首页 > 技术文章 > PCM裸流数据的16进制格式以及左右声道分离c语言程序

nicktcl 2019-04-12 20:14 原文

前言

本文讲解PCM裸流数据的存储格式。

本文PCM音频参数

 声道数:			2
 采样位数:			little endian signed 16 bits,
 					小端有符号字 = short,表示范围 -32768~32767
 采样频率:			44100Hz

PCM数据存储格式(小端有符号字,交错模式)

在这里插入图片描述

UltraEdit下查看实际的16进制数据(小端有符号字,交错模式)

注意:在notepad++下查看到的16进制数据不对,暂时来找到原因。

点击图片可放大看。
在这里插入图片描述

左右声道分离c语言程序


//gcc -o split_PCM_channle split_PCM_channle.c
//./split_PCM_channle

#include <stdio.h>
#include <stdlib.h>

int simplest_pcm16le_split(char *url){  
    FILE *fp=fopen(url,"rb+");  
    FILE *fp1=fopen("output_l.pcm","wb+");  
    FILE *fp2=fopen("output_r.pcm","wb+");  
  
    unsigned char *sample=(unsigned char *)malloc(4);  
  
    while(!feof(fp)){  
        fread(sample,1,4,fp);  
        //L  
        fwrite(sample,1,2,fp1);  
        //R  
        fwrite(sample+2,1,2,fp2);  
    }  
  
    free(sample);  
    fclose(fp);  
    fclose(fp1);  
    fclose(fp2);  
    return 0;  
}  

void main (void)
{
    char *url = "./single_sine.pcm";
    simplest_pcm16le_split(url);
}

参考资料

1、PCM数据格式 - FlyingPenguin - 简书
2、视音频数据处理入门:PCM音频采样数据处理 - 简书

推荐阅读