Sound: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(PWM Sound)
K (Melody)
Zeile 33: Zeile 33:
 
  '''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)'''
  
  

Version vom 29. November 2009, 23:21 Uhr

PWM Sound

Via PWM kann auch Sound ausgegeben werden.

make menuconfig

I/O support  --->  
 [*] PWM Generator  ---> (NEW)     

   PWM Generator
     [*] PWM Wave
     [*] PWM Melody

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 */