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的setuptools框架下生成egg的教程
Apr 13 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
python2.7的编码问题与解决方法
Oct 04 Python
Django验证码的生成与使用示例
May 20 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
python实现决策树
Dec 21 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
Python创建数字列表的示例
Nov 28 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
教你利用python实现企业微信发送消息
May 23 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包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
Python 12306抢火车票脚本
2018/02/07 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python实现自主查询实时天气
2018/06/22 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
使用pip安装python库的多种方式
2019/07/31 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
介绍一下Java的事务处理
2012/12/07 面试题
环境工程毕业生自荐信
2013/11/17 职场文书
直接有效的自我评价
2014/01/11 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
党风廉正建设责任书
2015/01/29 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang