Accueil > > > LECTEUR MP3 ORIENTE OBJECT [BASS]
LECTEUR MP3 ORIENTE OBJECT [BASS]
Information sur la source
Description
Création d'une classe TSonStream qui regroupe une quantité plus ou moins importante (selon les gens ! ) de méthodes pour permettre la lecture et la création d'effet FX sur un son grace a la librairie BASS.
Source
- unit SonStream;
-
- interface
-
- uses Bass,SysUtils;
-
- const
- CHORUS=1;
- COMPRESSOR=2;
- DISTORTION=3;
- ECHO=4;
- FLANGER=5;
- GARGLE=6;
- PARAMEQLOW=7;
- PARAMEQMED=8;
- PARAMEQHIGH=9;
- REVERB=10;
- MAX_EFFET=10;
-
- FREQUENCE_INITIAL = 44100 ;
- FREQUENCE_MIN = 100;
- FREQUENCE_MAX = 100000;
-
- PAN_INI = 0;
- PAN_MAX = 100;
- PAN_MIN = -100;
-
- VOLUME_INI = 75;
- VOLUME_MAX = 100;
- VOLUME_MIN = 0;
-
-
- CHORUS_MIN_WET_DRY_MIX=0.0;
- CHORUS_INI_WET_DRY_MIX=0.0;
- CHORUS_MAX_WET_DRY_MIX = 100.0;
-
- CHORUS_MIN_DEPTH=0.0;
- CHORUS_INI_DEPTH=25.0;
- CHORUS_MAX_DEPTH=100.0;
-
- CHORUS_MIN_FEEDBACK=-99.0;
- CHORUS_INI_FEEDBACK=0.0;
- CHORUS_MAX_FEEDBACK=99.0;
-
- CHORUS_MIN_FREQUENCY=0.0;
- CHORUS_INI_FREQUENCY=0.0;
- CHORUS_MAX_FREQUENCY=10.0;
-
- CHORUS_MIN_DELAY=0.0;
- CHORUS_INI_DELAY=0.0;
- CHORUS_MAX_DELAY=20.0;
-
-
- FLANGER_MIN_WET_DRY_MIX=0.0;
- FLANGER_INI_WET_DRY_MIX=0.0;
- FLANGER_MAX_WET_DRY_MIX = 100.0;
-
- FLANGER_MIN_DEPTH=0.0;
- FLANGER_INI_DEPTH=25.0;
- FLANGER_MAX_DEPTH=100.0;
-
- FLANGER_MIN_FEEDBACK=-99.0;
- FLANGER_INI_FEEDBACK=0.0;
- FLANGER_MAX_FEEDBACK=99.0;
-
- FLANGER_MIN_FREQUENCY=0.0;
- FLANGER_INI_FREQUENCY=0.0;
- FLANGER_MAX_FREQUENCY=10.0;
-
- FLANGER_MIN_DELAY=0.0;
- FLANGER_INI_DELAY=0.0;
- FLANGER_MAX_DELAY=4.0;
-
- COMPRESSOR_MAX_GAIN=60.0;
- COMPRESSOR_INI_GAIN=0.0;
- COMPRESSOR_MIN_GAIN=-60.0;
-
- PARAMEQ_MAX_GAIN=15.0;
- PARAMEQ_MIN_GAIN=-15.0;
- PARAMEQ_INI_GAIN=0.0;
-
- DISTORTION_MIN_GAIN=-60.0;
- DISTORTION_INI_GAIN=0.0;
- DISTORTION_MAX_GAIN=0.0;
-
- DISTORTION_MIN_EDGE=0.0;
- DISTORTION_INI_EDGE=50.0;
- DISTORTION_MAX_EDGE=100.0;
-
- DISTORTION_MIN_POST_EQ_CENTER_FREQUENCY=100.0;
- DISTORTION_INI_POST_EQ_CENTER_FREQUENCY=4000.0;
- DISTORTION_MAX_POST_EQ_CENTER_FREQUENCY=8000.0;
-
- DISTORTION_MIN_POST_EQ_BANDWITH=100.0;
- DISTORTION_INI_POST_EQ_BANDWITH=4000.0;
- DISTORTION_MAX_POST_EQ_BANDWITH=8000.0;
-
- DISTORTION_MIN_PRE_LOWPASS_CUT_OFF=100.0;
- DISTORTION_INI_PRE_LOWPASS_CUT_OFF=4000.0;
- DISTORTION_MAX_PRE_LOWPASS_CUT_OFF=8000.0;
-
- GARGLE_MIN_DW_RATE_HZ=1;
- GARGLE_INI_DW_RATE_HZ=15;
- GARGLE_MAX_DW_RATE_HZ=1000;
-
- type
-
- TSonStream = class(TObject)
- private
- nom:string;
- nomComplet : string;
- volume,frequence,pan : integer;
-
- stream : HSTREAM;
-
- ch : BASS_FXCHORUS;
- co: BASS_FXCOMPRESSOR;
- di: BASS_FXDISTORTION;
- ec: BASS_FXECHO;
- fl: BASS_FXFLANGER;
- ga: BASS_FXGARGLE;
- pq: BASS_FXPARAMEQ;
- rv: BASS_FXREVERB;
-
- fx : array [1..MAX_EFFET] of HFX;
-
- procedure SetAttributes(volume,frequence,pan:integer);
-
- public
- constructor Create;
- destructor Destroy;override;
- {
- ========================================================================
- -- Fonctions générales --
- ========================================================================
- }
-
- procedure Charger(name:string);
- procedure Lire(AuDebut:boolean);
- procedure Stopper;
- procedure Pause;
-
- function GetNom:string;
- function GetNomComplet:string;
-
- function PositionEnCours:dword;
- procedure ChangerPosition(NouvellePosition:dword);
- function LongueurTotal:dword;
-
- function GetTempsTotal : float;
- function GetTempsEnCours : float;
-
- procedure SetVolume(NewVolume : integer);
- function GetVolume:integer;
-
- function GetVolumeMax:integer;
- function GetVolumeMin:integer;
-
- procedure SetPan(NewPan:integer);
- function GetPan:integer;
-
- function GetPanMax:integer;
- function GetPanMin:integer;
- function GetPanIni:integer;
-
- procedure SetFrequence(NewFrequence:integer);
- function GetFrequence:integer;
-
- function GetFrequenceMax:integer;
- function GetFrequenceIni:integer;
- function GetFrequenceMin:integer;
-
-
-
- {
- ========================================================================
- -- Procedures pour (des)activer les effets --
- ========================================================================
- }
- procedure AppliquerChorus;
- procedure RetirerChorus;
-
- procedure AppliquerCompressor;
- procedure RetirerCompressor;
-
- procedure AppliquerDistortion;
- procedure RetirerDistortion;
-
- procedure AppliquerEcho;
- procedure RetirerEcho;
-
- procedure AppliquerFlanger;
- procedure RetirerFlanger;
-
- procedure AppliquerGargle;
- procedure RetirerGargle;
-
- procedure AppliquerParamEQLow;
- procedure RetirerParamEQLow;
-
- procedure AppliquerParamEQMed;
- procedure RetirerParamEQMed;
-
- procedure AppliquerParamEQHigh;
- procedure RetirerParamEQHigh;
-
- procedure AppliquerReverb;
- procedure RetirerReverb;
-
- {
- ========================================================================
- -- Procedures pour gerer plus profondement les effets --
- ========================================================================
- }
- procedure SetCompressor(fGain:float);
-
- procedure SetParamEQLow(fGain:float);
- procedure SetParamEQMed(fGain:float);
- procedure SetParamEQHigh(fGain:float);
-
- procedure SetFlanger(fWetDryMix:float;fDepth:float;fFeedback:float;
- fFrequency:float;lWaveform:Dword;fDelay:float;lPhase:Dword);
-
- procedure SetChorus(fWetDryMix:float;fDepth:float;fFeedback:float;
- fFrequency:float;lWaveform:DWORD;fDelay:float;lPhase:DWORD);
-
- procedure SetDistortion(fGain:float;fEdge:float;fPostEQCenterFrequency:float;
- fPostEQBandwidth:float;fPreLowpassCutoff:float);
-
- procedure SetGargle(dwRateHz:Dword;dwWaveShape:DWORD);
-
-
- {
- =================================================================================
- -- function pour retrouver les valeurs MAX/MIN/INI des effets --
- =================================================================================
- }
-
- function GetMaxChorusWetDryMix:float;
- function GetMaxChorusDepth:float;
- function GetMaxChorusFeedback:float;
- function GetMaxChorusFrquency:float;
- function GetMaxChorusDelay:float;
-
- function GetMinChorusWetDryMix:float;
- function GetMinChorusDepth:float;
- function GetMinChorusFeedback:float;
- function GetMinChorusFrquency:float;
- function GetMinChorusDelay:float;
-
- function GetIniChorusWetDryMix:float;
- function GetIniChorusDepth:float;
- function GetIniChorusFeedback:float;
- function GetIniChorusFrquency:float;
- function GetIniChorusDelay:float;
-
- function GetMaxFlangerWetDryMix:float;
- function GetMaxFlangerDepth:float;
- function GetMaxFlangerFeedback:float;
- function GetMaxFlangerFrquency:float;
- function GetMaxFlangerDelay:float;
-
- function GetMinFlangerWetDryMix:float;
- function GetMinFlangerDepth:float;
- function GetMinFlangerFeedback:float;
- function GetMinFlangerFrquency:float;
- function GetMinFlangerDelay:float;
-
- function GetIniFlangerWetDryMix:float;
- function GetIniFlangerDepth:float;
- function GetIniFlangerFeedback:float;
- function GetIniFlangerFrquency:float;
- function GetIniFlangerDelay:float;
-
- function GetMaxCompressorGain:float;
- function GetMinCompressorGain:float;
- function GetIniCompressorGain:float;
-
- function GetMaxParamEQGain:float;
- function GetMinParamEQGain:float;
- function GetIniParamEQGain:float;
-
- function GetMaxDistortionGain:float;
- function GetMaxDistortionEdge:float;
- function GetMaxDistortionPostEqCenterFrequency:float;
- function GetMaxDistortionPostEqBandwith:float;
- function GetMaxDistortionPreLowpassCutOff:float;
-
- function GetMinDistortionGain:float;
- function GetMinDistortionEdge:float;
- function GetMinDistortionPostEqCenterFrequency:float;
- function GetMinDistortionPostEqBandwith:float;
- function GetMinDistortionPreLowpassCutOff:float;
-
- function GetIniDistortionGain:float;
- function GetIniDistortionEdge:float;
- function GetIniDistortionPostEqCenterFrequency:float;
- function GetIniDistortionPostEqBandwith:float;
- function GetIniDistortionPreLowpassCutOff:float;
-
- function GetMaxGargleDwRateHz:DWORD;
- function GetMinGargleDwRateHz:DWORD;
- function GetIniGargleDwRateHz:DWORD;
-
-
- end;
-
-
- implementation
-
- {
- Ini de BASS
- }
- constructor TSonStream.Create;
- begin
- Bass_Init(-1,FREQUENCE_INITIAL,0,0,nil);
- volume:=VOLUME_INI; // par defaut vol a 3/4
- pan := PAN_INI; // son centré
- frequence := FREQUENCE_INITIAL;
- end;
-
- {
- Libere Bass
- Libere le stream
- }
- destructor TSonStream.Destroy;
- begin
- Bass_StreamFree(stream);
- Bass_Free;
- inherited;
- end;
- {
- Si le stream a deja ete charge ( stream <> 0 ) on le libere puis le re-charge
- affectation de nom et nomComplet
- }
- procedure TSonStream.Charger(name:string);
- begin
- if(stream<>0) then Bass_StreamFree(stream);// un son est chargé
- stream := BASS_StreamCreateFile(False, PChar(name), 0, 0, 0);
- if(stream=0) then exit;
- nom := ExtractFileName(name);
- nomComplet:=name;
- end;
-
- {
- ========================================================================
- -- Fonctions générales --
- ========================================================================
- }
- procedure TSonStream.Lire(AuDebut:boolean);
- begin
- SetAttributes(volume,frequence,pan);
- Bass_ChannelPlay(stream,AuDebut);
- end;
-
- procedure TSonStream.Stopper;
- begin
- Bass_ChannelStop(stream);
- end;
-
- procedure TSonStream.Pause;
- begin
- Bass_ChannelPause(stream);
- end;
-
- function TSonStream.GetNom:string;
- begin
- result:=nom;
- end;
-
- function TSonStream.GetNomComplet:string;
- begin
- result:=nomComplet;
- end;
-
- function TSonStream.LongueurTotal:dword;
- begin
- result:=BASS_ChannelGetLength(stream);
- end;
-
- function TSonStream.GetTempsTotal : float;
- begin
- result:=BASS_ChannelBytes2Seconds(stream,LongueurTotal);
- end;
-
- function TSonStream.GetTempsEnCours : float;
- begin
- result:=BASS_ChannelBytes2Seconds(stream,PositionEnCours);
- end;
-
-
- procedure TSonStream.ChangerPosition(NouvellePosition:dword);
- begin
- BASS_ChannelSetPosition(stream,NouvellePosition);
- end;
-
- function TSonStream.PositionEnCours:dword;
- begin
- result:=BASS_ChannelGetPosition(stream);
- end;
-
- procedure TSonStream.SetVolume(NewVolume : integer);
- begin
- volume:=NewVolume;
- if(volume>VOLUME_MIN) AND
- (volume<VOLUME_MAX) then SetAttributes(volume,frequence,pan);
- end;
-
- function TSonStream.GetVolume:integer;
- begin
- result:=volume;
- end;
-
- function TSonStream.GetVolumeMax:integer;
- begin
- result:=VOLUME_MAX;
- end;
-
- function TSonStream.GetVolumeMin:integer;
- begin
- result:=VOLUME_MIN;
- end;
-
-
- procedure TSonStream.SetPan(NewPan:integer);
- begin
- pan:=NewPan;
- if(pan>PAN_MIN) AND
- (pan<PAN_MAX) then SetAttributes(volume,frequence,pan);
- end;
-
- function TSonStream.GetPan:integer;
- begin
- result:=pan;
- end;
-
- function TSonStream.GetPanMax:integer;
- begin
- result:=PAN_MAX;
- end;
-
- function TSonStream.GetPanMin:integer;
- begin
- result:=PAN_MIN;
- end;
-
- function TSonStream.GetPanIni:integer;
- begin
- result:=PAN_INI;
- end;
-
- procedure TSonStream.SetFrequence(NewFrequence:integer);
- begin
- frequence:=NewFrequence;
- if(frequence>FREQUENCE_MIN) AND
- (frequence<FREQUENCE_MAX) then SetAttributes(volume,frequence,pan);
- end;
-
- function TSonStream.GetFrequence:integer;
- begin
- result:=frequence;
- end;
-
- function TSonStream.GetFrequenceMax:integer;
- begin
- result:=FREQUENCE_MAX;
- end;
-
- function TSonStream.GetFrequenceIni:integer;
- begin
- result:=FREQUENCE_INITIAL;
- end;
-
- function TSonStream.GetFrequenceMin:integer;
- begin
- result:=FREQUENCE_MIN;
- end;
-
- procedure TSonStream.SetAttributes(volume,frequence,pan:integer);
- begin
- BASS_ChannelSetAttributes(stream,frequence,volume,pan);
- end;
-
-
- {
- ========================================================================
- -- Procedure pour (des)activer les effets --
- ========================================================================
- }
-
- procedure TSonStream.AppliquerChorus;
- begin
- fx[CHORUS]:= BASS_ChannelSetFX(stream,BASS_FX_CHORUS,0);
- end;
-
- procedure TSonStream.RetirerChorus;
- begin
- BASS_ChannelRemoveFX(stream,fx[CHORUS]);
- end;
-
- procedure TSonStream.AppliquerCompressor;
- begin
- fx[COMPRESSOR]:= BASS_ChannelSetFX(stream,BASS_FX_COMPRESSOR,0)
- end;
-
- procedure TSonStream.RetirerCompressor;
- begin
- BASS_ChannelRemoveFX(stream,fx[COMPRESSOR]);
- end;
-
- procedure TSonStream.AppliquerDistortion;
- begin
- fx[DISTORTION]:= BASS_ChannelSetFX(stream,BASS_FX_DISTORTION,0)
- end;
-
- procedure TSonStream.RetirerDistortion;
- begin
- BASS_ChannelRemoveFX(stream,fx[DISTORTION]);
- end;
-
- procedure TSonStream.AppliquerEcho;
- begin
- fx[ECHO]:= BASS_ChannelSetFX(stream,BASS_FX_ECHO,0)
- end;
-
- procedure TSonStream.RetirerEcho;
- begin
- BASS_ChannelRemoveFX(stream,fx[ECHO]);
- end;
-
- procedure TSonStream.AppliquerFlanger;
- begin
-
- fx[FLANGER] := BASS_ChannelSetFX(stream,BASS_FX_FLANGER,0);
- end;
-
- procedure TSonStream.RetirerFlanger;
- begin
- BASS_ChannelRemoveFX(stream,fx[FLANGER]);
- end;
-
-
- procedure TSonStream.AppliquerGargle;
- begin
- fx[GARGLE] := BASS_ChannelSetFX(stream,BASS_FX_GARGLE,0);
- end;
-
- procedure TSonStream.RetirerGargle;
- begin
- BASS_ChannelRemoveFX(stream,fx[GARGLE]);
- end;
-
- procedure TSonStream.AppliquerParamEQLow;
- begin
- fx[PARAMEQLOW] := BASS_ChannelSetFX(stream,BASS_FX_PARAMEQ,0);
- BASS_FXGetParameters(fx[PARAMEQLOW], @pq);
- pq.fGain:=0;
- pq.fCenter:=80;
- pq.fBandwidth:=30;
- BASS_FXSetParameters(fx[PARAMEQLOW], @pq);
-
- end;
-
- procedure TSonStream.RetirerParamEQLow;
- begin
- BASS_ChannelRemoveFX(stream,fx[PARAMEQLOW]);
-
- end;
-
- procedure TSonStream.AppliquerParamEQMed;
- begin
- fx[PARAMEQMED] := BASS_ChannelSetFX(stream,BASS_FX_PARAMEQ,0);
- BASS_FXGetParameters(fx[PARAMEQMED], @pq);
- pq.fGain:=0;
- pq.fCenter:=5000;
- pq.fBandwidth:=30;
- BASS_FXSetParameters(fx[PARAMEQMED], @pq);
-
- end;
-
- procedure TSonStream.RetirerParamEQMed;
- begin
- BASS_ChannelRemoveFX(stream,fx[PARAMEQMED]);
- end;
-
- procedure TSonStream.AppliquerParamEQHigh;
- begin
- fx[PARAMEQHIGH] := BASS_ChannelSetFX(stream,BASS_FX_PARAMEQ,0);
- BASS_FXGetParameters(fx[PARAMEQHIGH], @pq);
- pq.fGain:=0;
- pq.fCenter:=12000;
- pq.fBandwidth:=30;
- BASS_FXSetParameters(fx[PARAMEQHIGH], @pq);
-
- end;
-
- procedure TSonStream.RetirerParamEQHigh;
- begin
- BASS_ChannelRemoveFX(stream,fx[PARAMEQHIGH]);
- end;
-
-
- procedure TSonStream.AppliquerReverb;
- begin
- fx[REVERB] := BASS_ChannelSetFX(stream,BASS_FX_REVERB,0);
- end;
-
- procedure TSonStream.RetirerReverb;
- begin
- BASS_ChannelRemoveFX(stream,fx[REVERB]);
- end;
- {
- ========================================================================
- -- Procedures pour gerer plus profondement les effets --
- ========================================================================
- }
- {
- NB : On va se servir des Constantes pour regarder si l'utilisateur ne depasse pas les valeurs
- Normalement si il utilise mon systeme de constante GetMax ... et GetMin ... il n'y a pas
- de problemes
- }
-
- procedure TSonStream.SetFlanger(fWetDryMix:float;fDepth:float;fFeedback:float;
- fFrequency:float;lWaveform:Dword;fDelay:float;lPhase:Dword);
- begin
- BASS_FXGetParameters(fx[FLANGER], @fL);
- if(fWetDryMix>FLANGER_MIN_WET_DRY_MIX) AND
- (fWetDryMix<FLANGER_MAX_WET_DRY_MIX) then fL.fWetDryMix:=fWetDryMix;
- if(fDepth>FLANGER_MIN_DEPTH) AND
- (fDepth<FLANGER_MAX_DEPTH) then fl.fDepth:=fDepth;
- if(fFeedback>FLANGER_MIN_FEEDBACK) AND
- (fFeedback<FLANGER_MAX_FEEDBACK) then fl.fFeedback:=fFeedback;
-
- if(fFrequency>FLANGER_MIN_FEEDBACK) AND
- (fFrequency<FLANGER_MAX_FEEDBACK) then fl.fFrequency:=fFrequency;
- fl.lWaveform :=lWaveform;
- if(fDelay>FLANGER_MIN_DELAY) AND
- (fDelay<FLANGER_MAX_DELAY) then fl.fDelay:=fDelay;
- fl.lPhase:=lPhase;
- BASS_FXSetParameters(fx[FLANGER], @fL);
- end;
-
- procedure TSonStream.SetCompressor(fGain:float);
- begin
- BASS_FXGetParameters(fx[COMPRESSOR], @co);
- if(fGain>COMPRESSOR_MIN_GAIN) AND
- (fGain<COMPRESSOR_MAX_GAIN) then co.fGain:=fGain;
- BASS_FXSetParameters(fx[COMPRESSOR], @co);
- end;
-
- procedure TSonStream.SetParamEQLow(fGain:float);
- begin
- BASS_FXGetParameters(fx[PARAMEQLOW], @pq);
- if(fGain>PARAMEQ_MIN_GAIN) AND
- (fGain<PARAMEQ_MAX_GAIN) then pq.fGain:=fGain;
- pq.fCenter:=80;
- pq.fBandwidth:=30;
- BASS_FXSetParameters(fx[PARAMEQLOW], @pq);
-
- end;
-
- procedure TSonStream.SetParamEQMed(fGain:float);
- begin
- BASS_FXGetParameters(fx[PARAMEQMED], @pq);
- if(fGain>PARAMEQ_MIN_GAIN) AND
- (fGain<PARAMEQ_MAX_GAIN) then pq.fGain:=fGain;
- pq.fCenter:=5000;
- pq.fBandwidth:=30;
- BASS_FXSetParameters(fx[PARAMEQMED], @pq);
- end;
-
- procedure TSonStream.SetParamEQHigh(fGain:float);
- begin
- BASS_FXGetParameters(fx[PARAMEQHIGH], @pq);
- if(fGain>PARAMEQ_MIN_GAIN) AND
- (fGain<PARAMEQ_MAX_GAIN) then pq.fGain:=fGain;
- pq.fCenter:=12000;
- pq.fBandwidth:=30;
- BASS_FXSetParameters(fx[PARAMEQHIGH], @pq);
- end;
-
- procedure TSonStream.SetChorus(fWetDryMix:float;fDepth:float;fFeedback:float;
- fFrequency:float;lWaveform:DWORD;fDelay:float;lPhase:DWORD);
- begin
- BASS_FXGetParameters(fx[CHORUS],@ch);
- if(fWetDryMix>CHORUS_MIN_WET_DRY_MIX) AND
- (fWetDryMix<CHORUS_MAX_WET_DRY_MIX) then ch.fWetDryMix:=fWetDryMix;
- if(fDepth>CHORUS_MIN_DEPTH) AND
- (fDepth<CHORUS_MAX_DEPTH) then ch.fDepth:=fDepth;
- if(fFeedback>CHORUS_MIN_FEEDBACK) AND
- (fFeedback<CHORUS_MAX_FEEDBACK) then ch.fFeedback:=fFeedback;
-
- if(fFrequency>CHORUS_MIN_FEEDBACK) AND
- (fFrequency<CHORUS_MAX_FEEDBACK) then ch.fFrequency:=fFrequency;
- ch.lWaveform :=lWaveform;
- if(fDelay>CHORUS_MIN_DELAY) AND
- (fDelay<CHORUS_MAX_DELAY) then ch.fDelay:=fDelay;
- ch.lPhase:=lPhase;
-
- BASS_FXSetParameters(fx[CHORUS], @ch);
- end;
- procedure TSonStream.SetDistortion(fGain:float;fEdge:float;fPostEQCenterFrequency:float;
- fPostEQBandwidth:float;fPreLowpassCutoff:float);
- begin
- BASS_FXGetParameters(fx[DISTORTION],@di);
- if(fGain>DISTORTION_MIN_GAIN) AND
- (fGain<DISTORTION_MAX_GAIN)then di.fGain:=fGain;
-
- if(fEdge>DISTORTION_MIN_EDGE) AND
- (fEdge<DISTORTION_MAX_EDGE) then di.fEdge:=fEdge;
-
- if(fPostEQCenterFrequency>DISTORTION_MIN_POST_EQ_CENTER_FREQUENCY) AND
- (fPostEQCenterFrequency<DISTORTION_MAX_POST_EQ_CENTER_FREQUENCY)then di.fPostEQCenterFrequency:=fPostEQCenterFrequency;
- if(fPostEQBandwidth>DISTORTION_MIN_POST_EQ_BANDWITH) AND
- (fPostEQBandwidth<DISTORTION_MAX_POST_EQ_BANDWITH) then di.fPostEQBandwidth:=fPostEQBandwidth;
- if(fPreLowpassCutoff>DISTORTION_MIN_PRE_LOWPASS_CUT_OFF) AND
- (fPreLowpassCutoff<DISTORTION_MAX_PRE_LOWPASS_CUT_OFF) then di.fPreLowpassCutoff:=fPreLowpassCutoff;
- BASS_FXSetParameters(fx[DISTORTION],@di);
-
- end;
-
- procedure TSonStream.SetGargle(dwRateHz:Dword;dwWaveShape:DWORD);
- begin
- BASS_FXGetParameters(fx[GARGLE],@ga);
- if(dwRateHz>GARGLE_MIN_DW_RATE_HZ) AND
- (dwRateHz<GARGLE_MAX_DW_RATE_HZ) then ga.dwRateHz:=dwRateHz;
- ga.dwWaveShape:=dwWaveShape;
- BASS_FXSetParameters(fx[GARGLE],@ga);
-
- end;
-
-
-
-
- {
- =================================================================================
- -- function pour retrouver les valeurs MAX/MIN/INI des effets --
- =================================================================================
- }
-
- function TSonStream.GetMaxChorusWetDryMix:float;
- begin
- result:=CHORUS_MAX_WET_DRY_MIX;
- end;
- function TSonStream.GetMaxChorusDepth:float;
- begin
- result:=CHORUS_MAX_DEPTH;
- end;
-
- function TSonStream.GetMaxChorusFeedback:float;
- begin
- result:=CHORUS_MAX_FEEDBACK;
- end;
- function TSonStream.GetMaxChorusFrquency:float;
- begin
- result:=CHORUS_MAX_FREQUENCY;
- end;
- function TSonStream.GetMaxChorusDelay:float;
- begin
- result:=CHORUS_MAX_DELAY;
- end;
-
-
- function TSonStream.GetMinChorusWetDryMix:float;
- begin
- result:=CHORUS_MIN_WET_DRY_MIX;
- end;
- function TSonStream.GetMinChorusDepth:float;
- begin
- result:=CHORUS_MIN_DEPTH;
- end;
- function TSonStream.GetMinChorusFeedback:float;
- begin
- result:=CHORUS_MIN_FEEDBACK;
- end;
- function TSonStream.GetMinChorusFrquency:float;
- begin
- result:=CHORUS_MIN_FREQUENCY;
- end;
- function TSonStream.GetMinChorusDelay:float;
- begin
- result:=CHORUS_MIN_DELAY;
- end;
-
- function TSonStream.GetIniChorusWetDryMix:float;
- begin
- result:=CHORUS_INI_WET_DRY_MIX;
- end;
- function TSonStream.GetIniChorusDepth:float;
- begin
- result:=CHORUS_INI_DEPTH;
- end;
- function TSonStream.GetIniChorusFeedback:float;
- begin
- result:=CHORUS_INI_FEEDBACK;
- end;
- function TSonStream.GetIniChorusFrquency:float;
- begin
- result:=CHORUS_INI_FREQUENCY;
- end;
- function TSonStream.GetIniChorusDelay:float;
- begin
- result:=CHORUS_INI_DELAY;
- end;
-
- function TSonStream.GetMaxFlangerWetDryMix:float;
- begin
- result:=FLANGER_MAX_WET_DRY_MIX;
- end;
- function TSonStream.GetMaxFlangerDepth:float;
- begin
- result:=FLANGER_MAX_DEPTH;
- end;
- function TSonStream.GetMaxFlangerFeedback:float;
- begin
- result:=FLANGER_MAX_FEEDBACK;
- end;
- function TSonStream.GetMaxFlangerFrquency:float;
- begin
- result:=FLANGER_MAX_FREQUENCY;
- end;
- function TSonStream.GetMaxFlangerDelay:float;
- begin
- result:=FLANGER_MAX_DELAY;
- end;
-
- function TSonStream.GetMinFlangerWetDryMix:float;
- begin
- result:=FLANGER_MIN_WET_DRY_MIX;
- end;
-
- function TSonStream.GetMinFlangerDepth:float;
- begin
- result:=FLANGER_MIN_DEPTH;
- end;
- function TSonStream.GetMinFlangerFeedback:float;
- begin
- result:=FLANGER_MIN_FEEDBACK;
- end;
- function TSonStream.GetMinFlangerFrquency:float;
- begin
- result:=FLANGER_MIN_FREQUENCY;
- end;
- function TSonStream.GetMinFlangerDelay:float;
- begin
- result:=FLANGER_MIN_DELAY;
- end;
-
-
- function TSonStream.GetIniFlangerWetDryMix:float;
- begin
- result:=FLANGER_INI_WET_DRY_MIX;
- end;
- function TSonStream.GetIniFlangerDepth:float;
- begin
- result:=FLANGER_INI_DEPTH;
- end;
- function TSonStream.GetIniFlangerFeedback:float;
- begin
- result:=FLANGER_INI_FEEDBACK;
- end;
- function TSonStream.GetIniFlangerFrquency:float;
- begin
- result:=FLANGER_INI_FREQUENCY;
- end;
- function TSonStream.GetIniFlangerDelay:float;
- begin
- result:=FLANGER_INI_DELAY;
- end;
-
- function TSonStream.GetMaxCompressorGain:float;
- begin
- result:=COMPRESSOR_MAX_GAIN;
- end;
-
- function TSonStream.GetMinCompressorGain:float;
- begin
- result:=COMPRESSOR_MIN_GAIN;
- end;
- function TSonStream.GetIniCompressorGain:float;
- begin
- result:=COMPRESSOR_INI_GAIN;
- end;
-
- function TSonStream.GetMaxParamEQGain:float;
- begin
- result:=PARAMEQ_MAX_GAIN;
- end;
-
- function TSonStream.GetMinParamEQGain:float;
- begin
- result:=PARAMEQ_MIN_GAIN;
- end;
-
- function TSonStream.GetIniParamEQGain:float;
- begin
- result:=PARAMEQ_INI_GAIN;
- end;
-
- function TSonStream.GetMaxDistortionGain:float;
- begin
- result:=DISTORTION_MAX_GAIN;
- end;
-
- function TSonStream.GetMaxDistortionEdge:float;
- begin
- result:=DISTORTION_MAX_EDGE;
- end;
-
- function TSonStream.GetMaxDistortionPostEqCenterFrequency:float;
- begin
- result:=DISTORTION_MAX_POST_EQ_CENTER_FREQUENCY;
- end;
- function TSonStream.GetMaxDistortionPostEqBandwith:float;
- begin
- result:=DISTORTION_MAX_POST_EQ_BANDWITH;
- end;
- function TSonStream.GetMaxDistortionPreLowpassCutOff:float;
- begin
- result:=DISTORTION_MAX_PRE_LOWPASS_CUT_OFF;
- end;
-
-
- function TSonStream.GetMinDistortionGain:float;
- begin
- result:=DISTORTION_MIN_GAIN;
- end;
-
- function TSonStream.GetMinDistortionEdge:float;
- begin
- result:=DISTORTION_MIN_EDGE;
- end;
-
- function TSonStream.GetMinDistortionPostEqCenterFrequency:float;
- begin
- result:=DISTORTION_MIN_POST_EQ_CENTER_FREQUENCY;
- end;
- function TSonStream.GetMinDistortionPostEqBandwith:float;
- begin
- result:=DISTORTION_MIN_POST_EQ_BANDWITH;
- end;
- function TSonStream.GetMinDistortionPreLowpassCutOff:float;
- begin
- result:=DISTORTION_MIN_PRE_LOWPASS_CUT_OFF;
- end;
-
-
- function TSonStream.GetIniDistortionGain:float;
- begin
- result:=DISTORTION_INI_GAIN;
- end;
-
- function TSonStream.GetIniDistortionEdge:float;
- begin
- result:=DISTORTION_INI_EDGE;
- end;
-
- function TSonStream.GetIniDistortionPostEqCenterFrequency:float;
- begin
- result:=DISTORTION_INI_POST_EQ_CENTER_FREQUENCY;
- end;
- function TSonStream.GetIniDistortionPostEqBandwith:float;
- begin
- result:=DISTORTION_INI_POST_EQ_BANDWITH;
- end;
- function TSonStream.GetIniDistortionPreLowpassCutOff:float;
- begin
- result:=DISTORTION_INI_PRE_LOWPASS_CUT_OFF;
- end;
-
-
- function TSonStream.GetMaxGargleDwRateHz:DWORD;
- begin
- result:=GARGLE_MAX_DW_RATE_HZ;
- end;
-
- function TSonStream.GetMinGargleDwRateHz:DWORD;
- begin
- result:=GARGLE_MIN_DW_RATE_HZ;
- end;
-
- function TSonStream.GetIniGargleDwRateHz:DWORD;
- begin
- result:= GARGLE_INI_DW_RATE_HZ;
- end;
-
-
-
-
-
- end.
unit SonStream;
interface
uses Bass,SysUtils;
const
CHORUS=1;
COMPRESSOR=2;
DISTORTION=3;
ECHO=4;
FLANGER=5;
GARGLE=6;
PARAMEQLOW=7;
PARAMEQMED=8;
PARAMEQHIGH=9;
REVERB=10;
MAX_EFFET=10;
FREQUENCE_INITIAL = 44100 ;
FREQUENCE_MIN = 100;
FREQUENCE_MAX = 100000;
PAN_INI = 0;
PAN_MAX = 100;
PAN_MIN = -100;
VOLUME_INI = 75;
VOLUME_MAX = 100;
VOLUME_MIN = 0;
CHORUS_MIN_WET_DRY_MIX=0.0;
CHORUS_INI_WET_DRY_MIX=0.0;
CHORUS_MAX_WET_DRY_MIX = 100.0;
CHORUS_MIN_DEPTH=0.0;
CHORUS_INI_DEPTH=25.0;
CHORUS_MAX_DEPTH=100.0;
CHORUS_MIN_FEEDBACK=-99.0;
CHORUS_INI_FEEDBACK=0.0;
CHORUS_MAX_FEEDBACK=99.0;
CHORUS_MIN_FREQUENCY=0.0;
CHORUS_INI_FREQUENCY=0.0;
CHORUS_MAX_FREQUENCY=10.0;
CHORUS_MIN_DELAY=0.0;
CHORUS_INI_DELAY=0.0;
CHORUS_MAX_DELAY=20.0;
FLANGER_MIN_WET_DRY_MIX=0.0;
FLANGER_INI_WET_DRY_MIX=0.0;
FLANGER_MAX_WET_DRY_MIX = 100.0;
FLANGER_MIN_DEPTH=0.0;
FLANGER_INI_DEPTH=25.0;
FLANGER_MAX_DEPTH=100.0;
FLANGER_MIN_FEEDBACK=-99.0;
FLANGER_INI_FEEDBACK=0.0;
FLANGER_MAX_FEEDBACK=99.0;
FLANGER_MIN_FREQUENCY=0.0;
FLANGER_INI_FREQUENCY=0.0;
FLANGER_MAX_FREQUENCY=10.0;
FLANGER_MIN_DELAY=0.0;
FLANGER_INI_DELAY=0.0;
FLANGER_MAX_DELAY=4.0;
COMPRESSOR_MAX_GAIN=60.0;
COMPRESSOR_INI_GAIN=0.0;
COMPRESSOR_MIN_GAIN=-60.0;
PARAMEQ_MAX_GAIN=15.0;
PARAMEQ_MIN_GAIN=-15.0;
PARAMEQ_INI_GAIN=0.0;
DISTORTION_MIN_GAIN=-60.0;
DISTORTION_INI_GAIN=0.0;
DISTORTION_MAX_GAIN=0.0;
DISTORTION_MIN_EDGE=0.0;
DISTORTION_INI_EDGE=50.0;
DISTORTION_MAX_EDGE=100.0;
DISTORTION_MIN_POST_EQ_CENTER_FREQUENCY=100.0;
DISTORTION_INI_POST_EQ_CENTER_FREQUENCY=4000.0;
DISTORTION_MAX_POST_EQ_CENTER_FREQUENCY=8000.0;
DISTORTION_MIN_POST_EQ_BANDWITH=100.0;
DISTORTION_INI_POST_EQ_BANDWITH=4000.0;
DISTORTION_MAX_POST_EQ_BANDWITH=8000.0;
DISTORTION_MIN_PRE_LOWPASS_CUT_OFF=100.0;
DISTORTION_INI_PRE_LOWPASS_CUT_OFF=4000.0;
DISTORTION_MAX_PRE_LOWPASS_CUT_OFF=8000.0;
GARGLE_MIN_DW_RATE_HZ=1;
GARGLE_INI_DW_RATE_HZ=15;
GARGLE_MAX_DW_RATE_HZ=1000;
type
TSonStream = class(TObject)
private
nom:string;
nomComplet : string;
volume,frequence,pan : integer;
stream : HSTREAM;
ch : BASS_FXCHORUS;
co: BASS_FXCOMPRESSOR;
di: BASS_FXDISTORTION;
ec: BASS_FXECHO;
fl: BASS_FXFLANGER;
ga: BASS_FXGARGLE;
pq: BASS_FXPARAMEQ;
rv: BASS_FXREVERB;
fx : array [1..MAX_EFFET] of HFX;
procedure SetAttributes(volume,frequence,pan:integer);
public
constructor Create;
destructor Destroy;override;
{
========================================================================
-- Fonctions générales --
========================================================================
}
procedure Charger(name:string);
procedure Lire(AuDebut:boolean);
procedure Stopper;
procedure Pause;
function GetNom:string;
function GetNomComplet:string;
function PositionEnCours:dword;
procedure ChangerPosition(NouvellePosition:dword);
function LongueurTotal:dword;
function GetTempsTotal : float;
function GetTempsEnCours : float;
procedure SetVolume(NewVolume : integer);
function GetVolume:integer;
function GetVolumeMax:integer;
function GetVolumeMin:integer;
procedure SetPan(NewPan:integer);
function GetPan:integer;
function GetPanMax:integer;
function GetPanMin:integer;
function GetPanIni:integer;
procedure SetFrequence(NewFrequence:integer);
function GetFrequence:integer;
function GetFrequenceMax:integer;
function GetFrequenceIni:integer;
function GetFrequenceMin:integer;
{
========================================================================
-- Procedures pour (des)activer les effets --
========================================================================
}
procedure AppliquerChorus;
procedure RetirerChorus;
procedure AppliquerCompressor;
procedure RetirerCompressor;
procedure AppliquerDistortion;
procedure RetirerDistortion;
procedure AppliquerEcho;
procedure RetirerEcho;
procedure AppliquerFlanger;
procedure RetirerFlanger;
procedure AppliquerGargle;
procedure RetirerGargle;
procedure AppliquerParamEQLow;
procedure RetirerParamEQLow;
procedure AppliquerParamEQMed;
procedure RetirerParamEQMed;
procedure AppliquerParamEQHigh;
procedure RetirerParamEQHigh;
procedure AppliquerReverb;
procedure RetirerReverb;
{
========================================================================
-- Procedures pour gerer plus profondement les effets --
========================================================================
}
procedure SetCompressor(fGain:float);
procedure SetParamEQLow(fGain:float);
procedure SetParamEQMed(fGain:float);
procedure SetParamEQHigh(fGain:float);
procedure SetFlanger(fWetDryMix:float;fDepth:float;fFeedback:float;
fFrequency:float;lWaveform:Dword;fDelay:float;lPhase:Dword);
procedure SetChorus(fWetDryMix:float;fDepth:float;fFeedback:float;
fFrequency:float;lWaveform:DWORD;fDelay:float;lPhase:DWORD);
procedure SetDistortion(fGain:float;fEdge:float;fPostEQCenterFrequency:float;
fPostEQBandwidth:float;fPreLowpassCutoff:float);
procedure SetGargle(dwRateHz:Dword;dwWaveShape:DWORD);
{
=================================================================================
-- function pour retrouver les valeurs MAX/MIN/INI des effets --
=================================================================================
}
function GetMaxChorusWetDryMix:float;
function GetMaxChorusDepth:float;
function GetMaxChorusFeedback:float;
function GetMaxChorusFrquency:float;
function GetMaxChorusDelay:float;
function GetMinChorusWetDryMix:float;
function GetMinChorusDepth:float;
function GetMinChorusFeedback:float;
function GetMinChorusFrquency:float;
function GetMinChorusDelay:float;
function GetIniChorusWetDryMix:float;
function GetIniChorusDepth:float;
function GetIniChorusFeedback:float;
function GetIniChorusFrquency:float;
function GetIniChorusDelay:float;
function GetMaxFlangerWetDryMix:float;
function GetMaxFlangerDepth:float;
function GetMaxFlangerFeedback:float;
function GetMaxFlangerFrquency:float;
function GetMaxFlangerDelay:float;
function GetMinFlangerWetDryMix:float;
function GetMinFlangerDepth:float;
function GetMinFlangerFeedback:float;
function GetMinFlangerFrquency:float;
function GetMinFlangerDelay:float;
function GetIniFlangerWetDryMix:float;
function GetIniFlangerDepth:float;
function GetIniFlangerFeedback:float;
function GetIniFlangerFrquency:float;
function GetIniFlangerDelay:float;
function GetMaxCompressorGain:float;
function GetMinCompressorGain:float;
function GetIniCompressorGain:float;
function GetMaxParamEQGain:float;
function GetMinParamEQGain:float;
function GetIniParamEQGain:float;
function GetMaxDistortionGain:float;
function GetMaxDistortionEdge:float;
function GetMaxDistortionPostEqCenterFrequency:float;
function GetMaxDistortionPostEqBandwith:float;
function GetMaxDistortionPreLowpassCutOff:float;
function GetMinDistortionGain:float;
function GetMinDistortionEdge:float;
function GetMinDistortionPostEqCenterFrequency:float;
function GetMinDistortionPostEqBandwith:float;
function GetMinDistortionPreLowpassCutOff:float;
function GetIniDistortionGain:float;
function GetIniDistortionEdge:float;
function GetIniDistortionPostEqCenterFrequency:float;
function GetIniDistortionPostEqBandwith:float;
function GetIniDistortionPreLowpassCutOff:float;
function GetMaxGargleDwRateHz:DWORD;
function GetMinGargleDwRateHz:DWORD;
function GetIniGargleDwRateHz:DWORD;
end;
implementation
{
Ini de BASS
}
constructor TSonStream.Create;
begin
Bass_Init(-1,FREQUENCE_INITIAL,0,0,nil);
volume:=VOLUME_INI; // par defaut vol a 3/4
pan := PAN_INI; // son centré
frequence := FREQUENCE_INITIAL;
end;
{
Libere Bass
Libere le stream
}
destructor TSonStream.Destroy;
begin
Bass_StreamFree(stream);
Bass_Free;
inherited;
end;
{
Si le stream a deja ete charge ( stream <> 0 ) on le libere puis le re-charge
affectation de nom et nomComplet
}
procedure TSonStream.Charger(name:string);
begin
if(stream<>0) then Bass_StreamFree(stream);// un son est chargé
stream := BASS_StreamCreateFile(False, PChar(name), 0, 0, 0);
if(stream=0) then exit;
nom := ExtractFileName(name);
nomComplet:=name;
end;
{
========================================================================
-- Fonctions générales --
========================================================================
}
procedure TSonStream.Lire(AuDebut:boolean);
begin
SetAttributes(volume,frequence,pan);
Bass_ChannelPlay(stream,AuDebut);
end;
procedure TSonStream.Stopper;
begin
Bass_ChannelStop(stream);
end;
procedure TSonStream.Pause;
begin
Bass_ChannelPause(stream);
end;
function TSonStream.GetNom:string;
begin
result:=nom;
end;
function TSonStream.GetNomComplet:string;
begin
result:=nomComplet;
end;
function TSonStream.LongueurTotal:dword;
begin
result:=BASS_ChannelGetLength(stream);
end;
function TSonStream.GetTempsTotal : float;
begin
result:=BASS_ChannelBytes2Seconds(stream,LongueurTotal);
end;
function TSonStream.GetTempsEnCours : float;
begin
result:=BASS_ChannelBytes2Seconds(stream,PositionEnCours);
end;
procedure TSonStream.ChangerPosition(NouvellePosition:dword);
begin
BASS_ChannelSetPosition(stream,NouvellePosition);
end;
function TSonStream.PositionEnCours:dword;
begin
result:=BASS_ChannelGetPosition(stream);
end;
procedure TSonStream.SetVolume(NewVolume : integer);
begin
volume:=NewVolume;
if(volume>VOLUME_MIN) AND
(volume<VOLUME_MAX) then SetAttributes(volume,frequence,pan);
end;
function TSonStream.GetVolume:integer;
begin
result:=volume;
end;
function TSonStream.GetVolumeMax:integer;
begin
result:=VOLUME_MAX;
end;
function TSonStream.GetVolumeMin:integer;
begin
result:=VOLUME_MIN;
end;
procedure TSonStream.SetPan(NewPan:integer);
begin
pan:=NewPan;
if(pan>PAN_MIN) AND
(pan<PAN_MAX) then SetAttributes(volume,frequence,pan);
end;
function TSonStream.GetPan:integer;
begin
result:=pan;
end;
function TSonStream.GetPanMax:integer;
begin
result:=PAN_MAX;
end;
function TSonStream.GetPanMin:integer;
begin
result:=PAN_MIN;
end;
function TSonStream.GetPanIni:integer;
begin
result:=PAN_INI;
end;
procedure TSonStream.SetFrequence(NewFrequence:integer);
begin
frequence:=NewFrequence;
if(frequence>FREQUENCE_MIN) AND
(frequence<FREQUENCE_MAX) then SetAttributes(volume,frequence,pan);
end;
function TSonStream.GetFrequence:integer;
begin
result:=frequence;
end;
function TSonStream.GetFrequenceMax:integer;
begin
result:=FREQUENCE_MAX;
end;
function TSonStream.GetFrequenceIni:integer;
begin
result:=FREQUENCE_INITIAL;
end;
function TSonStream.GetFrequenceMin:integer;
begin
result:=FREQUENCE_MIN;
end;
procedure TSonStream.SetAttributes(volume,frequence,pan:integer);
begin
BASS_ChannelSetAttributes(stream,frequence,volume,pan);
end;
{
========================================================================
-- Procedure pour (des)activer les effets --
========================================================================
}
procedure TSonStream.AppliquerChorus;
begin
fx[CHORUS]:= BASS_ChannelSetFX(stream,BASS_FX_CHORUS,0);
end;
procedure TSonStream.RetirerChorus;
begin
BASS_ChannelRemoveFX(stream,fx[CHORUS]);
end;
procedure TSonStream.AppliquerCompressor;
begin
fx[COMPRESSOR]:= BASS_ChannelSetFX(stream,BASS_FX_COMPRESSOR,0)
end;
procedure TSonStream.RetirerCompressor;
begin
BASS_ChannelRemoveFX(stream,fx[COMPRESSOR]);
end;
procedure TSonStream.AppliquerDistortion;
begin
fx[DISTORTION]:= BASS_ChannelSetFX(stream,BASS_FX_DISTORTION,0)
end;
procedure TSonStream.RetirerDistortion;
begin
BASS_ChannelRemoveFX(stream,fx[DISTORTION]);
end;
procedure TSonStream.AppliquerEcho;
begin
fx[ECHO]:= BASS_ChannelSetFX(stream,BASS_FX_ECHO,0)
end;
procedure TSonStream.RetirerEcho;
begin
BASS_ChannelRemoveFX(stream,fx[ECHO]);
end;
procedure TSonStream.AppliquerFlanger;
begin
fx[FLANGER] := BASS_ChannelSetFX(stream,BASS_FX_FLANGER,0);
end;
procedure TSonStream.RetirerFlanger;
begin
BASS_ChannelRemoveFX(stream,fx[FLANGER]);
end;
procedure TSonStream.AppliquerGargle;
begin
fx[GARGLE] := BASS_ChannelSetFX(stream,BASS_FX_GARGLE,0);
end;
procedure TSonStream.RetirerGargle;
begin
BASS_ChannelRemoveFX(stream,fx[GARGLE]);
end;
procedure TSonStream.AppliquerParamEQLow;
begin
fx[PARAMEQLOW] := BASS_ChannelSetFX(stream,BASS_FX_PARAMEQ,0);
BASS_FXGetParameters(fx[PARAMEQLOW], @pq);
pq.fGain:=0;
pq.fCenter:=80;
pq.fBandwidth:=30;
BASS_FXSetParameters(fx[PARAMEQLOW], @pq);
end;
procedure TSonStream.RetirerParamEQLow;
begin
BASS_ChannelRemoveFX(stream,fx[PARAMEQLOW]);
end;
procedure TSonStream.AppliquerParamEQMed;
begin
fx[PARAMEQMED] := BASS_ChannelSetFX(stream,BASS_FX_PARAMEQ,0);
BASS_FXGetParameters(fx[PARAMEQMED], @pq);
pq.fGain:=0;
pq.fCenter:=5000;
pq.fBandwidth:=30;
BASS_FXSetParameters(fx[PARAMEQMED], @pq);
end;
procedure TSonStream.RetirerParamEQMed;
begin
BASS_ChannelRemoveFX(stream,fx[PARAMEQMED]);
end;
procedure TSonStream.AppliquerParamEQHigh;
begin
fx[PARAMEQHIGH] := BASS_ChannelSetFX(stream,BASS_FX_PARAMEQ,0);
BASS_FXGetParameters(fx[PARAMEQHIGH], @pq);
pq.fGain:=0;
pq.fCenter:=12000;
pq.fBandwidth:=30;
BASS_FXSetParameters(fx[PARAMEQHIGH], @pq);
end;
procedure TSonStream.RetirerParamEQHigh;
begin
BASS_ChannelRemoveFX(stream,fx[PARAMEQHIGH]);
end;
procedure TSonStream.AppliquerReverb;
begin
fx[REVERB] := BASS_ChannelSetFX(stream,BASS_FX_REVERB,0);
end;
procedure TSonStream.RetirerReverb;
begin
BASS_ChannelRemoveFX(stream,fx[REVERB]);
end;
{
========================================================================
-- Procedures pour gerer plus profondement les effets --
========================================================================
}
{
NB : On va se servir des Constantes pour regarder si l'utilisateur ne depasse pas les valeurs
Normalement si il utilise mon systeme de constante GetMax ... et GetMin ... il n'y a pas
de problemes
}
procedure TSonStream.SetFlanger(fWetDryMix:float;fDepth:float;fFeedback:float;
fFrequency:float;lWaveform:Dword;fDelay:float;lPhase:Dword);
begin
BASS_FXGetParameters(fx[FLANGER], @fL);
if(fWetDryMix>FLANGER_MIN_WET_DRY_MIX) AND
(fWetDryMix<FLANGER_MAX_WET_DRY_MIX) then fL.fWetDryMix:=fWetDryMix;
if(fDepth>FLANGER_MIN_DEPTH) AND
(fDepth<FLANGER_MAX_DEPTH) then fl.fDepth:=fDepth;
if(fFeedback>FLANGER_MIN_FEEDBACK) AND
(fFeedback<FLANGER_MAX_FEEDBACK) then fl.fFeedback:=fFeedback;
if(fFrequency>FLANGER_MIN_FEEDBACK) AND
(fFrequency<FLANGER_MAX_FEEDBACK) then fl.fFrequency:=fFrequency;
fl.lWaveform :=lWaveform;
if(fDelay>FLANGER_MIN_DELAY) AND
(fDelay<FLANGER_MAX_DELAY) then fl.fDelay:=fDelay;
fl.lPhase:=lPhase;
BASS_FXSetParameters(fx[FLANGER], @fL);
end;
procedure TSonStream.SetCompressor(fGain:float);
begin
BASS_FXGetParameters(fx[COMPRESSOR], @co);
if(fGain>COMPRESSOR_MIN_GAIN) AND
(fGain<COMPRESSOR_MAX_GAIN) then co.fGain:=fGain;
BASS_FXSetParameters(fx[COMPRESSOR], @co);
end;
procedure TSonStream.SetParamEQLow(fGain:float);
begin
BASS_FXGetParameters(fx[PARAMEQLOW], @pq);
if(fGain>PARAMEQ_MIN_GAIN) AND
(fGain<PARAMEQ_MAX_GAIN) then pq.fGain:=fGain;
pq.fCenter:=80;
pq.fBandwidth:=30;
BASS_FXSetParameters(fx[PARAMEQLOW], @pq);
end;
procedure TSonStream.SetParamEQMed(fGain:float);
begin
BASS_FXGetParameters(fx[PARAMEQMED], @pq);
if(fGain>PARAMEQ_MIN_GAIN) AND
(fGain<PARAMEQ_MAX_GAIN) then pq.fGain:=fGain;
pq.fCenter:=5000;
pq.fBandwidth:=30;
BASS_FXSetParameters(fx[PARAMEQMED], @pq);
end;
procedure TSonStream.SetParamEQHigh(fGain:float);
begin
BASS_FXGetParameters(fx[PARAMEQHIGH], @pq);
if(fGain>PARAMEQ_MIN_GAIN) AND
(fGain<PARAMEQ_MAX_GAIN) then pq.fGain:=fGain;
pq.fCenter:=12000;
pq.fBandwidth:=30;
BASS_FXSetParameters(fx[PARAMEQHIGH], @pq);
end;
procedure TSonStream.SetChorus(fWetDryMix:float;fDepth:float;fFeedback:float;
fFrequency:float;lWaveform:DWORD;fDelay:float;lPhase:DWORD);
begin
BASS_FXGetParameters(fx[CHORUS],@ch);
if(fWetDryMix>CHORUS_MIN_WET_DRY_MIX) AND
(fWetDryMix<CHORUS_MAX_WET_DRY_MIX) then ch.fWetDryMix:=fWetDryMix;
if(fDepth>CHORUS_MIN_DEPTH) AND
(fDepth<CHORUS_MAX_DEPTH) then ch.fDepth:=fDepth;
if(fFeedback>CHORUS_MIN_FEEDBACK) AND
(fFeedback<CHORUS_MAX_FEEDBACK) then ch.fFeedback:=fFeedback;
if(fFrequency>CHORUS_MIN_FEEDBACK) AND
(fFrequency<CHORUS_MAX_FEEDBACK) then ch.fFrequency:=fFrequency;
ch.lWaveform :=lWaveform;
if(fDelay>CHORUS_MIN_DELAY) AND
(fDelay<CHORUS_MAX_DELAY) then ch.fDelay:=fDelay;
ch.lPhase:=lPhase;
BASS_FXSetParameters(fx[CHORUS], @ch);
end;
procedure TSonStream.SetDistortion(fGain:float;fEdge:float;fPostEQCenterFrequency:float;
fPostEQBandwidth:float;fPreLowpassCutoff:float);
begin
BASS_FXGetParameters(fx[DISTORTION],@di);
if(fGain>DISTORTION_MIN_GAIN) AND
(fGain<DISTORTION_MAX_GAIN)then di.fGain:=fGain;
if(fEdge>DISTORTION_MIN_EDGE) AND
(fEdge<DISTORTION_MAX_EDGE) then di.fEdge:=fEdge;
if(fPostEQCenterFrequency>DISTORTION_MIN_POST_EQ_CENTER_FREQUENCY) AND
(fPostEQCenterFrequency<DISTORTION_MAX_POST_EQ_CENTER_FREQUENCY)then di.fPostEQCenterFrequency:=fPostEQCenterFrequency;
if(fPostEQBandwidth>DISTORTION_MIN_POST_EQ_BANDWITH) AND
(fPostEQBandwidth<DISTORTION_MAX_POST_EQ_BANDWITH) then di.fPostEQBandwidth:=fPostEQBandwidth;
if(fPreLowpassCutoff>DISTORTION_MIN_PRE_LOWPASS_CUT_OFF) AND
(fPreLowpassCutoff<DISTORTION_MAX_PRE_LOWPASS_CUT_OFF) then di.fPreLowpassCutoff:=fPreLowpassCutoff;
BASS_FXSetParameters(fx[DISTORTION],@di);
end;
procedure TSonStream.SetGargle(dwRateHz:Dword;dwWaveShape:DWORD);
begin
BASS_FXGetParameters(fx[GARGLE],@ga);
if(dwRateHz>GARGLE_MIN_DW_RATE_HZ) AND
(dwRateHz<GARGLE_MAX_DW_RATE_HZ) then ga.dwRateHz:=dwRateHz;
ga.dwWaveShape:=dwWaveShape;
BASS_FXSetParameters(fx[GARGLE],@ga);
end;
{
=================================================================================
-- function pour retrouver les valeurs MAX/MIN/INI des effets --
=================================================================================
}
function TSonStream.GetMaxChorusWetDryMix:float;
begin
result:=CHORUS_MAX_WET_DRY_MIX;
end;
function TSonStream.GetMaxChorusDepth:float;
begin
result:=CHORUS_MAX_DEPTH;
end;
function TSonStream.GetMaxChorusFeedback:float;
begin
result:=CHORUS_MAX_FEEDBACK;
end;
function TSonStream.GetMaxChorusFrquency:float;
begin
result:=CHORUS_MAX_FREQUENCY;
end;
function TSonStream.GetMaxChorusDelay:float;
begin
result:=CHORUS_MAX_DELAY;
end;
function TSonStream.GetMinChorusWetDryMix:float;
begin
result:=CHORUS_MIN_WET_DRY_MIX;
end;
function TSonStream.GetMinChorusDepth:float;
begin
result:=CHORUS_MIN_DEPTH;
end;
function TSonStream.GetMinChorusFeedback:float;
begin
result:=CHORUS_MIN_FEEDBACK;
end;
function TSonStream.GetMinChorusFrquency:float;
begin
result:=CHORUS_MIN_FREQUENCY;
end;
function TSonStream.GetMinChorusDelay:float;
begin
result:=CHORUS_MIN_DELAY;
end;
function TSonStream.GetIniChorusWetDryMix:float;
begin
result:=CHORUS_INI_WET_DRY_MIX;
end;
function TSonStream.GetIniChorusDepth:float;
begin
result:=CHORUS_INI_DEPTH;
end;
function TSonStream.GetIniChorusFeedback:float;
begin
result:=CHORUS_INI_FEEDBACK;
end;
function TSonStream.GetIniChorusFrquency:float;
begin
result:=CHORUS_INI_FREQUENCY;
end;
function TSonStream.GetIniChorusDelay:float;
begin
result:=CHORUS_INI_DELAY;
end;
function TSonStream.GetMaxFlangerWetDryMix:float;
begin
result:=FLANGER_MAX_WET_DRY_MIX;
end;
function TSonStream.GetMaxFlangerDepth:float;
begin
result:=FLANGER_MAX_DEPTH;
end;
function TSonStream.GetMaxFlangerFeedback:float;
begin
result:=FLANGER_MAX_FEEDBACK;
end;
function TSonStream.GetMaxFlangerFrquency:float;
begin
result:=FLANGER_MAX_FREQUENCY;
end;
function TSonStream.GetMaxFlangerDelay:float;
begin
result:=FLANGER_MAX_DELAY;
end;
function TSonStream.GetMinFlangerWetDryMix:float;
begin
result:=FLANGER_MIN_WET_DRY_MIX;
end;
function TSonStream.GetMinFlangerDepth:float;
begin
result:=FLANGER_MIN_DEPTH;
end;
function TSonStream.GetMinFlangerFeedback:float;
begin
result:=FLANGER_MIN_FEEDBACK;
end;
function TSonStream.GetMinFlangerFrquency:float;
begin
result:=FLANGER_MIN_FREQUENCY;
end;
function TSonStream.GetMinFlangerDelay:float;
begin
result:=FLANGER_MIN_DELAY;
end;
function TSonStream.GetIniFlangerWetDryMix:float;
begin
result:=FLANGER_INI_WET_DRY_MIX;
end;
function TSonStream.GetIniFlangerDepth:float;
begin
result:=FLANGER_INI_DEPTH;
end;
function TSonStream.GetIniFlangerFeedback:float;
begin
result:=FLANGER_INI_FEEDBACK;
end;
function TSonStream.GetIniFlangerFrquency:float;
begin
result:=FLANGER_INI_FREQUENCY;
end;
function TSonStream.GetIniFlangerDelay:float;
begin
result:=FLANGER_INI_DELAY;
end;
function TSonStream.GetMaxCompressorGain:float;
begin
result:=COMPRESSOR_MAX_GAIN;
end;
function TSonStream.GetMinCompressorGain:float;
begin
result:=COMPRESSOR_MIN_GAIN;
end;
function TSonStream.GetIniCompressorGain:float;
begin
result:=COMPRESSOR_INI_GAIN;
end;
function TSonStream.GetMaxParamEQGain:float;
begin
result:=PARAMEQ_MAX_GAIN;
end;
function TSonStream.GetMinParamEQGain:float;
begin
result:=PARAMEQ_MIN_GAIN;
end;
function TSonStream.GetIniParamEQGain:float;
begin
result:=PARAMEQ_INI_GAIN;
end;
function TSonStream.GetMaxDistortionGain:float;
begin
result:=DISTORTION_MAX_GAIN;
end;
function TSonStream.GetMaxDistortionEdge:float;
begin
result:=DISTORTION_MAX_EDGE;
end;
function TSonStream.GetMaxDistortionPostEqCenterFrequency:float;
begin
result:=DISTORTION_MAX_POST_EQ_CENTER_FREQUENCY;
end;
function TSonStream.GetMaxDistortionPostEqBandwith:float;
begin
result:=DISTORTION_MAX_POST_EQ_BANDWITH;
end;
function TSonStream.GetMaxDistortionPreLowpassCutOff:float;
begin
result:=DISTORTION_MAX_PRE_LOWPASS_CUT_OFF;
end;
function TSonStream.GetMinDistortionGain:float;
begin
result:=DISTORTION_MIN_GAIN;
end;
function TSonStream.GetMinDistortionEdge:float;
begin
result:=DISTORTION_MIN_EDGE;
end;
function TSonStream.GetMinDistortionPostEqCenterFrequency:float;
begin
result:=DISTORTION_MIN_POST_EQ_CENTER_FREQUENCY;
end;
function TSonStream.GetMinDistortionPostEqBandwith:float;
begin
result:=DISTORTION_MIN_POST_EQ_BANDWITH;
end;
function TSonStream.GetMinDistortionPreLowpassCutOff:float;
begin
result:=DISTORTION_MIN_PRE_LOWPASS_CUT_OFF;
end;
function TSonStream.GetIniDistortionGain:float;
begin
result:=DISTORTION_INI_GAIN;
end;
function TSonStream.GetIniDistortionEdge:float;
begin
result:=DISTORTION_INI_EDGE;
end;
function TSonStream.GetIniDistortionPostEqCenterFrequency:float;
begin
result:=DISTORTION_INI_POST_EQ_CENTER_FREQUENCY;
end;
function TSonStream.GetIniDistortionPostEqBandwith:float;
begin
result:=DISTORTION_INI_POST_EQ_BANDWITH;
end;
function TSonStream.GetIniDistortionPreLowpassCutOff:float;
begin
result:=DISTORTION_INI_PRE_LOWPASS_CUT_OFF;
end;
function TSonStream.GetMaxGargleDwRateHz:DWORD;
begin
result:=GARGLE_MAX_DW_RATE_HZ;
end;
function TSonStream.GetMinGargleDwRateHz:DWORD;
begin
result:=GARGLE_MIN_DW_RATE_HZ;
end;
function TSonStream.GetIniGargleDwRateHz:DWORD;
begin
result:= GARGLE_INI_DW_RATE_HZ;
end;
end.
Conclusion
Je compte encore la continuer mais avant j'aimerais savoir si je suis dans la bonne voie ...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Une erreur (je suis debutant) [ par Delphi6 ]
Salut donc voilà en faite j'arrive pas a passer d'une class a l'autre!! voilà ce que j'ai essayer mais ça marche pas dite moi ou est l erreur svp!: Sh
Meta class et class function [ par Amadeus ]
Quelqu'un aurais til un petit cours avec des exemples simple sur les 'metaclass' et les 'class function'
Création d'une class [ par Bruto ]
Je voudrais créer une classe nommé TPwd avec un champ User et Password de type stringComment dois-je m'y prendre ? type, enum, ... ? Bruto --- Le p'ti
Objet : Variable de class [ par Raoutas ]
Bonjour j'aurais besoin d'aide, je voudrai savoir comment dans un objet créer un attributs commun à toute les instances de ma classe ???Je sais pas si
Enregistrement d'une class(TWndClass)??? [ par Manthis ]
Bonjour,Je cherche comment enregistrer une TWndClass.Je pensais à la fonction RegisterClass mais cette dernière ne marche pas. Quelqu'un connait-il la
probleme de class abstraite [ par mavric ]
Bonjour,j'ai un petit probleme sur des class abstraites.voici mes declarations :type TCreature = class private FName : string;<
Erreur: Class TXP Manifest non trouvé [ par stigmate101 ]
Salut, Lorsque, j'ouvre certains sources, je me retrouve avec une fenetre qui s'ouvre : " Erreur de lecture de la fiche", "Classe TXP Manifest non tro
Class dynamique... événement [ par juli1m ]
Bon, ben déjà, désolé pour le sujet, il n'est pas forcément clair, mais voici quelques explications.ce que je veux faire, c'est: - je créé une class,
(Niveau Élevé) POO- Comment en Delphi faire une classe qui hérite de deux autres classes comme on fais en C++ [ par cbonus2000 ]
Salut, peux-t-on en Delphi (tout comme en C++) faire une classe qui dérive de deux autres classes. Pour faire cà facile au début:Par exemple, j'ai un
Class qui modifie les HINT de l'application, ça existe? [ par thoreycity ]
Bonjour, J'ai trouvé comment créer des hints personnalisés (couleur). Mais connaissez vous une class qui permettrai de modifier les hi
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|