python pyaudio音频录制的实现

  1. 安装pyaudio库
    在Python中使用Pyaudio库来录制音频,首先需要安装该库,可以使用pip工具来安装,命令如下所示:
pip install pyaudio
  1. 创建Pyaudio对象
    在使用Pyaudio进行录音之前,需要创建PyAudio对象,并指定参数。代码如下所示:
import pyaudio

# 创建PyAudio对象
p = pyaudio.PyAudio()

# 设置参数
CHUNK = 1024  # 缓冲区大小
FORMAT = pyaudio.paInt16  # 音频格式
CHANNELS = 1  # 声道数
RATE = 44100  # 采样率

# 打开流
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)
  1. 录音
    在流(stream)打开的情况下,我们可以通过调用read()方法来读取从输入设备得到的原始音频数据并存储,代码如下所示:
# 录音时间
RECORD_SECONDS = 5

# 存储录音数据
frames = []

# 录音
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

# 关闭流
stream.stop_stream()
stream.close()
p.terminate()
  1. 存储音频数据
    通过上面的代码,我们可以得到录音的音频数据,接下来,我们可以将这些音频数据存储到本地文件中,代码如下所示:
import wave
import os

# 存储路径
output_path = 'output/'

# 确保输出路径存在
if not os.path.exists(output_path):
    os.makedirs(output_path)

# 设置输出文件名
output_filename = 'output.wav'

# 打开输出文件
wf = wave.open(output_path + output_filename, 'wb')

# 设置参数
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)

# 写入数据
wf.writeframes(b''.join(frames))

# 关闭文件
wf.close()

print('录音完成')

至此,我们的录音过程就完成了,音频数据已经存储到了本地文件中。下面是一个完整的代码示例:

import pyaudio
import wave
import os

# 存储路径
output_path = 'output/'

# 确保输出路径存在
if not os.path.exists(output_path):
    os.makedirs(output_path)

# 创建PyAudio对象
p = pyaudio.PyAudio()

# 设置参数
CHUNK = 1024  # 缓冲区大小
FORMAT = pyaudio.paInt16  # 音频格式
CHANNELS = 1  # 声道数
RATE = 44100  # 采样率

# 设置录音时间
RECORD_SECONDS = 5

# 设置输出文件名
output_filename = 'output.wav'

# 打开流
stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

# 存储录音数据
frames = []

# 录音
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

# 关闭流
stream.stop_stream()
stream.close()
p.terminate()

# 打开输出文件
wf = wave.open(output_path + output_filename, 'wb')

# 设置参数
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)

# 写入数据
wf.writeframes(b''.join(frames))

# 关闭文件
wf.close()

print('录音完成')

示例2:

import pyaudio
import wave
import os

def record_audio(output_path, output_filename, time=5):
    # 创建PyAudio对象
    p = pyaudio.PyAudio()

    # 设置参数
    CHUNK = 1024  # 缓冲区大小
    FORMAT = pyaudio.paInt16  # 音频格式
    CHANNELS = 1  # 声道数
    RATE = 44100  # 采样率

    # 打开流
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

    # 存储录音数据
    frames = []

    # 录音
    for i in range(0, int(RATE / CHUNK * time)):
        data = stream.read(CHUNK)
        frames.append(data)

    # 关闭流
    stream.stop_stream()
    stream.close()
    p.terminate()

    # 打开输出文件
    wf = wave.open(output_path + output_filename, 'wb')

    # 设置参数
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)

    # 写入数据
    wf.writeframes(b''.join(frames))

    # 关闭文件
    wf.close()

    print('录音完成')

if __name__ == '__main__':
    # 存储路径
    output_path = 'output/'

    # 确保输出路径存在
    if not os.path.exists(output_path):
        os.makedirs(output_path)

    # 设置输出文件名
    output_filename = 'output.wav'

    # 录音时间
    time = 10

    # 开始录音
    record_audio(output_path, output_filename, time)

以上为两个不同示例,均使用了Pyaudio库来实现音频录制。其中,示例1将全部代码放在一个文件中,示例2将代码封装到了一个函数中,并且将输出路径、输出文件名以及录音时间等参数作为函数的参数,在使用时可根据实际情况进行配置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python pyaudio音频录制的实现 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Pytorch反向求导更新网络参数的方法

    Pytorch是一个基于Python的科学计算库,其主要特点在于能够具有动态图的特性,因此在深度学习领域中得到了广泛的应用。本篇文章将为大家详细讲解Pytorch反向求导更新网络参数的方法的完整攻略,包含以下几个部分: 张量介绍 反向传播算法介绍 Pytorch的自动求导机制 Pytorch的反向传播算法实现 示例 1. 张量介绍 张量在Pytorch中是最…

    人工智能概论 2023年5月25日
    00
  • Java常用API类之Math System tostring用法详解

    Java常用API类之Math System tostring用法详解 Math类 Math类是Java.lang下的一个类,它提供了很多基本的数学函数,包括三角函数、对数函数、次方函数等等。Math类中的方法为静态方法,也就是说可以直接通过类名调用方法。 常用方法 round方法 round是Math类的一个静态方法,作用是将一个float或double类…

    人工智能概览 2023年5月25日
    00
  • 使用Nginx、Nginx Plus抵御DDOS攻击的方法

    使用Nginx、Nginx Plus抵御DDOS攻击的方法: DDOS攻击指的是分布式拒绝服务攻击。这种攻击方式可以使受害者的服务器瘫痪,导致网站无法正常运行。为了抵御DDOS攻击,可以使用Nginx、Nginx Plus来进行限流、分流、反向代理等操作,防范恶意流量,保障网站的正常访问。 1.限流: 使用Nginx、Nginx Plus的limit_req…

    人工智能概览 2023年5月25日
    00
  • NodeJS中的MongoDB快速入门详细教程

    NodeJS中的MongoDB快速入门详细教程 MongoDB是一种常用的NoSQL数据库,在NodeJS应用程序中的应用非常广泛。下面是MongoDB在NodeJS中的快速入门详细教程。 安装MongoDB 在安装MongoDB之前,我们需要先安装NodeJS和npm。 然后,可以在MongoDB官方网站上下载和安装MongoDB,具体步骤可以参考官方文档…

    人工智能概论 2023年5月25日
    00
  • Django实现CAS+OAuth2的方法示例

    下面是Django实现CAS+OAuth2的方法示例的详细攻略。 简介 首先,我们需要了解一下CAS和OAuth2的概念。CAS(Central Authentication Service)是一种单点登录协议,可以让用户在一个网站上进行登录之后,在其他网站上自动登录,避免用户重复输入用户名和密码。OAuth2是一种授权协议,允许第三方应用程序通过授权代表用…

    人工智能概论 2023年5月25日
    00
  • ubuntu中python调用C/C++方法之动态链接库详解

    针对“ubuntu中python调用C/C++方法之动态链接库详解”的完整攻略,我将按照以下步骤逐一进行讲解: 编写C/C++代码并将其编译为动态链接库 编写Python代码,并使用ctypes库调用C/C++动态链接库中的函数 通过示例来进一步说明 1. 编写C/C++代码并将其编译为动态链接库 首先我们需要编写C/C++代码。以C语言为例,我们可以编写以…

    人工智能概论 2023年5月25日
    00
  • Django全局启用登陆验证login_required的方法

    想要在Django项目中全局启用登陆验证 login_required,需要经过以下步骤: 1. 导入 login_required 函数 login_required 函数位于 django.contrib.auth.decorators 模块中,需要先导入此模块。在 Django 的视图函数中使用 login_required 装饰器,可以达到需要登录才…

    人工智能概览 2023年5月25日
    00
  • nginx日志导入elasticsearch的方法示例

    以下是详细的攻略: 1. 确认环境和安装 Elasticsearch 和 Logstash 在开始前,需要确认服务器已经安装好 Elasticsearch 和 Logstash。如果还没有安装,需要先进行安装,可以参考 Elasticsearch 和 Logstash 官方文档进行安装。 2. 配置 Logstash 处理 nginx 日志 2.1 创建 L…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部