You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradio应用中实现一键启停音频录制功能?

解决Gradio音频录制启停按钮的实现问题

直接上可运行的完整代码,核心用状态变量跟踪录制状态,结合按钮点击事件切换状态并控制音频录制:

import gradio as gr

def toggle_recording(is_recording, audio_component):
    if not is_recording:
        # 开始录音:调用音频组件内置的启动方法
        audio_component.start_recording()
        return True, "Stop"
    else:
        # 停止录音:调用音频组件内置的停止方法
        audio_component.stop_recording()
        return False, "Speak"

with gr.Blocks() as demo:
    # 状态变量,记录当前是否在录音,初始为未录制状态
    recording_state = gr.State(False)
    # 音频组件,设置为麦克风输入模式,隐藏默认录制控件
    audio = gr.Audio(source="microphone", type="filepath", visible=False)
    # 自定义控制按钮,初始文本为"Speak"
    record_btn = gr.Button("Speak")
    
    # 绑定按钮点击事件:同步更新状态、按钮文本,触发录音启停
    record_btn.click(
        fn=toggle_recording,
        inputs=[recording_state, audio],
        outputs=[recording_state, record_btn]
    )
    
    # 可选:添加音频预览组件,展示录制后的音频文件
    gr.Audio(label="录制完成的音频")

demo.launch()

关键实现细节:

  • 状态变量recording_state:作为开关标记,是实现按钮文本切换和逻辑判断的核心
  • 隐藏默认录音控件:通过visible=False隐藏Gradio自带的音频录制栏,完全用自定义按钮控制流程
  • 调用内置录制方法:start_recording()和stop_recording()是Gradio Audio组件的原生方法,能直接触发系统麦克风的启停操作
  • 事件闭环绑定:点击按钮时传入当前状态和音频组件,返回更新后的状态和按钮文本,完成完整的状态切换逻辑

你之前代码失效的常见原因:

  • 未使用状态变量跟踪录制状态,导致点击逻辑混乱,无法区分启停操作
  • 仅修改了按钮文本,未调用Audio组件的录制方法,没有触发实际的麦克风录音
  • 音频组件的source参数未设置为"microphone",无法获取系统麦克风权限

内容的提问来源于stack exchange,提问作者Ishan Rattan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:04:52