Hallo ! Ich habe einen ATmega168 so programmiert, dass dieser Sounddateien von einer SD-Karte liest und über PWM ausgibt. Mein Problem ist, dass zwischen den einzelnen Sound-Tracks eine kurze Pause entsteht. Hat jemand eine Idee??? Ich benutze das Filesystem von Roland Riegel. Kann ich damit irgendwie mehrere Dateien gleichzeitig öffnen?
> Hat jemand eine Idee???
Hmmm... Entweder ein Gesamtlied machen oder kurz vor Erreichen des Endes
vom aktuellen Lied das nächste in nem Buffer bereits zwischenspeichern.
Ralf
Gesamtlied geht nicht, da die Reihenfolge nicht immer gleich ist, d.h. von Aussen mit Tastern beeinflusst wird. Und das in den Buffer laden setzt voraus, dass ich mehrere Dateien gleichzeitig öffnen kann. Was bisher nicht funktioniert. Ist es Möglich mehrere Dateien zu öffnen indem ich dieses hier ändere?: fat16_config.h #define FAT16_FILE_COUNT 1 --> z.B. in 5 und anstatt im Programm dann fat16_close_file(x); einfach fat16_seek_file(x, &file_pos, FAT16_SEEK_SET); Geht das ???? Macht das Sinn ?
Sven W. schrieb: > Ist es Möglich mehrere Dateien zu öffnen indem ich dieses hier ändere?: > > fat16_config.h > #define FAT16_FILE_COUNT 1 --> z.B. in 5 sieht wohl so aus > und anstatt im Programm dann > > fat16_close_file(x); > > einfach > > fat16_seek_file(x, &file_pos, FAT16_SEEK_SET); > > > Geht das ???? Macht das Sinn ? Nein, das macht keinen Sinn. Wenn du mehrere Files öffnen willst, dann wäre wohl fat_open_file bzw. fat_close_file der logische Ansatzpunkt. http://www.roland-riegel.de/sd-reader/doc/fat_8h.html
Karl Heinz Buchegger schrieb: > Wenn du mehrere Files öffnen willst, dann wäre wohl fat_open_file bzw. > > fat_close_file der logische Ansatzpunkt. > > > > http://www.roland-riegel.de/sd-reader/doc/fat_8h.html OK. Das mit fat_open_file bzw. fat_close_file war schon klar. Mit fat16_seek_file(x, &file_pos, FAT16_SEEK_SET); wollte ich auch nur den Pointer wieder auf den Anfang der Datei setzen, um diese ggf. nochmals abspielen zu können. Gibt es eine Begrenzung für die Anzahl der geöffneten Dateien ? Und kann ich irgendwie alle auf einmal schließen ?
Sven W. schrieb: > Karl Heinz Buchegger schrieb: >> Wenn du mehrere Files öffnen willst, dann wäre wohl fat_open_file bzw. >> >> fat_close_file der logische Ansatzpunkt. >> >> >> >> http://www.roland-riegel.de/sd-reader/doc/fat_8h.html > > OK. Das mit fat_open_file bzw. fat_close_file war schon klar. > Mit fat16_seek_file(x, &file_pos, FAT16_SEEK_SET); wollte ich auch nur > den Pointer wieder auf den Anfang der Datei setzen, um diese ggf. > nochmals abspielen zu können. Wenn du eine Datei schliesst und wieder öffnest, wird sie sowieso von Anfang an abgespielt. > Gibt es eine Begrenzung für die Anzahl der geöffneten Dateien ? Musst du die Doku lesen. Aber das von dir angeführte #define klingt doch schon mal nicht schlecht. An deiner Stelle, würde ich mir mal im Source Code ansehen, wozu dieses #define benutzt wird. Du hast ja den Source Code, da darf man ruhig hineinschauen. > Und kann ich irgendwie alle auf einmal schließen ? Du musst doch sowieso über alle vom System angeforderten File-Handles Buch führen. Irgendwie hab ich den Eindruck, du erwartest da etwas zu viel vom File-System. Ein File-System ist normalerweise eine einfache Sache: Du öffnest ein File und kriegst einen 'Handle' zurück. Dieser Handle repräsentiert in weitere Folge das File. Bei jedem Write, bei jedem Read, bei jedem Close, bei jeder Operation auf dem File identifiziert dieser Handle, welches der geöffneten Files gemeint ist. Mehr steckt da nicht dahinter. Und daher musst du dir selbstverständlich auch dieses Handle aufheben.
Erstmal Danke für die Antworten... Karl Heinz Buchegger schrieb: > Wenn du eine Datei schliesst und wieder öffnest, wird sie sowieso von > > Anfang an abgespielt. Aber genau das Schließen und wieder Öffnen will ich ja vermeiden. Ich denke, dass das diese Pause zwischen den Tracks ausmacht. > >> Gibt es eine Begrenzung für die Anzahl der geöffneten Dateien ? > > > > Musst du die Doku lesen. Aber das von dir angeführte #define klingt doch > > schon mal nicht schlecht. An deiner Stelle, würde ich mir mal im Source > > Code ansehen, wozu dieses #define benutzt wird. Du hast ja den Source > > Code, da darf man ruhig hineinschauen. Es sollte passen:
1 | ...
|
2 | /**
|
3 | * \ingroup fat_config
|
4 | * Maximum number of file handles.
|
5 | */
|
6 | #define FAT_FILE_COUNT 1
|
7 | ...
|
> >> Und kann ich irgendwie alle auf einmal schließen ? > > > > Du musst doch sowieso über alle vom System angeforderten File-Handles > > Buch führen. > Ist soweit klar, wenn das Programm ein Ende hat und ich nicht wie beschrieben, eigendlich alle Dateien geöffnet halten will.
Sven W. schrieb: > Erstmal Danke für die Antworten... > > > Karl Heinz Buchegger schrieb: >> Wenn du eine Datei schliesst und wieder öffnest, wird sie sowieso von >> >> Anfang an abgespielt. > > Aber genau das Schließen und wieder Öffnen will ich ja vermeiden. Ich > denke, dass das diese Pause zwischen den Tracks ausmacht. Ich hab dich immer noch nicht. Da gibt es doch noch einen Buffer (eine FIFO) dazwischen. Du liest aus einem File und stellst das Gelesene erst mal in einen Zwischenbuffer, von wo aus es dann an die Soundausgabe geht. Dieser Buffer ist groß genug, dass er die Pause überbrücken kann, die das Filesystem braucht um das nächste File zu öffnen. D.h. während sich das SD-System damit abmüht, das File zu finden, düdelt im Hintergrund (Interrupt?) das Soundsystem vor sich hin. Das File wird nicht erst dann geöffnet, wenn das vorhergehende Lied komplett abgespielt wurde, sondern wenn das vorhergehende komplett gelesen wurde. Das ist nicht dasselbe, denn wenn die letzten Daten vom vorhergehenden File gelesen sind, sind sie ja noch nicht abgespielt worden. Du hast also hier deine Zeitreserve um das nächste File zu öffnen und die ersten Daten zu lesen, während noch das letzte File abgespielt wird.
Hm, das mit dem Buffer ist zu überlegen... Das könnte mir die nötige Zeit verschaffen. Momentan werden die Daten direkt von SD in den Timer geladen. Danke für den Tipp! Jetzt muss ich nur noch grübeln, wie ich diesen Zwischenschritt über den Buffer einbaue...
Vielleicht mal ein paar Projekte zum Vergleich, evtl. Kann man daraus Erkenntnisse ziehen: http://elm-chan.org/he_a_e.html Z.B. Portable PCM Player
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.