Sound: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(Midi nach .h Konvertieren)
(Midi nach .h Konvertieren)
Zeile 78: Zeile 78:
 
# neue .h in Ethersex einbinden
 
# neue .h in Ethersex einbinden
 
## vorhandene entchen.h überscheiben
 
## vorhandene entchen.h überscheiben
## oder songs[] um den neuen song erweitern
+
## 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
 
Konkret sieht das so aus, wenn man die existierende Datei überschreiben will

Version vom 6. April 2010, 16:05 Uhr

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

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:

  1. Zuerst eine CSV-Datei aus der Midi Datei erstellen mit dem Tool [1]
  2. Konvertieren der CSV nach .h mit dem Tool [2]
  3. neue .h in Ethersex einbinden
    1. vorhandene entchen.h überscheiben
    2. 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