跳到主要内容

录音机

录音时屏幕同步显示倒计时

误区提醒:这个代码不应该用线程来做。

我们的录音程序的原理是:不断地从麦克风中读取音频帧,然后将这些音频帧存入一个队列中。当队列中的音频帧数量达到一定值时,我们将队列中的第一帧音频数据写入文件。这样,我们就可以不断地录制音频,直到达到指定的录音时间。我们可希望在这个过程之中,在屏幕上显示剩余的录音时间。因此可以使用LCD显示屏来实现这个功能。

该功能暂时不能使用图形化来完成

import time
import player
import audio
from Maix import I2S
import gc
import lcd

# 定义与录音相关的常量
RECORDING_TIME = 10 # 录音时间(秒)
SAMPLE_RATE = 16000 # 音频采样率(Hz)
FRAME_SIZE = 2048 # 音频帧大小
AUDIO_FILE_PATH = "/sd/Cool_AI.wav" # 录音文件路径
LCD_FREQ = 15000000 # LCD刷新频率
LCD_COLOR = 0 # LCD背景色

# 初始化 LCD
lcd.init(freq=LCD_FREQ, color=LCD_COLOR)

# 初始化麦克风
mic = player.mic_init()

# 创建一个音频文件,准备接收录音数据
recorder = audio.Audio(path=AUDIO_FILE_PATH, is_create=True, samplerate=SAMPLE_RATE)

# 计算所需的帧数
frame_count = RECORDING_TIME * SAMPLE_RATE // FRAME_SIZE

# 创建一个队列存储音频帧
queue = []

# 循环录音并将音频帧存入队列
for i in range(frame_count):
frame = mic.record(FRAME_SIZE * 2)
if len(queue) > 0:
# 将队列中的第一帧音频数据写入文件
recorder.record(queue.pop(0))
mic.wait_record() # 等待录音完成
queue.append(frame) # 将新录制的音频帧添加到队列

# 在 LCD 上显示剩余的录音时间
lcd.clear(LCD_COLOR)
remaining_time = round((frame_count - i - 1) / 7.7, 1)
lcd.draw_string(0,0,"record:{}s".format(remaining_time),65535,0)

# 结束录音
recorder.finish()
recorder.__deinit__()

# 清理资源
del recorder
del mic
gc.collect()

# 播放刚才录制的音频
player.audio_play(AUDIO_FILE_PATH, 100)