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


Posted in Python onAugust 12, 2020

Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。

下面是一些可以播放和录制音频的Python第三方库:

  • playsound,支持MP3和WAV,目前只支持简单的回放。
  • simpleaudio,支持WAV,提供检查文件是否仍在播放的功能。
  • winsound,支持WAV,只支持windows。
  • python-sounddevice和pyaudio为PortAudio库提供绑定,以便跨平台回放WAV文件。
  • pydub,需要pyaudio来播放音频,但是安装了ffmpeg之后,它允许您使用几行代码来播放各种音频格式。

一、播放音频文件

使用playsound库

1、安装

$ pip install playsound

2、使用播放音频

from playsound import playsound
playsound('myfile.wav')

使用simpleaudio库

1、安装

$ pip install simpleaudio

2、使用播放音频

mport simpleaudio as sa

filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file(filename)
play_obj = wave_obj.play()
play_obj.wait_done() # Wait until sound has finished playing

使用winsound库

如果您使用Windows,您可以使用内置的winsound模块来访问其基本的声音播放机制。播放WAV文件可以在几行代码:

import winsound

filename = 'myfile.wav'
winsound.PlaySound(filename, winsound.SND_FILENAME)

使用python-sounddevice库

1、安装

$ pip install sounddevice

2、使用播放音频

import sounddevice as sd
import soundfile as sf

filename = 'myfile.wav'
# Extract data and sampling rate from file
data, fs = sf.read(filename, dtype='float32') 
sd.play(data, fs)
status = sd.wait() # Wait until file is done playing

使用pydub库

1、安装

$ pip install pydub

2、使用播放音频

from pydub import AudioSegment
from pydub.playback import play

sound = AudioSegment.from_wav('myfile.wav')
play(sound)

默认情况下,pydub只支持播放wav格式音频。如果你想播放更多其他格式的音频文件。需要安装ffmpeg-python。

$ pip install ffmpeg-python

安装了ffmpeg后,播放MP3文件只需要在我们之前的代码中做一个小小的修改:

from pydub import AudioSegment
from pydub.playback import play

sound = AudioSegment.from_mp3('myfile.mp3')
play(sound)

使用pyaudio库

1、安装

$ pip install pyaudio

2、使用播放音频

import pyaudio
import wave

filename = 'myfile.wav'


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.close()
p.terminate()

您可能已经注意到,使用pyaudio播放声音比使用前面看到的库播放声音要复杂一些。这意味着如果您只想在Python应用程序中播放声音效果,那么它可能不是您的首选。

但是,由于pyaudio提供了更低级的控制,因此可以获取和设置输入和输出设备的参数,并检查CPU负载和输入或输出延迟。

它还允许您在回调模式下播放和录制音频,在回调模式中,当需要回放新数据或记录可用数据时,将调用指定的回调函数。如果您的音频需要的不仅仅是简单的回放,那么这些选项使pyaudio成为一个合适的库。

既然您已经了解了如何使用许多不同的库来播放音频,现在就来看看如何使用Python自己录制音频。

二、录音

Python -sounddevice和pyaudio库提供了用Python录制音频的方法。

1 、使用python-sounddevice录音

import sounddevice as sd
from scipy.io.wavfile import write

fs = 44100 # Sample rate
seconds = 3 # Duration of recording

myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
sd.wait() # Wait until recording is finished
write('output.wav', fs, myrecording) # Save as WAV file

2、使用pyaudio录音

import pyaudio
import wave

chunk = 1024 # Record in chunks of 1024 samples
sample_format = pyaudio.paInt16 # 16 bits per sample
channels = 2
fs = 44100 # Record at 44100 samples per second
seconds = 3
filename = "output.wav"

p = pyaudio.PyAudio() # Create an interface to PortAudio

print('Recording')

stream = p.open(format=sample_format,
    channels=channels,
    rate=fs,
    frames_per_buffer=chunk,
    input=True)

frames = [] # Initialize array to store frames

# Store data in chunks for 3 seconds
for i in range(0, int(fs / chunk * seconds)):
 data = stream.read(chunk)
 frames.append(data)

# Stop and close the stream 
stream.stop_stream()
stream.close()
# Terminate the PortAudio interface
p.terminate()

print('Finished recording')

# Save the recorded data as a WAV file
wf = wave.open(filename, 'wb')
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(sample_format))
wf.setframerate(fs)
wf.writeframes(b''.join(frames))
wf.close()

三、保存和格式转换

1、使用pydub保存音频

from pydub import AudioSegment
sound = AudioSegment.from_wav('myfile.wav')
sound.export('myfile.mp3', format='mp3')

2、使用pydub完成格式转换

from pydub import AudioSegment
sound = AudioSegment.from_wav('myfile.wav')
sound.export('myfile.mp3', format='mp3')

如果觉得内容还不错,分享给更多朋友,一起提升编程技能。

以上就是Python实现播放和录制声音的功能的详细内容,更多关于python 播放和录制声音的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python中的cookielib模拟登录网站
Apr 09 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
python调用staf自动化框架的方法
Dec 26 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
python中数组和矩阵乘法及使用总结(推荐)
May 18 Python
python 命名规范知识点汇总
Feb 14 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 Python
详解python 内存优化
Aug 17 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
python 学习GCN图卷积神经网络
May 11 Python
Python实现文件压缩和解压的示例代码
Aug 12 #Python
Python爬取数据并实现可视化代码解析
Aug 12 #Python
Python下载网易云歌单歌曲的示例代码
Aug 12 #Python
Python爬取12306车次信息代码详解
Aug 12 #Python
Python读取xlsx数据生成图标代码实例
Aug 12 #Python
Idea安装python显示无SDK问题解决方案
Aug 12 #Python
Python selenium如何打包静态网页并下载
Aug 12 #Python
You might like
PHP常用函数小技巧
2008/09/11 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
python selenium 弹出框处理的实现
2019/02/26 Python
Python:slice与indices的用法
2019/11/25 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python实现结构体代码实例
2020/02/10 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
临床医师个人自我评价
2014/04/06 职场文书
合作经营协议书
2014/04/17 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
微信搭讪开场白
2015/05/28 职场文书
大国崛起日本观后感
2015/06/02 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
Golang并发工具Singleflight
2022/05/06 Golang