对音频文件的处理:音频信息,读取内容,获取时长,切割音频,pcm与wav互转

音频处理发现的比较简单的代码,原作者代码在github:GitHub - silencesmile/python_wav: 对音频文件的处理:音频信息,读取内容,获取时长,切割音频,pcm与wav互转

 

可以按给定的开始和结束时间调用代码批处理,示例:

这是原音频文件的信息存储在csv文件,目标是按照给定的开始结束时间切割成多个小的音频片段

bg列为开始时间单位为秒,ed列为结束时间单位为秒,wav列为想要的音频片段命名

 批处理代码,调用了get_second_part_wav函数:

from pydub import AudioSegment
def get_second_part_wav(main_wav_path, start_time, end_time,part_wav_path):# 原音频文件路径,开始时间,结束时间,切分音频的存储路径start_time = int(start_time) * 1000end_time = int(end_time)  * 1000sound = AudioSegment.from_file(main_wav_path)word = sound[start_time:end_time]word.export(part_wav_path, format="wav")audio_teacher = pd.read_csv('try1.csv', encoding='utf-8')
start_list = audio_teacher['bg'].tolist()
end_list = audio_teacher['ed'].tolist()
wav_list = audio_teacher['wav'].tolist()for i in range(len(start_list)):start_time = start_list[i]end_time = end_list[i]get_second_part_wav('audio/try1.mp4', start_time, end_time, 'audio_sep/' + str(wav_list[i]))

原作者的可以根据需要调用的代码 :

# -*- coding:utf8 -*-
'''
auth: Young
公众号:Python疯子 (Hold2Crazy)
'''
import wave
import contextlib
import numpy as np
import matplotlib.pyplot as pltfrom scipy.io import wavfile
from pydub import AudioSegmentdef wav_infos(wav_path):'''获取音频信息:param wav_path: 音频路径:return: [1, 2, 8000, 51158, 'NONE', 'not compressed']对应关系:声道,采样宽度,帧速率,帧数,唯一标识,无损'''with wave.open(wav_path, "rb") as f:f = wave.open(wav_path)return list(f.getparams())def read_wav(wav_path):'''读取音频文件内容:只能读取单声道的音频文件, 这个比较耗时:param wav_path: 音频路径:return:  音频内容'''with wave.open(wav_path, "rb") as f:# 读取格式信息# 一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采# 样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息params = f.getparams()nchannels, sampwidth, framerate, nframes = params[:4]# 读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)str_data = f.readframes(nframes)return str_datadef get_wav_time(wav_path):'''获取音频文件是时长:param wav_path: 音频路径:return: 音频时长 (单位秒)'''with contextlib.closing(wave.open(wav_path, 'r')) as f:frames = f.getnframes()rate = f.getframerate()duration = frames / float(rate)return durationdef get_ms_part_wav(main_wav_path, start_time, end_time, part_wav_path):'''音频切片,获取部分音频 单位是毫秒级别:param main_wav_path: 原音频文件路径:param start_time:  截取的开始时间:param end_time:  截取的结束时间:param part_wav_path:  截取后的音频路径:return:'''start_time = int(start_time)end_time = int(end_time)sound = AudioSegment.from_file(main_wav_path)word = sound[start_time:end_time]word.export(part_wav_path, format="wav")def get_second_part_wav(main_wav_path, start_time, end_time, part_wav_path):'''音频切片,获取部分音频 单位是秒级别:param main_wav_path: 原音频文件路径:param start_time:  截取的开始时间:param end_time:  截取的结束时间:param part_wav_path:  截取后的音频路径:return:'''start_time = int(start_time) * 1000end_time = int(end_time) * 1000sound = AudioSegment.from_file(main_wav_path)word = sound[start_time:end_time]word.export(part_wav_path, format="wav")def get_minute_part_wav(main_wav_path, start_time, end_time, part_wav_path):'''音频切片,获取部分音频 分钟:秒数  时间样式:"12:35":param main_wav_path: 原音频文件路径:param start_time:  截取的开始时间:param end_time:  截取的结束时间:param part_wav_path:  截取后的音频路径:return:'''start_time = (int(start_time.split(':')[0])*60+int(start_time.split(':')[1]))*1000end_time = (int(end_time.split(':')[0])*60+int(end_time.split(':')[1]))*1000sound = AudioSegment.from_file(main_wav_path)word = sound[start_time:end_time]word.export(part_wav_path, format="wav")def wav_to_pcm(wav_path, pcm_path):'''wav文件转为pcm文件:param wav_path:wav文件路径:param pcm_path:要存储的pcm文件路径:return: 返回结果'''f = open(wav_path, "rb")f.seek(0)f.read(44)data = np.fromfile(f, dtype=np.int16)data.tofile(pcm_path)def pcm_to_wav(pcm_path, wav_path):'''pcm文件转为wav文件:param pcm_path: pcm文件路径:param wav_path: wav文件路径:return:'''f = open(pcm_path,'rb')str_data  = f.read()wave_out=wave.open(wav_path,'wb')wave_out.setnchannels(1)wave_out.setsampwidth(2)wave_out.setframerate(8000)wave_out.writeframes(str_data)# 音频对应的波形图
def wav_waveform(wave_path):'''音频对应的波形图:param wave_path:  音频路径:return:'''file = wave.open(wave_path)# print('---------声音信息------------')# for item in enumerate(WAVE.getparams()):#     print(item)a = file.getparams().nframes  # 帧总数f = file.getparams().framerate  # 采样频率sample_time = 1 / f  # 采样点的时间间隔time = a / f  # 声音信号的长度sample_frequency, audio_sequence = wavfile.read(wave_path)# print(audio_sequence)  # 声音信号每一帧的“大小”x_seq = np.arange(0, time, sample_time)plt.plot(x_seq, audio_sequence, 'blue')plt.xlabel("time (s)")plt.show()

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

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

相关文章

软件安利——火绒安全

近年来,以优化、驱动、管理为目标所打造的软件屡见不鲜,大同小异的电脑管家相继走入了公众的视野。然而,在这日益急功近利的社会氛围驱动之下,真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…

Dockerfile文件自动化生成R4L镜像

Dockerfile文件自动化生成R4L镜像的步骤 1、安装Docker:2、使用Dockerfile一键生成镜像:3、查看生成的Docker镜像:4、删除Docker镜像:5、生成Docker容器:6、查看容器7、删除容器 1、安装Docker: curl -fsS…

YOLOv5/YOLOv7改进: AIFI (尺度内特征交互)助力YOLO | YOLO终结者?RT-DETR一探究竟

💡💡💡本文全网首发独家改进: AIFI (尺度内特征交互)助力YOLO ,提升尺度内和尺度间特征交互能力,同时降低多个尺度的特征之间进行注意力运算,计算消耗较大等问题 推荐指数:五星 AIFI | 亲测在多个数据集能够实现涨点 💡💡💡Yolov5/Yolov7魔术师,独家首…

Py之optimum:optimum的简介、安装、使用方法之详细攻略

Py之optimum:optimum的简介、安装、使用方法之详细攻略 目录 optimum的简介 1、加速推理 Optimum 提供多种工具,用于在不同生态系统上导出和运行优化模型: 2、功能概述 optimum的安装 1、如果您想使用 Optimum 的加速器特定功能&#…

IOI车机系统刷机和改包笔记2 - 改包脚本

前言: 最近对雪佛兰改包需求感兴趣的网友很多,大家都遇上了很多奇怪的问题,这里就我自己使用的环境和脚本进行分享,供大家参考。 1. 准备环境 我这里使用Ubuntu系统进行操作 andyandy-vm:~$ sudo lsb_release -a No LSB module…

2023年CCF中国开源大会“大模型时代的智能化软件工程新范式”分论坛成功举行...

2023年CCF中国开源大会“大模型时代的智能化软件工程新范式”分论坛于10月21日在湖南长沙成功举行。本次论坛聚焦大模型时代的智能化软件新生态以及相应的软件工程新范式,邀请了多位来自学术界和工业界的专家进行分享和交流,共设置了5个主题报告和1个Pan…

设计师看后惊叹:当泥色走进室内空间的时候竟有此番效果

在美国的洛杉矶,一座引人注目的度假别墅彰显了自己的独特魅力。建筑师 Ron Radziner 说:“这是一座现代住宅,采用风化木、深色灰泥和绿色屋顶等与峡谷环境相关的材料,设计得通透、开放。” Zwickl 解释说:"他们想…

Git 入门指南:从新手到高手的完全指南

Git是一种强大的分布式版本控制系统,广泛应用于软件开发中。它的使用不仅可以帮助开发团队更好地管理代码,还可以提高团队协作效率和代码质量。随着软件开发的不断发展,版本控制成为了程序员必备的一项技能。 Git的基本概念 Git的基本概念对…

