Einzelnen Beitrag anzeigen

Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#1

OpenAL - Exception beim Laden einer OggVorbis

  Alt 26. Mär 2004, 18:03
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.
  Mit Zitat antworten Zitat