![]() |
Zitat:
![]() |
Re: Probleme mit FMod
Welche Fmod Version verwendest du?
Ich habe den code mit der fmod v3.73 getestet. Hier der ganze Code (ist nur en Test)!
Code:
unit CommonTypes;
interface uses Windows, fmod, fmodtypes; Type TEqPreset = array [0..9] of Integer; Type TWaveData = array [0..2048] of DWORD; Type TFFTData = array [0..512] of Single; const ENGINE_CST_OFFSET = 1000; ENGINE_STOP = ENGINE_CST_OFFSET + 1; ENGINE_PLAY = ENGINE_CST_OFFSET + 2; ENGINE_PAUSE = ENGINE_CST_OFFSET + 3; ENGINE_SONG_END = ENGINE_CST_OFFSET + 4; ENGINE_ON_LINE = ENGINE_CST_OFFSET + 5; const OutputTypes: array [0..2] of TFSoundOutputTypes = (FSOUND_OUTPUT_WINMM, FSOUND_OUTPUT_DSOUND, FSOUND_OUTPUT_A3D); OutputRates: array [0..4] of Integer = (48000, 44100, 22050, 11025, 8000); Stream_LoopMode: array [0..2] of integer =(FSOUND_LOOP_OFF, FSOUND_LOOP_NORMAL, FSOUND_LOOP_BIDI); CD_PlayMode: array [0..3] of integer =(FSOUND_CD_PLAYCONTINUOUS, FSOUND_CD_PLAYONCE, FSOUND_CD_PLAYLOOPED, FSOUND_CD_PLAYRANDOM); implementation end.
Code:
unit FModEngine;
interface uses Windows, Forms, Classes, SysUtils, ExtCtrls, Dialogs, fmod, fmodpresets, fmodtypes, fmoderrors, CommonTypes; Type TFModEngine = Class(TObject) private AppHWND : THandle; // Mode Sample : PFSoundSample; Module : PFMusicModule; Stream : PFSoundStream; StreamCal : TFSoundStreamCallback; // Channel : integer; DeviceIDX : integer; WaveFreq : Integer; Volume : integer; Def_Pane : integer; SLoopMod : integer; CDLoopMod : integer; PlayerState : Integer; EventTimer : TTimer; FValues: array [0..1] of PSingle; FFadeOut : Boolean; FFadeIn : Boolean; FFadeTime : LongInt; SoundDriverList : TStringList; // CD Function CD_DriverList : TStringList; CD_TrackNumber : Integer; CD_DefDrive : Integer; public procedure NotifyState (Sender : TObject); function EngineState : Integer; constructor Create (HWND : THandle); virtual; destructor Destroy; function Get_OutputType : integer; Procedure Set_OutputTypes(TOutputType : integer); procedure Set_Output(Driver: Integer); function Get_SoundDriverList : TStringlist; function Get_SoundDriverName : string; // Procedure Play(FileName : String); Procedure Set_Paused(Paused : ByteBool); function Get_Paused : boolean; Procedure Stop; // Vollume Procedure Set_Volume(Vol : Integer); function Get_Volume : Integer; procedure Set_Panning (Pan : Integer); function Get_Panning : Integer; Procedure Set_Mute(Mute : ByteBool); function Get_Mute : ByteBool; procedure Set_Pitch(Pitch : Integer); procedure Set_Time(SongPos : Integer); function Get_Time : integer; function Get_SongLen : Integer; Procedure Set_PlayPosition(Pos, Max : integer); function Get_PlayPosition : integer; procedure Get_VULevel(var L_VU, R_VU : integer); // test Procedure Set_LoopMode(Mode : integer); end; implementation {--------------- NotifyState --------------} procedure TFModEngine.NotifyState (Sender : TObject); begin if Stream <> nil then if ((Get_Time + 0.1 >= Get_SongLen) and not (PlayerState = ENGINE_STOP)) then begin PlayerState := ENGINE_SONG_END; Exit; end; // test end; {--------------- EngineState --------------} function TFModEngine.EngineState : Integer; begin Result := PlayerState; end; constructor TFModEngine.Create (HWND : THandle); var i : integer; SDriverChar, CDChar : PChar; begin WaveFreq:= 44100; DeviceIDX := 0; PlayerState := ENGINE_STOP; FMOD_Load(nil); // Set_OutputTypes(1); Set_Output(DeviceIDX); // Get Sound Driver Name SoundDriverList:= TStringList.Create; i:= 0; While (FSOUND_GetDriverName(i)<> nil) do begin SDriverChar:= FSOUND_GetDriverName(i); inc(i); SoundDriverList.Add(SDriverChar); end; SLoopMod := Stream_LoopMode[0]; CDLoopMod:= CD_PlayMode[1]; Def_Pane := trunc(255 / 2); Volume := 255; // NotifyState EventTimer := TTimer.Create (nil); EventTimer.Interval := 1; EventTimer.OnTimer := NotifyState; EventTimer.Enabled := True; // end; destructor TFModEngine.Destroy; begin stop; FSOUND_Close end; {---------------------------- Output Type --------------------------} function TFModEngine.Get_OutputType : integer; var OutputType : TFSoundOutputTypes; begin OutputType:= FSOUND_GetOutput; case OutputType of FSOUND_OUTPUT_WINMM: result:= 0; FSOUND_OUTPUT_DSOUND: result:= 1; FSOUND_OUTPUT_A3D: result:= 2; end end; Procedure TFModEngine.Set_OutputTypes(TOutputType : integer); begin FSOUND_SetOutput(OutputTypes[TOutputType]); end; {-------------- Sound Driver ------------} procedure TFModEngine.Set_Output(Driver: Integer); begin Stop; FMUSIC_StopAllSongs(); FSOUND_Close; FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT); FSOUND_SetBufferSize(100); FSOUND_SetDriver(Driver); //Set sound driver if not FSOUND_Init(WaveFreq, 128, FSOUND_INIT_GLOBALFOCUS or FSOUND_INIT_ENABLESYSTEMCHANNELFX) then begin Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'FSOUND_Init', MB_OK or MB_ICONHAND); Halt; end; end; function TFModEngine.Get_SoundDriverList : TStringlist; begin result:= SoundDriverList; end; function TFModEngine.Get_SoundDriverName : string; var idx : integer; begin idx:= FSOUND_GetDriver; result:= FSOUND_GetDriverName(idx); end; {----------------- EQ ----------------} Procedure TFmodEngine.Set_LoopMode(Mode : integer); begin SLoopMod:= Stream_LoopMode[Mode]; end; Procedure TFmodEngine.Play(FileName : String); // Play begin FSOUND_Stream_Stop(stream); Stream := nil; Stream := FSOUND_Stream_Open(PChar(Filename), FSOUND_NORMAL or SLoopMod or FSOUND_2D, 0, 0); if Stream <> nil then begin Channel := FSOUND_Stream_Play(FSOUND_FREE, Stream); PlayerState := ENGINE_PLAY; end; Set_Volume(Volume); Set_Panning(Def_Pane); end; Procedure TFmodEngine.Set_Paused(Paused : ByteBool); // Set Pause begin if Stream <> nil then FSOUND_SetPaused(Channel, Paused); if Paused = True then PlayerState := ENGINE_PAUSE else PlayerState := ENGINE_PLAY; end; function TFmodEngine.Get_Paused() : boolean; // Get Pause begin if Stream <> nil then Result:= FSOUND_GetPaused(Channel); end; Procedure TFmodEngine.Stop; // Stop begin if Stream <> nil then begin FSOUND_Stream_Stop(Stream); end; PlayerState := ENGINE_STOP; end; procedure TFmodEngine.Set_Volume(Vol : Integer); // Set Volume begin if Vol > 255 then Vol := 255; if Vol < 0 then Vol := 0; FSOUND_SetVolume(channel, Vol); Volume:= Vol; end; function TFmodEngine.Get_Volume : Integer; // Get Volume begin if Stream <> nil then result:= FSOUND_GetVolume(channel) end; procedure TFmodEngine.Set_Panning(Pan : Integer); // Set Panning begin //if Stream <> nil then if Pan > 255 then Pan := 255; if Pan < 0 then Pan := 0; FSOUND_SetPan(Channel, Pan); Def_Pane:= Pan; end; function TFmodEngine.Get_Panning : Integer; // Get Panning begin if Stream <> nil then result:= FSOUND_GetPan(Channel); end; Procedure TFmodEngine.Set_Mute(Mute : ByteBool); // Set Mute begin FSOUND_SetMute(Channel, Mute) end; function TFmodEngine.Get_Mute : ByteBool; // Get Mute begin result := FSOUND_GetMute(Channel) end; procedure TFmodEngine.Set_Pitch(Pitch : Integer); // Set Pich var freq : Integer; begin // Pitch (Min = 0) < 20 > (Max = 40) freq := Trunc((Pitch / 20) * WaveFreq); if freq < 0 then freq := 0 ; if freq > 705600 then freq := 705600; FSOUND_SetFrequency(Channel, freq) end; procedure TFmodEngine.Set_Time(SongPos : Integer); // Set Time begin if Stream <> nil then FSOUND_Stream_SetTime(Stream, SongPos); end; function TFmodEngine.Get_Time : integer; // Get Time begin if Stream <> nil then result:= FSOUND_Stream_GetTime(Stream); if (PlayerState = ENGINE_STOP) or (PlayerState = ENGINE_SONG_END) then Result := 0 end; function TFmodEngine.Get_SongLen : Integer; //Get SongLen var MilliSec : integer; begin if Stream <> nil then begin MilliSec := FSOUND_Stream_GetLengthMs(stream); result:= MilliSec; end; if (PlayerState = ENGINE_STOP) or (PlayerState = ENGINE_SONG_END) then Result := 0 end; Procedure TFmodEngine.Set_PlayPosition(Pos, Max : integer); //Set Position var Ms, Time : integer; begin // Progressbar (Min = 0, Max = 100) if Stream <> nil then begin Ms:= FSOUND_Stream_GetLengthMs(stream); FSOUND_Stream_SetTime(Stream, Trunc(Ms * Pos /max)div 1); end end; function TFmodEngine.Get_PlayPosition : integer; //Get Position var Ms, Time : integer; begin // Progressbar (Min = 0, Max = 100) if (Stream <> nil) then begin Ms:= FSOUND_Stream_GetLengthMs(stream) ; Time:= FSOUND_Stream_GetTime(Stream); result:= Trunc((100 / Ms) * time + 0.1); end else result:= 0; if (time >= Ms)or (PlayerState = ENGINE_STOP) or (PlayerState = ENGINE_SONG_END) then Result := 0 end; procedure TFModEngine.Get_VULevel(var L_VU, R_VU: integer); //Get VU Level var LevelL, LevelR: Single; PlevelL, PlevelR : PSingle; begin if (Stream <> nil) then begin PlevelL := @levelL; PlevelR:= @levelR; FSOUND_GetCurrentLevels(Channel, PlevelL, PlevelR); L_VU:= trunc((PLevelL^)*200); R_VU:= trunc((PLevelR^)*200); end else begin L_VU:= 0; R_VU:= 0; end end; end. |
Re: Probleme mit FMod
Hi
Ich bin es wieder. Wen es mit fmod nicht klappt dann versuche es mit Audio Tools Library v2.0 ist free! AAC - for manipulating with AAC file information APE Tag - for manipulating with APE Tags CDDA Track - for getting information for CDDA track FLAC - for manipulating with FLAC file information fpl - reads foobar2000 playlist files (*.fpl) ID3v1 - for manipulating with ID3v1 tags ID3v2 - for manipulating with ID3v2 tags Monkey - for manipulating with Monkey's Audio file information MPEG Audio - for manipulating with MPEG audio file information Musepack - for manipulating with Musepack file information Ogg Vorbis - for manipulating with Ogg Vorbis file information OptimFROG - for manipulating with OptimFROG file information TwinVQ - for extracting information from TwinVQ file header Vorbis Comment - for manipulating with Vorbis Comments WAV - for manipulating with WAV files WavPack - for manipulating with WAVPack Files WMAfile - for extracting information from WMA file header URL: h**p://mac.sourceforge.net/atl/ |
Re: Probleme mit FMod
@Jörn
du musst einfach ein #defin windows machen in der unit wo die fehler auftreten *G* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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