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两种遍历字典(dict)的方法比较
May 29 Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
对python append 与浅拷贝的实例讲解
May 04 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
Python中文编码知识点
Feb 18 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
Python实现微信翻译机器人的方法
Aug 13 Python
django实现用户注册实例讲解
Oct 30 Python
Python爬虫基础讲解之请求
May 13 Python
尝试使用Python爬取城市租房信息
Apr 12 Python
python manim实现排序算法动画示例
Aug 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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
python实现简单http服务器功能
2018/09/17 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python 实现IP子网计算
2021/02/18 Python
怀念母亲教学反思
2014/04/28 职场文书
医学生求职信
2014/07/01 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
奖励申请报告范文
2015/05/15 职场文书
暖春观后感
2015/06/08 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL