语音处理:Python实现pcm文件声道合并
语音处理: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
参考资料
- PCM音频数据格式介绍
语音处理:Python实现pcm文件声道合并相关推荐
- python如何将文件内容合并_python如何将两个txt文件内容合并
本文实例为大家分享了python将两个txt文件内容合并的具体代码,供大家参考,具体内容如下 分析: 先分别将两个文件中的内容读入列表中,再将列表分割 把不同属性的数据放到单独的列表中 分开存储 n ...
- matlab实现将一个文件夹里面的pcm文件依次合并成一个信号的函数
调用函数示例: 另附读入文件夹所有pcm文件,不仅获取数据还获取文件名.路径等的函数:
- 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 ...
- pyqt5:python读取二进制文件(音频PCM文件)显示波形
文章目录 1.使用ffmpeg生成PCM文件 1.1 用 ffprobe 查看文件信息 1.2 用 ffmpeg 命令转换 1.3 用ffplay 测试播放PCM文件 2.python读取PCM文件显 ...
- python(opencv + pyaudio + moviepy)实现录制音视频文件并合并
使用opencv录制视频文件 def record_webcam(filename):"""cv2.VideoCapture(0, cv2.CAP_DSHOW)参数1:打 ...
- python合并csv文件_PYTHON合并CSV文件的实践
最近尝试使用PYTHON处理CSV数据,由于CSV文件有好几个,需要提前拼接,然后再处理,因此遇到了PYTHON对文件进行合并的问题.此次尝试了两种方法:一是调用CMD命令处理:二是使用PYTHON写 ...
- python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值
#!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...
- python 批量读取xlsx并合并_如何用Python快速导入多个excel文件并合并文件数据
日常工作中,每个月都会遇到那么个固定的工作,将业务方同事整理的数据导入GP数据库中的某张表中:听起来是很简单的活呢! 但每次业务MM总会发来一个文件夹,里面有三四十个Excel文件(.xlsx格式,且 ...
- 使用Python处理声音文件(五):绘制立体声音乐左右声道频谱
说明: 1.需要首先安装Python扩展库scipy. 2.本文代码只适用于未压缩的WAV声音文件. 参考代码: 绘制结果: ----------相关阅读---------- 1900页Python系 ...
最新文章
- php删除指定符号,利用PHP删除特殊符号
- 码位(code position/point)Unicode 编码与 Python 2/3 编码兼容性问题
- android系统源代码添加新产品的支持
- Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
- volatile不具备原子性
- Jquery对象和DOM对象---Jquery API (1)
- sed: sed command a expects followed by text
- tensorflow 根据节点获取节点前的整张图
- vue移动端可以左右滑动的滑块
- (Excel)如何使用Excel进行四舍六入数据修约
- python生成所有6位数的数字手机验证码(000000-999999)
- Effective java 读书笔记
- utc时间怎么转换北京时间?
- ITASCA PFC 2D3D DISCERETE ELEMENT MODELING
- 可视化均衡插件-Acon Digital Equalize 2 v2.1.1 WiN-MAC
- [POI2008]BLO-Blockade,洛谷之提高历练地,强连通分量
- Unreal Engin_室外场景制作笔记_001创建森林地面
- kettle Excel模板
- css解决图片失真问题
- c语言16进制转10进制
热门文章
- 怎么批量免费XPS转PDF
- python中文朗读_Python:语音处理,实现在线朗读RFC文档或本地文本文件
- 威马EX5量产车如期交付,明年将以10万台冲击B级SUV市场
- 从零开始构建矽璓工业物联操作系统:使用risc-v架构的hifive1 emulator
- 记录几个比较安全的下载操作系统镜像的网站
- ibm服务器电脑维修部电话,ibm有哪些电脑维修点 ibm电脑维修方法及维修点介绍【图文】...
- 《五天学会绘画》阅读感受(全,附绘画作品)
- 定个小目标:一个月一万行代码
- ThinkPHP5+ECharts全国各海域港口潮汐表预测采集查询
- 讲师专访┃企业数字化转型的几个常见问题