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
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
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.
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)
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
... 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.
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
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
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.
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
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 ;)
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
Hier ist ne Appnote für ADPCM Encoder-Decoder in C. http://ww1.microchip.com/downloads/en/AppNotes/00643.zip
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.
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
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 :-)
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. ;)
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
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.