本次练习要求:将单声道origin_audio.pcm音频文件存入到双声道two_channel_audio.pcm的左声道中,将音量调节后的文件存入到右声道中。
如何将数据分别存储到左、右声道中,首先要了解16位双声道PCM数据的存储格式,如下:
左声道低字节-左声道高字节-右声道低字节-右声道高字节…,因此构成双通道时先以
2个字节写入左声道内容以构成左声道的数据,再以2个字节写入右声道内容以构成右声道数据。
以下为不同声道PCM的数据存储格式:

本次code将fopen替换为fopen_s

代码实现如下:

#include<stdio.h>
#include<stdlib.h>int main()
{short in_data;short out_data_l;short out_data_r;short out_data;short volume_adjust = 2;int size = 0;FILE *input_file;FILE *output_file_l;FILE *output_file_r;FILE *two_channel_file;int err = 0;err =fopen_s(&input_file,"origin_audio.pcm","rb");if (0 != err){return -1;}int err_l = 0;err_l =fopen_s(&output_file_l,"left.pcm","wb");if (0 != err_l){return -2;}int err_r = 0;err_r =fopen_s(&output_file_r,"right.pcm","wb");if (0 != err_r){return -3;}int err_twochannel = 0;err_twochannel =fopen_s(&two_channel_file,"two_channel_audio.pcm","wb");if (0 != err_twochannel){return -4;}while(!feof(input_file)){size = fread(&in_data, 1, 2, input_file); // 此处是读取16bit(一个声道),一个字节8位,所以count为2if(size>0){out_data_l = in_data;fwrite(&out_data_l,2,1,output_file_l);out_data_r = in_data*volume_adjust;if(out_data_r>32767){out_data_r = 32767;}else if(out_data_r<-32768){out_data_r = -32768;}else{out_data_r = out_data_r;}fwrite(&out_data_r,2,1,output_file_r);//L、R轮流写入到双声道PCM中fwrite(&out_data_l, 2, 1, two_channel_file);fwrite(&out_data_r,2, 1, two_channel_file);}else{return(-5);}}fclose(input_file);fclose(output_file_l);fclose(output_file_r);fclose(two_channel_file);return 0;
}

将运行得到的pcm文件由ocenaudio打开,可得以下波形,符合预期。

基于C的双声道PCM文件数据处理相关推荐

  1. 双声道pcm文件拆解成左右两个单声道文件

    本人写过ffmpeg读取系统声音,生成音频原始流pcm文件 文中定义的channel_layout 为AV_CH_LAYOUT_STEREO,即左右通道的双通道,现在将这个双通道文件拆解成左右两个通道 ...

  2. 监听实时生成的双声道wav文件转文字

    #监听文件夹生成的双声道wav文件实时转文字 想要把软短话生成的双声道录音文件实时转文字做内容质检 思路是监听某文件夹的文件创建事件 拆分双声道wav 调用转文字接口 使用的阿里的TTS 实时语音识别 ...

  3. PCM双声道分离为单声道 C++ 实现

    这里主要是写 的是 16位 双声道 PCM数据的分离: 这个方法仅适用于非 planar 音频格式:就是如下图: 可以看这篇文章查看双声道PCM的内存结构: http://blog.csdn.net/ ...

  4. java 双声道音频_Android 播放音频如何实现双声道效果

    1 使用场景 Android 无法直接采集双声道,用户如果想实现播放的音频具有双声道效果,可以参考本文. 2 实现流程 双声道效果实现的主流程为: 下文将分别讲述各个步骤. 2.1 输入双声道数据 主 ...

  5. 【音频处理】python将两个单声道wav音频合成一个双声道wav音频_立体声感

    python将两个单声道wav音频合成一个双声道wav音频_立体声感 环境相关 编写目的 录音代码 单通道音合成双通道音频代码 在以下内容中,若有任何错误和不足,欢迎读者进行指正,不尽感激! 环境相关 ...

  6. iOS 双声道效果实现方式

    iOS 无法直接采集双声道,用户如果想实现播放的音频具有双声道效果,可以参考本文.本文为即构科技音视频SDK(ZegoLiveRoom SDK )高级功能系列第九篇--双声道. 双声道效果实现的主流程 ...

  7. java处理μ-law压缩的双声道wav分离解压

    最近有个双声道音频实时转译的需求 要求先把μ-law压缩的双声道wav文件分离声道并解压成常规pcm流调用TTS 网上的方法零零散散 这里整理记录一下解压和分离的过程 声道分离 双声道分离首先要先了解 ...

  8. 基于C语言实现把WAV双声道文件差分成两个单声道文件

    本deemo基于下面这篇文章的deemo实现 基于C语言的 WAV 文件双声道转单声道的实现_快乐的老鼠的博客-CSDN博客_wav 双声道转单声道 #include <stdio.h> ...

  9. 基于C语言的 WAV 文件双声道转单声道的实现

    这里只处理PCM是16位,encode是PCM格式的波形进行解析: #include <stdio.h> #include <stdlib.h>#define u8 unsig ...

最新文章

  1. Ryzen 4000 Vermeer CPU和Radeon RX Big Navi 图形卡
  2. 编写程序创建一个通讯录文件,在其中存入10位同学的姓名、年龄、电话号码,并在屏幕上输出第2、4、6、8、10位同学的信息
  3. MySQL Index Condition Pushdown 原理与解析
  4. JAVA入门_多线程_邮局派发信件
  5. 前序遍历m-ary树_在Ruby中使用ary [start,length]- object进行数组元素分配
  6. 我的内核学习笔记12:linux i2c-gpio驱动应用实例
  7. S03_CH03_AXI_DMA_OV7725摄像头采集系统
  8. 自学python到什么程度就可以工作-Python学到什么程度可以面试工作?
  9. 设计模式详解(链接)
  10. 如何编写单元测试用例
  11. python matplotlib绘制几何图形
  12. linux下利用yum安装svn
  13. GBase 8a管理集群gcware的日志-vote leader、flower、candidate部分
  14. mysql odbc 5.3 install error 13: system error code 126
  15. ios开发--Mac 10.10安装破解版Navicat Premium 11.0.16.dmg
  16. 计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
  17. 客快物流大数据项目学习框架
  18. 2019年1月1日起,国家推出新的个人所得税政策,起征点上调值5000元。也就是说税前工资扣除五险一金(五险一金数额假设是税前工资的10%) * 后如果不足5000元,则不交税。
  19. 《工程学导论》读书笔记第二章工程与科学
  20. linux 云计算 python 零基础 开机流程

热门文章

  1. 51单片机函数发生器
  2. 外向的人为何却喜欢孤独
  3. EasyRecovery15最可靠的电脑计算机数据恢复软件
  4. 碳交易机制下考虑需求响应的综合能源系统优化运行论文复现——附代码
  5. Google C++ 编码规范(中文版)
  6. html和sketch文件转换,GitHub - 332065255/sketch-to-html: 从 sketch 转换成 html,我开始更新了.....
  7. 安利钻石商务通 2006 v6.2 免费下载
  8. 让javac在中文系统上输出英文的信息
  9. 《鹿鼎记》的第一遍读后感作文3600字
  10. 电子邮件管理系统 android,IM800电子邮件管理系统