语音处理:Python实现pcm文件声道合并

  • 功能思路
  • 实现代码
  • 参考资料

功能思路


功能:

  • 合并多个单通道的pcm成一个多通道pcm文件
  • 长度短的声道,末尾自动补零,与最长声道长度对齐

思路:

  • 先了解pcm数据保存格式,见文末参考资料1
  • 遍历所有要合并的单声道文件,将每个声道数据追加到列表中
  • 同时,保存每个声道的数据长度进入对应列表,单位是Byte
  • 根据位深,确定单个声道每块数据的大小,如bit为16位,则一个数据占2个Byte,作为步长
  • 在长度列表中找到最大长度的数据,以此作为循环终止条件
  • 若某个文件已到末尾,则补零

实现代码


## -*- coding: utf-8 -*-import osif __name__ == '__main__':input_dir = r"D:\seq\pcm"output_dir = input_dir + r"\combin"pcm_data = []pcm_len = []file_num = 3for i in range(file_num) :with open(os.path.join(input_dir, "file%d.pcm" %(i + 1)), 'rb') as pcmfile:
##            pcm_data[i] = pcmfile.read()
##            pcm_len[i] = len(pcm_data[i])pcm_data.append(pcmfile.read())pcm_len.append(len(pcm_data[i]))print("i={0}, len={1}".format(i, len(pcm_data[i])))max_len = max(pcm_len)ch = file_numsr = 48000bit = 16##    output_pcm = "" ## 初始化为字符串output_pcm = [] ## 初始化为列表frame_len = bit / 8;start = 0step = int(frame_len)fill_zero = b"" ## 声明一个bytes类型的字符串for i in range(step) :fill_zero += b"\x00"for i in range(start, max_len, step) :
##        output_pcm += pcm_data1[i:i+2] + pcm_data2[i:i+2] #字符串追加的方法for file in range(file_num) :if i + step < pcm_len[file]:output_pcm.append(pcm_data[file][i:i+step])else : ## 超过对应声道的长度output_pcm.append(fill_zero)with open(os.path.join(output_dir, 'combine_out_ch{0}_bit{1}_sr{2}.pcm'.format(file_num, bit, sr)), 'wb') as outpcm_file:outpcm_file.write(b''.join(output_pcm)) ## b"",表示用byte方式写入,而非str

参考资料


  1. PCM音频数据格式介绍

语音处理:Python实现pcm文件声道合并相关推荐

  1. python如何将文件内容合并_python如何将两个txt文件内容合并

    本文实例为大家分享了python将两个txt文件内容合并的具体代码,供大家参考,具体内容如下 分析: 先分别将两个文件中的内容读入列表中,再将列表分割 把不同属性的数据放到单独的列表中 分开存储  n ...

  2. matlab实现将一个文件夹里面的pcm文件依次合并成一个信号的函数

    调用函数示例: 另附读入文件夹所有pcm文件,不仅获取数据还获取文件名.路径等的函数:

  3. python下载大文件mp4_python合并大量ts文件成mp4格式(ps:上限是450,亲测)

    原博文 2018-08-22 17:34 − 1 import os 2 #exec_str = r'copy /b ts/c9645620628078.ts+ts/c9645620628079.ts ...

  4. pyqt5:python读取二进制文件(音频PCM文件)显示波形

    文章目录 1.使用ffmpeg生成PCM文件 1.1 用 ffprobe 查看文件信息 1.2 用 ffmpeg 命令转换 1.3 用ffplay 测试播放PCM文件 2.python读取PCM文件显 ...

  5. python(opencv + pyaudio + moviepy)实现录制音视频文件并合并

    使用opencv录制视频文件 def record_webcam(filename):"""cv2.VideoCapture(0, cv2.CAP_DSHOW)参数1:打 ...

  6. python合并csv文件_PYTHON合并CSV文件的实践

    最近尝试使用PYTHON处理CSV数据,由于CSV文件有好几个,需要提前拼接,然后再处理,因此遇到了PYTHON对文件进行合并的问题.此次尝试了两种方法:一是调用CMD命令处理:二是使用PYTHON写 ...

  7. python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值

    #!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...

  8. python 批量读取xlsx并合并_如何用Python快速导入多个excel文件并合并文件数据

    日常工作中,每个月都会遇到那么个固定的工作,将业务方同事整理的数据导入GP数据库中的某张表中:听起来是很简单的活呢! 但每次业务MM总会发来一个文件夹,里面有三四十个Excel文件(.xlsx格式,且 ...

  9. 使用Python处理声音文件(五):绘制立体声音乐左右声道频谱

    说明: 1.需要首先安装Python扩展库scipy. 2.本文代码只适用于未压缩的WAV声音文件. 参考代码: 绘制结果: ----------相关阅读---------- 1900页Python系 ...

最新文章

  1. php删除指定符号,利用PHP删除特殊符号
  2. 码位(code position/point)Unicode 编码与 Python 2/3 编码兼容性问题
  3. android系统源代码添加新产品的支持
  4. Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
  5. volatile不具备原子性
  6. Jquery对象和DOM对象---Jquery API (1)
  7. sed: sed command a expects followed by text
  8. tensorflow 根据节点获取节点前的整张图
  9. vue移动端可以左右滑动的滑块
  10. (Excel)如何使用Excel进行四舍六入数据修约
  11. python生成所有6位数的数字手机验证码(000000-999999)
  12. Effective java 读书笔记
  13. utc时间怎么转换北京时间?
  14. ITASCA PFC 2D3D DISCERETE ELEMENT MODELING
  15. 可视化均衡插件-Acon Digital Equalize 2 v2.1.1 WiN-MAC
  16. [POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量
  17. Unreal Engin_室外场景制作笔记_001创建森林地面
  18. kettle Excel模板
  19. css解决图片失真问题
  20. c语言16进制转10进制

热门文章

  1. 怎么批量免费XPS转PDF
  2. python中文朗读_Python:语音处理,实现在线朗读RFC文档或本地文本文件
  3. 威马EX5量产车如期交付,明年将以10万台冲击B级SUV市场
  4. 从零开始构建矽璓工业物联操作系统:使用risc-v架构的hifive1 emulator
  5. 记录几个比较安全的下载操作系统镜像的网站
  6. ibm服务器电脑维修部电话,ibm有哪些电脑维修点 ibm电脑维修方法及维修点介绍【图文】...
  7. 《五天学会绘画》阅读感受(全,附绘画作品)
  8. 定个小目标:一个月一万行代码
  9. ThinkPHP5+ECharts全国各海域港口潮汐表预测采集查询
  10. 讲师专访┃企业数字化转型的几个常见问题