ich hab mich grad ein wenig in OpenAL eingearbeitet, und klappt alles soweit wunderbar. Was ich aber noch nicht rausgefunden habe ist, wie ich daten streamen kann.
Früher habe ich immer Bass.dll benutzt, und dort gab es halt einen callback "getBuffer" oder so der immer neue daten angefordert hat.
Wie funktioniert das bei OpenAL..? Ich möchte ja schließlich nicht die komplette audiodatei erst einlesen bevor ich sie abspiele..
Registriert: Mi Dez 03, 2008 12:01 Beiträge: 167 Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Das ist relativ einfach, man hängt nicht nur einen Buffer an den Source sondern mehrere. Man fragt dann regelmäßig ab, ob ein Buffer schon abgespielt wurde, füllt ihn dann mit neuen Daten und fügt ihn wieder an.
Das ist relativ einfach, man hängt nicht nur einen Buffer an den Source sondern mehrere. Man fragt dann regelmäßig ab, ob ein Buffer schon abgespielt wurde, füllt ihn dann mit neuen Daten und fügt ihn wieder an.
Mh, ja.. das hatte ich auch gefunden... aber, woher weiß ich denn wieviel vom Buffer schon abgespielt wurde? Wenn ich das nicht weiß kann es sehr schwer werden Bild und Ton synchron zu halten..
Registriert: Di Jul 01, 2003 18:59 Beiträge: 887 Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Did you already look at my delphi openal site? http://www.noeska.com/doal and for the latest sources look at the subversion server. (it should be back online again, my adsl modem died this weekend)
Registriert: Mi Dez 03, 2008 12:01 Beiträge: 167 Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Zur Ergänzung: Man kann auch abfragen, wieviel von einem Buffer abgespielt wurde, indem man alGetSource mit der Konstanten AL_BUFFERS_PROCESSED nutzt. (steht sogar im DGL-Wiki )
_________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak
nach langer Zeit mach ich grad an meinem AudioSystem wieder weiter. Läuft soweit alles einwandfrei und wunderbar.
Einziges problem im moment.. man muß bei OpenAL ja ständig überprüfen ob wieder Buffer nachgefüllt werden müßen etc.
Das mache ich im moment einfach in meiner Game-Loop am ende jedes Frames - würde es aber gern einfach in einen eigenständigen Thread auslagern.
Jetzt hab ich einfach mal nen (Posix-)Thread erstellt und in diesem dann die buffer-update geschichte gemacht.. und, wie leider wohl zu erwarten war stürzt es ab...
Wie wird sowas normaler weise gelöst..? Oder ist der weg es einfach am ende jedes frames zu updaten schon richtige?
Aya~
EDIT: Hat sich prinzipiell schon erledigt... ich hab das update jetzt in nem thread und synchronize es immer mit dem MainThread
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Das wäre auch die übliche Vorgehensweise gewesen Als ich damals für Yager gearbeitet hab hatte ich viel Spaß mit Ogg und OpenAL, echt mal was was wirklich gut funktioniert.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.