用python实现语音的分割并保存为.wav文件
功能描述
因为在研究使用openSMILE提取特征时,需要对语音进行分割,我找了很多方法,都无法实现自己想要效果,语音自己实现了语音分割并保存的代码,我测试了一下,可以达到自己想要的结果,因此写一篇博客,方便自己后期查看,也可以分享给大家参考。
功能为:给定一个语音句子,将这个句子等分几个片段,并保存为.wav文件。
代码实现和分析
大家如果想尝试,自己在代码所在文件夹下准备一个.wav语音文件,新建一个文件夹,修改代码里的语音名和文件夹名,运行即可实现语音分割。
实现代码如下:
import wave
import numpy as npdef read_file(filename):file = wave.open(filename, 'r')params = file.getparams()nchannels, sampwidth, framerate, wav_length = params[:4]str_data = file.readframes(wav_length)wavedata = np.frombuffer(str_data, dtype=np.short)file.close()return wavedata, framerate, nchannels, sampwidth, wav_length# 设置相应参数并保存为wav文件
def save_wav(data, framerate, nchannels, sampwidth, name):outwave = wave.open(name, 'wb') # 定义存储路径以及文件名data_size = len(data)nframes = data_sizecomptype = "NONE"compname = "not compressed"outwave.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))# 注意采样率要放在nchannels, sampwidth后面,否则保存的语音没有声音outwave.writeframes(b''.join(data))outwave.close()return 0if __name__ == "__main__":path = "./audio.wav" # 待语音的语音path_2 = "./file/" # 分割后语音放置的文件夹wavedata, framerate, nchannels, sampwidth, wav_length = read_file(path)print("framerate, nchannels, sampwidth, wav_length\n", framerate, nchannels, sampwidth, wav_length)length = wav_length//3 # 将语音三等分for i in range(0, len(wavedata), length):data = wavedata[i:length+i]name = path_2+path[-9:-4]+"_"+str(i)+".wav" # 设置保存的名字print(name)save_wav(data, framerate, nchannels, sampwidth, name)
运行结果为:
framerate, nchannels, sampwidth, wav_length16000 1 2 18972
./file/audio_0.wav
./file/audio_6324.wav
./file/audio_12648.wav
代码分析
代码主要由三个部分组成:
- 语音文件读取部分,这里的作用是用来读取语音信号以及对应的参数,并将语音转为数组。
- 语音保存部分,这里的作用是根据参数进行语音数据的保存。
- 主函数部分,调用两个函数实现语音的读取,然后设定分割长度,然后根据读取的参数进行保存。
在写代码的过程中我发现一个小问题,在设置参数时,如果采样率放在通道数和采样宽度前面,保存的语音是没有声音的,将顺序改过来就能听到声音了。
outwave.setparams((nchannels, sampwidth, Framerate, nframes, comptype, compname))
用python实现语音的分割并保存为.wav文件相关推荐
- Python爬取售房信息并保存至CSV文件
Python爬取售房信息并保存至CSV文件 在上一篇文章: Python爬取租房信息并保存至Excel文件,介绍了如何使用Python爬取租房信息并保存至Excel文件,在本案例中则是使用Python ...
- Python音频处理:创建一个正弦波并保存为wav文件
Python音频处理:创建一个正弦波并保存为wav文件 0. 预备知识 0.1 数字信号基础 0.2 声学概念基础 1. 创建一个正弦波 2. 保存为wav文件 0. 预备知识 0.1 数字信号基础 ...
- 安卓Android开发:使用AudioRecord录音、将录音保存为wav文件、使用AudioTrack保存录音
一.使用AudioRrecord录音 1.1声明 首先需要声明一个AudioRecord类的实例.之所以需要事先声明,是因为在本例中,录音的启动和结束被封装在两个不同的方法里.而通常来讲," ...
- Python爬取起点小说并保存到本地文件夹和MongoDB数据库中
Python爬取起点小说并保存到本地MongoDB数据库中 工具:Python3.7 + Mongo4.0 + Pycharm """ 爬取起点小说<诡秘之主> ...
- python爬虫-豆瓣爬取数据保存为html文件
接<python爬虫-豆瓣数据爬取-正则匹配>中的案例五,将爬取的豆瓣租房信息网址和标题保存为html文件. 脚本修改如下: # -*-coding:utf-8 -*- import re ...
- python使用nibabel和sitk读取保存nii.gz文件
nii.gz格式是医学图像常用的压缩格式,python中可用nibabel和sitk来读取保存. 使用nibabel 由于使用nibabel图像会旋转90度,所以读取保存的时候还得保存映射信息,3维图 ...
- python对文本数据进行采样_Python对wav文件的重采样实例
例如从2channel,4.41k hz 重采样到 1 channel,16k hz def downsampleWav(src, dst, inrate=44100, outrate=16000, ...
- Python学习-批量提取图片名称保存至txt文件
个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ Python提取图片名称保存到txt文件 1. 环境 Windows7+Anaconda3+python 3. ...
- ffmpeg提取mp4文件中的音频,保存为wav文件
如题,一个命令行即可: ffmpeg -i 123.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 -f wav 123.wav 这样就生成了一个wav文 ...
最新文章
- python天天学怎么样-python练习:好好学习,天天向上
- J.U.C系列(五)BlockingQueue的使用
- js使用defineProperty的一些坑
- 嵌入式的坑在哪方面?
- 第 5-5 课:线程安全——synchronized 和 ReentrantLock + 面试题
- WEB安全基础-WEB介绍
- 浏览器输入网址回车发生的事情?--
- 远程桌面连接,凭据问题
- 2022 腾讯云 阿里云返佣政策对比
- c语言万年历完整源代码,C语言万年历的源程序
- ❤️1000道《计算机基础知识》汇总上----(建议收藏)❤️
- 计算股票收盘价的月日均值 matplotlib绘图
- 【RedisTemplate】Set数据类型的常用操作
- 程序员在技术之外,还要掌握一个技能——自我营销能力
- 转自周金涛:一辈子有三次暴富机会,最近的一次在2019年?2018年你要怎么做? (2018-02-21 17:49:17)...
- 赚钱 36 计 - 第三十二计:预收计
- 【纪中受难记】——Day5: 改题好烦
- cordova跳转远程页面调用浏览器问题
- 《互联网时代》 第六集 迁徙
- 在Ubuntu系统上安装Windows 10(真实有效)