使用pyaudio 录音,停止说话时自动结束

简介: 该博客文章介绍了如何使用Python的pyaudio库进行录音,并通过检测声音强度的变化自动结束录音过程。

使用pyaudio 录音,停止说话时自动结束

一、程序逻辑

主要是根据麦克检测到声音的大小来判断是否说话完毕

主要逻辑:检测到声音小于某个值后,再停顿一点时间,再次检测,若声音依旧小于某个值,再次检测,若依然小于某个值,则判断为说话结束;如果其中声音再次大于某个值,则重新检测。

二、全部程序

import pyaudio,wave
import numpy as np
def listen():
    temp = 20
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 16000
    RECORD_SECONDS = 2
    WAVE_OUTPUT_FILENAME = 'test.wav'

    mindb=2000    #最小声音,大于则开始录音,否则结束
    delayTime=1.3  #小声1.3秒后自动终止
    p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    #snowboydecoder.play_audio_file()
    print("开始!计时")

    frames = []
    flag = False            # 开始录音节点
    stat = True                #判断是否继续录音
    stat2 = False            #判断声音小了

    tempnum = 0                #tempnum、tempnum2、tempnum3为时间
    tempnum2 = 0

    while stat:
        data = stream.read(CHUNK,exception_on_overflow = False)
        frames.append(data)
        audio_data = np.frombuffer(data, dtype=np.short)
        temp = np.max(audio_data)
        if temp > mindb and flag==False:
            flag =True
            print("开始录音")
            tempnum2=tempnum

        if flag:

            if(temp < mindb and stat2==False):
                stat2 = True
                tempnum2 = tempnum
                print("声音小,且之前是是大的或刚开始,记录当前点")
            if(temp > mindb):
                stat2 =False
                tempnum2 = tempnum
                #刷新

            if(tempnum > tempnum2 + delayTime*15 and stat2==True):
                print("间隔%.2lfs后开始检测是否还是小声"%delayTime)
                if(stat2 and temp < mindb):
                    stat = False
                    #还是小声,则stat=True
                    print("小声!")
                else:
                    stat2 = False
                    print("大声!")

        print(str(temp)  +  "      " +  str(tempnum))
        tempnum = tempnum + 1
        if tempnum > 150:                #超时直接退出
            stat = False
    print("录音结束")

    stream.stop_stream()
    stream.close()
    p.terminate()
    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()

listen()
相关文章
|
8月前
|
数据采集 人工智能 供应链
什么是数据治理?它是企业数据中台成功应用的基石与核心保障
数据治理是数据中台的“生命线”,确保数据可信、安全与高效。二者为共生关系:治理赋能中台,中台反哺治理。通过质量管控、安全合规与效率提升,支撑企业数据资产化。主流工具如瓴羊Dataphin、字节Dataleap等,覆盖全链路治理,适配多行业场景,助力企业构建长期数据竞争力。
|
Linux iOS开发 MacOS
使用PyAudio进行音频处理的全面指南
PyAudio是基于PortAudio的Python绑定,支持跨平台音频设备访问,适用于音频录制、播放和实时处理。本文介绍PyAudio的安装、基础使用(如初始化、查询设备、打开音频流)、播放与录制音频、实时音频处理示例,以及优化建议。通过代码示例,帮助读者掌握PyAudio的应用,实现高效音频处理。
2162 0
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
919 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
人工智能 JSON 自然语言处理
智能化AI工具-语言翻译与本地化
在全球化发展的背景下,语言翻译与本地化需求日益增长。无论是跨境电商、国际合作,还是本地化应用开发,都需要高效、准确的翻译解决方案。阿里云通义千问作为一款强大的大语言模型,不仅具备出色的自然语言理解能力,还能够在多语言翻译和本地化场景中发挥重要作用。本博客将详细介绍如何基于阿里云通义千问开发语言翻译与本地化工具,包括产品介绍、程序代码以及阿里云相关产品的具体使用流程。
1053 10
|
机器学习/深度学习 自然语言处理 人机交互
音频基座大模型FunAudioLLM体验评测
一文带你详细了解音频基座大模型FunAudioLLM
4122 6
音频剪裁大师:使用 Python 和 ffmpeg 分割音频的完整指南
使用 Python 和 ffmpeg 进行音频文件分割。通过 `subprocess` 模块调用 ffmpeg 命令,定义 `split_audio` 函数,输入参数包括音频文件、起始时间、持续时间和输出文件名。函数构建命令行指令进行分割,然后执行。运行脚本,即可按指定时间从音频中提取片段。简单易用,适用于多种音频处理场景。
|
机器学习/深度学习 人工智能 达摩院
52个AIGC视频生成算法模型介绍(上)
52个AIGC视频生成算法模型介绍(上)
2440 3