Python 还能播放音频,而且花样多多?

简介: Python 还能播放音频,而且花样多多?

播放音频文件


下面,您将看到如何使用所选的Python库来播放音频文件。其中一些库允

许您播放一系列音频格式,包括MP3和NumPy数组。

  • playsound:如果您只想播放WAV或MP3文件,可以使用最简单的软件包。它只提供简单的回放功能。
  • simpleaudio:允许您播放WAV文件和NumPy数组,并为您提供检查文件是否仍在播放的选项。
  • winsound:允许您播放WAV文件或鸣响您的扬声器
  • python-sounddevicepyaudio为PortAudio库提供绑定,以便跨平台播放WAV文件。
  • pydub要求pyaudio用于音频播放,但与ffmpeg安装后,只需几行代码就可以播放大量的音频格式。

让我们逐一看看这些音频回放库。


playsound


playsound是纯Python、跨平台、单功能模块,不依赖于播放声音。使用此模块,可以使用一行代码播放声音文件:

from playsound import playsound
playsound('myfile.wav')

playsound声明它已经在WAV和MP3文件上进行了测试,但是它可能也适用于其他文件格式。

simpleaudio

simpleaudio是一个跨平台库,用于播放没有依赖项的(单声道和立体声)WAV文件。以下代码可用于播放WAV文件,并在终止脚本之前等待该文件完成播放:


import simpleaudio as sa
filename = 'myfile.wav'
wave_obj = sa.WaveObject.from_wave_file(filename)
play_obj = wave_obj.play()
play_obj.wait_done()  # 等到声音播放完毕


WAV文件包含位序列表示原始音频数据,以及带有元数据的标头采用RIFF(资源交换文件格式)格式。

下面,将看到如何生成与440 Hz音调相对应的NumPy数组,并使用simpleaudio.play_buffer():


import numpy as np
import simpleaudio as sa
frequency = 440  # 我们播放的音符是440赫兹
fs = 44100  # 每秒4100个样本
seconds = 3 # 注意持续时间为3秒
# *sample_rate步骤,范围在0到秒之间
t = np.linspace(0, seconds, seconds * fs, False)
# 产生一个440赫兹的正弦波
note = np.sin(frequency * t * 2 * np.pi)
# 确保最大值在16位范围内
audio = note * (2**15 - 1) / np.max(np.abs(note))
# 转换为16位数据
audio = audio.astype(np.int16)
# 开始播放
play_obj = sa.play_buffer(audio, 1, 2, fs)
# 等待播放结束后退出
play_obj.wait_done()


接下来,让我们看看如何使用winsound上播放WAV文件,请执行以下操作。

winsound

可以使用内置的winsound模块可以访问其基本的声音播放机器.只需几行代码即可播放WAV文件:



import winsound
filename = 'myfile.wav'
winsound.PlaySound(filename, winsound.SND_FILENAME)

winsound不支持除WAV文件以外的任何文件的回放。但允许你用winsound.Beep(frequency, duration)。例如,您可以使用以下代码发出1000 Hz的音调,持续100毫秒:


import winsound
winsound.Beep(1000, 100)  #以1000赫兹的频率发出100毫秒的蜂鸣声

接下来,将学习如何使用python-sounddevice跨平台音频回放模块。


python-sounddevice


带着python-sounddevice, numpy,和soundfile安装后,现在可以将WAV文件读取为NumPy数组并回放:

import sounddevice as sd
import soundfile as sf
filename = 'myfile.wav'
# 从文件中提取数据和采样率
data, fs = sf.read(filename, dtype='float32')  
sd.play(data, fs)
status = sd.wait()  # 等待,直到文件完成播放


包含sf.read()提取原始音频数据,以及存储在它的Rff头中的文件的采样率,以及sounddevice.wait()确保脚本只在声音播放完毕后才终止。

接下来,我们将学习如何使用pydub播放声音。它允许播放范围广泛的音频文件,并且提供了比使用音频更多的选项。


pydub

尽管pydub可以在没有任何依赖项的情况下打开和保存WAV文件,但需要安装一个音频播放包来播放音频。

可以使用下列代码来播放WAV文件pydub:

from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_wav('myfile.wav')
play(sound)

为了播放其他音频类型,如MP3文件,应该安装ffmpeglibav。并且可以使用pip安装:

$ pip install ffmpeg-python

带着ffmpeg安装后,播放MP3文件只需要对我们以前的代码做一点小小的修改:


from pydub import AudioSegment
from pydub.playback import play
sound = AudioSegment.from_mp3('myfile.mp3')
play(sound)

使用AudioSegment.from_file(filename, filetype)构造,可以播放任何类型的音频文件ffmpeg。例如,您可以使用渐变来播放WMA文件:

sound = AudioSegment.from_file('myfile.wma', 'wma')

除了播放声音文件,pydub允许您以不同的文件格式保存音频(稍后将详细介绍),切片音频,计算音频文件的长度,淡入或退出,并应用交叉衰减。

相关文章
|
1月前
|
数据处理 Python
Python在音频传输中的应用实例解析
Python在音频传输中的应用实例解析
|
1月前
|
存储 编解码 API
分享一个 Python 处理音频的库
分享一个 Python 处理音频的库
34 2
|
2月前
|
编解码 Python
Python如何给视频添加音频和字幕
Python如何给视频添加音频和字幕
|
2月前
|
编解码 Python Windows
python有没有包 可以检测 这个视频是否可以播放
python有没有包 可以检测 这个视频是否可以播放
|
2月前
|
Python
python朗读播放中文和英文
python朗读播放中文和英文
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】Python之人工智能应用篇——音频生成技术
音频生成是指根据所输入的数据合成对应的声音波形的过程,主要包括根据文本合成语音(text-to-speech)、进行不同语言之间的语音转换、根据视觉内容(图像或视频)进行语音描述,以及生成旋律、音乐等。它涵盖了声音结构中的音素、音节、音位、语素等基本单位的预测和组合,通过频谱逼近或波形逼近的合成策略来实现音频的生成。 音频生成技术的发展主要依赖于深度学习模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)、Transformer等。这些模型通过学习大量的音频数据,能够自动生成与人类发音相似甚至超越人类水平的音频内容。近年来,随着大规模预训练模型的流行,如GPT系列模型、BERT、T5等,
79 7
【深度学习】Python之人工智能应用篇——音频生成技术
|
3月前
|
存储 数据可视化 Python
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
139 0
|
5月前
|
数据可视化 Python
python WAV音频文件处理——(3)高效处理大型 WAV 文件
python WAV音频文件处理——(3)高效处理大型 WAV 文件
114 9
|
5月前
|
开发框架 Python
Python的`pygame`库用于2D游戏开发,涵盖图形、音频和输入处理。
【6月更文挑战第21天】Python的`pygame`库用于2D游戏开发,涵盖图形、音频和输入处理。要开始,先通过`pip install pygame`安装。基本流程包括:初始化窗口、处理事件循环、添加游戏元素(如玩家和敌人)、响应用户输入、更新游戏状态及结束条件。随着项目发展,可逐步增加复杂性。
142 1
|
5月前
|
计算机视觉 Python
【干货】Python玩转各种多媒体,视频、音频到图片
【干货】Python玩转各种多媒体,视频、音频到图片