Am 24. Februar, nach über einem Jahr Entwicklung, wurde die Version 0.11.22 der plattformübergreifenden Bibliothek für Aufnahme und Wiedergabe von Audio veröffentlicht. miniaudio, geschrieben in C und als Public Domain lizenziert.
Miniaudio funktioniert auf allen gängigen Desktop- und Mobilplattformen, einschließlich Windows, macOS, Linux, BSD, iOS, Android und Web (über Emscripten) ohne Drittanbieter-Abhängigkeiten.
Die Bibliothek bietet eine einfache, flexible und modulare API mit integrierten Decodern (WAV, MP3 und FLAC), erweitertem Mischen und Effektverarbeitung (einschließlich 3D), Ressourcenverwaltung, Filtern, Datenkonvertierung und vielem mehr.
Wesentliche Änderungen:
- Ab Version 0.12 wird miniaudio auf separate .c/.h-Dateien umsteigen und die einzelne Header-Datei aufgeben. Zur Vorbereitung wurde die Datei miniaudio.c im Repository hinzugefügt. Momentan ist dies lediglich ein Wrapper um miniaudio.h und MINIAUDIO_IMPLEMENTATION. In miniaudio.h wurde nichts geändert, jedoch muss ab Version 0.12 miniaudio.c für die Kompilierung verwendet werden. Es wird empfohlen, den Übergang von der Nutzung von MINIAUDIO_IMPLEMENTATION hin zur Nutzung von miniaudio.c zu beginnen. Wenn Sie Ihr Projekt weiterhin als eine einzige Kompilationseinheit bauen möchten, können Sie #include "miniaudio.c" verwenden. Diese Methode wird in Version 0.12 und darüber hinaus unterstützt.
- Die Dateien miniaudio_libvorbis.h und miniaudio_libopus.h im Verzeichnis extras sind veraltet. Jetzt wurden sie in separate .c- und .h-Dateien im Verzeichnis extras/decoders aufgeteilt. Die alten Dateien existieren weiterhin zur Abwärtskompatibilität, aber Sie müssen auf die neuen Versionen umsteigen. Der Übergang sollte unkompliziert sein.
- Es wurden die Optionen MA_SOUND_FLAG_LOOPING und MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING hinzugefügt. Diese können verwendet werden, um Sounds und verwaltete Ressourcen-Datenquellen standardmäßig für Schleifen zu initialisieren. Dies ist der empfohlene Weg, um Schleifen für Streams zu aktivieren. Die Konfigurationsoptionen isLooping in ma_sound_config und ma_resource_manager_data_source_config sind veraltet. Wenn Sie diese verwenden, sollten Sie auf die neuen Optionen umsteigen, andernfalls erhalten Sie beim Update auf eine zukünftige Version Compilerfehler.
- ma_rb_commit_read(), ma_rb_commit_write(), ma_pcm_rb_commit_read() und ma_pcm_rb_commit_write() geben nicht mehr MA_AT_END zurück. Der Grund für diese Änderung liegt darin, dass es in einem Ringpuffer kein Konzept "Ende" gibt, was den Ergebniscode unklar machte. Darüber hinaus können diese Funktionen etwas anderes als MA_SUCCESS zurückgeben, selbst wenn die Operation erfolgreich abgeschlossen wurde, was zusätzliche Verwirrung stiftete. Der richtige Weg, um zu überprüfen, ob im Ringpuffer noch Platz ist, besteht darin, den von den Funktionen rb_acquire_read/write() zurückgegebenen Frame-Zähler zu überprüfen.
- Die Implementierung der Datenquelle ma_pcm_rb wurde so geändert, dass die Ausgabe mit Stille gefüllt wird, wenn im Ringpuffer nicht genügend Daten vorhanden sind, um die Anfrage zu erfüllen. Das bedeutet, dass ma_data_source_read_pcm_frames() für ma_pcm_rb nun niemals eine Anzahl von Frames zurückgeben sollte, die kleiner ist als die angeforderte, und daher niemals MA_AT_END zurückgeben wird, was für einen Ringpuffer keinen Sinn macht, da er kein Ende kennt. Diese Änderung sollte die Nutzung des Ringpuffers als Datenquelle für ma_sound erheblich vereinfachen.
- In der Funktion ma_calculate_buffer_size_in_milliseconds_from_frames() wurde eine kleine Änderung vorgenommen, sodass sie einen auf die nächste ganze Zahl gerundeten Wert zurückgibt.
- Bei einer fehlgeschlagenen Dekodierung wird jetzt der erste aufgetretene Fehlercode zurückgegeben, anstatt MA_NO_BACKEND unabhängig von dem Fehler, wie es zuvor der Fall war.
- Die Funktion ma_device_id_equal() wurde hinzugefügt, um Geräte-IDs zu vergleichen.
- Die Unterstützung für MA_NO_RUNTIME_LINKING im AAudio-Backend wurde hinzugefügt.
- Die Dokumentation wurde aktualisiert.
- Entdeckte Fehler wurden behoben.
Quelle: linux.org.ru
