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 正则表达式(转义问题)
Dec 15 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
python 检查是否为中文字符串的方法
Dec 28 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python正则表达式和re库知识点总结
Feb 11 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
Keras实现将两个模型连接到一起
May 23 Python
python中如何打包用户自定义模块
Sep 23 Python
Selenium 配置启动项参数的方法
Dec 04 Python
python中的列表和元组区别分析
Dec 30 Python
python flask开发的简单基金查询工具
Jun 02 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
js 上传图片预览问题
2010/12/06 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
ES6的新特性概览
2016/03/10 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
pyqt5实现登录界面的模板
2020/05/30 Python
python属于解释型语言么
2020/06/15 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
外贸英语专业求职信范文
2013/12/25 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python