@toper: Was heisst „nur 0“? Wo genau?
Wie sieht die Hardware aus? Was könnte PyAudio da alles benutzen als mehr oder weniger zufällig ausgewählte Audioquelle? Ist der Kanal für Aufnahme aktiviert? Nicht stummgeschaltet? Eventuell die Aufnahmelautstärke/-verstärkung auf 0 runter geregelt?
Anmerkungen zum Quelltext Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Namen sollte nicht kryptisch abgekürzt werden oder kryptische Abkürzungen enthalten. Insbesondere nichts einbuchstabiges.
Man sollte dafür sorgen, dass bei Programmende die Ressourcen sauber aufgeräumt werden, also hier insbesondere das der Stream geschlossen wird. Entweder mit ``try``/``finally`` oder mit ``with`` und `contextlib.closing()`.
Der Code für den linken und den rechten Kanal steht da zweimal nahezu identisch. Das kann man in eine Funktion heraus ziehen.
Statt ``%`` würde man in aktuellem Python-Code f-Zeichenkettenliterale verwenden.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
from contextlib import closing
import numpy as np
import pyaudio
MAX_VALUE = 2 ** 16
BAR_LENGTH = 35
FRAME_COUNT = 1024
def create_bar(samples):
peak_value = abs(np.max(samples) - np.min(samples)) / MAX_VALUE
return ("#" * int(peak_value * BAR_LENGTH)).ljust(BAR_LENGTH, "-")
def main():
with closing(
pyaudio.PyAudio().open(
rate=44_100, channels=1, format=pyaudio.paInt16, input=True
)
) as stream:
while True:
samples = np.fromstring(stream.read(FRAME_COUNT), dtype=np.int16)
print(
f"L=[{create_bar(samples[0::2])}]"
f"\tR=[{create_bar(samples[1::2])}]"
)
if __name__ == "__main__":
main()