广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何利用python处理原始音频数据
  • 279
分享到

如何利用python处理原始音频数据

2024-04-02 19:04:59 279人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、基础知识二、转换函数三、片段特征函数四、片段操作一、基础知识 PCM(pulse code modulation) ,即脉冲编码调制,是将模拟信号转为数字信号的一种编码系统。

一、基础知识

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.py
import audioop
import sys
import unittest

pack = lambda width, data :b''.join(
    v.to_bytes(width, sys.byteorder, signed=True) for v in data)

packs = {w: (lambda *data, width=w: pack(width, data)) for w in (1, 2, 3, 4)}

unpack = lambda width, data: [int.from_bytes(
    data[i: i + width], sys.byteorder, signed=True)
    for i in range(0, len(data), width)]

datas = {
    1: b'\x00\x12\x45\xbb\x7f\x80\xff',
    2: packs[2](0, 0x1234, 0x4567, -0x4567, 0x7fff, -0x8000, -1),
    3: packs[3](0, 0x123456, 0x456789, -0x456789, 0x7fffff, -0x800000, -1),
    4: packs[4](0, 0x12345678, 0x456789ab, -0x456789ab,
                0x7fffffff, -0x80000000, -1),
}

则datas的值为:

>>> for key in datas : print(datas[key])
...
b'\x00\x12E\xbb\x7f\x80\xff'
b'\x00\x004\x12gE\x99\xba\xff\x7f\x00\x80\xff\xff'
b'\x00\x00\x00V4\x12\x89gEw\x98\xba\xff\xff\x7f\x00\x00\x80\xff\xff\xff'
b'\x00\x00\x00\x00xV4\x12\xab\x89gEUv\x98\xba\xff\xff\xff\x7f\x00\x00\x00\x80\xff\xff\xff\xff'
>

则其转换函数测试如下:

>>> datas[1]
b'\x00\x12E\xbb\x7f\x80\xff'        #将要处理的1位线性码
>>> unpack(1,datas[1])
[0, 18, 69, -69, 127, -128, -1]     #转为整型
# 将1字节线性码转为2字节线性码
>>> datas1_2 = audioop.lin2lin(datas[1], 1, 2)
>>> print(datas1_2)
b'\x00\x00\x00\x12\x00E\x00\xbb\x00\x7f\x00\x80\x00\xff'
>>> unpack(2,datas1_2)    #转为整型,其值为datas[1]*256
[0, 4608, 17664, -17664, 32512, -32768, -256]
# 将1字节线性码转为1字节u-Law码
>>> datas1_u = audioop.lin2ulaw(datas[1], 1)
>>> unpack(1,datas1_u)   #转为整型,这个数和u-law的公式对不上,可能是其他算法
[-1, -83, -114, 14, -128, 0, 103]

三、片段特征函数

下表中函数的输入为(fragment, width),分别代表待统计片段和位宽。

 返回值
avg片段采样值的均值
avgpp片段采样值的平均峰峰值
max片段采样值的最大绝对值
maxpp声音片段中的最大峰峰值
minmax由片段采样值中最小和最大值组成的元组
rms片段的均方根
cross片段穿越零点的次数

getsample(fragment, width, index),顾名思义用于采样,返回段中采样值索引index的值。

findfactor(fragment, reference),返回一个系数F使得rms(add(fragment, mul(reference, -F)))最小,即返回的系数乘以reference后与fragment最匹配。两个片段都应包含 2 字节宽的采样。

findfit(fragment, reference),尽可能尝试让 reference 匹配 fragment 的一部分。

findmax(fragment, length),在fragment中搜索所有长度为length的采样切片中,能量最大的那一个切片,即返回 i 使得 rms(fragment[i*2:(i+length)*2]) 最大。

四、片段操作

其返回值均为片段,下表的参数中,f表示fragment,w表示width,L表示lfactor,R表示rfactor

audioop.ratecv(f, w, nchannels, inrate, outrate, state[, weightA[, weightB]])

可用于转换输入片段的帧速率,其中

  • state为元组,表示转换器状态
  • weightA和weightB是简单数字滤波器的参数,默认为 1 和 0。

到此这篇关于如何利用python处理原始音频数据的文章就介绍到这了,更多相关利用Python处理原始音频数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何利用python处理原始音频数据

本文链接: https://www.lsjlt.com/news/161543.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何利用python处理原始音频数据
    目录一、基础知识二、转换函数三、片段特征函数四、片段操作一、基础知识 PCM(pulse code modulation) ,即脉冲编码调制,是将模拟信号转为数字信号的一种编码系统。...
    99+
    2022-11-12
  • 怎么利用python处理原始音频数据
    本篇内容介绍了“怎么利用python处理原始音频数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、基础知识PCM(pulse code ...
    99+
    2023-06-22
  • Python音频处理库pydub如何使用
    本篇内容主要讲解“Python音频处理库pydub如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python音频处理库pydub如何使用”吧!1. 安装使用pip安装即可(还需安装ffm...
    99+
    2023-07-05
  • 如何利用 Python 处理大数据?
    Python 是一种高级编程语言,最初是为编写脚本而设计的,但是随着时间的推移,它已经成为数据科学和大数据处理的主要语言之一。本文将介绍如何使用 Python 处理大数据。 什么是大数据? 大数据是指数据量太大,以至于无法使用传统的数据处理...
    99+
    2023-07-10
    spring git 大数据
  • Python如何利用ffmpeg处理视频素材
    目录前言一、安装二、subprocess调用三、ffmpy3转码解复用复用拆分成图片四、最后前言 第一次处理视频素材可以手动用剪映来处理,然后再用代码进行自动化处理,不然连朝哪个方向...
    99+
    2022-11-12
  • 如何利用Python多处理库处理3D数据
    如何利用Python多处理库处理3D数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天我们将介绍处理大量数据时非常方便的工具。我不会只告诉您可能在手册中找到...
    99+
    2023-06-22
  • python如何截取一段音频数据
    在Python中,可以使用`wave`模块来截取一段音频数据。以下是一个示例代码,演示如何截取一段音频数据: import wave...
    99+
    2023-10-27
    python
  • 如何进行Python 音频的数据扩充
    今天就跟大家聊聊有关如何进行Python 音频的数据扩充,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。经典的深度学习网络AlexNet使用数据扩充(Data Augmentation...
    99+
    2023-06-02
  • Linux下如何使用SoundConverter处理音频
    这篇文章将为大家详细讲解有关Linux下如何使用SoundConverter处理音频,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SoundConverter 是一款批量音频格式转换工具,只需要拖放即可,...
    99+
    2023-06-27
  • 如何使用Octave数学技术处理音频文件
    小编给大家分享一下如何使用Octave数学技术处理音频文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们的数字音频处理技术第三部分涵盖了信号调制内容,将解释如...
    99+
    2023-06-27
  • python3使用mutagen进行音频元数据处理的方法
    目录一、安装1、在线安装2、离线安装2.1 下载离线安装文件 2.2  执行离线安装操作 二、基础用法1、获取音频文件元数据  2、...
    99+
    2022-11-11
  • 如何利用Python实现简易的音频播放器
    目录1. 需要用到的Python库2. 简易UI设计3. 功能模块实现3.1 选择音频文件进行播放3.2 控制音频播放、暂停3.3 控制音频音量大小3.4 播放器初始化等细节4. 运...
    99+
    2022-11-13
  • 利用python做表格数据处理
    目录技术背景python对Excel表格的处理vaex的安装与使用vaex的安装性能对比数据格式转换总结概要技术背景 数据处理是一个当下非常热门的研究方向,通过对于大型实际场景中的...
    99+
    2022-11-12
  • 如何利用Python处理excel表格中的数据
    目录一、基础、常用方法二、提高三、出错总结一、基础、常用方法 1. 读取excel 1、导入模块: import xlrd 2、打开文件: x1 = xlrd.open_workb...
    99+
    2022-11-13
  • 如何利用MySQL和C++开发一个简单的音频处理功能
    如何利用MySQL和C++开发一个简单的音频处理功能概述:音频处理是一个广泛应用的领域,可以通过使用MySQL和C++来开发一个简单的音频处理功能。MySQL可以用于存储音频文件的元数据,C++可以用于实现音频处理算法。本文将介绍如何利用M...
    99+
    2023-10-22
    MySQL C++ 音频处理
  • 利用Python多处理库处理3D数据详解
    今天我们将介绍处理大量数据时非常方便的工具。我不会只告诉您可能在手册中找到的一般信息,而是分享一些我发现的小技巧,例如tqdm与 multiprocessing​imap​​一起使用...
    99+
    2022-11-12
  • Python 实时数据处理:如何利用 bash 优化数据流程?
    Python 是一个强大的数据处理工具,在数据分析和机器学习领域有着广泛的应用。在实际应用中,我们经常需要处理实时数据流,这就需要高效的数据处理流程来保证数据准确性和实时性。在本文中,我们将介绍如何使用 Python 和 bash 优化数...
    99+
    2023-11-14
    实时 关键字 bash
  • 如何利用Python处理海量自然语言数据?
    自然语言处理(NLP)是人工智能领域中的一个重要分支,它涉及到计算机如何处理和分析人类语言。在现代社会中,海量的自然语言数据被广泛应用于各个领域,如搜索引擎、社交媒体、自然语言对话系统等。因此,处理海量自然语言数据是一个重要的挑战。本文将...
    99+
    2023-10-13
    大数据 自然语言处理 同步
  • 如何利用Python和Numpy进行高效数据处理?
    当今时代,数据处理已经成为了各个行业的必备技能。而Python和Numpy作为数据科学领域中最受欢迎的工具之一,它们的高效性和易用性已经得到了广泛的认可。在本文中,我们将会介绍一些Python和Numpy的高效数据处理技巧,并且会穿插一些演...
    99+
    2023-08-11
    日志 numy load
  • 如何利用Python处理大数据文件中的对象?
    随着数据量的快速增长,处理大数据已成为许多企业和组织所面临的最大挑战之一。Python语言因其简单易学、灵活和高效的特点,成为了处理大数据的首选语言之一。本文将介绍如何利用Python处理大数据文件中的对象,为读者提供一些实用的技巧和工具。...
    99+
    2023-10-26
    对象 文件 大数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作