pyaudio: Spektrum analyzer

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
eugen80
User
Beiträge: 2
Registriert: Dienstag 9. August 2022, 07:10

Hallo,
ich möchte gerne einen einfachen Spektrum analyzer bauen. Mikrofoneingang auszulesen klappt es gut, ich verstehe aber nicht, was die Zahlen in dataInt bedeuten:

Code: Alles auswählen

data = stream.read(CHUNK)
dataInt = struct.unpack(str(CHUNK) + 'h', data)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist das digitalisierte Signal. Die Art, wie Computer Audio repräsentieren. Was hast du denn erwartet, wie das aussieht?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Das wird so nicht funktionieren. Wenn Du eine Anzahl von CHUNK 16bit-Ints haben möchtest, dann mußt Du 2*CHUNK Bytes lesen.
Bei unpack sollte man angeben ob man Little- oder Big-Endian Ints hat.
Der Datentyp hat nichts im Variablennamen zu suchen.
Zum Beispiel:

Code: Alles auswählen

data = struct.unpack(f"<{CHUNK}h", stream.read(2 * CHUNK))
eugen80
User
Beiträge: 2
Registriert: Dienstag 9. August 2022, 07:10

Also der gesamte Code sieht so aus:

Code: Alles auswählen

import pyaudio as pa
import struct

CHUNK = 1024*2
FORMAT = pa.paInt16
CHANNELS = 1
RATE = 44100 # in Hz

p = pa.PyAudio()

stream = p.open(
    format = FORMAT,
    channels = CHANNELS,
    rate = RATE,
    input=True,
    output=True,
    frames_per_buffer=CHUNK
)

while 1:
    data = stream.read(CHUNK)
    dataInt = struct.unpack(str(CHUNK) + 'h', data)
Eingang: Ton z. B. 1000Hz
Wie kann ich das an den Zahlen erkennen?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ein Stichwort ist Fourier-Transformation.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten