Forum: Mikrocontroller und Digitale Elektronik Mehrere Sound-Dateien mit Atmel gleichzeitig ausgeben


von Mina (Gast)


Lesenswert?

Hallo zusammen !

Ich bin relativ neu in der Welt des µC, habe aber schon einige
kleinere Projekte fertiggestellt. Ich programmiere hauptsächlich über 
Bascom-AVR.

Ich suche nach einer Möglichkeit oder Hardware, die mehrere 
Sound-Dateien (WAV),gesteuert durch einen Atmel (ATtiny oder ATmega), 
gleichzeitig/parallel ausgeben kann. Auch sollte die Wiederholung eines 
Soundfiles nahezu "Lückenlos" möglich sein. Ich habe derzeit ein 
WTV020-M01 Modul im Test, womit ich zwar Soundfiles (WAV & AD4) 
abspielen kann , von der micr-SD-card die das Modul hat, aber zwischen 
den Files oder bei Wiederholung, dauert es fast 1s. Die Unterbrechung 
ist zu lange. Ausserdem kann man keine Sounds gleichzeitig abspielen.

Hier der Link zum WTV020 und dem Steuerprogramm :

https://www.robotikhardware.de/download/Soundmodul_WTV020.pdf

Ich suche nach einer Alternative dafür.
Wäre super , wenn jemand einen Tipp hätte.

Gruß Mina

von Mina K. (mina-c)


Lesenswert?

PS: mir ist schon klar, dass es "etwas" zeit benötigt, eine Sound-Datei 
zu laden, aber die Pause erscheint mir sehr lange. Auch wenn ich nur 
eine Sound-datei abspiele und dann direkt wiederhole, ist da eine sehr 
lange Lücke. Entweder liegt das an der Architektur des WTV020 oder ist 
es das Programm? Ich habe zum Testen exakt das Beispiel-PRG benutzt (aus 
dem Link-PDF) , bis auf einige Änderungen Am Anfang des PRG (ATmega8 
statt 644p und Programmercode weggelassen).

Gruß Mina

von Falk B. (falk)


Lesenswert?

Wenn gleich so ein AVR schon recht potent ist, so wird das mit mehreren 
wav-Files eher schwierig. Außerdem, was ist bei dir mehrere? 2, 10?

von Dr. Sommer (Gast)


Lesenswert?

Bei SD Karten hat man immer eine Latenz. Weiß das Programm denn vorher 
schon was als nächstes gespielt werden soll und könnte Daten schonmal 
vor-laden? Wie groß ist die gesamte Datenmenge?
Vielleicht ist das STM32F7 Discovery sinnvoll - es hat einen per SD-bus 
angebundenen microSD-Slot (schnell), 8 MByte RAM (viel Puffer für 
Sound-Daten), genug Rechenleistung um eine Menge Sounds zu kombinieren 
und einen Audio-Codec und Klinke-Buchse um das Signal auf Kopfhörer oder 
Lautsprecher auszugeben. Vielleicht ist aber ein oller R-PI 
sinnvoller...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was bedeutet "gleichzeitig"? Gleichzeitig auf mehreren separaten 
Audioausgängen (d.h. ein Audiofile pro Ausgang), oder gemischt auf einem 
Audioausgang?

von Mina K. (mina-c)


Lesenswert?

Guten Morgen !

Also: die Dateien liegen als WAV oder AD4 Format alle nacheinander auf 
der SD
Karte. Diese müssen lt. PDF des WTV020

https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Widgets/WTV020SD.pdf

alle als 0000.WAV, 0001.WAV...usw. (oder .AD4) benannt sein. Sampling 
Rate AD4 = 6-36KHz, WAV 6-16KHz. 16 Bit DAC/PWM Audio output. Insgesamt 
512 Dateien, die Grösse spielt wohl keine Rolle.
In meinem Fall liegen die Dateien mit einer Abtastrate von 11025 in Mono 
vor und sind zwischen 1 KB und ca 110KB gross.

Das ganze ist gedacht als Geräusch Modul für ein RC-Modell. Je nach 
Knüppelstellung oder welcher Kanal aktiv ist, soll ein entsprechendes 
Geräusch aktiv sein-z.B. Motor-Leerlauf. Dafür müsste ich aber z.b. für 
den Leerlauf eine Loop abspielen können ohne Lücke.

Mehrere Dateien gleichzeitig muß nicht unbedingt sein, aber lückenlos 
nacheinander , bzw loop ohne (nennenswerte) Lücke.

Das STM32F7 Discovery ist wohl definitiv zu gross.
Was ein R-Pi ist muss ich mal googeln...

Gruß Mina

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Mina K. schrieb:
> Was ein R-Pi ist muss ich mal googeln...

Ein raspberry pi.


Für Deine Anwendung halte ich das für kompletten Overkill. Das schafft 
ein halbwegs geschickt programmierter 8-Bit-AVR, auch dann, wenn er die 
Audiodateien von einer SD-Karte lädt. Sinnvoll ist es, diese dann gleich 
in einem einheitlichen (alle in der gleichen Samplerate!) 
unkomprimierten Format abzuspeichern, damit sie ohne größere 
Konvertierung/Interpretation an den DAC ausgegeben werden können.

von Dr. Sommer (Gast)


Lesenswert?

Mina K. schrieb:
> Insgesamt 512 Dateien, die Grösse spielt wohl keine Rolle.

Schade. Hätte man die gesamt Größe gewusst, könnte man überlegen ob die 
Nutzung eines Flash IC's sinnvoll wäre; darauf kann man deutlich 
einfacher und schneller zugreifen. Vielleicht hätte sogar ein uC mit 
großem internem Flash gereicht.

von foobar (Gast)


Lesenswert?

Du hast aber schon sichergestellt, dass die Soundfiles selbst nicht 
Stille am Anfang oder Ende haben?

von Mina K. (mina-c)


Lesenswert?

Hallo !

Alle in der gleichen Sample-Rate wäre ja gegeben. Liegen bei mir alle 
als AD4 mit 11025 Rate auf der SD. Nur die Verarbeitung ist jetzt halt 
ein "Rätsel" für mich. Es gibt solche Fahrgeräuschmodule z.B. für 
Panzer. Diese sind dann in einem fahrtregler integriert und spielen auch 
Sound-Dateien (die man übertragen kann) ab. Aber so ein 
Fahrtregler-Modul ist dann sehr speziell (viele Funktionen die ich nicht 
brauche/die nicht passen) und kostet gut 250€. Das ist auch zu drüber. 
Ich habe ja eine gute Grundlagen mit den Atmel-AVR's.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

SD-Karten zu lesen ist nun auch keine Raketenwissenschaft und hat 
--sofern man die restlichen Rahmenbedingungen sinnvoll anpasst-- auch 
keinen Overhead, der in sekundenlangen Pausen o.ä. resultiert.

von Herbert (Gast)


Lesenswert?


von Mina K. (mina-c)


Lesenswert?

Okay, aber DA fehlt mir die wichtige Info , oder ich mache was falsch 
bei der Software (Beispiel-PRG aus dem PDF). Leider sind die Fakten 
momentan so.
Generell klappt ja alles - ich kann via Software (im 2-line-serial-mode) 
dem Modul sagen "spiel Sound XYZ" , es wird sogar die "busy"-Leitung 
berücksichtigt. Aber die Lücken sind das Problem. Die Sound -Qualität 
ist sogar relativ gut. Ein Lautsprecher mit 3W@8R kann direkt an das 
Modul, eigentlich super...aber die Lücken.

Grüße - Mina

: Bearbeitet durch User
von Mina K. (mina-c)


Lesenswert?

Herbert schrieb:
> Beitrag "Kleines Abspielgerät für verschiedene Audiokanaäle
> gleichzeitig"

Habe ich mir angesehen. Memsolution gibt es nicht mehr und bei 
"Neurocore" kann ich mir zwar irgendwelche "Descriptions" durchlesen , 
aber ich sehe noch nicht einmal Bilder oder ein "Modul" , oder shop !?

Sorry- bin etwas verwirrt, wo ich da die entsprechende Info ziehen 
soll...

Grüße Mina

PS : es gibt ja auch diese tolle Projekt :

http://elm-chan.org/works/sd8p/report.html

Aber leider habe ich keine Ahnung von Assembler. Ich muss mich auf 
Bascom beschränken :-(

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@Mina K. (mina-c)

>In meinem Fall liegen die Dateien mit einer Abtastrate von 11025 in Mono
>vor und sind zwischen 1 KB und ca 110KB gross.

>Das ganze ist gedacht als Geräusch Modul für ein RC-Modell. Je nach
>Knüppelstellung oder welcher Kanal aktiv ist, soll ein entsprechendes
>Geräusch aktiv sein-z.B. Motor-Leerlauf. Dafür müsste ich aber z.b. für
>den Leerlauf eine Loop abspielen können ohne Lücke.

Das ist einfach.

>Mehrere Dateien gleichzeitig muß nicht unbedingt sein, aber lückenlos
>nacheinander , bzw loop ohne (nennenswerte) Lücke.

AHA!

>Das STM32F7 Discovery ist wohl definitiv zu gross.

Das kann ein kleiner ATtiny. Das Projekt wurde ja schon genannt.

>http://elm-chan.org/works/sd8p/report.html

>Aber leider habe ich keine Ahnung von Assembler. Ich muss mich auf
>Bascom beschränken :-(

Vergiss es. Das geht nur, wenn ein Assembler-Kenner dir eine passende 
Lib für BASCOM erstellt.

von Mina K. (mina-c)


Lesenswert?

Hallo !

Okay - also ist hier für mich die Reise zuende. Davon verstehe ich 
nichts.
Ich habe aber evtl. gerade noch bei der Suche im Netz etwas gefunden, 
was auf dem Projekt von Elm-Chan basiert. ELV hat sich wohl mal diesem 
open source project angenommen und den MWP1 + 2 entwickelt.

https://www.elv.de/mini-wave-player-mwp1-bausatz.html

Preislich liegt das völlig im Rahmen, Baugrösse sowieso und die
Ansteuerung über 4-Bit für 15 Sounds (bzw. 4 Taster) sollte dann über 
AVR und Bascom super gehen. Schnell, bzw. lückenlos scheint es zu sein. 
Betriebsart "0" - endlosplay, solange bis der Eingang wieder auf high 
geht...

Klingt echt gut und ist einen Versuch wert.

Aber auch mein WTV020 ist eigentlich bei Tastenbedienung extern an 
"prev" oder "next" und "play/pause" recht fix. Nur bei der Bedienung 
über die Software (Befehl Shiftout) ist es langsam, bzw habe ich die 
Lücken.

Naja.
Danke erstmal - ich versuche es mit dem MWP1 bzw. 2

Gruß Mina

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Falk B. schrieb:
> Das kann ein kleiner ATtiny. Das Projekt wurde ja schon genannt.

Bei CD-Qualität kann der ca. 5ms puffern in seinen 512 Bytes RAM... 
Reicht das bei den üblichen Latenzen von SD-Karten, insbesondere weil 
die bei SPI ja immer Speed Class 0 haben (keine garantierte Datenrate)?

von Dr. Sommer (Gast)


Lesenswert?

Ach ich sehe gerade dass die Qualität geringer ist, wären bei 11025 
Samples/Sec dann 20ms Puffer. Geht vielleicht, aber für mehrere Kanäle 
wird's knapp, weil ja auch beliebig zwischen FAT und Dateien hin und her 
gesprungen werden muss.

von Falk B. (falk)


Lesenswert?

@Dr. Sommer (Gast)

>> Das kann ein kleiner ATtiny. Das Projekt wurde ja schon genannt.

>Bei CD-Qualität kann der ca. 5ms puffern in seinen 512 Bytes RAM...

Der OP verlangte nach 11kHz, nicht 44,1kHz. Und selbst die sind bei Mono 
mit ~ 90kB/s lächerlich wenig für eine SD-Karte, selbst die 
allerschlechtesten und billigsten. Und wenn es nur 8 Bit sind erst 
recht.

>Reicht das bei den üblichen Latenzen von SD-Karten, insbesondere weil
>die bei SPI ja immer Speed Class 0 haben (keine garantierte Datenrate)?

Welche Latenzen denn? Bei Lesen? 5ms sind da ne Ewigkeit.

von Dr. Sommer (Gast)


Lesenswert?

Falk B. schrieb:
> Welche Latenzen denn? Bei Lesen? 5ms sind da ne Ewigkeit.

Okay... Hab bisher nur hauptsächlich beim Schreiben auf die Latenz 
geschaut und da geht das manchmal bis 2sec rauf. Na dann sind F7 und 
R-PI wirklich Overkill.

von Falk B. (falk)


Lesenswert?

@Dr. Sommer (Gast)

>Okay... Hab bisher nur hauptsächlich beim Schreiben auf die Latenz
>geschaut und da geht das manchmal bis 2sec rauf.

2 Sekunden? Dann ist aber was oberfaul! Ich weiß nicht was in der 
SD-Spezifikation steht, aber 2s sind ja eine Ewigkeit!

von Dr. Sommer (Gast)


Lesenswert?

Falk B. schrieb:
> @Dr. Sommer (Gast)
>
>>Okay... Hab bisher nur hauptsächlich beim Schreiben auf die Latenz
>>geschaut und da geht das manchmal bis 2sec rauf.
>
> 2 Sekunden? Dann ist aber was oberfaul! Ich weiß nicht was in der
> SD-Spezifikation steht, aber 2s sind ja eine Ewigkeit!

Die Spezifikation gibt keine Latenzen an und fordert nur 
Durchschnitts-Datenraten. Da die 2sec-Pausen eher selten auftreten 
mittelt sich das weg. Man braucht eben sehr große Puffer. Es war aber 
auch ne ziemlich billige Karte (SanDisk); bei besseren sieht das schon 
ganz anders aus (ca 100ms).

von Falk B. (falk)


Lesenswert?

@ Dr. Sommer (Gast)

>Die Spezifikation gibt keine Latenzen an

Wirklich? Als dürfte eine Karte auch 10s Pause einlegen? OMG!

>und fordert nur
>Durchschnitts-Datenraten.
>Da die 2sec-Pausen eher selten auftreten
>mittelt sich das weg.

Das reicht auch nicht.

> Man braucht eben sehr große Puffer.

DAS ist das Problem! Vor allem bei höheren Datenraten bzw. kleineren uCs 
mit eher wenig Speicher.

> Es war aber auch ne ziemlich billige Karte (SanDisk)

Ist das eine Ramschmarke?

> bei besseren sieht das schon ganz anders aus (ca 100ms).

Klar, aber man muss ja mit dem schlimmsten rechnen, vor allem wenn es um 
den Zwischenpuffer geht. Und da wäre eine VERBINDLICHE Spezifikation 
einer maximalen Schreibpause schon sehr hilfreich.

von Dr. Sommer (Gast)


Lesenswert?

Falk B. schrieb:
> Wirklich? Als dürfte eine Karte auch 10s Pause einlegen? OMG!
Glaube schon...

Falk B. schrieb:
> DAS ist das Problem! Vor allem bei höheren Datenraten bzw. kleineren uCs
> mit eher wenig Speicher.

In Video-Kameras, für die das ja gedacht ist, arbeitet meistens kein 
kleiner uC... Da ist genug RAM für sowas.

Falk B. schrieb:
> Ist das eine Ramschmarke?
Ja, ziemlich. Die haben die SD-Karten ja auch erfunden...

Falk B. schrieb:
> Und da wäre eine VERBINDLICHE Spezifikation
> einer maximalen Schreibpause schon sehr hilfreich.
m.W. gibt's aber keine. Die Speed Class ist auch nur sehr schwammig 
definiert und greift nur unter bestimmten Bedingungen. Deswegen ja auch 
der Vorschlag mit dem Flash-IC.

von Mina K. (mina-c)


Lesenswert?

Guten Tag zusammen !

Gibt es denn noch irgendeine Chance im Code-Beispiel etwas zu verändern,
um der Lücke evtl. bei zu kommen ?

Könnte ich da etwas anders machen, um z.B. die Abspielgeschwindigkeit
der Sounddatei zu ändern? Es geht mir hauptsächlich darum einen 
Proportionalen Motor-Sound zu bekommen...

Gruss Mina

: Bearbeitet durch User
von Mina K. (mina-c)


Lesenswert?

foobar schrieb:
> Du hast aber schon sichergestellt, dass die Soundfiles selbst nicht
> Stille am Anfang oder Ende haben?

Sorry - überlesen :

Ja, habe ich: Mit Audacity bearbeitet.

Gruß Mina

von Mina K. (mina-c)


Lesenswert?

Tag !

Thema erledigt. Der ELV MWP2 (nach Elm-Chan) klappt.

Danke.

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.