有些设备采集的音频文件格式为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音频文件多声道数据分离与转化为浮点数相关推荐

  1. python pcm,python pcm音频添加头转成Wav格式文件的方法

    如下所示: ''''' add Head Infomation for pcm file ''' import sys import struct import os __author__ = 'bo ...

  2. Python处理音频文件的实用姿势

    Python处理音频文件的实用姿势 每天叫醒我的不是理想,是楼下广场舞的音乐. 音乐是人类的通用语言,不分国界不分种族. 抖音短视频爆火的关键因素之一,就是普通人也能便捷地使用BGM表达自我. 从感性 ...

  3. windows下使用Qt播放PCM音频文件(通过QAudioOutput和QIODevice)

    在博主之前的博文<windows下使用FFmpeg生成PCM音频文件并播放(通过命令的方式)>(链接https://blog.csdn.net/u014552102/article/det ...

  4. PCM音频文件(.wav)压缩成ADPCM(.wav)

    PCM音频文件压缩成adpcm格式的文件有多中方法(如使用ms ACM.sox等),本文主要介绍使用公开的算法(如下所示,如果需要可到网上搜一下: ========================== ...

  5. PCM音频文件(.wav)压缩成ADPCM(.wav) ,wav文件分析,wav 文件格式

    本文来自: http://blog.csdn.net/jtlyr/article/details/5321884 这里还有介绍一些wav文件的其他网站,记录下: https://ccrma.stanf ...

  6. 如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法

    C++读取WAV音频文件的头部数据的实现方法 前言: 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有 ...

  7. 在Linux环境下使用ffmpeg将PCM音频数据编码成aac数据

    在Linux环境下使用ffmpeg将PCM音频数据编码成aac数据 程序框图 代码演示 程序框图 将pcm数据经过aac编码器编码成aac数据,我是将从设备上采集的数据经过重采样送入aac编码器进行编 ...

  8. PCM音频文件的合成

    此处PCM音频文件的合成包括两层含义: 1.两个PCM音频文件相连接,形成一个PCM音频文件 2.两个PCM音频文件进行混音,形成一个PCM音频文件.如左声道的PCM音频文件和右声道PCM音频文件合成 ...

  9. python怎么读取csv的一部分数据_python批量读取csv文件 如何用python将csv文件中的数据读取成数组...

    如何用python把多个csv文件数据处理后汇总到新csv文件你看这月光多温柔,小编转头还能看见你,一切从未坍塌. 可以用pandas读取数据,首先把文件方同一个文件价里,然后对当前文件价的所有内容循 ...

最新文章

  1. R语言gganimate包创建可视化gif动图:gganimate包创建动态线型图动画基于transition_time函数、使用geom_point函数显示动画移动的数据点、并保留线图中的全部数据点
  2. pytorch多进程加载数据
  3. hdu 4288 Coder
  4. DOS命令-创建删除文件和文件夹
  5. mysql 视图_mysql视图
  6. 怎样用python搭建简单的系统_如何用Python搭建一个简单的推荐系统?
  7. redis强一致性_分布式架构一定要有Redis吗?Redis的常见问题我都帮你解答了
  8. 提高linux运行速度,提高Linux操作系统的运行速度
  9. 使用HTML和CSS格式化DBMail
  10. CMake语法及CMakeList.txt简单使用
  11. jquery mobile页面跳转后js不执行的问题
  12. 树莓派安装中文拼音输入法和五笔输入法
  13. MovieClip序列帧动画 视频教程
  14. ttlink无线打印服务器,TTLINK TT-180U1打印机服务器 TCP/IP添加打印机的教程
  15. 凝胶负载染料行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  16. 软渲染器(Directx11)三之世界矩阵,相机变换矩阵,透视投影矩阵,透视除法,视口变换矩阵
  17. 傻白探索Chiplet,Chiplet技术简介(一)
  18. 家用千兆路由器排行榜前十名_求家用路由器排名前十名,有哪些比较推荐?
  19. 社会管理网格化 源码_张家口市召开市域社会治理暨全市网格化服务管理现场观摩会议...
  20. [Jeremy Wu]冒险之路,平凡之路(C++) kkmd66

热门文章

  1. 简历javaweb项目描述怎么写_JavaWeb开发简历自我评价怎么写
  2. 哔哩哔哩黑马程序员C++课程个人学习笔记
  3. BZOJ 1502 NOI 2005 月下柠檬树
  4. Android应用开发揭秘(半年重印4次,内容已更新至Android 2.2,版权输出至台湾)
  5. Html5游戏开发攻略(Canvas设置篇)
  6. 【Redis】基础问题答疑
  7. Java中StringBuilder清空数据方法比较
  8. 【python中级】 文件上传实现同步助手
  9. vuejs 幻灯片组件发开
  10. 设计模式系列文章的总结