使用python .pcm音频文件多声道数据分离与转化为浮点数
有些设备采集的音频文件格式为pcm格式,其本身就为ad转化后的产物,在我的嵌入式实现中为节省计算资源,直接对其进行声道分离。
如何使用python语言将pcm音频流文件转为数值矩阵,多声道进行声道分离,便于对每个单声道进行观察,下面我写了一个函数(借用了AudioSegment)用于解决这个问题。
需提前下载的模块有AudioSegment,matplotlib,numpy
有一处地方自己设置,有几声道,复制几次
函数:
from pydub import AudioSegment
import numpy as np
#import wave
#from matplotlib import pyplot
pcm_path = 'mic_demo_vvui_ori.pcm'def voice_devide(pcm_path,sound_num,invalid_sound,fs,data_type):'''多声道分离转化,pcm_path为文件路径,sound_num为声道数invalid_num为无效声道数(用于消除回声),没有则为0fs为采样频率,data_type为数据位数(8位,16位,32位)'''#多声道分离,fs为采样频率,data_type为数据位数(8位,16位,32位)#pcm_path = 'mic_demo_vvui_ori.pcm'with open(pcm_path, 'rb') as f:audioData = np.fromfile(f, dtype=np.uint32)audioData.shape = -1, sound_num #有sound_num个声道,即排成sound_num列,一行即为一帧(采样一次)#将各个声道分离,有几个声道复制几次这里,此处只列了6个通道audioData = audioData.Tch1 = audioData[0]ch1.tofile("ch_0.pcm")ch2 = audioData[1]ch2.tofile("ch_1.pcm")ch3 = audioData[2]ch3.tofile("ch_2.pcm")ch4 = audioData[3]ch4.tofile("ch_3.pcm")ch5 = audioData[4]ch5.tofile("ch_4.pcm")ch6 = audioData[5]ch6.tofile("ch_5.pcm")#pyplot.plot(pcm_data[1])num = len(audioData[1])ch_data=np.zeros((sound_num-invalid_sound,num))#减去invalid_sound个无效声道,没有抵消声道可删去for i in range(sound_num-invalid_sound):#依次将各个声道的数据读入,转为浮点数ch_x='ch_%d.pcm'%(i)#文件名的格式voice_data = AudioSegment.from_file(file=ch_x,sample_width=data_type/8, frame_rate=fs,channels=1)ch_data[i,:] = np.array(voice_data.get_array_of_samples())ch_data[i,:] = ch_data[i,:]/2**(data_type-1)#转为浮点数#pyplot.plot(pcm_data[1:100000])#pyplot.plot(ch_data[i-1])return ch_data
此处为调用的实例:(采样频率为16k,8声道,32位数据编码,末尾2个声道为抵消回声的声道,此处称为无效声道)
# 创建时间:2021/12/25 20:43
# 版本号:1.1
# 最后修改时间:
# 作者:陈安静
import format_conversion
import matplotlib.pyplot as pltpcm_path='mic_demo_vvui_ori.pcm'
data=format_conversion.voice_devide(pcm_path,sound_num=8,invalid_sound=2,fs=16000,data_type=32)
plt.plot(data[0,:])#随便取一个通道进行观察
实现:
总结:这个实现起来不难,就是比较麻烦,如果有什么写的不好的地方,希望各位同学多多批评指正,有问题可以留言。
使用python .pcm音频文件多声道数据分离与转化为浮点数相关推荐
- python pcm,python pcm音频添加头转成Wav格式文件的方法
如下所示: ''''' add Head Infomation for pcm file ''' import sys import struct import os __author__ = 'bo ...
- Python处理音频文件的实用姿势
Python处理音频文件的实用姿势 每天叫醒我的不是理想,是楼下广场舞的音乐. 音乐是人类的通用语言,不分国界不分种族. 抖音短视频爆火的关键因素之一,就是普通人也能便捷地使用BGM表达自我. 从感性 ...
- windows下使用Qt播放PCM音频文件(通过QAudioOutput和QIODevice)
在博主之前的博文<windows下使用FFmpeg生成PCM音频文件并播放(通过命令的方式)>(链接https://blog.csdn.net/u014552102/article/det ...
- PCM音频文件(.wav)压缩成ADPCM(.wav)
PCM音频文件压缩成adpcm格式的文件有多中方法(如使用ms ACM.sox等),本文主要介绍使用公开的算法(如下所示,如果需要可到网上搜一下: ========================== ...
- PCM音频文件(.wav)压缩成ADPCM(.wav) ,wav文件分析,wav 文件格式
本文来自: http://blog.csdn.net/jtlyr/article/details/5321884 这里还有介绍一些wav文件的其他网站,记录下: https://ccrma.stanf ...
- 如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法
C++读取WAV音频文件的头部数据的实现方法 前言: 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有 ...
- 在Linux环境下使用ffmpeg将PCM音频数据编码成aac数据
在Linux环境下使用ffmpeg将PCM音频数据编码成aac数据 程序框图 代码演示 程序框图 将pcm数据经过aac编码器编码成aac数据,我是将从设备上采集的数据经过重采样送入aac编码器进行编 ...
- PCM音频文件的合成
此处PCM音频文件的合成包括两层含义: 1.两个PCM音频文件相连接,形成一个PCM音频文件 2.两个PCM音频文件进行混音,形成一个PCM音频文件.如左声道的PCM音频文件和右声道PCM音频文件合成 ...
- python怎么读取csv的一部分数据_python批量读取csv文件 如何用python将csv文件中的数据读取成数组...
如何用python把多个csv文件数据处理后汇总到新csv文件你看这月光多温柔,小编转头还能看见你,一切从未坍塌. 可以用pandas读取数据,首先把文件方同一个文件价里,然后对当前文件价的所有内容循 ...
最新文章
- R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点
- pytorch多进程加载数据
- hdu 4288 Coder
- DOS命令-创建删除文件和文件夹
- mysql 视图_mysql视图
- 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?
- redis强一致性_分布式架构一定要有Redis吗?Redis的常见问题我都帮你解答了
- 提高linux运行速度,提高Linux操作系统的运行速度
- 使用HTML和CSS格式化DBMail
- CMake语法及CMakeList.txt简单使用
- jquery mobile页面跳转后js不执行的问题
- 树莓派安装中文拼音输入法和五笔输入法
- MovieClip序列帧动画 视频教程
- ttlink无线打印服务器,TTLINK TT-180U1打印机服务器 TCP/IP添加打印机的教程
- 凝胶负载染料行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 软渲染器(Directx11)三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵
- 傻白探索Chiplet,Chiplet技术简介(一)
- 家用千兆路由器排行榜前十名_求家用路由器排名前十名,有哪些比较推荐?
- 社会管理网格化 源码_张家口市召开市域社会治理暨全市网格化服务管理现场观摩会议...
- [Jeremy Wu]冒险之路,平凡之路(C++) kkmd66