天天看点

python 去掉文件头部几行_Python 还能播放音频,而且花样多多?

阅读本文大概需要3.3分钟

播放音频文件

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

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

  • playsound:

    如果您只想播放WAV或MP3文件,可以使用最简单的软件包。它只提供简单的回放功能。
  • simpleaudio:

    允许您播放WAV文件和NumPy数组,并为您提供检查文件是否仍在播放的选项。
  • winsound:

    允许您播放WAV文件或鸣响您的扬声器
  • python-sounddevice

    pyaudio

    为PortAudio库提供绑定,以便跨平台播放WAV文件。
  • pydub

    要求

    pyaudio

    用于音频播放,但与

    ffmpeg

    安装后,只需几行代码就可以播放大量的音频格式。

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

playsound

playsound

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

from playsound import playsoundplaysound('myfile.wav')
           

playsound

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

simpleaudio

simpleaudio

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

import simpleaudio as safilename = '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 npimport simpleaudio as safrequency = 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 winsoundfilename = 'myfile.wav'winsound.PlaySound(filename, winsound.SND_FILENAME)
           

winsound

不支持除WAV文件以外的任何文件的回放。但允许你用

winsound.Beep(frequency, duration)

。例如,您可以使用以下代码发出1000 Hz的音调,持续100毫秒:

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

接下来,将学习如何使用

python-sounddevice

跨平台音频回放模块。

python-sounddevice

带着

python-sounddevice

numpy

,和

soundfile

安装后,现在可以将WAV文件读取为NumPy数组并回放:

import sounddevice as sdimport soundfile as sffilename = '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 AudioSegmentfrom pydub.playback import playsound = AudioSegment.from_wav('myfile.wav')play(sound)
           

为了播放其他音频类型,如MP3文件,应该安装

ffmpeg

libav

。并且可以使用pip安装:

$ pip install ffmpeg-python
           

带着

ffmpeg

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

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

使用

AudioSegment.from_file(filename, filetype)

构造,可以播放任何类型的音频文件

ffmpeg

。例如,您可以使用渐变来播放WMA文件:

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

除了播放声音文件,

pydub

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

推荐阅读

Python 年度文章汇总

一篇让你直接入门的 Python 教程

Python中浅拷贝与深拷贝

岁月有你   惜惜相处

python 去掉文件头部几行_Python 还能播放音频,而且花样多多?

Python 知识大全

微信扫描二维码, 关注我的公众号