OpenAL
Übersicht

![]() |
VertexBetreff: OpenAL |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gehostet auf GitHub: https://github.com/oliverskawronek/openal.mod
Infos: OpenAL ist eine Plattform unabhängige 3D Sound API die ähnlich OpenGL gestaltet ist. www.openal.org/ Beinhaltet AL, ALC, ALUT und ALEXT Für ein größeres Beispiel bin ich zu müde: Code: [AUSKLAPPEN] SuperStrict
Framework Vertex.OpenAL Import BRL.StandardIO Global Device : Byte Ptr, .. Context : Byte Ptr Device = alcOpenDevice(Null) Context = alcCreateContext(Device, Null) alcMakeContextCurrent(Context) Print(String.FromCString(alGetString(AL_VENDOR))) Print(String.FromCString(alGetString(AL_RENDERER))) alcDestroyContext(Context) alcCloseDevice(Device) End mfg olli |
||
- Zuletzt bearbeitet von Vertex am Mi, Sep 09, 2015 10:04, insgesamt einmal bearbeitet
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geile Sau, ich glaubs ja nett! | ||
between angels and insects |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() In anderen Foren habe ich von 4-5% CPU Auslastung gelesen beim gestreamten abspielen. Für Spiele also ganz interessant. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wollte eigentlich Ogg und Vorbis direkt linken, da muckte mir BMax aber mal wieder herum.
Also greife ich doch auf den Standardloader Pub.OggLoader zurück der völlig verhunzte Datentypen benutzt. Hier ein Beispiel, wie man Ogg Lieder abspielt. Leider erst einmal nur statisch ![]() Code: [AUSKLAPPEN] SuperStrict
Framework Vertex.OpenAL Import Pub.OggVorbis Import BRL.FileSystem Import BRL.PolledInput Const SEEK_SET : Int = 0 Const SEEK_CUR : Int = 1 Const SEEK_END : Int = 2 Global Stream : TStream, .. Samples : Int, .. Channels : Int, .. Frequence : Int, .. OggFile : Byte Ptr, .. Size : Int, .. OggBuffer : Byte Ptr, .. Format : Int Global Device : Byte Ptr, .. Context : Byte Ptr, .. Buffer : Int, .. Source : Int, .. State : Int Stream = ReadStream("Test.ogg") If Not Stream Then Throw("Unable to load file") OggFile = Decode_Ogg(Stream, VorbisRead, VorbisSeek, VorbisClose, VorbisTell, .. Samples, Channels, Frequence) If Not OggFile Then Throw("Unable to read file") Size = Samples*2*Channels OggBuffer = MemAlloc(Size) Select Channels Case 1 Format = AL_FORMAT_MONO16 Case 2 Format = AL_FORMAT_STEREO16 End Select Device = alcOpenDevice(Null) Context = alcCreateContext(Device, Null) alcMakeContextCurrent(Context) alGenBuffers(1, Varptr(Buffer)) Read_Ogg(OggFile, OggBuffer, Size) alBufferData(Buffer, Format, OggBuffer, Size, Frequence) alGenSources(1, Varptr(Source)) alSourcei(Source, AL_BUFFER, Buffer) alSourcePlay(Source) Repeat alGetSourcei(Source, AL_SOURCE_STATE, Varptr(State)) Until State <> AL_PLAYING alcDestroyContext(Context) alcCloseDevice(Device) End Function VorbisRead:Int(Buffer:Byte Ptr, ByteSize:Int, Count:Int, Stream:Object) Return TStream(Stream).Read(Buffer, ByteSize*Count)/ByteSize End Function Function VorbisSeek:Int(Stream:Object, Offset0:Int, Offset1:Int, Origin:Int) Local Success:Int Success = -1 Select Origin Case SEEK_SET Success = TStream(Stream).Seek(Int(Offset0)) Case SEEK_CUR Success = TStream(Stream).Seek(TStream(Stream).Pos() + Offset0) Case SEEK_END Success = TStream(Stream).Seek(TStream(Stream).Size() + Offset0) End Select If Success = -1 Then Return -1 Return 0 End Function Function VorbisClose:Int(Stream:Object) TStream(Stream).Close() End Function Function VorbisTell:Int(Stream:Object) Return TStream(Stream).Pos() End Function mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darf man denn die "OpenAL32.dll" usw. in sein program-verzeichnis packen, und dies gleich mitliefern, oder muss bei der Installation ein "Dieses program benötigt OpenAL version xx.xx.xx, klicken sie hier, um die installation eines Drittanbieters zu starten" (oder so ähnlich) ? | ||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://de.wikipedia.org/wiki/OpenAL
OpenAL steht für Windows, Linux und MacOS also unter LPGL Siehe dazu http://de.wikipedia.org/wiki/LGPL Zitat: Im Gegensatz zur GPL dürfen alle Programme, welche die LGPL-lizenzierte Software nur extern benutzen, zum Beispiel als DLL Files, ihre eigene Lizenz behalten. Damit eignet sich die LGPL besonders als Lizenz für Bibliotheken, deren Benutzung man auch Programmierern proprietärer Programme erlauben will. Soll die unter der LGPL lizenzierte Software dagegen fest in ein anderes Programm eingebunden werden, muss auch das andere Programm unter der LGPL bzw. einer kompatiblen Lizenz stehen.
Aber ganz ehrlich, ich sehe im Lizensjungle auch nicht durch. Nach dem Lesen vom Wiki-Artikel habe ich mehr Fragen als Antworten zur LGPL. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
mmh... naja, ich wollte eigendlich das program als Freeware entwickeln, aber den Sourcecode nicht freigeben... heisst, ich darf OpenAL garnicht nutzen... ? | ||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lies dir nochmal den zitierten text durch! Da steht, dass du OpenAL beispielsweise als *.dll verwenden darfst, ohne die Lizens deiner Software zu verändern. Würdest du OpenAL direkt einbinden(simple gesprochen, den Inhalt der DLL in deine Exe kopieren), müsste dein Programm ebenfalls unter LGPL stehen. | ||
vertex.dreamfall.at | GitHub |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ouch >.<
Ok dann kannichs ja doch nutzen.... (ich hab schon einen Wav Streamer angefangen, deshalb xD) Naja, obs was wird weissich nicht... kannich ja OpenAL doch nutzen ![]() |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe 1-2 Konstanten vergessen:
http://vertex.dreamfall.at/openal/openal102.zip <- neue Version Ich habe auch gleich mal meine TOggVorbis Klasse öffentlich gemacht: http://vertex.dreamfall.at/openal/oggvorbis.zip Damit kann man nun auch gestreamte OggVorbis Songs abspielen ohne lange Ladezeiten zu haben und haufen Speicher zu vergeuten(BRL lässt grüßen ![]() Beispiel: Code: [AUSKLAPPEN] SuperStrict
Framework Vertex.OpenAL Import "OggVorbis.bmx" Global Device : Byte Ptr, .. Context : Byte Ptr, .. Song : TOggVorbis Device = alcOpenDevice(Null) Context = alcCreateContext(Device, Null) alcMakeContextCurrent(Context) Song = TOggVorbis.Load("The Dandy Warhols - Bohemian like you.ogg") Song.Play() While Song.State() = STATE_PLAYING Song.Decode() Delay(10) Wend alcMakeContextCurrent(Null) alcDestroyContext(Context) alcCloseDevice(Device) End Interface der Klasse: Code: [AUSKLAPPEN] TOggVorbis
Method Play() Method SetVolume(Volume:Float) - from 0.0 till 1.0 Method State:Int() - STATE_INITIAL - STATE_PLAYING - STATE_PAUSED - STATE_STOPPED Method Stop() Method Pause() Method Length:Long() - in milliseconds Method Seek(Milliseconds:Long) Method Position:Long() - decode position in milliseconds Method Decode() Function Load:TOggVorbis(URL:OBject) Der Spaß läuft mit gerademal 1-2 % CPU Auslastung. mfg olli |
||
vertex.dreamfall.at | GitHub |
porcus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
OpenAl ist ja anscheinend für 3DSound-Angelegenheiten gut. Gibt es irgendwo eine einfache Anleitung wo man die 3DSound-Angelegenheiten erklärt bekommt ? Geht 3D-Sound auch mit der TOggVorbis Klasse und wenn ja wie? THX schonmal im Vorraus |
||
*Account deaktiviert* |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
OpenAL Programmers Guide da ist eine ausführliche Beschreibung dabei zu Velocity, Position, Dinstancemodel usw.
Ich habe zwar keinen Vorbis Song mit 5.1 getestet, sollte aber funktionieren. Der 5.1 Sound wird wie gehabt geladen und die TOggVorbis Klasse erstellt einen Buffer mit nicht nur 2 Channels. mfg olli |
||
vertex.dreamfall.at | GitHub |
porcus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Seltsamerweise funktioniert der 3D-Sound bei mir irgendwie nicht. Selbst die Beispiele aus dem OpenAL SDK
funktionieren teilweise nicht richtig. Ich habe bei mir eine alte Stereo-Soundkarte drin (weil mein onboard Chip kaputt ist). Könnte es damit was zu tun haben? Edit: Hab jetzt zur Sicherheit ne andre Soundkarte drin, es geht aber immer noch nicht. Ich bin jetzt halt leider ziemlich ratlos und würde mich über Hilfe sehr freuen. Hier ist jedenfalls mal der Code: Code: [AUSKLAPPEN] Framework Vertex.OpenAL
Import "OggVorbis.bmx" Global Device : Byte Ptr, .. Context : Byte Ptr, .. Song : TOggVorbis Device = alcOpenDevice(Null) Context = alcCreateContext(Device, Null) alcMakeContextCurrent(Context) Song = TOggVorbis.Load("test.ogg") Local xposition:Float=2 Local yposition:Float=0 Local tposition:Float=0 Local xvelocity:Float=0 Local yvelocity:Float=0 Local zvelocity:Float=0 '//set source position alSource3f(Song.Source,AL_POSITION, xposition, yposition, zposition) '//set source velocity alSource3f(Song.Source,AL_VELOCITY, xvelocity, yvelocity, zvelocity) Local listenerx:Float=0 Local listenery:Float=0 Local listenerz:Float=0 Local vec:Float[6] 'listenerx=10.0f; 'listenery=0.0f; 'listenerz=5.0f; vec[0] = 0'fvecx'; //forward vector x value vec[1] = 0'fvecy'; //forward vector y value vec[2] = 0'fvecz'; //forward vector z value vec[3] = 0'uvecx'; //up vector x value vec[4] = 0'uvecy'; //up vector y value vec[5] = 0'uvecz'; //up vector z value '//set current listener position alListener3f(AL_POSITION, listenerx, listenery, listenerz) '//set current listener orientation alListenerfv(AL_ORIENTATION, vec) Song.Play() While Song.State() = STATE_PLAYING Song.Decode() Delay(10) Wend alcMakeContextCurrent(Null) alcDestroyContext(Context) alcCloseDevice(Device) End Wenn ich das recht verstanden habe müsste es sich demnach so anhören als ob der Sound von Rechts käme (2,0,0), es hört sich aber an wie immer. |
||
real76 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OpenAL unter Blitzmax kam mir doch bekannt vor:
http://blitzmax.com/en/Communi...224#796062 |
||
porcus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe neulich versucht einen Soundeffekt(Reverb) zu verwenden.
Dabei kam ein Fehlermeldung. Offenbar sind nicht alle Funktionen im Wrapper enthalten (EAX). |
||
*Account deaktiviert* |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
real76: ich war aber eher da ![]() porcus: musst mir schon sagen, welche Funktion fehlt, sonst kann ich da nichts machen. Meine Version aufm Rechner läuft übrigens so ähnlich, wie die Pub.OpenAL. TOpenAL.Open() ' Lädt Bibliothek und erzeugt Exception TOpenAL.Init() ' belegt alle Funktionsprototypen mti Funktionsadressen aus der Library TOpenAL.Close() ' Gibt Library wieder frei Ich verzichte hier auf C Wrapper läuft aber z.Z. nur unter Windows und Linux. MacOS kann ich nicht testen. Vllt. lade ich mal demnächst eine neue Version hoch. Achja, 3D Sound funktioniert nur mit Buffern die nur einen Kanal haben(sprich mono). Porcus, stell dir vor, der Listener ist ein gerichtetes Mikrofon, dass du im Raum platzierst. Du gibst ihm eine Position, du richtest es nach links und rechts sowie nach oben und unten aus über den ForwardVector und dann drehst du es noch um die eigene Achse(eigene Achse = ForwardVector) über den UpVector. Der Sollte orthogonal zum ForwardVector sein. mfg olli |
||
vertex.dreamfall.at | GitHub |
porcus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo.
ich glaube das mit der orientation hab ich jetzt kapiert. Leider habe ich den Quelltext schon gelöscht ![]() Ich werde aber gleich danach schauen. Ich habe dazu mir das 1 Tutorial aus Effects Extension Guide.pdf aus aus dem SDK angeschaut. Habs hier:http://www.file-upload.net/dow...e.pdf.html hochgeladen. Offenbar gibt es da einige Funktionen, die in deinem Wrapper nicht enthalten sind. |
||
*Account deaktiviert* |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jup, das ist in der Tat nicht im Modul vorhanden. Das ist die ALC Extension EFX. Ich versuch die mal bis Ende der Woche mit ins Modul einzubauen. Die MacOS Benutzer haben dann halt Pech ![]() Ich werde das dann vllt. so machen: TOpenAL.InitALUt() ' Funktionsadressen für AL Utility zuweisen TOpenAL.InitEFX() ' Funktionsadressen für EFX zuweisen |
||
vertex.dreamfall.at | GitHub |
porcus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke schonmal! ![]() ![]() Aber wäre es nicht sinnvoll die original Funktionen des ALC Extension EFX beizubehalten? Man könnte dann einfacher bestehende Quelltexte, Beispiele oder darauf aufbauende Funktionen nach BlitzMax umschreiben. Man kann ja zusätzlich eine OOP Angelegenheit dazu machen aber nicht als Ersatz für die originalen Funktionen. Dh. im Klartext, es wäre wünschenswert, wenn man um die original Funktionen auszufüheren auch den origiginal Namen dazu hätte und nicht dan sowas wie blurpuzstriu7a6w(bla,bla,bla) aufrufen müsste. |
||
*Account deaktiviert* |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Angst, das war nie geplant.
Alle Funktionsprototypen bleiben global und haben den selben Namen, wie die in den original C-Headerdateien. TOpenAL bietet nur eine Klasse zum kapseln der Bibliothek und Gewinnen der Funktionsadressen. |
||
vertex.dreamfall.at | GitHub |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group