Sound: Unterschied zwischen den Versionen
Habo (Diskussion | Beiträge) (→Melody) |
Habo (Diskussion | Beiträge) (→Wave) |
||
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 13: | Zeile 13: | ||
[*] PWM Melody | [*] PWM Melody | ||
</pre> | </pre> | ||
+ | |||
+ | See also [[HaboWAV]] | ||
=== Wave === | === Wave === | ||
+ | Getestet mit atmega644 | ||
− | Es wird eine kleine 8 Bit Mono 8000Hz PCM WAV Datei abgespielt. Die entsprechende Datei kann einfach ausgetauscht werden und nach dem neukompilieren kann man diese dann abspielen. | + | Es wird eine kleine "8 Bit Mono 8000Hz PCM WAV" Datei abgespielt. Die entsprechende Datei kann einfach ausgetauscht werden und nach dem neukompilieren kann man diese dann abspielen. |
hardware/pwm/ethersex.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 8000 H | hardware/pwm/ethersex.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 8000 H | ||
+ | |||
+ | Ist "use VFS", btw. VFS_PWM_WAV_SUPPORT aktiviert. Können die Wave Dateien auch aus dem [[VFS]] gelesen werden. | ||
+ | z.B. von der SD-Karte, indem man den Namen der Wave-Datei mit angibt. Auf diese Weise können deutlich mehr und auch größere Wave-Dateien benutzt werden. | ||
+ | pwm wav e6.wav | ||
=== Melody === | === Melody === | ||
+ | Getestet mit atmega644 und atmega128 | ||
Es wird eine Melody abgespielt die als Notenwerte abgelegt sind. Als Beispiel liegt das Lied "Alle meine Entchen" unter '''hardware/pwm/entchen.h''' bereit. | Es wird eine Melody abgespielt die als Notenwerte abgelegt sind. Als Beispiel liegt das Lied "Alle meine Entchen" unter '''hardware/pwm/entchen.h''' bereit. | ||
Zeile 27: | Zeile 35: | ||
Das struct '''songs''' ist selbst folgendermaßen aufgebaut. | Das struct '''songs''' ist selbst folgendermaßen aufgebaut. | ||
{ name, delay, transpose, struct of notes, # of notes } | { name, delay, transpose, struct of notes, # of notes } | ||
− | + | '''name:''' Anzeigename für ECMD. Bsp: '''Alle meine Entchen''' | |
− | name: Anzeigename für ECMD. Bsp: '''Alle meine Entchen''' | + | '''delay:''' Faktor für die Geschwindigkeit der Noten, btw. der Pausen. Bsp: '''20''' |
− | delay: Faktor für die Geschwindigkeit der Noten, btw. der Pausen. Bsp: '''20''' | + | '''transpose:''' Wenn ja, um wieviele Töne soll das Lied Transponiert werden. Bsp: '''4''' |
− | transpose: Wenn ja, um wieviele Töne soll das Lied Transponiert werden. Bsp: '''4''' | + | '''struct of notes:''' name des structs aus dem include das die Noten enthält: Bsp: '''entchen_notes''' |
− | struct of notes: name des structs aus dem include das die Noten enthält: Bsp: '''entchen_notes''' | + | '''# of notes:''' Errechnet aus dem struct die Anzahl der Noten: Bsp: '''songlength(entchen_notes)''' |
− | # of notes: Errechnet aus dem struct die Anzahl der Noten: Bsp: '''songlength(entchen_notes)''' | ||
Zeile 67: | Zeile 74: | ||
#endif /* PWM_NEWSONG_H */ | #endif /* PWM_NEWSONG_H */ | ||
+ | ==== Midi nach .h Konvertieren ==== | ||
+ | |||
+ | Um MIDI Dateien in brauchbare Noten Daten umzuwandeln kann man folgende Schritte durchführen: | ||
+ | |||
+ | # Zuerst eine CSV-Datei aus der Midi Datei erstellen mit dem Tool [http://www.fourmilab.ch/webtools/midicsv/ midicsv] | ||
+ | # Konvertieren der CSV nach .h mit dem Tool [http://avrprog.pbworks.com/AvrSound m2b] | ||
+ | # neue .h in Ethersex einbinden | ||
+ | ## vorhandene entchen.h überscheiben | ||
+ | ## oder das struct songs[] in pwm_melody.c um den neuen Song erweitern (include nicht vergessen!) | ||
+ | |||
+ | Konkret sieht das so aus, wenn man die existierende Datei überschreiben will | ||
+ | patha/midcsv INPUTMIDIFILE EXAMPLE.CSV | ||
+ | pathb/m2b EXAMLE.CSV > hardware/pwm/entchen.h | ||
+ | |||
+ | Ich habe eine entsprechend angepasste m2b, wegen Copyrightbedenken ist das aber noch nicht im git oder Wiki veröffentlicht. Bei Fragen oder Hilfe -> contact habo | ||
[[Kategorie:PWM]] | [[Kategorie:PWM]] | ||
[[Kategorie:Sound]] | [[Kategorie:Sound]] |
Aktuelle Version vom 13. Juni 2010, 18:09 Uhr
Inhaltsverzeichnis
PWM Sound
Via PWM kann auch Sound ausgegeben werden.
make menuconfig I/O support ---> [*] PWM Generator ---> (NEW) PWM Generator [*] PWM Wave [*] PWM Melody
See also HaboWAV
Wave
Getestet mit atmega644
Es wird eine kleine "8 Bit Mono 8000Hz PCM WAV" Datei abgespielt. Die entsprechende Datei kann einfach ausgetauscht werden und nach dem neukompilieren kann man diese dann abspielen.
hardware/pwm/ethersex.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 8000 H
Ist "use VFS", btw. VFS_PWM_WAV_SUPPORT aktiviert. Können die Wave Dateien auch aus dem VFS gelesen werden. z.B. von der SD-Karte, indem man den Namen der Wave-Datei mit angibt. Auf diese Weise können deutlich mehr und auch größere Wave-Dateien benutzt werden.
pwm wav e6.wav
Melody
Getestet mit atmega644 und atmega128
Es wird eine Melody abgespielt die als Notenwerte abgelegt sind. Als Beispiel liegt das Lied "Alle meine Entchen" unter hardware/pwm/entchen.h bereit.
Für weitere eigene Songs kann man ein include in hardware/pwm/pwm_melody.c einfügen und dann das struct songs mit weiteren Melodien aus dem Programmspeicher füllen.
Das struct songs ist selbst folgendermaßen aufgebaut.
{ name, delay, transpose, struct of notes, # of notes } name: Anzeigename für ECMD. Bsp: Alle meine Entchen delay: Faktor für die Geschwindigkeit der Noten, btw. der Pausen. Bsp: 20 transpose: Wenn ja, um wieviele Töne soll das Lied Transponiert werden. Bsp: 4 struct of notes: name des structs aus dem include das die Noten enthält: Bsp: entchen_notes # of notes: Errechnet aus dem struct die Anzahl der Noten: Bsp: songlength(entchen_notes)
Beispiele
Beispiel: hardware/pwm/pwm_melody.c anpassen
#include "newsong.h" [...] struct song_t songs[] PROGMEM = { { "entchen", 10, 4, entchen_notes, songlength(entchen_notes) }, { "newsong", 40, 1, newsong_notes, songlength(newsong_notes) }
};
Beispiel: newsong.h hinzufügen
#ifndef PWM_NEWSONG_H #define PWM_NEWSONG_H /* * The adapted melody is in the public domain. */ const struct notes_duration_t newsong_notes[] PROGMEM = { {C,8}, {D,8}, {E,8}, {E,8}, {G,16},{G,16}, {A,8}, {A,8}, {A,8}, {A,8}, {G,24},{p,8}, {p, 1}, {p, 1}, {A,8}, {A,8}, {A,8}, {A,8}, {G,24},{p,8}, {p, 1}, {p, 1}, {F,8}, {F,8}, {F,8}, {F,8}, {E,16},{E,16}, {D,8}, {D,8}, {D,8}, {D,8}, {C,24},{p,8}, {p, 1}, {p, 1} }; #endif /* PWM_NEWSONG_H */
Midi nach .h Konvertieren
Um MIDI Dateien in brauchbare Noten Daten umzuwandeln kann man folgende Schritte durchführen:
- Zuerst eine CSV-Datei aus der Midi Datei erstellen mit dem Tool midicsv
- Konvertieren der CSV nach .h mit dem Tool m2b
- neue .h in Ethersex einbinden
- vorhandene entchen.h überscheiben
- oder das struct songs[] in pwm_melody.c um den neuen Song erweitern (include nicht vergessen!)
Konkret sieht das so aus, wenn man die existierende Datei überschreiben will
patha/midcsv INPUTMIDIFILE EXAMPLE.CSV pathb/m2b EXAMLE.CSV > hardware/pwm/entchen.h
Ich habe eine entsprechend angepasste m2b, wegen Copyrightbedenken ist das aber noch nicht im git oder Wiki veröffentlicht. Bei Fragen oder Hilfe -> contact habo