Wer kennt den Esp32 s3 und macht Audio damit?

Gast #7356080

Hi.

Ich versuche gerade auf einem ESP32S3 Audiodaten (Sinus) auszugeben. Ich habe 16Bit Werte und wollte die als 32Bit ausgeben.

Im Code habe ich I2S-Standart angegeben, aber die Daten kommen nicht rechs sondern linksbündig raus. Was kann das sein? Was muss man noch einschalten damit das richtig raus kommt?

Dann habe ich mal auf 24Bit Ausgabe umgestellt und die Wordclock ist total daneben (ca. 51KHz anstatt 48). Ein bischen daneben hätte ich ja noch verstanden aber so daneben ist nicht mal ansatzweise lustig.

Gast #7356601

Ich verwende auch den ESP32S3 allerdings mache ich nur 16bit Ausgaben. Weil es mich interessierte habe das einfach mal geändert. Nun ich habe bei mir auch diesen Fehler. Entweder ich habe auf die schnelle was vergessen oder da ist ein Fehler drin, das ist aber so blöd geschrieben das ich da nicht durchsteige.

Ich habe es folgendermassen eingestellt:

1
uint16_t Buffer[2048];
2

3
i2s_config_t i2s_config = {
4
    .mode = I2S_MODE_MASTER | I2S_MODE_TX,
5
    .sample_rate = 48000,
6
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
7
    .bits_per_chan = I2S_BITS_PER_CHAN_32BIT,
8
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
9
//    .communication_format =  I2S_COMM_FORMAT_STAND_MSB,           
10
    .communication_format =  I2S_COMM_FORMAT_STAND_I2S, 
11
    .dma_buf_count = 16,
12
    .dma_buf_len = 64,
13
    .use_apll = false,
14
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL2                                
15
};
16
i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL);
17
i2s_set_clk(I2S_NUM, 48000, (I2S_BITS_PER_CHAN_16BIT << 32) | I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_STEREO);
18

19
// jetzt Werte eintragen die man auf dem Logikanalyzer gut sieht! 
20
memset ((uint8_t*) &Buffer[0], 0x8421, sizeof (Buffer));
21
while 1
22
{
23
   i2s_write(I2S_NUM,  (uint8_t*) &Buffer[0], sizeof (Buffer), &i2s_bytes_write, portMAX_DELAY);
24
}
Gast #7356611

So ist es richtig damit das Beispiel arbeitet!

1
i2s_set_clk(I2S_NUM, 48000, (I2S_BITS_PER_CHAN_32BIT << 32) | I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_STEREO);

Mit I2S_BITS_PER_CHAN_24BIT kann ich auch das Timing Problem sehen. Da stimmt mal nichts mehr, vielleicht kann man das anpassen. Anstatt 48000 halt 46123 oder so.

Gast #7356640

Mach mal in die i2s_config

.left_align = true,

rein dann ist das auch links drin.

Warum das allerdings bei 24bit so daneben liegt habe ich auf die schnelle nicht gesehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.