【正点原子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()
相关推荐
LCG米2 分钟前
基于LoRa的远距离低功耗农业传感器网络设计与实现(SX1278+STM32L071)
网络·stm32·php
xiaobuding_QAQ17 分钟前
51汇编仿真proteus8.15学习篇一(附源码)
汇编·单片机·学习·proteus
Coder_Boy_30 分钟前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音控制-Java部分核心逻辑
java·开发语言·人工智能·单片机
richxu2025100139 分钟前
嵌入式学习之路-->stm32篇-->(0)学习路线
stm32·嵌入式硬件·学习
xiaobuding_QAQ43 分钟前
51汇编仿真proteus8.15学习篇二(附源码)
开发语言·汇编·单片机·学习·proteus
长安第一美人9 小时前
C 语言可变参数(...)实战:从 logger_print 到通用日志函数
c语言·开发语言·嵌入式硬件·日志·工业应用开发
Coding Peasant12 小时前
GD32E230 I2C从机功能深度解析与实现指南
c语言·stm32·单片机·mcu·arm
天庭鸡腿哥14 小时前
国外软件,安装即时专业版!
stm32·microsoft·macos·everything
214实验室15 小时前
STM32串口打印使用printf乱码问题
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi15 小时前
基于单片机的电厂烟道粉尘浓度检测系统(论文+源码)
单片机·嵌入式硬件·毕业设计