FLAC-Dateien abspielen mit BASS

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Kay
Beiträge: 134
Registriert: So 14. Nov 2010, 15:17

FLAC-Dateien abspielen mit BASS

Beitrag von Kay »

Hallo zusammen,

ich habe folgendes Problem: Ich würde in meinem Projekt gern eine Funktion anbieten, mit der sich Dateien im FLAC-Format abspielen lassen.
Dazu habe ich mir die Audio Library BASS sowie das Add-On BASSFLAC heruntergeladen und aus den beiliegenden Beispielen eine Testanwendung gebaut.
Die Lib wird offensichtlich fehlerfrei initialisiert, das Plugin geladen und der Audio Stream erstellt. Ein Problem tritt erst auf, wenn ich die Datei abspielen möchte. Mit VLC lassen sich die Dateien übrigens einwandfrei abspielen, beschädigt oder so sind sie also nicht.
Ich habe euch im Folgenden mal die gesamte Testanwendung gepostet, auch wenn ich mir bewusst bin, dass der Code vielleicht etwas umfangreicher ist. Da ich nicht weiß wo der Fehler genau stecken könnte, möchte ich einfach nur sichergehen keine Anweisung zu vergessen. Also nicht wundern!
Die Dateien bass.dll und bassflac.dll liegen natürlich im selben Ordner wie die EXE file.

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  BASS, Windows;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
    AudioFile: HSTREAM;
    FlacPlugin: HPLUGIN;
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Check the correct BASS was loaded
  if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
  begin
    ShowMessage('An incorrect version of BASS.DLL was loaded');
    Exit;
  end;
 
  // Initialize audio - default device, 44100hz, stereo, 16 bits
  if not BASS_Init(-1, 44100, 0, Handle, nil) then
  begin
    ShowMessage('Error initializing audio!');
    Exit;
  end;
 
  // Load plugin
  FlacPlugin := BASS_PluginLoad(PChar('bassflac.dll'), 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
  if FlacPlugin = 0 then
  begin
    ShowMessage('Error loading flac plugin!');
    Exit;
  end;
 
  // Creating stream
  AudioFile := BASS_StreamCreateFile(False, PChar('C:\Demo.flac'), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
  if AudioFile = 0 then
  begin
    ShowMessage('Error creating stream!');
    Exit;
  end;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Free stream
  BASS_StreamFree(AudioFile);
 
  // Free plugin
  BASS_PluginFree(FlacPlugin);
 
  // Close BASS
  BASS_Free();
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not BASS_ChannelPlay(AudioFile, True) then
    ShowMessage('Error playing stream!');
end;
 
end.


Vielen Dank schonmal für eure Hilfe!
Zuletzt geändert von Lori am Di 4. Jun 2013, 16:59, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

Antworten