天天看點

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 知識大全

微信掃描二維碼, 關注我的公衆号