AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Fmod Höhen und tiefen
Thema durchsuchen
Ansicht
Themen-Optionen

Fmod Höhen und tiefen

Ein Thema von Matrix114 · begonnen am 15. Jun 2004 · letzter Beitrag vom 24. Jul 2004
Antwort Antwort
Matrix114

Registriert seit: 5. Mär 2004
9 Beiträge
 
#1

Fmod Höhen und tiefen

  Alt 15. Jun 2004, 19:57
Hallo zusammen,
Kann mir einer Helfen ich möchte gerne einen Equalizer basteln damit ich mir die höhen und tiefen selber einstellen kann....

Hier meine initsialisierung:

Code:
FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND);  
FSOUND_SetDriver(0);  
FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT);  
FSOUND_SetHWND(Handle);  
FInitialised := FSOUND_Init(65535, 2,FSOUND_INIT_GLOBALFOCUS);

So und nun zum eigentlichen code:

Code:
fmusic:= FSOUND_Stream_Open(PChar(datei), FSOUND_ENABLEFX and FSOUND_HW2D,0,0);  
fx:=FSOUND_FX_Enable(0, FSOUND_FX_PARAMEQ);  
FSOUND_Stream_PlayEx(FSOUND_FREE,fmusic,0,false);
und nun habe ich 16 Trackbars gemacht...
in der trackbar steht:

Code:
FSOUND_SetPaused(0, TRUE);  
FSOUND_FX_SetParamEQ(fx, 8000, 12, trackbar1.position)  
FSOUND_SetPaused(0, false);
So, aber leider geht das nicht die variable fx beim initsialisieren von Parameq gibt den wert -1 zurück das heist das es nicht geht...
An was kann das leigen?
Mfg
Tobias
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#2

Re: Fmod Höhen und tiefen

  Alt 24. Jul 2004, 22:37
Hi


Ich hatte auch angefangen mit Fmod zu arbeiten und habe folgendes gebastelt.
Wen du den Code änderst Bzw. feiler findest, kannst du dich bitte melden.

Code:

unit CommonTypes;

interface
 uses Windows, fmod, fmodtypes;



 var EQBands    : array [0..10] of Integer;

  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, spectrum;



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;
    SLMod      : integer;
    CDLoopMod  : integer;
    PlayerState : Integer;
    EventTimer : TTimer;
    CurFileName : String;
    //
    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;
    //EQ Test


    Procedure Init_EQ;

  public
    procedure NotifyState (Sender : TObject);
    function EngineState : Integer;
    constructor Create (HWND : THandle); virtual;
    destructor Destroy;
    function  Get_OutputType : integer;
    procedure Set_Output(TOutputDriver, TOutputType : Integer);
    function  Get_SoundDriverList : TStringlist;
    function  Get_SoundDriverName : string;
   //
    Procedure Play(FileName : String; LoopMode : integer);
    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_SongLengthMs : Integer;
    Procedure Set_PlayPosition(Pos, Max : integer);
    function Get_PlayPosition(Max : integer) : integer;

    procedure Get_VULevel(var L_VU, R_VU : integer);
    function Get_CPU : String;
    Procedure Set_EQ(ID, Pos : integer);
   end;

var FSpectrum : TMiniSpectrum;


implementation




{--------------- NotifyState --------------}

procedure TFModEngine.NotifyState (Sender : TObject);
begin

if Stream <> nil then
 if ((Get_Time + 0.1 >= Get_SongLengthMs) and not (PlayerState = ENGINE_STOP)) then
  begin
    PlayerState := ENGINE_SONG_END;
   Exit;
  end;
  // test

   if Not FileExists(CurFileName) then
  begin
     PlayerState := ENGINE_STOP;
     Exit;
   end;



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_Output(DeviceIDX, 1);


//  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;

   SLMod := 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;

{---------------------------- // --------------------------}

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;

{---------------------- Sound Driver ----------------------}

procedure TFModEngine.Set_Output(TOutputDriver, TOutputType : Integer);
begin
  Stop;
  FMUSIC_StopAllSongs();
  FSOUND_Close;
  FSOUND_SetBufferSize(100);

 // 0 = Windows Multimedia driver
 // 1 = DirectSound driver
 // 2 = A3D driver
    FSOUND_SetOutput(OutputTypes[TOutputType]);
   
 //
    FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT);

 // Set sound driver
 // 0 will select the DEFAULT sound driver.
    FSOUND_SetDriver(TOutputDriver);




 // Initializes the FMOD Sound System.
 if not FSOUND_Init(WaveFreq, 128, FSOUND_INIT_GLOBALFOCUS or
                                   FSOUND_INIT_ENABLESYSTEMCHANNELFX or
                                   FSOUND_INIT_ACCURATEVULEVELS) then
  begin
    Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'FSOUND_Init', MB_OK or MB_ICONHAND);
    Halt;
 end;

end;


{----------------- EQ Test ----------------}

Procedure TFmodEngine.Set_EQ(ID, Pos : integer);
begin

//  Set_EQ(0, TrackBar1.Position);
//  Set_EQ(1, TrackBar2.Position);
  FSOUND_FX_SetParamEQ(EQBands[ID], 80, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 170, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 310, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 600, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 1000, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 3000, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 6000, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 12000, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[ID], 14000, 10, Pos);
  FSOUND_FX_SetParamEQ(EQBands[9], 16000, 10, Pos);
end;

Procedure TFmodEngine.Init_EQ;
var i : integer;
begin
  for i:=0 to 10 do
   begin
     EQBands[i]:= FSOUND_FX_Enable(FSOUND_SYSTEM_CHANNEL, FSOUND_FX_PARAMEQ);
   end;

  FSOUND_FX_SetParamEQ(EQBands[0], 80, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[1], 170, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[2], 310, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[3], 600, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[4], 1000, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[5], 3000, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[6], 6000, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[7], 12000, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[8], 14000, 10, 0);
  FSOUND_FX_SetParamEQ(EQBands[9], 16000, 10, 0);
end;



{----------------- // ----------------}


Procedure TFmodEngine.Play(FileName : String; LoopMode : integer);        // Play
var LMode : integer;
begin
   CurFileName := FileName;




  LMode:= Stream_LoopMode[LoopMode];

  FSOUND_Stream_Stop(stream);
  Stream := nil;

  Stream := FSOUND_Stream_Open(PChar(Filename), FSOUND_NORMAL or
                                                LMode or
                                                FSOUND_2D, 0, 0);


   FSOUND_SetPaused(FSOUND_SYSTEM_CHANNEL, True);
   Init_EQ;
   Fsound_Setpaused(FSOUND_SYSTEM_CHANNEL, False);


   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_FX_Disable(-1000);
     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;

{-------------------------------- Set/Get Time --------------------------------}

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)
  else
   result:= 0;

  if (PlayerState = ENGINE_STOP) or
     (PlayerState = ENGINE_SONG_END) then
      Result := 0
end;

{---------------------------------- Get Lenght --------------------------------}

function TFmodEngine.Get_SongLengthMs : 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;

{----------------------------- Get/Set PlayPositio ----------------------------}

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(Max : integer) : 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((Max / Ms) * time + 0.1);
   end
 else
  result:= 0;
  if (time >= Ms)or
     (PlayerState = ENGINE_STOP) or
     (PlayerState = ENGINE_SONG_END) then
     Result := 0
end;

{----------------------------------- VULevel ----------------------------------}

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^)* 150);  // 100%
     R_VU:= trunc((PLevelR^)* 150);  // 100%
    end
  else
   begin
    L_VU:= 0;
    R_VU:= 0;
 end
end;

{------------------------------------- CPU ------------------------------------}

function TFModEngine.Get_CPU : String;
begin
  result:= Format('%.1f%%', [FSOUND_GetCPUUsage]);
end;


end.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Fmod Höhen und tiefen

  Alt 24. Jul 2004, 23:17
Wie wäre es denn mit anhängen?
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz