Programm gesucht: mp3 in Samples / HEX konvertieren

Hallo!

Ich bin inzwischen in der Lage, mit einem ESP32 mehrstimmig verschiedene Wellenformen (Rechteck, Sägezahn, Dreieck) über den DAC auszugeben und würde jetzt ganz gerne mal versuchen, Sprache oder zumindest Laute auszugeben. Dafür bräuchte ich allerdings ein Programm für den PC, was die Umwandlung von mp3 in Wellenform in HEX-Daten übernehmen kann. Ich habe mal meine Stimme aufgenommen (damit ich mir mit dem WMP-Graphen die Wellenform anzeigen lassen kann) und eine Stunde lang erfolgslos versucht, den "A"-Laut mit Sinus und PW zu erzeugen, also brauche ich einen anderen Ansatz, und der könnte so eine Sample-Geschichte sein. Aber online finde ich kein PC-Programm für genannte Umwandlung. Kennt ihr eins?

Gruß
HTML-fan

"sox" oder "audacity" oder "ffmpeg"

Du kannst aber auch probieren, ob du den alten SAM vom C64 zum Laufen bringst: GitHub - s-macke/SAM: Software Automatic Mouth - Tiny Speech Synthesizer

Ich denke, ich probiere es mit Audacity, das hatte man mir schon irgendwann mal empfolen, damit kann ich wahrscheinlich mehr als mit alten C64-Programmen anfangen. Wurde das damals für den virtuellen vierten Osc verwendet? Ich liebe diesen SID-Sound.

Für den Teensy DAC habe ich wav2sketch verwendet. Da kommt dann sowas bei raus:

const unsigned int AudioSampleMetro_beat[705] = {
0x01000AEF,0x00000080,0x00000000,0x10060101,0x332D231A,0x44423E39,0x4B4A4847,0x4B4C4C4C,
0x47484A4B,0x40424445,0x2D33373C,0xA18E1423,0xBCB7B2AB,0xC7C5C2C0,0xCFCDCBC9,0xD3D2D1D0,
0xD5D5D4D4,0xD7D7D6D6,0xD8D8D7D7,0xD7D7D7D8,0xD5D6D6D7,0xD3D3D4D5,0xCED0D1D2,0xC6C8CACC,
0xB8BEC1C3,0x8EA2ADB3,0x36302616,0x4543403B,0x504D4B48,0x54535251,0x59585756,0x5C5B5A59,
0x5E5D5D5C,0x5F5F5E5E,0x5F5F5F5F,0x5D5E5E5F,0x5B5C5C5D,0x58595A5A,0x53545657,0x4D505152,
0x4245484B,0x2D343A40,0xA99B0921,0xC1BDB8B2,0xCCCAC7C4,0xD3D2D0CF,0xD7D6D5D4,0xDBDAD9D8,

...

0x9697999B,0x91929394,0x888C8D8F,0x83858588,0x00008182,0x02030201,0x04040304,0x04040404,
0x04030404,0x02030303,0x01020202,0x01000101,0x00800000,0x00000000,0x00000000,0x00000000,
0x00000000,
};

K. A. ob Du sowas suchst. Beim Teensy funktioniert es :slight_smile:

HTML-Fan:
Ich denke, ich probiere es mit Audacity, das hatte man mir schon irgendwann mal empfolen, damit kann ich wahrscheinlich mehr als mit alten C64-Programmen anfangen. Wurde das damals für den virtuellen vierten Osc verwendet? Ich liebe diesen SID-Sound.

Das alte C64 Programm ist ein vollständiger Sprachsynthesizer, convertiert von 6502 -> C , un d läuft unter Linux ohne Probleme :slight_smile:

Cool! Mehr als ein verzerrtes "Ghostbusters!" hätte ich der alten Komode 64 nicht zugetraut.

Ich habe mir mal Audacity angeguckt und eine Möglichkeit gefunden, Samples zu exportieren (Werkzeuge / Sample-Datenexport). Hat man dann wirklich nur eine Schwingung, sodass ich diese Daten mit einer bestimmten Frequenz wiederholen kann und diese dann auch erhalte?

??? Du hast dann ein wav/pcm-file, keine Fouriertransformierte.

Ich hab's befürchtet. Das funktioniert nur so semi-gut. Bekommt man auch nur eine Schwingung exportiert?

Nop.

Okaaaay, aber meintest du nicht, dass das mit Audacity geht?

Nu, suchen kannst du ja mal ... :wink:

Welches Programm kann ich denn dafür nutzen?

Güügle ist dein freind (FFT+wav). Aber was willst du überhaupt damit erreichen? Sprachausgabe kommt da keine raus.

zwieblum:
Sprachausgabe kommt da keine raus.

Nee, das würde mich auch wundern. Ich möchte aber die Wellenformen aller Laute, die die deutsche Sprache so benutzt, auf den ESP laden und dann einen Text "vorlesen", indem einfach die den Buchstaben zugeordneten Laute abgespielt werden. Zugegeben, das wird nicht gut klingen, aber es wäre ein Anfang.

Sozusagen einen Buchstabenstigitzer :slight_smile:

zwieblum:
FFT+wav

Wenn ich das google, kommen da nur Vorschläge, wie man das Spektrum einer WAV zeichnet. Nichts, wobei ich dann einfach das ESP32-Programm

byte pos = 0;
void loop(){
  dacWrite(dacPin, data[pos++]);
  delayMicroseconds(xyz);
}

schreiben kann.

Klar, du bist ja nach der FFT im Frequenzraum unterwegs, du musst erst die inverse FFT machen, damit du wieder Samples hast. Das ganze spart aber keinen Speicher :slight_smile: ... dafür müsstest du am ESP z.b. einen mp3player/decoder implementieren, den du mit den mp3-codierten Samples fütterst. Von der Rechenleistung sollte es aureichen, bruachst ja eh nicht mehr als 5khz Samplingrate.

Das spart keinen Speicher? Wenn ich für eine Stimme 8-Bit-Samples à 256 Werte benutze und vielleicht 50 Laute habe, dann nutze ich ca. 12 KiB. Wenn ich allerdings mp3 mit 3 KiB/s habe, dann muss ich nur 5 Sekunden aufnehmen und schon braucht's mehr Platz. Wenn ich dann noch sowas wie Lautschrift mit Betonungswerten und so 'nem Stuss habe, dann nutzt das vielleicht 50 Byte/s. Und mehr als 5 KHz wären schon gut, ich lasse meinen Kram momentan mit dem Zehnfachen laufen.

Ich habe es schon geschafft, mit dem ESP8266 ein grobes Stimmgerät zu bauen, indem ich über den ADC eingehenden Ton aufgenommen und auf Schwellwertüberschreitung untersucht habe. Müsste es PCs mit einer viel höheren Leistung nicht möglich sein, einfach die Frequenz zu ermitteln und eine Sampleausgabe mit der Länge Abtastrate / Frequenz hinzukriegen?

???

Was genau soll

zwieblum:
???

bedeuten?