Seite 1 von 1

pyaudio: Spektrum analyzer

Verfasst: Dienstag 9. August 2022, 07:16
von eugen80
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)

Re: pyaudio: Spektrum analyzer

Verfasst: Dienstag 9. August 2022, 07:42
von __deets__
Das ist das digitalisierte Signal. Die Art, wie Computer Audio repräsentieren. Was hast du denn erwartet, wie das aussieht?

Re: pyaudio: Spektrum analyzer

Verfasst: Dienstag 9. August 2022, 08:12
von Sirius3
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))

Re: pyaudio: Spektrum analyzer

Verfasst: Dienstag 16. August 2022, 09:29
von eugen80
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?

Re: pyaudio: Spektrum analyzer

Verfasst: Dienstag 16. August 2022, 09:52
von __blackjack__
Ein Stichwort ist Fourier-Transformation.