【正点原子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()
相关推荐
胡Jason31 分钟前
GPIO_Analog与ADC什么区别
单片机·嵌入式硬件
Fang_pi_dai_zhi32 分钟前
经典的多位gpio初始化操作
单片机·嵌入式硬件
技术流浪者38 分钟前
PCB设计实践(三十五)STM32与ESP32的核心应用场景及选型
嵌入式硬件·硬件工程·pcb设计
Jack153027682792 小时前
GC1808:高性能音频ADC的卓越之选
单片机·嵌入式硬件·音视频·医疗器械·电动工具·家电产品
NEWEVA__zzera223 小时前
在写外部FLASH的应用时发现一些问题,在这里分享一下我的想法
c语言·经验分享·单片机
hlpinghcg4 小时前
CanFestival移植到STM32G4
stm32·canopen
passer__jw7674 小时前
【51单片机】1. 基础点灯大师
单片机·51单片机
WIZnet 中国社区官方博客4 小时前
第十六章 I2C
嵌入式硬件·wiznet·高性能以太网单片机·w55mh32·单片机外设·i2c通讯·i2c主从模式
꧁坚持很酷꧂4 小时前
FreeRTOS学习01_移植FreeRTOS到STM32(图文详解)
stm32·嵌入式硬件·学习
深圳米客方德半导体有限公司5 小时前
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
嵌入式硬件·汽车·nxp·sd nand·t-box