[英]issue with music visualiser in python ( fft and generally )
因此,我正在嘗試制作音樂可視化程序,對於要制作音樂可視化程序的項目,我對python來說是一個新手(更不用說一般的編碼了),但是我很努力,我設法獲得了開放的音頻流。
我需要幫助的事情:
下面的代碼是否是獲取fft數據和fftfreq數據的正確方法(假設是振幅和頻率數據)? 我是否需要在其他地方進行此計算? 還是在該功能內以正確的方式進行操作?
當我嘗試在代碼末尾打印fft_data時,為什么我會得到(fft_data未定義)的錯誤,盡管我相信該函數先前已在代碼中調用並且應該已經計算了一些東西?
我是否要糾正要從函數中返回的結果變量return ( audio_data, fft_data, fft_freq)
需要將return ( audio_data, fft_data, fft_freq)
等return ( audio_data, fft_data, fft_freq)
如果是這樣,為什么它仍然不能在底部顯示fft_data?
當我克服這些問題時,我可能會在后面的文章中跟進。
真誠地感謝任何幫助<3
ps,因為我是python和編碼的新手,所以請盡量不要以復雜的方式進行解釋,或者如果我要求的話,請盡可能以更簡單的方式進行闡述(不必過於簡單)
這是我想要的方法,我不想使用librosa或其他模塊,因為我知道它可能會堅持使用numpy struct和pyaudio
import pyaudio
import numpy as np
import time
import matplotlib.animation as animation
import matplotlib.pyplot as plt
from matplotlib import style
pa = pyaudio.PyAudio()
def callback(in_data, frame_count, time_info, flag):
audio_data = np.fromstring(in_data, dtype=np.float32)
print(audio_data)
fft_data = np.fft.fft(audio_data)
fft_freq = np.fft.fftfreq(len(fft_data))
return (audio_data, fft_data, fft_freq, pyaudio.paContinue)
stream = pa.open(format=pyaudio.paFloat32,
channels=1,
rate=44100,
output=False,
input=True,
stream_callback=callback)
stream.start_stream()
stream.close()
pa.terminate()
print(fft_data)
如果我在回調函數中執行print(audio_data)
,它會打印音頻數據,但是我不確定它是否已經可以繪制,因此我想必須在其上使用fft。 但是,當我嘗試在代碼底部打印fft_data時,它說“ fft_data未定義”。
從文檔開始 , stream_callback
“必須返回一個元組: (out_data, flag)
”,並將控制權返回給PortAudio而不是您的代碼。
對於調試,您可能需要執行以下操作:
callback_output = []
def callback(in_data, frame_count, time_info, flag):
audio_data = np.fromstring(in_data, dtype=np.float32)
callback_output.append(
audio_data
)
return None, pyaudio.paContinue
然后對存儲在callback_output
的數據進行FFT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.