Python 音頻模塊

Python 編程語言因其用戶友好的特性而成為當今的主流。Python 還有許多有趣的模塊和庫,用戶可以通過它們做很多事情。 Python 語言最有趣的特性之一是它的音頻模塊。在本文中,我們將討論各種類型的音頻模塊及其獨特的功能和優勢。

本文將涵蓋 python 中 10 種不同類型的音頻模塊和庫:

  • 自己動手(pick-your-own)
  • PyAudio(音頻)
  • 德佳佛
  • 明戈斯
  • 極超音速的
  • 皮杜布
  • 簡單音頻
  • winsound
  • python 聲音設備
  • 播放聲音

讓我們逐一了解以上音頻模塊。

1. PYO

PYO 是一個 Python 模塊,是用 C 語言編寫的一個用於創建數字信號處理的腳本。Python 的這個模塊包含用於處理各種音頻信號類型的類。因此,用戶可以直接在 Python 腳本或項目中導入信號處理鏈,並可以通過使用解釋器實時操縱音頻信號。

Python 中 PYO 模塊的工具具有諸如數學運算、延遲等基本信號處理、合成發生器、濾波器等原語。但它也將算法複雜化,以開發聲音粒化和許多其他藝術音頻操作。

例如:


# to play a sound file:
from pyo import *
sound = Server ( ) .boot ( )
sound.start  ( )
sound_file = SFPlayer ( " path /to /users /sound.aif ", speed = 1, loop = True ).out ( )
# for Granulating an audio buffer:
sound = Server ( ) .boot ( )
sound_nd = SndTable ( " path /to /users /sound.aif " )
ev = HannTable ( ) 
ps = Phasor ( freq = sound_nd.getRate ( )*.25, ml = sound_nd.getSize ( ) )
dr = Noise ( mul = .001, add = .1 )
granulate = Granulator ( sound_nd, ev, [ 1, 1.001 ] , ps, dr, 32, ml = .1 ).out ( )
# to generate melodies:
sound = Server ( ) .boot ( )
sound.start ( )
wv = SquareTable ( )
ev = CosTable ( [ ( 0, 0 ) , ( 100 , 1 ) , ( 500 , 0.3 ) , ( 8391 , 0 ) ] )
mt = Metro ( 0.135 , 12 ).play ( )
ap = TrigEnv ( mt , table = ev , dr = 1 , ml = .1 )
pt = TrigXnoiseMidi ( mt , dist = ' loopseg ' , x1 = 20 , scale = 1 , mrange = ( 47, 74 ) )
out = Osc ( table = wav , freq = pt , ml = ap ).out ( )

2.pyaudio

Pyaudio 是一個 Python 庫,是一個開源的跨平台音頻輸入輸出。它具有廣泛的功能,與音頻相關,主要集中在分割、特徵提取、分類和可視化問題上。

通過使用 pyaudio 庫,用戶可以對未知聲音進行分類,執行有監督和無監督的分割,提取音頻特徵和表示,檢測音頻事件並從長錄音中過濾出靜默期,應用降維來可視化音頻數據和內容相似性等等。

該庫為 PortAudio 提供綁定。用戶可以使用這個庫在不同的平台上播放和錄製音頻,比如 Windows 、Mac 和 Linux 。要使用 pyaudio 庫播放音頻,用戶必須寫入. stream。

例如:


import pyaudio
import wave

filename = ' example.wav '

# Set chunk size of 1024 samples per data frame
chunksize = 1024  

# Now open the sound file, name as wavefile
wavefile = wave.open ( filename, ' rb ' )

# Create an interface to PortAudio
portaudio = pyaudio.PyAudio ( )

# Open a .Stream object to write the WAV file to play the audio using pyaudio
# in this code, 'output = True' means that the audio will be played rather than recorded
streamobject = portaudio.open(format = portaudio.get_format_from_width ( wavefile.getsampwidth ( ) ),
                channels = wavefile.getnchannels ( ),
                rate = wavefile.getframerate ( ),
                output = True ( )

# Read data in chunksize
Data_audio = wavefile.readframes ( chunksize )

# Play the audio by writing the audio data to the streamobject
while data != '':
    streamobject.write ( data_audio )
    data_audio = wavefile.readframes ( chunksize )

# Close and terminate the streamobject
streamobject.close ( )
portaudio.terminate ( )

在這裡,用戶可以注意到,與其他音頻播放庫相比,使用 pyaudio 庫播放音頻可能有點複雜。這就是為什麼這個庫可能不是用戶在他們的項目或應用中播放音頻的首選。

雖然,由於 pyaudio 庫提供了更多的低級控制,這使得用戶可以為他們的輸入和輸出設備設置參數。這個庫還允許用戶檢查他們的 CPU 負載和輸入輸出活動。

Pyaudio 庫還允許用戶在回叫模式下播放和錄製音頻。當回放需要新數據並可用於記錄時,調用規定的回調函數。這些是 pyaudio 庫的特性,這使它不同於其他音頻庫和模塊。如果用戶想要播放簡單回放之外的音頻,則專門使用該庫。

3.留下

Dejavu 是 Python 中的一個音頻指紋模塊。這是一個開源模塊。這個模塊可以通過聽一遍來記住錄製的音頻,並且這個模塊將音頻存儲在數據庫中。此後,當播放歌曲、麥克風輸入或磁盤文件時,Dejavu 會嘗試將音頻與數據庫中存儲的指紋進行匹配,並返回先前播放的歌曲或錄音。

Dejavu 模塊在識別具有真實噪聲量的特定信號方面更勝一籌。用戶可以使用 Dejavu 識別音頻的形式有兩種:

  • 用戶可以通過讀取和處理磁盤上的音頻文件來識別音頻。

或者,

  • 用戶可以使用電腦的麥克風。

例如:


#User should create a MySQL database where Dejavu can store fingerprints of the audio. 
#on user local setup:
$ mysql -u root -p
Enter password: *************
mysql> HERE, USER SHOULD CREATE A DATABASE dejavu;

現在用戶可以開始指紋他們的音頻收藏!


from dejavu import Dejavu
config = {
    " database ": {
         " host ": " 125.0.1.1 ",
         " user ": " root ",
         " password ": < password imported in Local setup >, 
         " database ": < name of the database user has created in local setup >,
     }
}
dejv = Dejavu ( config )

4.明格斯

Mingus 是 Python 中的一個包。它被許多程序員、音樂研究者和作曲家用來製作和檢查音樂和歌曲。這個包是一個跨平台的非常高級的音樂理論表示包,支持 python 以及樂器數字接口文件和回放。

Mingus 包可以用來玩音樂理論,用於教育工具,用於為歌曲構建編輯器,以及用於用戶想要導入處理和播放音樂功能的許多其他應用和軟件。這個包是一個音樂理論,它包括像音階、漸進性、和弦和音程這樣的主題。這個包測試這些組件,並用於在方便的速記幫助下生成和識別音樂要點。

例如:


import mingus.core.notes as notes_m
# for valid notes
notes_m.is_valid_note("C") 
notes_m.is_valid_note("D#") 
notes_m.is_valid_note("Eb")
notes_m.is_valid_note("Fbb")
notes_m.is_valid_note("G##")

輸出:

True
True
True
True
True

Python 音頻模塊


notes_m.is_valid_note("c")
notes_m.is_valid_note("D #")
notes_m.is_valid_note("E-b")

輸出:

False
False
False

5.高超音速

高超音速是 Python 和 C 語言的框架。這用於開發和操作用於實時控制的聲音處理管道。這個框架是一個低級的,其中每個字節計數,這也包括聲卡,過濾器內存操作,文件 io 和振蕩器的對象。該框架在 Linux 和 OSX 操作系統上運行。

6. Pydub

Pydub 是一個 Python 庫,用於操縱音頻並為其添加效果。這個庫是一個非常簡單和容易但是高級的接口,它基於 FFmpeg 並且傾向於 jquery。該庫用於在音頻中添加 id3 標籤,對其進行切片,並連接音頻軌道。Pydub 庫支持 Python 的 2.6、2.7、3.2 和 3.3 版本。

但是,用戶可以使用 pydub 庫打開和保存 WAV 文件,而沒有任何依賴關係。但是如果用戶想要播放音頻,需要安裝音頻播放包。

以下代碼可用於播放帶 pydub 的 WAV 文件:

例如:


from pydub import AudioSegment
from pydub.playback import play

sound_audio = AudioSegment.from_wav ( ' example.wav ' )
play ( sound_audio )

如果用戶想播放其他音頻文件格式,如 MP3 文件,他們應該安裝 libav 或 FFmpeg。

安裝 FFmpeg 後,用戶需要對代碼做一個小的改動,才能播放 MP3 文件。

例如:


from pydub import AudioSegment
from pydub.playback import play

sound_audio = AudioSegment.from_mp3 ( 'example.mp3 ' ) 
play ( sound_audio )

通過使用 audio segment . from file(file name,file_type)語句,用戶可以播放音頻文件的 ffmpeg 支持的任何格式。

例如:


# Users can play a WMA file:
sound = AudioSegment.from_file ( 'example.wma ', ' wma ' )

Pydub 庫還允許用戶以不同的文件格式保存音頻。用戶還可以計算音頻文件的長度。用戶可以通過使用這個庫在音頻中使用交叉淡入淡出。

7.簡單音頻

Simpleaudio 是一個跨平台的 Python 庫。該庫還用於播放沒有任何依賴關係的 WAV 文件。simpleaudio 庫在腳本終止前等待文件完成播放 WAV 格式的音頻。

例如:


import simpleaudio as simple_audio

filename = ' example.wav '
wave_object = simple_audio.WaveObject.from_wave_file ( filename )
play_object = wave_object.play ( )
play_object.wait_done ( )  
# Wait until audio has finished playing

在 WAV 格式文件中,存儲了代表原始音頻數據的位分類,並且還存儲了資源交換文件格式的標題和元數據。

該行業的最終記錄是存儲每一個音頻樣本,這是一個與氣壓相關的特定數據點,每秒 44200 個樣本,16 位值,用於光盤錄製。

為了減小文件的大小,它足以以較低的採樣率(例如每秒 8000 個樣本)存儲少量像人類語音這樣的記錄。然而,較高的聲音頻率不能被非常準確地表示。

本文討論的一些庫和模塊播放和記錄字節對象,其中一些使用 NumPy 數組記錄原始音頻數據。兩者都類似於數據點的分類,可以以確定的採樣速率播放音頻。

在 NumPy 數組中,每個元素可以包含一個 16 位值,相當於一個單獨的樣本,對於 bytes 對象,每個樣本都存儲為兩個 8 位值的集合。這兩種數據類型的重要區別在於 NumPy 數組是可變的,字節對象是不可變的,這使得後者更適合生成音頻和處理更複雜的信號。

用戶可以使用 simpleaudio.play_buffer()語句在 simpleaudio 庫中播放 NumPy 數組和字節對象。但是,在此之前,用戶應該確保他們已經安裝了 NumPy 和 simpleaudio 庫。

例如:

以產生對應於 410 赫茲音調的數字陣列。


import numpy as numpy
import simpleaudio as simple_audio

frequency = 410  # user's played note will be 410 Hz
fsample = 44200  # 44200 samples per second will be played
second = 5  # Note duration of 5 seconds

# Generate array with second*sample_rate steps, ranging between 0 and seconds
tp = numpy.linspace ( 0 , second , second * fsample, False )

# to generate a 410 Hz sine wave
note = numpy.sin ( frequency * tp * 2 * numpy.pi )

# user should Ensure that highest value is in 16-bit range
audio = note * (2**15 - 1) / numpy.max ( numpy.abs ( note ) )
# now, Convert to 16-bit data
ado = audio.astype ( numpy.int16 )

# to Start the playback
play_object = simple_audio.play_buffer ( ado , 1 , 2 , fsample )

# user now Waits for playback to finish before exiting
play_object.wait_done ( )

8.winsound

winsound 是 Python 中的一個模塊,用於訪問 Windows 操作系統的基本聲音播放機制。

在 winsound 模塊中,只需幾行代碼就可以播放 WAV 文件。

例如:


import winsound

filename = ' example.wav '
winsound.PlaySound ( filename, winsound.SND_FILENAME )

winsound 模塊不支持除 WAV 文件以外的任何文件格式。它允許用戶使用 winsound 發出他們揚聲器的嘟嘟聲。嗶嗶聲(頻率、持續時間)聲明。

例如:


# User can beep a 1010 Hz tone for 110 milliseconds:
import winsound

winsound.Beep ( 1010, 110 )  # Beep at 1010 Hz for 110 milliseconds 

9. python 聲音設備

python – sounddevice 是一個用於跨平台音頻回放的 python 模塊。該模塊為 PortAudio 庫提供綁定,並具有一些合適的功能來播放和錄製包含音頻信號的 NumPy 數組。

如果用戶想要播放一個 WAV 文件,他們應該安裝 NumPy 和 soundfile,以 NumPy 數組的形式在 WAV 文件中打開一個音頻文件格式。

例如:


import sounddevice as sound_device
import soundfile as sound_file

filename = ' example.wav '
# now, Extract the data and sampling rate from file
data_set, fsample = sound_file.read ( filename , dtype = ' float32 ' )  
sound_device.play ( data_set, fsample )
# Wait until file is done playing
status = sound_device.wait ( )  

語句 sound_file.read()用於提取原始音頻數據以及文件的採樣率,這些數據存儲在資源交換文件格式頭中。sound_device.wait()語句用於確保腳本僅在音頻播放完畢後終止。

10.播放聲音

playsound 是一個 Python 模塊,用戶可以通過它在一行代碼中播放聲音。這是一個跨platform模塊,是一個單一的功能,沒有任何依賴播放聲音和音頻。

例如:


from playsound import playsound

playsound ( ' example.wav ' )

playsound 模塊用於 WAV 文件和 MP3 文件格式的文件,也可以和其他文件格式一起使用。

結論:

在本文中,我們討論了用於播放和錄製不同類型的音頻文件和聲音的各種類型的 Python 庫和模塊。在這裡,我們已經解釋了在開發和修改應用和軟件的項目中,每個播放聲音的庫和模塊的不同特性和重要性。


原創文章,作者:OWTEN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129862.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OWTEN的頭像OWTEN
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論