Wer kennt den Esp32 s3 und macht Audio damit?

Gast #7356080
Lesenswert?
• ▲
▼

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
Lesenswert?
• ▲
▼

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
Lesenswert?
• ▲
▼

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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.