【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛:【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)

接下来就是要尝试训练中文提示词。首先要进行语料采集,这是一个比较耗费人力的事情,通常大公司会有有专人进行语料收集,我只好自己亲自做。这里参考了AliOS Things里面提供的一个录音工具,方便快速录音。对这个工具做了一点修改,原来的代码只能在Linux下运行,现在改成在Windows下也能运行。

复制代码
import pyaudio
import wave
import random
import time
import os
from IPython import display
#from pydub import AudioSebment
#from pydub.playback import play
#from playsound import playsound
CHUNK = 2
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
SAMPLEWIDTH = 2
RECORD_SECONDS = 1
FILE_FORMAT = '.wav'
RECODER_NAME = 'lk'
#play stream
def play_wav(name, pyaudio):
    f = wave.open(name,"rb")  
    #open stream  
    play_stream = pyaudio.open(format = p.get_format_from_width(f.getsampwidth()),  
                    channels = f.getnchannels(),  
                    rate = f.getframerate(),  
                    output = True)  
    #read data  
    data = f.readframes(CHUNK)
    while data:  
        play_stream.write(data)
        data = f.readframes(CHUNK)
    #stop stream
    play_stream.stop_stream()  
    play_stream.close()  
    #close PyAudio  
#    pyaudio.terminate()
    f.close()
def save_wav(name, frames):
    wf = wave.open(name, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()  
def record_wav(duration):
    time.sleep(0.2) # 1sec, 0.1sec
    print("开始录音,请说话......")
#    count = 3
#    for i in range(3):
#        time.sleep(0.2) # 1sec, 0.1sec
#        count -= 1
#        print(count)
    frames = []
    stream = p.open(format=FORMAT,
            channels=CHANNELS,
            rate=RATE,
            input=True,
            frames_per_buffer=CHUNK)
    for i in range(0, int(RATE * duration / SAMPLEWIDTH)):
        data = stream.read(CHUNK, exception_on_overflow = False)
        frames.append(data)
    #count = 0
    #while count < int(RECORD_SECONDS * RATE):
    #    data = stream.read(CHUNK)
    #    frames.append(data)
    #     count += CHUNK
    stream.stop_stream()
    stream.close()
    print("录音结束!")
    return frames
# main function
if __name__ == '__main__':
    p = pyaudio.PyAudio()
    input('请按回车键开始录制!\n')
    # record files
    count = 0
    for i in range(250):
        print("开始第%d录制!" % count)
        hash_name = str(hex(abs(hash(RECODER_NAME + str(random.random()))) % 1000000000)).replace('0x','') \
                    + '_nohash_' + str(count) + FILE_FORMAT
        rframes = record_wav(1) # record 1 sec
        save_wav(hash_name, rframes)
        #time.sleep(0.5) # 1sec, 0.1sec
        print("录音回放开始!\n")
        play_wav(hash_name, p)
        print("录音回放结束!\n")
        value = input("按'回车'保存,放弃本条请按'其他'键并回车!\n")
        if (value == ''):
            count += 1
            print("保存录音成功!")
        else:
            os.remove(hash_name)
            print("已删除本条录音!")
            input('请按回车键开始录制!\n')
    #display.display(display.Audio(hash_name, rate=16000))
    #wav = AudioSegment.from_wav(hash_name)
    #play(wav)
    p.terminate()
相关推荐
逼子格1 小时前
振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
笔记·嵌入式硬件·硬件工程·硬件工程师·硬件工程师真题·multisim电路仿真·震荡电流
云卓SKYDROID2 小时前
无人机三叶螺旋桨概述
单片机·无人机·遥控器·云卓科技·精准降落·螺旋桨
Do vis8242 小时前
STM32第十九天 ESP8266-01S和电脑实现串口通信(2)
stm32·单片机·嵌入式硬件
LuDvei2 小时前
CH9121T电路及配置详解
服务器·嵌入式硬件·物联网·网络协议·tcp/ip·网络安全·信号处理
许白掰3 小时前
Linux入门篇学习——Linux 编写第一个自己的命令
linux·运维·数据库·嵌入式硬件·学习
liuluyang5303 小时前
linux 4.14 kernel屏蔽arm arch timer的方法
嵌入式硬件·arm·arch_timer·coretime
书山有路勤为径~4 小时前
3 STM32单片机-delay延时驱动
stm32·单片机
吃货界的硬件攻城狮5 小时前
【显示模块】嵌入式显示与触摸屏技术理论
stm32·单片机·嵌入式硬件·学习
promising-w14 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
leo030814 小时前
图像硬解码和软解码
单片机·嵌入式硬件