Mehrere Sound-Dateien mit Atmel gleichzeitig ausgeben

Gast #5444503
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
#5444520
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
Gast #5444549
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...
#5444882
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
Persönliche Seite #5444889
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.
Gast #5444892
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.
#5444898
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.
#5444907
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
#5444922
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 :-(
#5445023
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.
#5445067
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
Gast #5445097
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)?
Gast #5445124
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.
#5445147
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.
#5445220
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!
Gast #5445228
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).
#5445240
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.
Gast #5445246
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.
#5446391
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren