![]() |
Bass.dll und Anwendung schließt nicht
Hallo zusammen,
ich möchte mich ein wenig mit der bass.dll auseinandersetzen. Dazu habe ich folgende kleine Klasse geschrieben:
Delphi-Quellcode:
unit UBassPlayer;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, bass; type TPlayer = class private strs: HSTREAM; FPause:Boolean; FPlay:Boolean; FStop:Boolean; public constructor CreatePlayer(); Procedure FreePlayer; Procedure LoadFile(Filename:String); Procedure Play(); Procedure Stop(); Procedure Pause(); end; implementation Procedure TPlayer.Pause; begin BASS_ChannelStop(STRS); FStop:=false; FPause:=true; FPlay:=false; end; Procedure TPlayer.Stop; begin BASS_ChannelStop(STRS); FStop:=true; FPause:=False; FPlay:=false; end; Procedure TPlayer.LoadFile(Filename:String); var f:PChar; begin BASS_StreamFree(strs); f:=Pchar(Filename); if trim(f)='' then exit; strs:= BASS_StreamCreateFile(False, f, 0, 0, BASS_MUSIC_RAMP OR BASS_UNICODE); end; Procedure TPlayer.Play(); begin if (FStop=false)and(Fpause=false) then begin BASS_ChannelPlay(strs, true); FPlay:=true; exit; end; if FPause=true then begin BASS_ChannelPlay(strs, False); FPause:=false; FPlay:=true; exit; end; if FStop=true then begin BASS_ChannelPlay(strs, true); FStop:=false; FPlay:=true; exit; end; end; constructor TPlayer.CreatePlayer(); begin inherited Create; if (HIWORD(BASS_GetVersion) <> BASSVERSION) then begin MessageBox(0,'An incorrect version of BASS.DLL was loaded',nil,MB_ICONERROR); Halt; end; // Initialize audio - default device, 44100hz, stereo, 16 bits if not BASS_Init(-1, 44100, 0, Application.Handle, nil) then showmessage('Error initializing audio!'); FPause:=False; FPlay:=false; FStop:=false; end; Procedure TPlayer.FreePlayer; begin BASS_StreamFree(strs); BASS_Free(); end; end. Leider wird bei der Benutzung der Klasse das Programm nicht mehr beendet. Was mache ich falsch? Danke! |
Re: Bass.dll und Anwendung schließt nicht
Welche notwendigkeit besteht ander Entwickler zu verwirren indem man den Destructor nicht so kennzeichnet und als Namen Destroy verwendet und den Konstruktor nicht einfach Create benennt :gruebel:
|
Re: Bass.dll und Anwendung schließt nicht
Hallo,
ehm ja vielleicht hast du recht das das nicht das Beste ist, das ganze so zu bennen, aber ich denke man weiß doch was gemeint ist ;-) Andere Entwickler möchte ich sicher nicht verwirren *g* Da hätte ich ja auch nichts davon :lol: |
Re: Bass.dll und Anwendung schließt nicht
Hi
dein code ist ein-wenig verwirrend! 1, BASS_StreamCreateFile hat keinen Flag BASS_MUSIC_RAMP nur BASS_MusicLoad hat 2, in TPlayer.Pause; benutzt du BASS_ChannelStop Warum ??? 3, was soll das ganze FPause, FPlay, Fstop???
Delphi-Quellcode:
unit UBassPlayer;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, bass; type TPlayStatus = (plOpen, plActive, plPaused, plStopt, plStalled, plEnd); TPlayer = class private fStatus : TPlayStatus; strs: HSTREAM; public constructor CreatePlayer(); Procedure FreePlayer; Function LoadFile(Filename : String) : Boolean; Function Play() : Boolean; Function Pause() : Boolean; Function Resume() : Boolean; Function Stop() : Boolean; Property Get_PlaybackStatus : TPlayStatus read fStatus; end; implementation Function TPlayer.LoadFile(Filename : String) : Boolean; begin BASS_StreamFree(strs); strs:= BASS_StreamCreateFile(False, PChar(Filename), 0, 0, BASS_STREAM_AUTOFREE); if strs = 0 then begin Result:= false; Exit; end; fStatus:= plOpen; Result:= true; end; Function TPlayer.Play() : Boolean; begin Result:= BASS_ChannelPlay(strs, true); if Result then begin fStatus:= plActive; end; end; Function TPlayer.Pause() : Boolean; begin Result:= BASS_ChannelPause(STRS); if Result then begin fStatus:= plPause; end; end; Function TPlayer.Resume() : Boolean; begin Result:= BASS_ChannelPlay(STRS, false); if Result then begin fStatus:= plActive; end; end; Function TPlayer.Stop() : Boolean; begin Result:= BASS_ChannelStop(STRS); if Result then begin fStatus:= plStopt; end; end; constructor TPlayer.CreatePlayer() : Boolean; begin inherited Create; if (HIWORD(BASS_GetVersion) <> BASSVERSION) then begin MessageBox(0,'An incorrect version of BASS.DLL was loaded',nil, MB_ICONERROR); Halt; end; // Initialize audio - default device, 44100hz, stereo, 16 bits if not BASS_Init(-1, 44100, 0, Application.Handle, nil) then showmessage('Error initializing audio!'); end; end. |
Re: Bass.dll und Anwendung schließt nicht
Hallo Wishmaster,
recht herzlichen Danke für deine Mühe. Tut mir leid wenn das ganze verwirrend ist, aber ehrlich gesagt, habe ich noch nie mit der Bass.dll gearbeitet und naja das waren meine ersten Versuche. Zitat:
Nochmals Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz