A znasz teorię przetwarzania sygnałów? Bo zdaje się to ci będzie potrzebne - a to nie jest prosta dziedzina do ogarnięcia. Czyli najpierw teoria dotycząca samplowania sygnałów (przetwarzanie A/C), przetwarzania cyfrowego i potem dopiero potem odtwarzania - czyli C/A. Trochę nauki tutaj z tym będzie. Natomiast co do pomysłu takiego przetwarzania danych w locie przez skrypt pythonowy - to to bym raczej między bajki włożył.
Może trochę przesada z tą znajomością A/C -> C/A bo to załatwiają sterowniki oraz sama karta dźwiękowa. Rzeczywiście jednak sprawa nie jest banalna. Ogólne do przetwarzania sygnałów w locie zazwyczaj wykorzystuje się DSP. Rolę DSP może pełnić fizyczny wyspecjalizowany układ lub oprogramowanie. Fizyczne procesory or rozwiązań programowych zwykle różnią się szybkością przetwarzania sygnałów co finalnie przekłada się na "latencję". Latencja to najogólniej ujmując opóźnienie liczone np. w milisekundach pomiędzy sygnałem wejściowym a przetworzonym wyjściowym. Na jej czas składają się czas samplowania (A/D) + czas przetwarzania danych + czas ponownej konwersji na sygnał analogowy (D/A).
W Python mamy ogrom bibliotek do przetwarzania sygnałów oraz do wykonywania na nich operacji DSP lub analogicznych.
DSP można także realizować "po swojemu" jednak w tym przypadku Python jest zbyt wolny (co nie znaczy, że się nie da robić prostych rzeczy) by samodzielnie "w locie" wykonywać tysiące czy nawet miliony operacji na tablicach z próbkami sygnału. Także jeśli bierzesz Python zalecam korzystać z "gotowych" bibliotek.
Przetwarzanie sygnału w "locie".
Prawe w każdym języku i środowisku wygląda to tak samo bo wynika ze sposobu pracy kart dźwiękowych. Wygląda to mniej więcej tak:
- Tworzysz bufor na samplowany dźwięk. Taki bufor jest wypełniany przez bibliotekę współpracującą ze sterownikiem karty dźwiękowej.
Po zapełnieniu bufora wywoływana jest funkcja "callback", która zwykle zwraca ten bufor + jego długość. Z tego bufora dane wyciągasz i "obrabiasz" a finanie przesyłasz do bufora wyjściowego.
- bufor wyjściowy działa podobnie ale tutaj już jest więcej sposobów. Zwykle podajesz adres i ilość bajtów d odtworzenia a biblioteka załatwia całą resztę.
Osobiście do zabawy w DSP w czasie rzeczywistym zdecydowanie bardziej polecam języki kompilowane a nie interpretowane jak Python.
Bardzo łatwym zestawem do ogarnięcia i rozpoczęcia zabawy jest np. Delphi / C# / C++ z bibliotekami BASS.
Możesz też spróbować zabawy w JavaScript ( o tyle fajny, że wisi Ci warstwa sprzętowa ). Kiedyś wykorzystując wbudowane niemal w każdą przeglądarkę możliwości zrobiłem: https://www.enjoyaudio.org/ ( wykorzystuje WebAudio API https://www.w3.org/TR/webaudio/ ).Bardzo przyjazne na początek, że by ogarnąć problematykę przetwarzania na żywo.
Kiedyś ze względu na bogactwo bibliotek chciałem przetwarzać sygnały w locie z użyciem Python. Niestety poległem na zgraniu wszystkiego ze sprzętem. Przetwarzanie plików to bajka ale strumienia "rel time" już mi nie wyszło. Niestety Pythona prawie nie umiem wcale więc nie traktuj tego jako osądu Pythona. Inna sprawa, że jak już wcześniej napisałem przez samo to, że Python jest interpreterem i się nie kompiluje dużo wydajności tracimy w sytuacjach kiedy funkcje DSP chcemy programować "po swojemu".