精华内容
下载资源
问答
  • python录音

    千次阅读 2019-05-23 18:49:01
    Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不去了解其他的功能,只了解一下...

     PyAudio 实现录音 自动化交互实现问答

    Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库

    关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不去了解其他的功能,只了解一下它如何实现录音的

    首先要先 pip 一个 PyAudio

    pip install pyaudio

    一.PyAudio 实现麦克风录音

    然后建立一个py文件,复制如下代码

    复制代码

    import pyaudio
    import wave
    
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 16000
    RECORD_SECONDS = 2
    WAVE_OUTPUT_FILENAME = "Oldboy.wav"
    
    p = pyaudio.PyAudio()
    
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    
    print("开始录音,请说话......")
    
    frames = []
    
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)
    
    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()

    复制代码

    尝试一下,在目录中出现了一个 Oldboy.wav 文件 , 听一听,还是很清晰的嘛

    接下来,我们将这段录音代码,写在一个函数里面,如果要录音的话就调用

    建立一个文件 pyrec.py 并将录音代码和函数写在内

    复制代码

    # pyrec.py 文件内容
    import pyaudio
    import wave
    
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 16000
    RECORD_SECONDS = 2
    
    def rec(file_name):
        p = pyaudio.PyAudio()
    
        stream = p.open(format=FORMAT,
                        channels=CHANNELS,
                        rate=RATE,
                        input=True,
                        frames_per_buffer=CHUNK)
    
        print("开始录音,请说话......")
    
        frames = []
    
        for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
            data = stream.read(CHUNK)
            frames.append(data)
    
        print("录音结束,请闭嘴!")
    
        stream.stop_stream()
        stream.close()
        p.terminate()
    
        wf = wave.open(file_name, 'wb')
        wf.setnchannels(CHANNELS)
        wf.setsampwidth(p.get_sample_size(FORMAT))
        wf.setframerate(RATE)
        wf.writeframes(b''.join(frames))
        wf.close()

    复制代码

    rec 函数就是我们调用的录音函数,并且给他一个文件名,他就会自动将声音写入到文件中了

     

    二.实现音频格式自动转换 并 调用语音识别

    录音的问题解决了,赶快和百度语音识别接在一起使用一下:

    不管你的录音有多么多么清晰,你发现百度给你返回的永远是:

    {'err_msg': 'speech quality error.', 'err_no': 3301, 'sn': '6397933501529645284'} # 音质不清晰

    其实不是没听清,而是百度支持的音频格式PCM搞的鬼

    所以,我们要将录制的wav音频文件转换为pcm文件

    写一个文件 wav2pcm.py 这个文件里面的函数是专门为我们转换wav文件的

    使用 os 模块中的 os.system()方法 这个方法是执行系统命令用的, 在windows系统中的命令就是 cmd 里面写的东西,dir , cd 这类的命令

    复制代码

    # wav2pcm.py 文件内容
    import os
    
    def wav_to_pcm(wav_file):
        # 假设 wav_file = "音频文件.wav"
        # wav_file.split(".") 得到["音频文件","wav"] 拿出第一个结果"音频文件"  与 ".pcm" 拼接 等到结果 "音频文件.pcm"
        pcm_file = "%s.pcm" %(wav_file.split(".")[0])
    
        # 就是此前我们在cmd窗口中输入命令,这里面就是在让Python帮我们在cmd中执行命令
        os.system("ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s"%(wav_file,pcm_file))
    
        return pcm_file

    复制代码

    这样我们就有了把wav转为pcm的函数了 , 再重新构建一次咱们的代码

    这次的返回结果还挺让人满意的嘛

    {'corpus_no': '6569869134617218414', 'err_msg': 'success.', 'err_no': 0, 'result': ['老男孩教育'], 'sn': '8116162981529666859'}

    拿到语音识别的字符串了,接下来用这段字符串 语音合成, 学习咱们说出来的话

     

    三.语音合成 与 FFmpeg 播放mp3 文件

    拿到字符串了,直接调用synthesis方法去合成吧

    这段代码衔接上一段代码,成功获得了 synth.mp3 音频文件,并且确定了实在学习我们说的话

    接下来就是让我们的程序自动将 synth.mp3 音频文件播放了 其实PyAudio 有播放的功能,但是操作有点复杂

    所以我们还是选择用简单的方式解决复杂的问题,就是这么简单粗暴,是否还记得FFmpeg 呢?

    FFmpeg 这个系统工具中,有一个 ffplay 的工具用来打开并播放音频文件的,使用方法大概是: ffplay 音频文件.mp3

    建立一个playmp3.py文件, 写一个 play_mp3 的函数用来播放已经合成的语音

    # playmp3.py 文件内容
    import os
    
    def play_mp3(file_name):
        os.system("ffplay  %s"%(file_name))

    回到主文件,调用playmp3.py文件中的 play_mp3 函数

    执行代码,当你看到 : 开始录音,请说话......

    请大声的说出: 学IT 找老男孩教育

    然后你就会听到,一个娇滴滴声音重复你说的话

     

    四.简单问答

    首先我们要把代码重新梳理一下:

    把语音合成 语音识别部分的代码独立成函数放到baidu_ai.py文件中

    复制代码

    # baidu_ai.py 文件内容
    from aip import AipSpeech
    
    # 这里的三个参数,对应在百度语音创建的应用中的三个参数
    APP_ID = "xxxxx"
    API_KEY = "xxxxxxx"
    SECRET_KEY = "xxxxxxxx"
    
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    
    
    def audio_to_text(pcm_file):
        # 读取文件 , 终于得到了PCM文件
        with open(pcm_file, 'rb') as fp:
            file_context = fp.read()
    
        # 识别本地文件
        res = client.asr(file_context, 'pcm', 16000, {
            'dev_pid': 1536,
        })
    
        # 从字典里面获取"result"的value 列表中第1个元素,就是识别出来的字符串"老男孩教育"
        res_str = res.get("result")[0]
    
        return res_str
    
    
    def text_to_audio(res_str):
        synth_file = "synth.mp3"
        synth_context = client.synthesis(res_str, "zh", 1, {
            "vol": 5,
            "spd": 4,
            "pit": 9,
            "per": 4
        })
    
        with open(synth_file, "wb") as f:
            f.write(synth_context)
    
        return synth_file

    复制代码

    然后把我们的主文件进行一下修改

    复制代码

    import pyrec  # 录音函数文件
    import wav2pcm  # wav转换pcm 函数文件
    import baidu_ai  # 语音合成函数,语音识别函数 文件
    import playmp3  # 播放mp3 函数 文件
    
    pyrec.rec("1.wav")  # 录音并生成wav文件,使用方式传入文件名
    
    pcm_file = wav2pcm.wav_to_pcm("1.wav")  # 将wav文件 转换成pcm文件 返回 pcm的文件名
    
    res_str = baidu_ai.audio_to_text(pcm_file) # 将转换后的pcm音频文件识别成 文字 res_str
    
    synth_file = baidu_ai.text_to_audio(res_str) # 将res_str 字符串 合成语音 返回文件名 synth_file
    
    playmp3.play_mp3(synth_file) # 播放 synth_file

    复制代码

     

    然后就是大展宏图的时候了,展开你们的想象力:

    res_str 是字符串,如果字符串等于"你叫什么名字"的时候,我们就要给他一个回答:我的名字叫老男孩教育

    新建一个FAQ.py的文件然后建立一个函数faq:

    # FAQ.py 文件内容
    def faq(Q):
        if Q == "你叫什么名字": # 问题
            return "我的名字是老男孩教育" # 答案
    
      return "我不知道你在说什么" #问题没有答案时返

    在主文件中导入这个函数,并将语音识别后的字符串传入函数中

    现在来尝试一下:"你叫什么名字","你今年几岁了"

    成功了,现在你可以对 FAQ.py 这个文件进行更多的问题匹配了

    还是那句话,别玩儿坏了

    思考题:

    1.如何实现一直问答不用问一次停一次?

    2.问题那么多,是不是要写这么多问题呢?

    3.如果我问你是谁,是不是要重复也一次 我的名字叫老男孩教育 的答案呢?

     

    转:https://www.cnblogs.com/DragonFire/p/9212935.html

    展开全文
  • /usr/bin/env python import requests import json import base64 import pyaudio import wave import os import psutil #首先配置必要的信息 def bat(voice_path): baidu_server = '...
  • 本文实例为大家分享了python实现录音功能的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import pyaudio import time import threading import wave class Recorder(): def __init__(self, chunk=...
  • 今天小编就为大家分享一篇python 通过麦克风录音 生成wav文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python代码实现录音

    2018-01-17 20:09:51
    python代码实现录音,可以生成标准格式的wav文件,方便使用,可以进一步实现调用该百度API实现转录
  • python录音并保存为wav

    千次阅读 2019-06-19 16:45:52
    # aa = str(input("是否开始录音? (是/否)")) # if aa == str("是") : CHUNK = 256 FORMAT = pyaudio.paInt16 CHANNELS = 1 # 声道数 RATE = 16000 # 采样率 RECORD_SECONDS =30 WAVE_OUTPUT_FILENAME = ...
    import pyaudio
    import wave
    import os
    import time
    
    
    input_filename = "name.wav"               # 麦克风采集的语音输入
    
    input_filepath = 'D:\pycharmwork\project\\01_GMM_UBM\data\\test\\'              # 输入文件的path
    in_path = input_filepath + input_filename
    
    def get_audio(filepath):
        # aa = str(input("是否开始录音?   (是/否)"))
        # if aa == str("是") :
            CHUNK = 256
            FORMAT = pyaudio.paInt16
            CHANNELS = 1                # 声道数
            RATE = 16000               # 采样率
            RECORD_SECONDS =30
            WAVE_OUTPUT_FILENAME = filepath
            p = pyaudio.PyAudio()
    
            stream = p.open(format=FORMAT,
                            channels=CHANNELS,
                            rate=RATE,
                            input=True,
                            frames_per_buffer=CHUNK)
            print("*"*10, "开始录音:请在20秒内输入语音")
            frames = []
            for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
                data = stream.read(CHUNK)
                frames.append(data)
            print("*"*10, "录音结束\n")
    
            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()
    
    
    get_audio(in_path )
    展开全文
  • 录音5秒并保存在本地,读取系统时间以当前时间命名。循环执行
  • 树莓派学习手记——使用Python录音

    千次阅读 2018-09-18 19:32:36
    所以今天我们总结一下用在树莓派上使用Python录音的过程。 准备硬件 树莓派上自带的3.5mm接口只能作为语音输出口,不能接麦克风。所以我们需要另外购买USB声卡,某宝上5元左右就能买到,当然你还需要一个麦克风。总...

    CSDN广告邮件太多了,邮箱已经屏蔽了CSDN,留言请转SegmentFault:https://segmentfault.com/a/1190000013854294

    有的时候我们想让树莓派能够录音,以实现语音控制等功能。所以今天我们总结一下用在树莓派上使用Python录音的过程。

    准备硬件

    树莓派上自带的3.5mm接口只能作为语音输出口,不能接麦克风。所以我们需要另外购买USB声卡,某宝上5元左右就能买到,当然你还需要一个麦克风。总费用应该在20元以内。

    检查硬件是否正常

    使用arecord -l可以列出所有录音设备,一般输出如下:

    arecord -l
    

    **** List of CAPTURE Hardware Devices ****
    card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
    Subdevices: 1/1
    Subdevice #0: subdevice #0

    同样地,aplay -l可以列出所有播放设备,输出中也能找到形如 Device [USB Audio Device] 的设备。

    我们可以直接在命令行执行Linux自带的录音/播放命令,测试硬件是否正常:

    arecord -D hw:1,0 -t wav -c 1 -r 44100 -f S16_LE test.wav
    aplay -D hw:0,0 test.wav
    

    arecord 是录音命令,其中 hw:1,0 表示 card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]card 1 , device 0 ,如果你的USB声卡录音设备不是 card 1 , device 0 ,还请进行相应修改。另外,录音过程需要手动按 ctrl + c 结束。

    aplay 是播放命令,其中 hw:0,0 表示树莓派板载音频接口,如果你把耳机插在USB声卡接口,还请进行相应修改,如改成 hw:1,0

    *****如果你发现录制的音频内没有声音,只有细微的杂音,但 arecord -laplay -l 列出的设备中确实有USB声卡。那么你可以尝试着把麦克风接口拔出来一些,只插进去2/3,或许能够解决你的问题。笔者不是很明白其中的缘由,如果你有什么想法恳请留言告知。

    安装pyaudio

    在Python中执行录音命令需要pyaudio模块,直接用pip命令安装:

    pip install pyaudio
    

    如果你使用pip命令下载速度很慢,或许修改pip源可以帮到你。

    *****如果你使用了virtualenv,一般会发现pyaudio安装失败。这种情况下你需要安装APT中的PortAudio开发头文件,然后安装PyAudio:

    sudo apt-get install portaudio19-dev
    pip install pyaudio
    

    使用Python录音

    该例程修改自官方主页例程PyAudio

    import pyaudio
    import wave
    import os
    import sys
    
    CHUNK = 512
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 44100
    RECORD_SECONDS = 5
    WAVE_OUTPUT_FILENAME = "output.wav"
    
    p = pyaudio.PyAudio()
    
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    
    print("recording...")
    
    frames = []
    
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)
    
    print("done")
    
    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()
    

    执行后会录制一段5秒的音频,输出为同目录下的output.wav文件。

    python3 rec.py
    

    * 隐藏错误消息

    一般情况下,在树莓派上执行上述Python代码后,你会看到非常多的ALSA报错和JACK报错:

    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835.pcm.front.0:CARD=0’

    connect(2) call to /tmp/jack-1000/default/jack_0 failed (err=No such file or directory)
    attempt to connect to server failed

    但你会发现其实能够正常地录音。如果你不想看到这些错误消息,可以在代码中加入下述命令隐藏错误:

    os.close(sys.stderr.fileno())
    

    小结

    使用Python录音很简单,你还可以在GPIO口上接入一个按钮,修改例程,实现按下按钮自动开始录音的功能。下一步的目标是把Python录音和Cloud Speech API语音识别结合起来。

    感谢你阅读文章!

    展开全文
  • python录音(转载)

    千次阅读 2018-11-15 11:11:10
    aa = str(input("是否开始录音? (是/否)")) #输出提示文本,input接收一个值,转为str,赋值给aa if aa == str("是") : CHUNK = 256 #定义数据流块 FORMAT = pyaudio.paInt16 #量化位数(音量级划分) ...
    import pyaudio
    import wave
    
    input_filename = "1.wav"                          # 麦克风采集的语音输入
    input_filepath = "e:/Desktop/ceshi/"              # 输入文件的path
    in_path = input_filepath + input_filename         #通俗解释就是wav文件路径
    
    def get_audio(filepath):
        aa = str(input("是否开始录音?   (是/否)"))      #输出提示文本,input接收一个值,转为str,赋值给aa
        if aa == str("是") :
            CHUNK = 256                 #定义数据流块
            FORMAT = pyaudio.paInt16    #量化位数(音量级划分)
            CHANNELS = 1               # 声道数;声道数:可以是单声道或者是双声道
            RATE = 8000                # 采样率;采样率:一秒内对声音信号的采集次数,常用的有8kHz, 16kHz, 32kHz, 48kHz, 11.025kHz, 22.05kHz, 44.1kHz
            RECORD_SECONDS = 5          #录音秒数
            WAVE_OUTPUT_FILENAME = filepath     #wav文件路径
            p = pyaudio.PyAudio()               #实例化
    
            stream = p.open(format=FORMAT,
                            channels=CHANNELS,
                            rate=RATE,
                            input=True,
                            frames_per_buffer=CHUNK)
            print("*"*10, "开始录音:请在5秒内输入语音")
            frames = []                                                 #定义一个列表
            for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):      #循环,采样率11025 / 256 * 5
                data = stream.read(CHUNK)                               #读取chunk个字节 保存到data中
                frames.append(data)                                     #向列表frames中添加数据data
            print(frames)
            print("*" * 10, "录音结束\n")
    
            stream.stop_stream()
            stream.close()          #关闭
            p.terminate()           #终结
    
            wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')                  #打开wav文件创建一个音频对象wf,开始写WAV文件
            wf.setnchannels(CHANNELS)                                   #配置声道数
            wf.setsampwidth(p.get_sample_size(FORMAT))                  #配置量化位数
            wf.setframerate(RATE)                                       #配置采样率
            wf.writeframes(b''.join(frames))                            #转换为二进制数据写入文件
            wf.close()              #关闭
        elif aa == str("否"):
            exit()
        else:
            print("无效输入,请重新选择")
            get_audio(in_path)
    
    get_audio(in_path)
    展开全文
  • python实现录音小程序

    2021-01-03 07:23:28
    本文为大家分享了python实现录音小程序的具体代码,供大家参考,具体内容如下 学习目标:掌握python的pyaudio扩展包和Wave模块录制语音的方法 Wav音频:声道数,采样频率,量化位数 python Wav包是自带的,pyaudio...
  • 本文实例为大家分享了python实现网页录音效果的具体代码,供大家参考,具体内容如下 服务器:tornado 语言:python,JS,html 效果:(将录好的音放在指定位置) 实现逻辑: 部分实现代码: web: <button type=...
  • 使用Python编程语言实现的电脑录音、保存、波形显示、以及简单的语音识别功能。并配有注释。
  • 树莓派使用python录音,停止说话时结束 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法...
  • 主要给大家介绍了关于python播放音频和录音的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • /usr/bin/env python import requests import json import base64 import pyaudio import wave import os import psutil #首先配置必要的信息 def bat(voice_path): baidu_server = '...
  • 当我们用录音机录网上的音乐时,有一个场景让人困扰: 比如听以下页面中的一首歌,要在页面上点击一下播放按钮 如果想把这一首歌录下来,当点击了播放按钮再去点录音机的录制按钮时,中间有一个时间差。可能一不...
  • 录音转文字python实现

    2021-03-05 15:15:02
    我就去网上搜了一下,发现网上大多数是超出一定时长就收费的,而我朋友的音频比较多,加起来有几个小时,于是我想着能不能调用接口,用python实现这个功能。 上图是某在线平台的音频转文字功能,可以看到超出时长...
  • 文章目录1、安装PyAudio 1、安装PyAudio 1、pip install PyAudio 直接安装失败,不知道为啥子。 2、下载轮子安装,成功,耶!...Python人工智能之路 - 第三篇 : PyAudio 实现录音 自动化交互实现问答 ...
  • 一个python离线的TTS语音合成,简单实现和使用!首先将文本与语音对照的方法实现了转换,然后再播放对应文字对应的拼音所对应的音频来播放语音 。缺点是没有进行音频合成。
  • 语言:python,JS,html 效果:(将录好的音放在指定位置) 实现逻辑: 部分实现代码: web: <button type="submit" class="btn btn-primary mb-2 record_start">开始录音</button> <button...
  • 现在网上用python编写的录音机小软件很多,几乎都不支持内录。 这个小程序的主要功能特点是 1 , 录制电脑上正在播放的声音,即从声卡录制,而不是从麦克风录制,这样就可以将电脑上正在播放的音乐保存下来 2, ...
  • python实现录音功能

    2011-11-10 15:06:27
    python 实现录音的代码 作者:John Popplewell 源码版权归作者所有
  • Python调用电脑麦克风录音

    千次阅读 2020-10-07 16:05:12
    import wave ...录音时间 RECORD_SECONDS = 5 要写入的文件名 WAVE_OUTPUT_FILENAME = “output.wav” 创建PyAudio对象 p = pyaudio.PyAudio() 打开数据流 stream = p.open(format=FORMAT, chann
  • Python使用Pyaudio来实现录音功能

    千次阅读 2020-05-23 19:05:14
    录音相关代码 print("ON") stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)#创建录音文件 frames = [] for i in range(0, int(RATE / CHUNK * ...
  • python 实现录音pcm格式功能

    千次阅读 2020-06-04 11:12:34
    一、目的 在实现键盘控制程序开始之后,实现自动录音生成pcm格式function。 要考虑的问题:实时录音录音结束的条件...Python3从零开始搭建一个语音对话机器人 https://blog.csdn.net/NIeson2012/article/details/
  • 1前言今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能。在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用现成的就好。关于这个想法,其实 github 上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,705
精华内容 2,682
关键字:

python录音

python 订阅