Arduino Musik

OP #4749971
Lesenswert?

Hallo,
ich würde gerne mit einem Arduino, eine Musikdatei abspielen. So etwas 
gibt es ja auch schon: 
http://www.instructables.com/id/Arduino-Chiptunes/?ALLSTEPS ,allerdings 
ist das nicht die Musik, die ich abspielen möchte, welch Wunder. Nun 
möchte ich wie in diesem Video: 
https://www.youtube.com/watch?v=tUapZ_JdHLE meine eigene Musik 
abspielen. Allerdings weiß ich nicht, wie ich die Raw-Datei in eine 
Header-Datei umwandeln soll. Denn Google hat nicht mehr den Binary file 
to C-style char array converter zum Downloaden: 
https://code.google.com/archive/p/bin2h/ . Meine Frage ist jetzt wie 
kann ich die Musikdatei in eine Header-Datei umwandeln ?
Gast #4750128
Lesenswert?

Die Musik im ersten Beitrag auf den Arduino ist doch ein einfaches 
Rechtecksignal. Alle paar ms wird die Frequenz geändert. Oder sehe ich 
das Falsch? So wie man das in den 80ern gemacht hat.
Da kann man doch keine Raw-Datei für nehmen. Die ist doch viel zu gross, 
jedenfalls für normale Arduinos.

Was verstehst du genau unter einer Raw-Datei? Ich kenne das als 16-Bit 
CD Abzüge, mit 176 KBytes pro Sekunde.
Was für einen Arduino hast du genau?
OP #4750147
Lesenswert?

PittyJ schrieb:
> Die Musik im ersten Beitrag auf den Arduino ist doch ein einfaches
> Rechtecksignal. Alle paar ms wird die Frequenz geändert. Oder sehe ich
> das Falsch? So wie man das in den 80ern gemacht hat.
> Da kann man doch keine Raw-Datei für nehmen. Die ist doch viel zu gross,
> jedenfalls für normale Arduinos.

In welchem Format soll ich denn ein Lied abspeichern ?
Ein normales Lied hat im RAW Format hat eine Größe von 4000kb
Ein Arduino Nano hat einen 32000kb Speicherplatz.

>
> Was verstehst du genau unter einer Raw-Datei? Ich kenne das als 16-Bit
Ich habe die Datei als 8-Bit abgespeichert.
> CD Abzüge, mit 176 KBytes pro Sekunde.
> Was für einen Arduino hast du genau?
Arduino Nano
Gast #4750185
Lesenswert?

Tobias M. schrieb:
> Ich habe mir jetzt Cygwin heruntergeladen. Was muss ich jetzt im Cygwin
> Terminal eingeben, so dass auch der raw-Datei eine header-Datei wird ?

Du mußt erstmal im Cygwin-Installer (diesen graphischen Paketmanager) 
nach "xxd" suchen und das ggf. installieren Wenn das geklappt hat, gib 
beim Prompt im Terminal mal "xxd -h" ein, da sollte schonmal was kommen.

Und dann machst Du:
xxd -i inputfile outputfile

Wobei Outputfile fann das C-Headerfile ist. -i wählt bei der 
Konvertierung gerade das C-Headerformat an. Das kannst Du dann einfach 
in einem geeigneten C-File als include aufnehmen.

Wenn Dein Compiler das nicht von selber erkennt, würde ich das "unsigned 
char" am Amfang des Headerfiles noch durch "const unsigned char" 
ersetzen, damit das Array auch wirklich im ROM landet und nicht etwa im 
RAM.
Gast #4750198
Lesenswert?

Bei 8bit Auflösung in Mono und 8kHz Samplingfrequenz kann man Frequenzen 
bis knapp 4kHz wiedergeben. Vor dem Runtersamplen natürlich durch einen 
Tiefpaß jagen (3.5 kHz). Das reicht dann bei 32kB für 4 Sekunden.

Man kann natürlich nach Art der alten Tracker auf dem Heimcomputer auch 
verschiedene Töne von vielleicht 100ms Länge aufnehmen und die kreativ 
hintereinandersetzen. Zwei Oktaven zu je 8 Tönen wären dann 1.6s 
Gesamtlänge, das würde passen.
OP #4750219
Lesenswert?

