Forum: Projekte & Code MegaLOL


von Ulrich R. (radiguli) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

Das sinnloseste Projekt von mir was ich bisher hatte. MegaLOL der 
sprechende AVR.
Dazu habe ich einen Lautsprecher einfach an einen Port des µC 
angeschlossen, genauer gesagt am OC0 wegen der PWM Erzeugung. Dabei gebe 
ich mit Hilfe des Timer1 immer ein neues PWM Signal auf den Ausgang. 
Aufgrund des geringen Speichers eines ATMega32 kommt man so auf ca. 
4sec. bei einer Sampelrate von 8000Hz bei 8Bit. Ein SPI – RAM von 1MB 
oder sogar eine MMC/SD – Karte wäre nicht schlecht. Aber ich wollte 
dieses Projekt klein halten. Aufgebaut habe ich das Projekt mit dem 
Pollin AVR Board. Bilder und Source und Schaltplan im Anhang oder auf 
meiner Webseite.

Gruß
Ulrich

von Joerg W. (joergwolfram)


Lesenswert?

Hmmm, dazu ist mir gleich etwas eingefallen.
Zum MIDI/RS232-80C535 Board von Wickenhäuser (1993) gab es das Programm 
"PHONEM" mit dem man ungefähr knapp 1 Minute in 32K bekam. Dazu wurden 
die Sprachdaten im Computer durch eine FFT gejagt, der Controller baute 
aus den gespeicherten Koeffizienten das Signal nach und gab es über 
Software-PWM aus...

Gruß Jörg

von Benedikt K. (benedikt)


Lesenswert?

Ich hatte mal versucht sowas nachzubauen, um viel Sprache in einen AVR 
zu bekommen:
Eine FFT, aus den Amplituden wurden die stärksten ausgesucht und alle 
anderen verworfen. So kam ich auch auf etwa 500Bytes/s, aber das ganze 
hört sich einfach nur schrecklich an (man hört die einzelnen Frequenzen 
deutlich aus dem Gemisch heraus). Am Ende habe ich das Projekt verworfen 
und einen externen Flash mit SPI angeschlossen.

von Marius (Gast)


Lesenswert?

Es gibt auch 1 bit sound, da hab ich irgendwo mal ein Programm gesehen 
wo eine 1 bit sequenz erzeugt, die man auf ein RC Glied geben muss um 
eine geglättete Wellenform zu erzeugen.

Das ganze könnte man per SPI bestimmt gut ausgeben (ähnlich wie Ulrichs 
"SPI basierte" TV Karte)

von ... (Gast)


Lesenswert?

1 Bit Sound + RC Tiefpass = PWM !

von Stefan (Gast)


Lesenswert?

Wie wär's mit CVSD (continuous variable slope delta modulation) ?

Am PC habe ich sowas mal gemacht, für ein Sample braucht man anstatt 8 
bit nur noch 1 bit. Weiß jetzt leider nicht ob man das platz- und 
performancetechnisch in nen AVR bekommt.

Stefan

von Benedikt K. (benedikt)


Lesenswert?

... wrote:
> 1 Bit Sound + RC Tiefpass = PWM !

Das ist eine Möglichkeit, in der Praxis macht man das aber anderst: 
Delta-Sigma-DAC
Selbst die heutigen >20bit ADCs/DACs arbeiten eigentlich nur mit einem 
Bit. Die Datenrate liegt dafür dann auch bei etlichen MBit/s nur um 
44kHz/16bit zu erzeugen. Sparen tut man also mit diesem Verfahren 
nichts, außer an den Kosten für hochauflösende DACs/ADCs.

von Michael U. (Gast)


Lesenswert?

Hallo,

fällt mir gerade was ein...
Amiga-Narrator-Device fällt mir dazu ein oder SAM vom C64.

Gibt es eigentlich irgendeine freie Source für eine Phonem-Basierte 
Ausgabe?

Ohne jetzt auf die Qualität einzugehen (Hauptproblem war, daß es keine 
guten deutschen Phonem-Tabellen gab), sollte das doch von der 
Rechenleistung auf einem AVR kein Problem sein, damit (fast) beliebige 
Texte vorzulesen.

Gruß aus Berlin
Michael

von Ulrich R. (radiguli) Benutzerseite


Lesenswert?

Hallo,

Also ich denke mal sowas sollte auch auf einen AVR gehen. Leider gibt es 
nicht mehr das FFT Programm "Speech" von Wickenhäuser. Sonst hätte ich 
mal so einige Phonem untergebracht (English).

Gruss
Ulrich

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Hier zum direkten Ausprobieren der alte Speak and Spell von Texas 
Istruments mit  "Linear predictive coding"  in einer Emulation:
http://www.speaknspell.co.uk/
Einfach auf das Bild links klicken, er liest ein Wort das man dann mit 
der Maus eintippen muß. Kein Phonemsynthesizer, aber ähnliche 
Sprachqualität.

von spess53 (Gast)


Lesenswert?

Hi

Wie wäre es mit einem einfach Packalgorithmus: Nicht die absoluten Werte 
speichern, sondern nur die Differenz zum vorherigen Wert. Bei max. 3 Bit 
Differenz könnte man 2 Werte pro Byte speichern (mit Vorzeichen).Nennt 
sich 'ADPCM'.

MfG Spess

von Philipp Karbach (Gast)


Lesenswert?

hallo,
hab das projekt gerade mal ausprobiert. es funktioniert nur leider bin 
ich nicht in der lage einzuschätzen ob es richtig funktioniert, wie soll 
denn der sound klingen? bzw. mit welchem tool konvertiert man wave files 
in dieses header format? sehr interessant allerdings ;)

von Ulrich R. (radiguli) Benutzerseite


Lesenswert?

Hallo,

Habe eine Wavedatei mit WinRecorder aufgenommen (8Khz 8Bit). Habe diese 
Datei duch mein Programm Winbin bearbeitet und in c eingebunden.
Das Tool gibt es auf meiner Homepage.

Gruss
Ulrich

von holger (Gast)


Lesenswert?

Da der Waveheader noch drin ist sorgt der sicher
für einen netten Knackser am Anfang ;)


von holger (Gast)


Lesenswert?

Hier ist ne Appnote für ADPCM Encoder-Decoder in C.

http://ww1.microchip.com/downloads/en/AppNotes/00643.zip

von Andreas Jakob (Gast)


Lesenswert?

Ein extrem resourcenschonender Sprachsynthesizer:

http://espeak.sourceforge.net/

"Compact size. The program and its data, including several languages, 
totals about 700 kbytes."

Ist wohl auch ein Tool dabei um die Phoneme zu erstellen.

von Michael U. (Gast)


Lesenswert?

Hallo,

@Andreas Jakob: "...totals about 700 kbytes..."

Hmmm... der SAM auf dem C64 war ca. 10kB groß und sprach englisch 
durchaus verständlich. :) Allerdings dürften dafür keine Quellen 
verfügbar sein und disassemblieren will ich den nun auch wieder nicht...

Gruß aus Berlin
Michael

von Andreas Jakob (Gast)


Lesenswert?

Hab grad dieses PIC-Projekt gefunden. Spielt die gesampelten Phoneme
des legendären SP0256 Sprachsynthesizer aus zwei 32K EEPROMs ab :

http://home.alphalink.com.au/~derekw/pictalker/main.htm

Im Download ist eine Datei allphones.bin mit den Samples
und in der tables.asm stehen die Startadressen im EEPROM
Damit lässt sich bestimmt leicht auf dem AVR eine Sprachausgabe
realisieren, auch wenn sich die Ausgabe vermutlich grausam anhört :-)

von slime (Gast)


Lesenswert?

Kann mir wer verraten wie ich ein Soundfile in das richtige Format für 
den MegaLOL wandele? Meine bisherigen Versuche mit sox hören sich leider 
alle grausig an. ;)

von Andy (Gast)


Lesenswert?

Sorry das ich den Thread mal ausgrabe ich wollte aber für eine kleine 
Frage nicht extra einen neuen Aufmachen.

Beim Schaltbild des Megalol wird direkt an den Portpin an dem die 
Ausgabe erfolgt ein 1uF Kondensator gegen masse angebracht.
Für was ist der gut, bzw welchen genauen Zweck hat der?
Da der Portpin ja dauernd mit der PWM beaufschlagt wird, wird dieser 
nicht überlastet da er den Kondensator immer umladen muß?

Sorry für die Blöden Fragen, aber ich bin noch anfänger in dieser Sache. 
:)

Andy

von Matthias L. (matze88)


Lesenswert?

Ich hab mir die Schaltung nicht angeschaut und bin mir auhc nicht ganz 
sicher: Aber theoretisch ist das ein Tiefpass, um die PWM Frequenz zu 
filtern. Der Output Pin hat ja einen gewissen Widerstand, die 1µF 
ergeben auch nen Widerstand von 1/(2*Pi*8000*1*10^-6) = 20 Ohm, was 
relativ gut funktionieren sollte. Da der Portpin nicht genug Strom 
liefern kann, fallen die Spikes der PWM raus. Trotzdem folgt die 
Kondensatorspannung der niederfrequenteren NF -> dem Audiosignal.

von Norbert S. (pianoforte)


Angehängte Dateien:

Lesenswert?

Habe es mal auf einen Atmega328P portiert.
Und es läuft.
Aber der halbe Flash des Atmega328P ist voll.

auf dem Arduino UNO geht es auch.

von chris_ (Gast)


Lesenswert?

Die Möglichkeit, viel Sprache auf einen MC zu bekommen hat mich auch 
schon länger interessiert.
Kompressionsverfahren wie sie in Handies verwendet werden, kommen auf 
ca. 2400Bit/sec. ( Stichwort LPC-Vocoder ).
Die Leistung der AVR ist meines Erachtens für einen AVR etwas zu knapp.

https://de.wikipedia.org/wiki/Vocoder

von chris_ (Gast)


Lesenswert?

Hier noch das passende Video zum Vocoder:
https://www.youtube.com/watch?v=-hqvvNcvenU

von Jack (Gast)


Lesenswert?

chris_ schrieb:
> Die Leistung der AVR ist meines Erachtens für einen AVR etwas zu knapp.

Seltsame Aussage. Du hast doch bestimmt was anderes gemeint, oder?
Ich könnte mir vorstellen, das sollte heißen "...für einen Vocoder etwas 
zu knapp", stimmt's? :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.