Forum: Mikrocontroller und Digitale Elektronik ESP32 I2S knacken bei 540 samples audio buffergrösse?


von Pepe T. (pepe_t)


Lesenswert?

Ich hab ein testprogramm dass über I2S audio einliest und auch über I2S 
gleich wieder rausschreibt. Das funktioniert mit (16 bit) 180 samples 
buffer auch bestens. Ich brauche aber 540 samples lange buffer und das 
verursacht häufiges knacken im audio.
Der speicherverbrauch ist 2 kanäle a 4 buffer von 2x540 bytes, etwa 
9kbytes.
Hat der esp32 da probleme mit ram oder ist das ein dma problem, und wie 
kann ich das lösen? Audiochip ist der ES8388.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Pepe T. schrieb:
> Ich brauche aber 540 samples lange buffer
Warum?
Irgendwie finde ich binäre Zweierpotenzen wie ... 256, 512, 1024 ... für 
einen binären Rechenknecht immer viel handlicher.

> das verursacht häufiges knacken im audio.
"Häufig" im Sinne von wie oft?

Ich würde da mal einen Sinus oder ein Dreieck durchschicken und 
anschauen, wo es denn "knackt" und was dann fehlt...

: Bearbeitet durch Moderator
von PittyJ (Gast)


Lesenswert?

Bei 44100 Hz braucht man 245 Sample-Buffer/pro Sekunde. Das wäre also 
nicht ein Knacken, sondern ein Ton von 245 Hz, wenn es da immer beim 
Neufüllen Probleme gibt.

Was ist ein 'Knacken'?

von Pepe T. (pepe_t)


Lesenswert?

Das läuft mit 8000 samples/sek. Das knacken kommt unregelmässig, etwa 3 
mal pro sekunde. Unangenehm laut.

Die 540 samples braucht der codec. Da der codec ziemlich zeitintensiv 
ist klappt das "3 mal 180 samples einsammeln" und dann codec 
laufenlassen nicht so einfach.

von Falk B. (falk)


Lesenswert?

Pepe T. schrieb:
> Das läuft mit 8000 samples/sek. Das knacken kommt unregelmässig, etwa 3
> mal pro sekunde. Unangenehm laut.

Ich tippe auf ein Softwareproblem bei der Bufferumschaltung.

von mm (Gast)


Lesenswert?

Pepe T. schrieb:
> Die 540 samples braucht der codec.

Welcher Codec denn? Oben hieß es über I2S rein und gleich wieder raus. 
Das was man in der Hardware als CODEC bezeichnet, wurde oben als 
Audiochip bezeichnet. Warum der CODEC (HW) irgendwelche Puffergrößen 
haben sollte, wäre mir schleierhaft, normalerweise erwarten die 
kontinuierlich Takt und Daten.

Bitte eine weitere Salamischeibe...

Vermutlich gibt es einfach alle 16k samples einen underrun oder overflow 
in dem ominösen Codec.

von Pepe T. (pepe_t)


Lesenswert?

mm schrieb:
> Welcher Codec denn?

Melpe1200.
Der kommt aber erst dazu wenn audio in-out fehlerfrei läuft.
Der wünscht einen stream aus 540 sample chunks :)

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

So einen Effekt kenne ich wenn der Sender LeftJustified steht der 
Empfänger aber auf I2S (oder umgekehrt). Das passiert dann vorzugsweise 
bei höheren Pegeln. Sind FS1 Clock und FS64 Clock stabil und Synchron?

von Pepe T. (pepe_t)


Lesenswert?

Hab's kontrolliert, steht alles auf I2S, nix leftjustified.
Was FS1 und FS64 Clock sind weiss ich nicht.
Hab den driver von "schreibfaul" auf git geklaut.

Da der code mit 180 sample buffer problemlos läuft denke ich das problem 
ist nicht beim hardware interface.

von Thomas Z. (usbman)


Lesenswert?

Pepe T. schrieb:
> Was FS1 und FS64 Clock sind weiss ich nicht.

FS1 Clock wird auch als LR Clock bezeichnet. FS64 als Bitclock. Sender 
steht auf Master? Empfänger auf Slave?

Wenn das alles ok ist ist dein FIFO Buffer wohl nicht 100% ok.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.