Nop schrieb:
> Tobias M. schrieb:
>> Ich habe mir jetzt Cygwin heruntergeladen. Was muss ich jetzt im Cygwin
>> Terminal eingeben, so dass auch der raw-Datei eine header-Datei wird ?
>
> Du mußt erstmal im Cygwin-Installer (diesen graphischen Paketmanager)
> nach "xxd" suchen und das ggf. installieren Wenn das geklappt hat, gib
> beim Prompt im Terminal mal "xxd -h" ein, da sollte schonmal was kommen.

Das hat soweit auch geklappt, wenn ich xxd -h ins Terminal eingebe, 
kommt auch jede menge.

>
> Und dann machst Du:
> xxd -i inputfile outputfile

Ich habe den inputfile eigesetzt, allerdings hat er ihn nicht gefunden.
Was kann ich tun, damit das Programm den File findet ?
>
> Wobei Outputfile fann das C-Headerfile ist. -i wählt bei der
> Konvertierung gerade das C-Headerformat an. Das kannst Du dann einfach
> in einem geeigneten C-File als include aufnehmen.
>
> Wenn Dein Compiler das nicht von selber erkennt, würde ich das "unsigned
> char" am Amfang des Headerfiles noch durch "const unsigned char"
> ersetzen, damit das Array auch wirklich im ROM landet und nicht etwa im
> RAM.
#4750251
Lesenswert?

Für den Fall, dass Du mit der von Dir eingeschlagenen Richtung doch 
nicht weiterkommen solltest, würde ich Dir zu einem von diesen Dingern 
raten.
Die Lieferzeit ist zwar etwas länger, aber für ein Bastelprojekt finde 
ich die echt brauchbar und leicht anzusteuern:

http://www.ebay.de/itm/YX5300-UART-Control-Serial-MP3-Music-Player-Module-For-Arduino-AVR-ARM-PIC-MF-/172285756859

http://www.ebay.de/itm/MP3-Musik-Player-UART-Seriell-Schnittstelle-Modul-Mit-1W-Sprecher-Fur-Arduino-GE-/172296440559
Gast #4750334
Lesenswert?

Tobias M. schrieb:
> Allerdings weiß ich nicht, wie ich die Raw-Datei in eine
> Header-Datei umwandeln soll.

Tobias M. schrieb:
> Was muss ich jetzt im Cygwin
> Terminal eingeben, so dass auch der raw-Datei eine header-Datei wird ?

Ja, sag mal, willst du nun ein Programmierer sein oder nicht?

Zu allererst eines: aus so etwas macht man keine Headerdatei, sondern 
eine C-Quelle (also deinemusik.c oder so). Und wenn dir das nicht 
gefällt, dann mach eine .inc draus, aber halte Headerfiles (*.h) sauber 
und frei von sowas.

Ansonsten schau nach, wie eine .wav aufgebaut ist und schreib dir dafür 
ein passendes Tool. Du solltest sowas können, bevor du mit dem 
Programmieren von Mikrocontrollern beginnst.

Ist ja auch ganz einfach:
- Sounddatei öffnen und in Puffer schreiben (du willst ja bloß kurze 
Stücke haben, gelle)
- eine Zieldatei kreieren und dort erstmal das reinschreiben:
1
const char name_des_sounds[] =
2
{
Dann schreibst du alle deine Samples als Dezimalzahlen mit Komma 
dahinter und an passender Stelle (z.B. alle 8 Samples) ein CRLF. 
Anschließend schreibst du:
1
};
und nochmal ein CRLF in die Datei und schließt diese. Damit hast du 
deinen Sound - allerdings unkomprimiert wie er eben in einer .wav 
drinsteht.

W.S.
Gast #4750444
Lesenswert?

Tobias M. schrieb:
> Ich habe den inputfile eigesetzt, allerdings hat er ihn nicht gefunden.
> Was kann ich tun, damit das Programm den File findet ?

Naja Du mußt das xxd-Kommando schon entweder mit absolutem Pfad zum 
Inputfile angeben, oder Du wechselst vorher im Terminal in den Ordner, 
wo das Inputfile halt ist.
OP #4750666
Lesenswert?

Jim M. schrieb:
> Tobias M. schrieb:
>> Danke, ich habe geschafft eine MP3 Datei in eine Header-Datei
>> umzuwandeln. Es sind über 400 000 Zeilen bei raus gekommen .........

Ich habe es vorher in eine RAW Datei umgewandelt.
>
> Du hättest die MP3 erst in ein RAW/WAV Format wandeln sollen,
> aber dann wären es noch vieeel mehr Zeilen geworden...
>
> Das Platzproblem könnte man mit einer SD Karte lösen.

...ja mehr oder weniger

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren