Forum: Mikrocontroller und Digitale Elektronik AVR Atmega - Mehrere MP3 / WAV-Dateien gleichzeitig ausgeben / überlagern


von Alexander R. (alese)


Lesenswert?

Hallo,

durch die Suche und dem Stöbern in Beiträgen, habe ich schon sehr viele 
Infos gefunden, die ich für mein Projekt verwenden kann. Nur habe ich 
noch nichts zu folgendem Problem gefunden:

Ich möchte mehrere Töne eines Musikinstrumentes (sehr kurze Samples, 
evtl. nur 1-3 Wellenlängen) auf einer SD-Card ablegen (nach Möglichkeit 
WAV oder MP3, damit Benutzer selbst Samples erstellen kann) und diese 
als Loop Ausgeben. Soweit sehe ich da kein Problem.

Nur will ich dies Mehrstimmig machen, d.h. ich gebe z.B. das Sample für 
den Ton C aus und gleichzeitig das Sample für z.B. G und dann noch z.B. 
E.

Es sollte möglich sein, 4 Samples gleichzeitig auszugeben.

Bin also auf der Suche nach einer Art Mixer (Software oder Hardware) 
welches es mir ermöglicht die 4 Samples gleichzeitig auf einen 
Stereo-Ausgang (für Kopfhörer) auszugeben. Es sollte auch möglich sein, 
1 der 4 Samples von der Abspielgeschwindigkeit her zu beeinflussen.

Habe hier Atmega644 und Atmega128 zur Verfügung.

Hat jemand sowas schon gemacht oder irgendwelche Ideen dazu? 
Decoder-Chips, RAW WAV Daten, andere Chips, evtl. externes RAM 
verwenden?

Danke

Alex

von holger (Gast)


Lesenswert?

>Habe hier Atmega644 und Atmega128 zur Verfügung.

Naja, das ist wohl eher eine Aufgabe für einen DSP;)

von Alexander R. (alese)


Lesenswert?

holger schrieb:
>>Habe hier Atmega644 und Atmega128 zur Verfügung.
>
> Naja, das ist wohl eher eine Aufgabe für einen DSP;)

Irgendwelche Empfehlung? Atmega wird ja dann aber trotzdem noch 
benötigt, oder? Zumindest brauch ich den für Buttons usw. noch.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Also wenn du WAV nimmst sollte auch ein AVR reichen, wie sind den die 
sonstigen Bedingungen?
- Zeit?
- Budget?
- Nötige Zuverlässigkeit?
- Stückzahl?

Du hast prinzipiell ja zwei Möglichkeiten:
 4 DACs und Analog mischen
 1 DAC und Digital mischen

Oben sind ja schon ein paar Hinweise gegeben, ob das so wirklich 
funktioniert (einfache Addition) müßte man ggf einfach mal am PC 
ausprobieren, oder etwas im Internet forschen (du bist nicht der Erste 
der zwei Sounds überlagern will ;)

von Ben _. (burning_silicon)


Lesenswert?

ich fürchte so ein AVR ist nicht schnell genug um zwei signale 
gleichzeitig zu verarbeiten, zwei MP3's wohl erst recht nicht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ben _ schrieb:
> ich fürchte so ein AVR ist nicht schnell genug um zwei signale
> gleichzeitig zu verarbeiten, zwei MP3's wohl erst recht nicht.
Begründung? Es ging doch gar nicht um MP3 ich schrieb doch extra WAV.

Bei 44.1khz hat ein AVR etwa 450 Takte Zeit das Signal zu verarbeiten, 
und falls es auf eine Simple Addition hinausläuft ist das allemal zu 
schaffen.

von Ben _. (burning_silicon)


Lesenswert?

ok und wo bekommt er die daten her? stereo bitte!

von Thomas B. (escamoteur)


Lesenswert?

Na bei MP3 wirds das addieren wohl kaum funktionieren.

Ich will ein meinem aktuellen Projekt auch zwei MP3 Sounds gemischt 
ausgeben. Habe mich aber entschlossen in zwei VS1011 zu investieren, 
genau genommen sogar zwei komplett getrennte MP3-Player mit eigenem AVR 
die von einem Master AVR gesteuert werden sollen.

Die Audiosignale mische ich dann mittels einem Summierverstärker.

Ist natürlich etwas aufwendiger und teurer, hängt halt davon ab wie 
teuer die Lösung sein darf.

Gruß
Tom

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ben _ schrieb:
> ok und wo bekommt er die daten her? stereo bitte!
Er schreib doch das er das gerne von SD karte lesen würde, und das ein 
externer RAM ggf auch eingesezt werden soll.
Von Stero stand da nun überhauptnix und würde bestenfalls den AUfwand 
verdoppeln.

von Alexander R. (alese)


Lesenswert?

Morgen zusammen,

noch ein paar Infos:

wenn möglich sollte es recht einfach gehalten sein. Auch nicht zu teuer. 
Vorerst nur mal ein einziges Teil für mich, wenn es gehen sollte wie 
gedacht, dann evtl. mehr. Massenproduktion ist nicht geplant. Zeitlich 
keine Einschränkung.

WAV zwecks einfacherer Verwendung bevorzugt, evtl. für ganz einfache 
Fälle könnte man das auch in ein EEPROM auslagern, wenn die Daten nicht 
so groß sind. Mono reicht momentan vollkommen aus. Sollte aber trotzdem 
gute Qualität sein.

Natürlich kann es auch aufwendiger werden, wenn die einfachen Sachen 
nicht gehen. Aber die werden erst getestet.

Ich will nur schauen, daß das ganze auch von nicht so geübten aufgebaut 
werden kann (z.B. minimal SMD) und evtl. so wenig Platz wie möglich 
braucht.

Wenn ich was richtig ausgefeiltes haben will, könnte ich ja gleich AVR32 
oder ARM-Prozessoren einsetzen. Die wären stärker. Aber vorerst soll mal 
ein Atmega reichen, da die Sachen dazu vorhanden sind. Ansonsten muss 
ich wieder in Hardware investieren und alles wird teurer.

Die Eierlegende-Wollmilchsau mit AVR32 oder ARM7/9 und vielen 
Spielereien wie Display usw. kann ja irgendwann als Extra Projekt 
angegangen werden.

Die Hauptaufgabe besteht einfach darin, verschiedene Taster abzufragen 
und je nach Kombination, einen entsprechenden Ton (bestehend aus 
Einzelton oder eben mehreren Tönen überlagert) auszugeben (Art 
elektronische Flöte).

Ich weiß, es gibt solche Dinge bereits zu kaufen, kosten erstens sehr 
viel und bieten nicht das, was ich noch vorhabe und man kriegt keine 
Quellen usw. da ja Geld damit verdient werden will.

Was genau anders sein soll, wird noch nicht verraten, erst wenn es 
soweit fertig ist. Die ganzen anderen Sachen zwecks WAV usw. werden 
natürlich hier zur Verfügung gestellt.

Ich werd auf jeden Fall die ganzen Software-Dinge erstmal testen.

Gruß

Alex

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mach erstmal einen Test auf dem PC für das Überlagern, wenn du da den 
Alorithmus hast kann man das viel besser abschätzen.
Wenn die Anzahl smaples beschränkt sind, könntest du die Überlagerung 
auch am PC vorberechnen und dann einfach nur das passende WAV abspielen 
Platz genug ist auf so einer SD karte allemal...
Wenn du dann die SD Karte einfach im Blockmodus beschreibst ohne 
Dateisystem fällt auch da eine ganze Menge overhead weg.

Für den AVR bleibt dan nurnoch: Lesen von der Karte je nach Zustand, 
ausgabe auf DAC oder R2R.

von Alexander R. (alese)


Lesenswert?

Hi,

Läubi .. schrieb:
> Wenn die Anzahl smaples beschränkt sind, könntest du die Überlagerung
> auch am PC vorberechnen und dann einfach nur das passende WAV abspielen
> Platz genug ist auf so einer SD karte allemal...
> Wenn du dann die SD Karte einfach im Blockmodus beschreibst ohne
> Dateisystem fällt auch da eine ganze Menge overhead weg.

das wäre auch noch eine Möglichkeit.

von öhm (Gast)


Lesenswert?

> WAV zwecks einfacherer Verwendung bevorzugt, evtl. für ganz einfache
> Fälle könnte man das auch in ein EEPROM auslagern, wenn die Daten nicht
> so groß sind.

...

> Sollte aber trotzdem gute Qualität sein.

LOL

Das ist ja von keinerlei Kenntnis getrübt.

von MeinerEiner (Gast)


Lesenswert?

Ich hab schon mal versucht, Waves von ner SD-Karte mit nem AVR 
abzuspielen.
Ohne Zwischenpuffer im RAM gehts mit 8000 kHz, Mono, 8 Bit nicht 
ruckelfrei.
Und selbst mit Puffer ist die Soundqualität dermassen besch*...eiden...
Für synthetische Klänge (vgl. Uzebox) ist so'n AVR zwar ok. Aber für 
direkte Soundwiedergabe von Waves... naja.

von Hans (Gast)


Lesenswert?

Hallo,

weiß wenn einer genau, wie man diese Übergange hinbekommt? Hat da jemand 
schon einen Algorithmus entwickelt? Oder eine Idee wie das prinzipiell 
geht (ich kann mir nicht vorstellen, dass eine Simple Addition der 
Samples reicht) ?

Gruß
Hans

von Alexander R. (alese)


Lesenswert?

öhm schrieb:
> Das ist ja von keinerlei Kenntnis getrübt.

tja, da das alles immer noch im groben Planungsstadium ist und noch 
keine Versuche gemacht wurden, trifft das auch zu.

Oder ist das bei Dir anders, wenn Du irgendeine Idee hast von etwas, das 
Du noch nie gemacht hast?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Alexander Ruof schrieb:
> öhm schrieb:
>> Das ist ja von keinerlei Kenntnis getrübt.
>
> tja, da das alles immer noch im groben Planungsstadium ist und noch
> keine Versuche gemacht wurden, trifft das auch zu.
>
> Oder ist das bei Dir anders, wenn Du irgendeine Idee hast von etwas, das
> Du noch nie gemacht hast?
Laß dich nicht ärgern, ich würde zur Zeit wirklich die Lösung mit 
vorberechneten Samples bevorzugen, wenn man dann noch eine Feste 
Blockgröße nimmt und die SD Karte im RAW Modus betreibt sollte auch die 
Datenrate schaffbar sein für Mono.

von öhm (Gast)


Lesenswert?

> tja, da das alles immer noch im groben Planungsstadium ist und noch
> keine Versuche gemacht wurden, trifft das auch zu.

Im Planungsstadium würd ich erstmal die nötige Datenrate ausrechnen.
Da braucht es keine Versuche.

Aber frickel ruhig weiter.

von Hans (Gast)


Lesenswert?

Hallo Richard,

das geht aber doch nur bei unkomprimierten Formaten, also wav und pcm, 
bei mp3 wohl nicht, oder ? Weil er schrieb anfänglich was von mp3, und 
dabei konnte ich mir das nicht "vorstellen" dass es so einfach geht :)
Bin aber auch nicht so mit dem Aufbau der Audiostreams vertraut, hatte 
halt nur überlegt, ob das in meinem Mp3 Player (mit VS1053) realisierbar 
ist und so eine Fade Geschichte zu implementieren, wie es z.B Winamp 
bietet.

Gruß
Hans

von Alexander R. (alese)


Lesenswert?

Hi,

MP3 war nur als Möglichkeit neben WAV genannt.

Infos bezüglich WAV mixen habe ich zwar gefunden, aber wenn dann in C#, 
oder unter zuhilfenahme von DirectX oder Win-Libraries.

Zumindest C# kann man lesen und die Infos herausziehen. So schwer sieht 
das nicht aus.

Da ja die Atmegas zu schwach sein werden und ich durch Zufall hier im 
Forum gefunden habe, daß der AVR DRagon nun wohl auch die AVR32 (UC3) 
Typen programmieren und debuggen kann, bin ich am überlegen, ob ich mir 
nicht einfach von Alvidi.de das AVR32 Modul mit Atmel AVR32 AT32UC3A1512 
(bis 66 MHz, 37,90 EUR) holen soll. Ist ja als Audio-Device mit 
Audio-DAC (bis 50 kHz) und MP3/WMA unterstützung angepriesen.

Das sollte auf jeden Fall stark genug sein, für das, was ich vorhabe.

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.