您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:如何利用python处理原始音频数据

51自学网 2022-02-21 10:36:44
  python
这篇教程如何利用python处理原始音频数据写得很实用,希望能帮到您。

一、基础知识

PCM(pulse code modulation) ,即脉冲编码调制,是将模拟信号转为数字信号的一种编码系统。而模数转换主要分两步,首先对连续的模拟信号进行采样,然后把采样得到的数据转化为数值,即量化。

设x xx为输入信号,F ( x ) F(x)F(x)为量化后的信号,则F ( x ) F(x)F(x)既可以是线性的,也可以是非线性的。在audioop中,主要提供三种编码支持,分别是a-Lawμ-Law以及ADPCM

在中国和欧洲主要实用的编码方式为A-Law,其表达式为:

其中A AA为压缩系数,在G.726标准中建议87.56。

ADPCM(Adaptive Differential PCM),即自适应差分PCM。

由于模拟信号的连续性,一般来说相邻时间单位的信号往往具有较高的线性度,甚至彼此相差无几,从而可以被高效率的压缩。然而,也存在跳跃幅度较大的信号,如果完全以缓变为原则,那么必然会丢失这部分数据。为了均衡这种差异,就需要进行自适应量化。

audioop中支持的Intel/DVI ADPCM算法可以在网上找到,但是信息并不多而且都很老旧,貌似不太重要的样子,甚至知网都搜不到,所以这里就不详细解读了。

二、转换函数

audioop提供了ADPCMA-Lawμ-Law和线性采样之间的转换函数

采样ADPCMA-Lawμ-Law
lin2linlin2adpcmlin2alawlin2ulaw
 adpcm2linalaw2linulaw2lin

其中,与A-Lawμ-Law有关的转换函数的输入参数为(fragment, width),分别代表待处理片段和位宽;adpcm则会多一个state元组作为第三个参数,表示编码器状态。

lin2lin是将线性片段在1、2、3 和 4 字节格式之间转换的函数,其输入参数为(fragment, width, newwidth)。

下面新建一些数据来测试一下编码转换函数,

#下面代码来自于test_audioop.pyimport audioopimport sysimport unittestpack = lambda width, data :b''.join(
python爬取气象台每日天气图代码
Python实现人机中国象棋游戏
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。