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
上一篇: 虚拟声卡