Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。
下面是一些可以播放和录制音频的Python第三方库:
- playsound,支持MP3和WAV,目前只支持简单的回放。
- simpleaudio,支持WAV,提供检查文件是否仍在播放的功能。
- winsound,支持WAV,只支持windows。
- python-sounddevice和pyaudio为PortAudio库提供绑定,以便跨平台回放WAV文件。
- pydub,需要pyaudio来播放音频,但是安装了ffmpeg之后,它允许您使用几行代码来播放各种音频格式。
一、播放音频文件
使用playsound库
1、安装
1
|
$ pip install playsound
|
2、使用播放音频
1
2
|
from playsound import playsound
playsound( 'myfile.wav' )
|
使用simpleaudio库
1、安装
1
|
$ pip install simpleaudio
|
2、使用播放音频
1
2
3
4
5
6
|
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文件可以在几行代码:
1
2
3
4
|
import winsound
filename = 'myfile.wav'
winsound.PlaySound(filename, winsound.SND_FILENAME)
|
使用python-sounddevice库
1、安装
1
|
$ pip install sounddevice
|
2、使用播放音频
1
2
3
4
5
6
7
8
|
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、安装
1
|
$ pip install pydub
|
2、使用播放音频
1
2
3
4
5
|
from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav( 'myfile.wav' )
play(sound)
|
默认情况下,pydub只支持播放wav格式音频。如果你想播放更多其他格式的音频文件。需要安装ffmpeg-python。
1
|
$ pip install ffmpeg-python
|
安装了ffmpeg后,播放MP3文件只需要在我们之前的代码中做一个小小的修改:
1
2
3
4
5
|
from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3( 'myfile.mp3' )
play(sound)
|
使用pyaudio库
1、安装
1
|
$ pip install pyaudio
|
2、使用播放音频
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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录音
1
2
3
4
5
6
7
8
9
|
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录音
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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保存音频
1
2
3
|
from pydub import AudioSegment
sound = AudioSegment.from_wav( 'myfile.wav' )
sound.export( 'myfile.mp3' , format = 'mp3' )
|
2、使用pydub完成格式转换
1
2
3
|
from pydub import AudioSegment
sound = AudioSegment.from_wav( 'myfile.wav' )
sound.export( 'myfile.mp3' , format = 'mp3' )
|
如果觉得内容还不错,分享给更多朋友,一起提升编程技能。
以上就是Python实现播放和录制声音的功能的详细内容,更多关于python 播放和录制声音的资料请关注服务器之家其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1431413