基因家族扩张与收缩分析-CAFE5

CAFE(Computational Analysis of gene Family Evolution)是一款以解释系统发育历史的方式分析基因家族大小变化的软件,这种分析常被称为基因家族收缩扩张(Gene family expansions and contractions)分析。 CAFE使用出生和死亡过程来模拟用户指定的系统发育树中的基…

在centos服务器中完成jdk,tomcat,MySQL的安装以及前后端分离项目中后端的部署

目录 一. jdk,tomcat的安装 1.将要安装的软件压缩包放入到centos服务器上 2. 解压对应的安装包 3. jdk环境变量配置 4. tomcat启动 5. 关闭防火墙 二. MySQL安装 1. 卸载mariadb,否则安装MySql会出现冲突(先查看后删除再查看) 2. 将MySQL安装包解…

数据结构Demo——简单计算器

简单计算器 一、项目介绍二、技术使用三、具体代码实现1.前端部分2.后端部分 一、项目介绍 本项目实现了一个通过网页访问的简单计算器,它可以对带括号的加减乘除表达式进行计算并将计算结果返回给用户,并且可以对用户输入的表达式进行合法性判断&#…

【小白的Spring源码手册】 Bean的扫描、装配和注册,面试学习可用

目录 前言源码学习Bean配置1. 注解2. xml配置 Bean扫描、装配、注册1. 扫描2. 装配BeanDefinition3. 校验BeanDefinition4. 注册BeanDefinition 总结 前言 如今Spring框架功能众多,每次打开Spring源码,要么就是自顶向下从整个框架来了解Spring整体流程&…

Servlet 初始化参数(web.xml和@WebServlet)

1、通过web.xml方式 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org/xm…

SpringMVC学习

一、SpringMvc 概述 1.什么是SpringMVC? ( •̀ ω •́ )✧&#xff1a; SpringMVC是基于MVC开发模式的框架&#xff0c;具备IOC和AOP MyBatis用来优化持久层&#xff0c; SpringMVC优化控制器。 spring是用来整合这两个框架 的框架

Maven项目管理

文章目录 Maven项目管理项目结构依赖导入依赖依赖作用域可选依赖排除依赖 继承关系常用命令测试项目打包项目 Maven项目管理 Maven 翻译为"专家"、“内行”&#xff0c;是 Apache 下的一个纯 Java 开发的开源项目。 基于项目对象模型&#xff08;缩写&#xff1a;P…

『OpenStack』云计算平台『Nova』计算服务学习指南

前言 本文将会讲解 OpenStack 平台计算服务组件 Nova &#xff0c;结合抽象概念和简单易懂的实战操作&#xff0c;帮助您更好的理解 Nova 计算服务在 OpenStack 中的作用 系统配置&#xff1a;宿主机 Ubuntu 20.04&#xff08;WSL2&#xff09; 简介 OpenStack 官网链接&…

KnowledgeGPT:利用检索和存储访问知识库上增强大型语言模型10.30

利用检索和存储访问知识库上增强大型语言模型 摘要引言2 相关研究3方法3.1 任务定义3.2 知识检索3.2.1 代码实现3.2.2 实体链接3.2.3 获取实体信息3.2.4 查找实体或值3.2.5 查找关系 3.3 知识存储 4 实验 摘要 大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域展现…

基于供需算法的无人机航迹规划-附代码

基于供需算法的无人机航迹规划 文章目录 基于供需算法的无人机航迹规划1.供需搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用供需算法来优化无人机航迹规划。 1.供需搜索算法 …

2024年湖北黄冈建安ABC建筑企业专职安全员报名事项

2024年湖北黄冈建安ABC建筑企业专职安全员报名事项 专职安全员一般是指从事安全管理方面的工作&#xff0c;普遍的是建筑施工行业&#xff0c;建筑工地安全员&#xff0c;专职安全员C证&#xff0c;黄冈建筑安全员ABC-建筑单位在黄冈&#xff0c;只能在黄冈报考建筑安全员ABC。…

前端基础---跳转相关的功能

后端给链接地址并且给token进行跳转 如果点击有key4&#xff0c;说明要跳转到相应的页面 auth是通过后端获取的地址&#xff0c; jdk是后端获取的相应的token&#xff0c; 然后进行拼接&#xff0c;进行window.open&#xff08;&#xff09;进行跳转 if (key 4) {var testUrl …