Так что я пытаюсь сделать музыкальный визуализатор, я очень плохо знаком с python (не говоря уже о кодировании в целом) для проекта, мне нужно сделать музыкальный визуализатор, как бы я ни боролся, мне удалось получить открытый аудиопоток.
Вещи, в которых мне нужна помощь:
Является ли приведенный ниже код правильным способом получения данных fft и fftfreq (при условии, что это данные по амплитуде и частоте)? И мне нужно сделать этот расчет где-нибудь еще? Или делает это внутри этой функции правильным образом?
Почему, когда я пытаюсь напечатать fft_data в конце кода, я получаю ошибку (fft_data не определена), даже если я считаю, что функция вызывается ранее в коде и должна была что-то вычислить?
Правильно ли я, чтобы получить возвращаемые переменные из функции, которую мне нужно поместить return ( audio_data, fft_data, fft_freq)
и т. Д., И если да, то почему же она по-прежнему не печатает fft_data внизу?
Вероятно, я займусь более поздним сообщением, когда буду обсуждать эти проблемы.
любая помощь, если честно, серьезно ценится <3 </p>
p.s, так как я новичок в 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 не определен».