首页 > 编程知识 正文

asr语音转文字,asrt语音识别

时间:2023-05-05 10:45:01 阅读:232421 作者:2149

文章目录 一.音频读取二.代码:三.程序输出:

一.音频读取

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

二.代码: #coding=utf-8import osimport waveimport numpy as npimport matplotlib.pyplot as pltimport math import timefrom python_speech_features import mfccfrom python_speech_features import deltafrom python_speech_features import logfbankfrom 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格式的声音文件filename audioname = 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]]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。