Ich arbeite gerade eine Komponente um, mit der man Waves unter OpenAL abspielen kann. Diese soll das OggVorbis-Format unterstützen. So weit, so gut, ich bekomme aber eine
Exception wenn ich eine Datei lade! Hier mein Code, der Original-Source stammt von
Noeska:
Delphi-Quellcode:
type
TALOggObject =
class
private
_pos:
array [0..2]
of TALFloat;
_vel:
array [0..2]
of TALFloat;
_buffer: TALuint;
_source: TALuint;
_pitch: TALFloat;
_gain: TALFloat;
_loop: TALInt;
_playing: boolean;
_oggext: boolean;
protected
public
constructor Create;
destructor Destroy;
override;
procedure LoadFromFile(filename:
string);
procedure Update;
procedure Play;
procedure Pause;
procedure Stop;
property xpos: TALFloat
read _pos[0]
write _pos[0];
property ypos: TALFloat
read _pos[1]
write _pos[1];
property zpos: TALFloat
read _pos[2]
write _pos[2];
property xvel: TALFloat
read _vel[0]
write _vel[0];
property yvel: TALFloat
read _vel[1]
write _vel[1];
property zvel: TALFloat
read _vel[2]
write _vel[2];
property pitch: TALFloat
read _pitch
write _pitch;
property gain: TALFloat
read _gain
write _gain;
property loop: TALInt
read _loop
write _loop;
property playing: boolean
read _playing
write _playing;
end;
...
constructor TALOggObject.Create;
begin
//checks if OggVorbis is avaible, initializes Ogg
_oggext:=alIsExtensionPresent('
AL_EXT_vorbis');
// create a buffer
AlGenBuffers(1, @_buffer);
if alGetError <> AL_NO_ERROR
then raise Exception.Create('
Cannot create Buffer');
// create a source
AlGenSources(1, @_source);
if alGetError <> AL_NO_ERROR
then raise Exception.Create('
Cannot create Source');
// set default values
gain := 1.0;
pitch := 1.0;
xpos := 0.0;
ypos := 0.0;
zpos := 0.0;
xvel := 0.0;
yvel := 0.0;
zvel := 0.0;
end;
...
procedure TALOggObject.LoadFromFile(filename:
string);
var
oggfile: TMemoryStream;
begin
oggfile := TMemoryStream.Create;
oggfile.LoadFromFile(filename);
//assign to the buffer
AlBufferData(_buffer, AL_FORMAT_VORBIS_EXT, oggfile.Memory, oggfile.Size, 44100);
oggfile.Free;
if alGetError <> AL_NO_ERROR
then raise Exception.Create('
Cannot assign wave data to buffer');
//assign the buffer to the source
AlSourcei ( _source, AL_BUFFER, _buffer);
end;
Die
Exception kommt in der Zeile
AlBufferData(_buffer, AL_FORMAT_VORBIS_EXT, oggfile.Memory, oggfile.Size, 44100);
Hoffe mir kann jemand helfen. MfG
EDIT: Sorry Jungs hab den Fehler gefunden. Lag an einem Fehler in der Anwendung, in der ich diese Komponente getestet habe. Es kommt zwar immer noch kein Ton, aber die
Exception ist weg. Thema kann geschlossen werden.