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中__init__和__new__的区别详解
Jul 09 Python
调试Python程序代码的几种方法总结
Apr 28 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
利用python批量检查网站的可用性
Sep 09 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 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基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
js实现表格字段排序
2014/02/19 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
js初始化验证实例详解
2016/11/26 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
详解Angularjs 自定义指令中的数据绑定
2018/07/19 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
Python中字符串对齐方法介绍
2015/05/21 Python
python图像处理之镜像实现方法
2015/05/30 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
flask 实现token机制的示例代码
2019/11/07 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
顺丰快递Java软件工程师面试题
2015/07/31 面试题
部队领导证婚词
2014/01/12 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
医生个人年度总结
2015/02/28 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
学习委员竞选稿
2015/11/20 职场文书
成人成长感言如何写?
2019/08/16 职场文书