Python实现播放和录制声音的功能

yizhihongxing

Python实现播放和录制声音的功能

Python作为一种通用型脚本语言,不仅能够完成数据处理、爬虫等任务,同时也可以用来处理音频,实现播放和录制声音的功能,本文将详细讲解Python实现这两个功能的方法。

播放声音

首先,我们需要安装pyaudio模块,它是Python语言的音频处理库,支持录制、播放、转化格式等功能。

pip install pyaudio

接下来,我们可以使用下面的代码实现在Python里播放声音:

import pyaudio
import wave

def play_audio(filename):
    chunk = 1024
    wf = wave.open(filename, 'rb')
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True)
    data = wf.readframes(chunk)
    while data:
        stream.write(data)
        data = wf.readframes(chunk)
    stream.stop_stream()
    stream.close()
    p.terminate()

if __name__ == '__main__':
    play_audio('test.wav')

在这段代码中,我们首先导入了pyaudiowave两个模块,定义了一个play_audio函数,在该函数中,我们使用wave.open打开需要播放的声音文件,并使用pyaudio.PyAudio()实例化一个PyAudio对象。接着,我们使用p.open打开一个音频输出流,设置音频参数,并使用wf.readframes(chunk)方法读取音频数据,使用stream.write(data)方法将这些数据写入音频输出流,通过stream.stop_stream()stream.close()关闭流对象,最后通过p.terminate()关闭PyAudio对象,完成音频播放的过程。

录制声音

除了播放声音,PyAudio还支持录音功能,接下来我们看看如何录制声音。

import pyaudio
import wave

def record_audio(filename):
    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 44100
    RECORD_SECONDS = 5

    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 recording")

    stream.stop_stream()
    stream.close()
    p.terminate()

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

if __name__ == '__main__':
    record_audio('test.wav')

在这段代码中,我们首先定义了常量CHUNK、FORMAT、CHANNELS、RATE、RECORD_SECONDS,分别表示缓存块的大小、采样格式、声道数、采样率、录音时长。接着,我们实例化一个PyAudio对象,使用p.open()打开一个音频输入流,其中input=True表示打开音频输入流,frames_per_buffer=CHUNK表示一次读取CHUNK长度的数据。在循环中,我们使用stream.read()方法读取数据,并且将它们添加到列表frames里,循环结束后,关闭流对象,并且将列表frames里的音频数据写入文件。

两条示例说明:

  1. 播放一段wav格式的音乐文件:
play_audio('heal-the-world.wav')
  1. 录制一段音频并保存到文件
record_audio('test.wav')

以上就是Python实现播放和录制声音的功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现播放和录制声音的功能 - Python技术站

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

相关文章

  • Python函数属性和PyC详解

    Python函数属性 Python中的函数是一种对象。和其他对象一样,每个函数都包含了一系列属性。下面介绍一些常见的函数属性。 __doc__ 函数的文档字符串。文档字符串应该要详细的解释函数的用途、参数含义、返回值以及其他相关信息。 __name__ 函数的名称。 __defaults__ 函数的默认参数。 __code__ 函数的代码对象。它包含了函数的…

    python 2023年5月14日
    00
  • python可视化之颜色映射详解

    Python可视化之颜色映射详解 什么是颜色映射 颜色映射(Colormap),指将数值映射到颜色的过程。在可视化中,颜色映射常用于展示数据,将数据的大小、变化等信息通过颜色呈现出来,使图形更易于理解。 可视化库中的颜色映射 在 Python 的可视化库中,通常支持以下几种颜色映射: 顺序型:用于表示数据的大小变化,如 viridis; 发散型:用于表示数据…

    python 2023年6月3日
    00
  • 使用批处理for命令清除事件查看器所有Windows EventLog日志

    清除事件查看器所有Windows EventLog日志需要使用批处理for命令,下面是完整攻略: 步骤一:打开命令提示符窗口 按下Win+R快捷键,打开运行对话框,输入cmd并按下Enter键,打开命令提示符窗口。 步骤二:输入for命令清除Windows EventLog日志 输入以下命令: for /f "tokens=*" %1 i…

    python 2023年6月13日
    00
  • Python OpenCV实现传统图片格式与base64转换

    下面就为大家整理一下“Python OpenCV实现传统图片格式与base64转换”的完整攻略。 什么是OpenCV? OpenCV(Open Source Computer Vision Library) 是一个在商业级和研究级别上广泛使用的开源计算机视觉库。它被认为是计算机视觉和机器学习领域中最重要的开源项目之一。 OpenCV提供了各种预处理和计算机视…

    python 2023年5月18日
    00
  • python dict 字典 以及 赋值 引用的一些实例(详解)

    pythondict字典以及赋值引用的一些实例(详解) 什么是字典 在Python中,字典(dictionary)是一种无序的键值对(key-value)集合。字典由花括号{}包裹,键值对之间用冒号:分隔,每个键值对之间用逗号,分隔,如下所示: d = {‘apple’: 1, ‘banana’: 2, ‘orange’: 3} 上面的代码创建了一个字典,其…

    python 2023年5月13日
    00
  • Django中URL的参数传递的实现

    在Django中,URL参数传递是一种常见的方式,用于将数据从URL传递到视图函数中。本文将详细介绍Django中URL参数传递的实现方法,并提供两个示例。 URL参数传递的实现方法 在Django中,URL参数传递的实现方法有两种:使用正则表达式和使用path()函数。 使用正则表达式 使用正则表达式是一种常见的URL参数传递方法。在URL中,我们可以使用…

    python 2023年5月15日
    00
  • Python编程实现输入某年某月某日计算出这一天是该年第几天的方法

    下面是Python编程实现输入某年某月某日计算出这一天是该年第几天的方法: 步骤一:获取用户输入的年月日 首先,我们需要从用户输入中获取年、月、日这三个值。在Python中,可以使用input()函数来获取用户输入信息,代码如下: year = int(input("请输入年份:")) month = int(input("请输…

    python 2023年6月2日
    00
  • Python 第三方日志框架loguru使用

    当下的 Python 日志系统很复杂,各种日志框架比比皆是。在这些框架中,Loguru 是一个功能强大且极易上手的日志框架,在使用方面非常简单。下面将介绍Loguru的优势、核心功能以及如何使用它。 Loguru 的优势 强大的配置能力 支持异常信息捕捉 附带统一格式的日志 具有极佳的性能,适用于高并发场景 安装 Loguru 终端 / 控制台:pip in…

    python 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部