ASR-语音预处理(一):音频读取

2024-08-24 17:38

本文主要是介绍ASR-语音预处理(一):音频读取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一.音频读取
  • 二.代码:
  • 三.程序输出:

一.音频读取

这是语音识别系列的第一篇博文,主要介绍音频如何读取以及如何转成矩阵形式。
输入:wav文件
例:A2_1.wav
输出:输入的wav文件所对应的数据矩阵wave_data和帧率framerate。
例:[[1507 1374 1218 … -78 -127 -43]] ,16000

二.代码:

#coding=utf-8import os
import wave
import numpy as np
import matplotlib.pyplot as plt
import math 
import time
from python_speech_features import mfcc
from python_speech_features import delta
from python_speech_features import logfbank
from scipy.fftpack import fftdef read_wav_data(filename):""":param filename:输入音频的绝对路径(路径+文件名)例:D:\\GitHub\\wav\\dae\\train\\A2_1.wav:return:wave_data,framerate:输出音频矩阵,帧率。例:A2_1 [[1507 1374 1218 ...  -78 -127  -43]]读取wav文件,返回声音信号的时域谱矩阵和播放时间"""wav = wave.open(filename,"rb") #打开wav格式的声音文件filenameaudioname = filename.split('\\')[-1] #音频名num_frame = wav.getnframes() #获取帧数print("{}帧数为:{}".format(audioname,num_frame))num_channel = wav.getnchannels() #获取声道数print("{}声道数为:{}".format(audioname,num_channel))framerate = wav.getframerate() # 获取帧率print("{}帧率为:{}".format(audioname,framerate))num_sample_width = wav.getsampwidth() #获取每一帧的比特宽度print("{}比特宽度为:{}".format(audioname,num_sample_width))str_data = wav.readframes(num_frame) # 读取全部的帧(二进制字符串)wav.close() # 关闭流wave_data = np.fromstring(str_data,dtype=np.short) # 将声音文件数据从字符串格式转换为数组矩阵形式print("{} shape: {}".format("wave_data",wave_data.shape))print("{} type: {}".format("wave_data",wave_data.dtype))print("{}: {}".format("wave_data",wave_data))wave_data.shape = -1, num_channel #按照声道数将数组整形,单声道是一列,双声道是两列矩阵print("{} shape(整形后): {}".format("wave_data",wave_data.shape))print("{}(整形后): {}".format("wave_data",wave_data))wave_data = wave_data.T # 将wave_data矩阵转置print("{} shape(转置后):{}".format("wave_data",wave_data.shape))print("{}(转置后):{}".format("wave_data",wave_data))return wave_data, framerateif(__name__=='__main__'):wave_data, fs = read_wav_data("D:\\GitHub\\wav\\dae\\train\\A2_1.wav")

三.程序输出:

A2_1.wav帧数为:163000
A2_1.wav声道数为:1
A2_1.wav帧率为:16000
A2_1.wav比特宽度为:2
wave_data shape: (163000,)
wave_data type: int16
wave_data: [1507 1374 1218 … -78 -127 -43]
wave_data shape(整形后): (163000, 1)
wave_data(整形后): [[1507]
[1374]
[1218]

[ -78]
[-127]
[ -43]]
wave_data shape(转置后):(1, 163000)
wave_data(转置后):[[1507 1374 1218 … -78 -127 -43]]

这篇关于ASR-语音预处理(一):音频读取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103153

相关文章

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python读取TIF文件的两种方法实现

《Python读取TIF文件的两种方法实现》本文主要介绍了Python读取TIF文件的两种方法实现,包括使用tifffile库和Pillow库逐帧读取TIFF文件,具有一定的参考价值,感兴趣的可以了解... 目录方法 1:使用 tifffile 逐帧读取安装 tifffile:逐帧读取代码:方法 2:使用

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName