簡體   English   中英

Python中的實時音頻處理

[英]Real time audio processing in Python

我正在編寫一個程序來檢查計算機記錄的音頻信號中是否存在毛刺。 檢測到音頻后,我想檢查數據的前5秒是否出現毛刺(對應於以44.1kHz采樣率進行的220500個采樣),移至接下來的5秒鍾,並檢查毛刺,然后接下來的5秒,等等。我有一個while循環,該循環在檢測到音頻后開始,它開始從流中將音頻樣本讀取到數組中,直到在數組中具有220500個樣本為止,然后在其開始處輸入if語句檢查220500個樣本中的毛刺(然后刪除陣列中的所有元素)。 我的問題是,在這種情況下,計算機仍在錄制音頻,但沒有從流中將其讀取到數組中,並且在退出if語句並重新啟動while循環時,我錯過了幾秒鍾音頻數據。

while 1:
    # little endian, signed short
    snd_data = array('h', stream.read(1500))
    if byteorder == 'big':
        snd_data.byteswap()
    r.extend(snd_data)
    if len(r) == 220500 or silent:
        r = trim(r)
        data = pack('<' + ('h'*len(r)), *r)
        data = np.fromstring(data,dtype=np.int16)

        glitch detection carried out here...

我正在使用PyAudio錄制音頻

p=pyaudio.PyAudio() # start the PyAudio class
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,input_device_index = 1, output_device_index = 6,frames_per_buffer=1500)

我想知道在if語句中執行毛刺檢測時,有什么方法可以繼續從音頻流讀取到數組嗎? 否則,是否還有其他方法可以解決?

您的答案是多線程 而非多處理 ,通過使用python 線程包及其出色的信號功能,您可以實現所需的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM