欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c 语言提取左右声道数据

程序员文章站 2022-07-13 15:39:17
...

注意:本例子针对的输入数据源是双声道数据,采样点格式为s16le,如果是其他格式,比如24bit或者32bit或者其他,需要针对性的修改每次读取的字节数,也就是read(fd, &num, 4),对应num类型也要针对性修改,以便于能够容纳左右声道数据。另外左右声道数据排列方式也必须要是左右左右这样的方式。

#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>


int main(int argc, char** argv){

int fd = open(argv[1], O_RDONLY);
if (fd < 0){ 
    printf("open %s error!\n", argv[1]);
    return -1; 
}   

#if 1
    int fd1 = open(argv[2], O_WRONLY | O_CREAT, 0644);
    if (fd1 < 0){ 
        printf("open %s error!\n", argv[2]);
        return -1; 
    }   
    int fd2 = open(argv[3], O_WRONLY | O_CREAT, 0644);
    if (fd2 < 0){ 
        printf("open %s error!\n", argv[3]);
        return -1; 
    }   
#endif

char buf[2];
short num[2];
int count = 0;
char buffer[10];
double db = 0;
memset(buffer, 0, sizeof(buffer));

int ppp = 0;

while(count = read(fd, &num, 4)){
    short sum = num[0];
    short sum1 = num[1];

    write(fd1, &num[0], 2); 
    write(fd2, &num[1], 2); 

    memset(num, 0, sizeof(num));
}
                                                                                                          
close(fd);
close(fd1);
close(fd2);

return 0;
}

gcc编译完之后:gcc parse_two_channel_data.c -o parse_two_channel_data
运行:./parse_two_channel_data …/NO1_1kHz_0dB_44100_2.raw left.pcm right.pcm
最后分理出NO1_1kHz_0dB_44100_2.raw文件中的左右声道数据为left.pcm和right.pcm

c 语言提取左右声道数据

相关标签: 音频