![]() |
Probleme mit FMod
Hallo,
ich versuche gerade die FMod-Demos mit D5Pro zum Laufen zu kriegen, aber alles, was ich erhalte sind Fehlermeldungen und zwar, dass die Typen "THandle" und "PSingle" nicht bekannt wären. Ich habs schon im FMod-Forum versucht, erhalte aber keine Antwort. Hat vielleicht jemand von Euch ähnliche Erfahrungen gemacht (oder überhaupt welche mit FMod)? Grüsse Frank |
Der Typ THandle ist in der Unit Windows deklariert. PSingle übrigens auch.
...:cat:... |
Hallo, Sakura,
danke für Deine Antwort. Jetzt wird mir manches klar. In der Datei FMOD.PAS steht zwar eine Uses-Klausel für die Unit Windows, die ist aber von einer Abfrage mittels {ifdef} eingeklammert:
Code:
Anscheinend ist MSWINDOWS nicht definiert. Mal sehen wo das passiert.
uses
{$IFDEF MSWINDOWS} Windows, {$ENDIF} fmodtypes; Grüsse Frank |
Hi!
Delphi deklariert doch (meiner Erinnerung nach) das Symbol "WIN32", also mußt du nur folgende 3 Zeilen davorsetzen:
Code:
$IFDEF WIN32}
{$DEFINE MSWINDOWS} {$ENDIF} |
Hallo illegal eagle,
das könnte es sein, danke für die Antwort. Aber FMod läuft bei mir irgendwie nicht richtig, beim Starten der Beispiele werden Prozedureinsprungspunkte in der FMOD.DLL nicht gefunden etc. pp. Werd mal einen anderen Thread aufmachen und nach OGG-Komponenten fragen. Grüsse Frank |
Liste der Anhänge anzeigen (Anzahl: 1)
bei mir klappt fmod ohne probleme. im anhang findest du nen sehr simplen mp3player den ich mit hilfe der fmod-beispielprojekte gebastelt habe. ich häng nur die hauptunit an, wenn du das ganze projekt haben willst schreib mir eine pm
|
Hallo janjan,
danke für Deine Antwort. Ich werd mir mal aufgrund Deiner Unit ein kleines Programm zusammenbauen und dann weitersehen. Vielleicht passen die Demos auch nicht (mehr) zur FMOD.DLL (05.01.2003) nach dem Update auf Version 3.61. Grüsse Frank |
Hallo janjan,
ich hab jetzt aufgrund Deiner Unit ein ähnliches Projekt erstellt, erhalte allerdings beim Start die Fehlermeldung: "Der Prozedureinsprungspunkt FSOUND_Stream_Close wurde in der DLL "fmod.dll" nicht gefunden" Dies würde auf eine falsche DLL hinweisen, ich hab aber nur eine, nämlich die vom 05.01.2003 (von FMod 3.61). :?: Hast Du vielleicht eine Idee? Grüsse Frank |
Liste der Anhänge anzeigen (Anzahl: 1)
hm, ich benutze auch die 3.61-dll...
ich hab mal das ganze projekt inkl. der .dll angehängt, vielleicht hilft dir das weiter. |
Hallo janjan,
danke für Dein Projekt. Ist aber zwecklos, ich erhalte jedesmal die Meldung "Der Prozedureinsprungspunkt FSOUND_Stream_Close wurde in der DLL "fmod.dll" nicht gefunden". Ich hab auch schon alles was irgendwie nach fmod.dll aussah gelöscht, FMOD neu runtergeladen und die DLL ausschließlich ins Anwendungsverzeichnis kopiert -> ohne Erfolg. Na ja, mal sehen, was es für OGG-Files sonst noch so gibt... Grüsse Frank |
ich glaube ich weiß wo das problem liegt:
so eine änliche fehldermeldung habe ich auch erhalten du musst einfach in die FMod.pas gehen und dort: (oben) {$Define MSWindows} wobei ich garnicht mehr weiß ob das MSWindwos war(muss halt mal nach schauen;) ich habe jetzt auch noch ein kleines problem: kann mir jemmand ein einfaches beispiel schreiben ? wie spiele ich eine datei mit den FMod lib ab ? das ist mein problem......... mein versuch:
Code:
geht aber leider nicht;)
FSOUND_Stream_OpenFile(PChar(FileListe.Strings[ListBox1.ItemIndex]), FSOUND_NORMAL or FSOUND_LOOP_NORMAL, 0);
FMUSIC_LoadSong(PChar(FileListe.Strings[ListBox1.ItemIndex])) |
ich habs so gemacht:
Delphi-Quellcode:
// OPEN STREAM Stream := FSOUND_Stream_OpenFile(PChar(Datei), FSOUND_LOOP_NORMAL or FSOUND_NORMAL, 0); if stream = nil then begin Showmessage('Error! Opening file - ' + FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); Exit; end; // PLAY STREAM channel := FSOUND_Stream_Play(FSOUND_FREE, stream); if channel < 0 then begin showmessage('Error! Play - ' + FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); exit; end; |
Danke! werde ich testen;)
MFG Michael Springwald |
also bei:
Code:
so sieht nur nun der code aus
var
test:PFMusicModule; Datei:String; Stream: PFSoundStream; Channel: Integer; begin Datei:='E:\test.it'; // OPEN STREAM Stream := FSOUND_Stream_OpenFile(PChar(Datei), FSOUND_LOOP_NORMAL or FSOUND_NORMAL, 0); if stream = nil then begin Showmessage('Error! Opening file - ' + FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); Exit; end; // PLAY STREAM channel := FSOUND_Stream_Play(FSOUND_FREE, stream); if channel < 0 then begin showmessage('Error! Play - ' + FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); exit; end; aber es kommt eine Fehlermeldung vom Programm. Fehlermeldung:
Code:
was einer was los ist ?
Error! Opening file - This command failed because FSound_Init was not called
MFG Michael Springwald |
Ich habe es jetzt hinbekommen aber:
Wie spiele ich .it Dateien ab ? in der Demo geht das alles aber warum nicht in meinem progrmam ? MFG Michael Springwald |
so ich habe jetzt alle Problme gelöst erstmal.
Mein code:
Code:
was kann man andres bzw. besser machen ?
var
test:PFMusicModule; Datei:String; Stream: PFSoundStream; Channel: Integer; Module: PFMusicModule; begin Datei:=FileListe.Strings[ListBox1.ItemIndex]; if not FSOUND_Init(22050, 128, 0) then begin Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'FSOUND_Init', MB_OK or MB_ICONHAND); Halt; end; // OPEN STREAM Stream := FSOUND_Stream_OpenFile(PChar(Datei), FSOUND_LOOP_NORMAL or FSOUND_NORMAL, 0); if Stream = Nil then Module:=FMUSIC_LoadSong(PChar(Datei) ); if Module = nil then begin Showmessage('Error! Opening file - ' + FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); Exit; end; // PLAY STREAM if Stream <> nil then begin channel := FSOUND_Stream_Play(FSOUND_FREE, stream); if channel < 0 then begin showmessage('Error! Play - ' + FMOD_ErrorString(FSOUND_GetError())); FSOUND_Close(); exit; end; end else if Module <> NIL then FMUSIC_PlaySong(Module); // FSOUND_SetPan(Channel, FSOUND_STEREOPAN); // FSOUND_SetVolume(Channel, 255); nun habe ich noch ein paar fragen: Was für Datentypen werden in meiner version unterstützt ? (ich weiß das it,s3m,xm,mod,wav,mp3,wav,midi einbandfrei funktionieren) und darf ich ein programm wo ich die "FMod lib" nutze veröffentlichen ? also als Freeware oder was muss ich da beachten ? (weil ich kann nicht so gut ENGLISCH) Wie kann ich wenn ich eine datei anhöhre pause machen bzw stoppen. so mehr Fragen habe ich erstmal nicht. Danke schonmal im vorraus für die antworten. MFG Michael springwald |
Code:
Warum nicht 44100 und 32 ?
if not FSOUND_Init(22050, 128, 0) then
Und du musst sicher noch FSOUND_Close am Ende aufrufen? Zitat:
Zitat:
Ansonsten siehe ![]() Zitat:
|
Code:
das habe ich aus der Demo;)
Warum nicht 44100 und 32 ?
Und du musst sicher noch FSOUND_Close am Ende aufrufen? FSound_Close rufe ich glaube ich nicht auf. gut!Dann habe ich erstmal keine Frage mehr;) MFG Michael Springwald |
noch eine Frage:
Wie bekomme ich die MaxiMale zeit eines MusikFiles raus ? MFG Michael Springwald |
Re: Probleme mit FMod
Code:
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;
Code:
function SecondToTime(const m_secondes : String) : string; var minutes : Integer; secondes : Integer; m_secondsToTime : String; begin minutes := StrToInt(m_secondes) div 60; secondes := StrToInt(m_secondes) - minutes * 60; m_secondsToTime := Format('%.2d:%.2d', [minutes, secondes]); result := m_secondsToTime; end; Total_Time.Caption:= FormatDateTime ('hh:nn:ss',(Get_Time div 1000)/ (24 * 60 * 60)); Cur_time.Caption:= FormatDateTime ('hh:nn:ss',(Get_SongLen / 1000)/ (24 * 60 * 60)); label1.Caption:= SecondToTime(inttostr(Get_SongLen div 1000)); |
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:43 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