Leider ist das auch wieder mitschleppen von dritt Programmen. Schade das so etwas nicht mit eigenen nativen Code geht.
Das hat einen Grund: Don't reinvent the square wheel!
Entweder du bastelst dir einen MP3-Dekoder (die MP3-Patente sind ja zum Glück ausgelaufen), was zeitaufwändig und fehleranfällig ist. Du musst dich intensiv mit dem Aufbau einer MP3-Datei befassen, musst mit fehlerhaften MP3-Daten umgehen können usw.
Oder du verwendest eine bereits vorhandene, gut gepflegte und getestete Lib dafür, die du nur einbinden musst und die Funktionen dann sofort verwenden kannst.
Mögliche Vorgehendweise:
1. MP3 in einen Buffer dekodieren
2. Samplereihenfolge umkehren (das geht wiederrum mit Peek() und Poke())
3. WAV-Header mit passenden Werten vorschnallen und das ganze wiedergeben (geht auch mit PB-eigenen Funktionen)
Oder besser noch, das ganze als Stream: Die letzten paar MP3-Frames dekodieren, umkehren und wiedergeben. Während die Wiedergabe läuft, die nächsten Frames dekodieren usw. Also sozusagen rückwärts durchseeken und dekoden.
Dann muss nicht erst das ganze Stück in RAM geladen werden und die Rechenzeit zwischen "Musikstück soll rückwärts gespielt werden" und Wiedergabe beginnt wird drastisch verkürzt.
Welchen Zweck soll das eigentlich haben, eine MP3 rückwärts abzuspielen? MP3 ist eine psychoakustische Kompression, die sich Unzulänglichkeiten vom Gehör zunutze macht. Darunter auch, dass man einen leisen Ton nach einem lauten Ton nur bedingt wahrnimmt, da er sozusagen "im Schatten" des lauten Tons steht. Da steht zu vermuten, dass der MP3-Encoder den leisen Ton teilweise oder gänzlich ausgefiltert hat, um die vorgegebene Bitrate einhalten zu können. Das funktioniert beim Rückwärtsabspielen dann nicht mehr richtig, weil dieser Effekt hörbar werden würde, wenn der leise Ton durch die Umkehrung zuerst kommt.
PS: Die PB-Funktionen kommen auch aus Libs. Mit dem einzigen Unterschied, dass sie schon fertig eingebunden sind. Eine zusätzliche Lib vom Dritthersteller erweitert quasi den Funktionsumfang von PB.