python pyaudio给数据加噪声

python pyaudio给数据加噪声

# -*- coding: utf-8 -*-
import argparse
import array
import math
import numpy
import numpy as np
import random
import wavedef get_args():parser = argparse.ArgumentParser()parser.add_argument("--clean_file", type=str, required=True)parser.add_argument("--noise_file", type=str, required=True)parser.add_argument("--output_mixed_file", type=str, default="", required=True)parser.add_argument("--output_clean_file", type=str, default="")parser.add_argument("--output_noise_file", type=str, default="")parser.add_argument("--snr", type=float, default="", required=True)args = parser.parse_args()return args# 根据干净音频的均方根和信噪比,计算调整后的噪声音频的均方根
def cal_adjusted_rms(clean_rms, snr):# 计算比例因子 aa = float(snr) / 20# 计算噪声水平的均方根noise_rms = clean_rms / (10 ** a)return noise_rms# 拿到音频文件的振幅数组
def cal_amp(wf):# 从音频文件中读取所有帧buffer = wf.readframes(wf.getnframes())# 保持较高的计算精度,直接转为 float64 会导致数据溢出amptitude = (np.frombuffer(buffer, dtype="int16")).astype(np.float64)return amptitude# 基于振幅数组计算音频的均方根值
def cal_rms(amp):# np.square() 平方return np.sqrt(np.mean(np.square(amp), axis=-1))# 保存wave文件
def save_waveform(output_path, params, amp):output_file = wave.Wave_write(output_path)output_file.setparams(params)  # params 包含了干净音频的采样率、采样位数、通道数等信息# 先将振幅数据转换为 16 位整型,再转换为字节流,最后写入 waveoutput_file.writeframes(array.array("h", amp.astype(np.int16)).tobytes())output_file.close()if __name__ == "__main__":args = get_args()# 源文件 和 噪声文件clean_file = args.clean_filenoise_file = args.noise_fileclean_wav = wave.open(clean_file, "r")noise_wav = wave.open(noise_file, "r")print(clean_file)# 音频文件数组clean_amp = cal_amp(clean_wav)noise_amp = cal_amp(noise_wav)# 计算纯净音频的均方根clean_rms = cal_rms(clean_amp)# 随机选择噪声音频中与干净音频长度相同的一段进行切割# 计算切割后的噪声音频的均方根start = random.randint(0, len(noise_amp) - len(clean_amp))divided_noise_amp = noise_amp[start: start + len(clean_amp)]noise_rms = cal_rms(divided_noise_amp)# 根据干净音频的均方根和信噪比,计算调整后的噪声音频的均方根snr = args.snradjusted_noise_rms = cal_adjusted_rms(clean_rms, snr)# 将调整后的噪声音频与干净音频相加得到混合后的音频adjusted_noise_amp = divided_noise_amp * (adjusted_noise_rms / noise_rms)mixed_amp = (clean_amp + adjusted_noise_amp)# np.iinfo(np.int16).max 获取 np.int16 类型能够表示的最大值,并将其赋给变量 max_int16max_int16 = np.iinfo(np.int16).maxmin_int16 = np.iinfo(np.int16).minif mixed_amp.max(axis=0) > max_int16 or mixed_amp.min(axis=0) < min_int16:# 如果混合音频的最大值大于等于最小值的绝对值,则使用最大值的缩放因子,否则,使用最小值的缩放因子if mixed_amp.max(axis=0) >= abs(mixed_amp.min(axis=0)):reduction_rate = max_int16 / mixed_amp.max(axis=0)else:reduction_rate = min_int16 / mixed_amp.min(axis=0)mixed_amp = mixed_amp * (reduction_rate)clean_amp = clean_amp * (reduction_rate)# 保存添加噪声后的 wavsave_waveform(args.output_mixed_file, clean_wav.getparams(), mixed_amp)print('finish')

代码运行方式如下:

python3 speech_noise.py --clean_file data/source_clean/arctic_a0001.wav --noise_file data/source_noise/ch01.wav --output_mixed_file data/output_mixed/0.wav --snr 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cordova详解

从八个方面让你快速了解cordova&#xff08;一&#xff09; - 掘金 从八个方面让你快速了解cordova&#xff08;二&#xff09; - 掘金 Cordova和React-Native两种框架的区别和优劣分析_cordova和react native-CSDN博客 Cordova开发App的优缺点是什么&#xff1f; - 咕噜企业…

开源CDN软件GoEdge —— 筑梦之路

官方网站&#xff1a;GoEdge CDN - 制作自己的CDN - GoEdge CDN | 自建CDN GoEdge是一款管理分布式CDN边缘节点的开源工具软件&#xff0c;目的是让用户轻松地、低成本地创建CDN/WAF等应用。 特性 免费 - 开源、免费、自由、开放 简单 - 架构简单清晰&#xff0c;安装简单&a…

Android,JNI开发和NDK之间的联系

Android&#xff0c;JNI开发和NDK。 1.jni和ndk jni是在jdk中就有出现的 在我们jdk路径中 D:\java\jdk11\include 这就是jdk中的jni Android开发环境中的ndk也有jni&#xff0c; D:\Android\sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\in…

DICE模型原理

随着温室气体排放量的增大和温室效应的增强&#xff0c;全球气候变化问题受到日益的关注。我国政府庄严承诺在2030和2060年分别达到“碳达峰”和“碳中和”&#xff0c;因此气候变化和碳排放已经成为科研人员重点关心的问题之一。气候变化问题不仅仅是科学的问题&#xff0c;同…

Django二转Day06

1.多表查询 基于对象 基于双下划线 正向和反向 聚合查询 分组查询&#xff08;配合聚合使用&#xff09; F查询和Q查询 2.其他字段和字段参数 其他字段 字段参数&#xff1b;ORM参数 ForeignKey 属性 ManyToManyField 用于表示多对多的关联关系。在数据库中通过第三…

解决msvcp140.dll丢失问题的5种方法,验证有效

在计算机编程和软件开发中&#xff0c;我们经常会遇到一些陌生的DLL文件&#xff0c;比如msvcp140.dll。这些DLL文件是动态链接库&#xff08;Dynamic Link Libraries&#xff09;的缩写&#xff0c;它们包含了可以被多个程序共享的代码和数据。那么&#xff0c;msvcp140.dll是…

优思学院|六西格玛中的过程管理思维

过程是什么&#xff1f; 过程&#xff08;Process&#xff09;是一系列相互关联的活动&#xff0c;将输入转化为输出&#xff0c;我们习惯于用 X 来表示输入&#xff0c;用 Y 来表示输出&#xff0c;就如下图一样。在产品&#xff08;服务&#xff09;质量形成过程中&#xff…

【ArcGIS Pro微课1000例】0048:深度学习--人群计数

文章目录 一、小学回忆录二、深度学习计算人头数三、案例实现一、小学回忆录 加载配套实验数据包中的图片及训练模型。你还记得当年的小学毕业班有多少同学吗?今天我们就用ArcGIS提供的人工智能工具,重温一下童年记忆。 二、深度学习计算人头数 本案例使用到的是深度学习中…

pyinstaller打包pyside

准备软件 准备一个python代码展示pyside的gui 安装PyInstaller 首先检查本机有没有安装PyInstaller &#xff0c;如果没有安装的话&#xff0c;需要运行 pip3 install PyInstaller 打包windowed界面 pyinstaller -w pymain.py 问题 Could not find the Qt platform plugi…

UNDERSTANDING AND IMPROVING INFORMATION TRANSFER IN MULTI-TASK LEARNING

Z i _i i​ X i R i X_iR_i Xi​Ri​&#xff0c; X X X是Task embedding layers&#xff0c; R R R是Alignment matrices 辅助信息 作者未提供代码

编程实战:类C语法的编译型脚本解释器(七)语句

系列入口&#xff1a; 编程实战&#xff1a;类C语法的编译型脚本解释器&#xff08;系列&#xff09;-CSDN博客 本文介绍语句&#xff0c;主要是控制语句&#xff0c;if、else、for之类。 一、语句概览 //语句//EXPRESSION RETURN:expressions[0]//BLOCK:senetnces//IF:if(exp…

github setting在哪

像创建一个ssh连接&#xff0c; 参考&#xff1a;【Github问题解决】解决Github&#xff1a;fatal:unable to access ‘https://github.com/.../.git‘:Could not resolve host:git_阳的糖的博客-CSDN博客

安全测试之推荐工具(一)

文章目录 一、前言二、Web安全&#xff08;一&#xff09;AppScan&#xff08;推荐&#xff09;&#xff08;二&#xff09;AWVS&#xff08;推荐&#xff09;&#xff08;三&#xff09;Burp Suite&#xff08;推荐&#xff09;&#xff08;四&#xff09;OWASP ZAP 三、主机安…

《python每天一小段》--(9)使用Paramiko库,批量操作linux服务器

使用Paramiko库&#xff0c;批量操作多Linux服务器 使用Paramiko库建立SSH连接并执行命令获取多个Linux服务器的磁盘信息。通过这个例子&#xff0c;你可以学习到如何使用Python自动化操作远程服务器。 操作如图&#xff1a; 查看了两台服务器的磁盘容量&#xff1a; 安装模…

Socket 编程

1&#xff1a;针对 TCP 应该如何 Socket 编程&#xff1f; 服务端和客户端初始化 socket&#xff0c;得到文件描述符&#xff1b; 服务端调用 bind&#xff0c;将 socket 绑定在指定的 IP 地址和端口; 服务端调用 listen&#xff0c;进行监听&#xff1b; 服务端调用 accept&am…

单片机系统

我们来看单片机 的例子&#xff0c;读者可能会担心单片机&#xff08;又称MCU&#xff0c;或微控制器&#xff09; 过于专业而无法理解。完全没必要&#xff01;在这里我们仅借它谈论一下有关时间的话题&#xff0c;顺带提一下单片机系统的概念。 单片机顾名思义是集成到一个芯…

高薪资是跳出来的,好工作是面出来的~

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 如需要项目实战或者是体系化资源,文末名片加V! 作者:哈哥撩编程,工作十余年, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发…

【雷电模拟器桥接问题解决方法】

1.ROOT权限开启 2.开启网络桥接模式&#xff0c;选择静态IP设置&#xff0c;点击安装桥接网卡&#xff0c;填写IP地址&#xff08;注意&#xff1a;IP地址要与host主机在同一IP段内&#xff09; 3.重启后 adb shell就能进入到模拟器控制台中了&#xff0c;如果出现以下内容&…

作用域和作用域链

前端面试大全JavaScript作用域和作用域链 &#x1f31f;经典真题 &#x1f31f;作用域&#xff08;Scope&#xff09; 什么是作用域 全局作用域和函数作用域 块级作用域 &#x1f31f;作用域链 什么是自由变量 什么是作用域链 关于自由变量的取值 &#x1f31f;作用域…

ffmpeg学习日记619-指令-透明通道视频相关指令

将单张png图片序列转换为透明视频 ffmpeg -i %d.png -vcodec qtrle movie_with_alpha.mov ffmpeg -i %d.png -vcodec ffvhuff movie_with_alpha.avi ffmpeg -i %d.png -vcodec huffyuv movie_with_alpha.avi带alpha透明层的视频编码 png编码 可以封装为 mp4、mov等 ffmpeg -…