#include #include #pragma hdrstop #include "SonWave.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TWave *Wave; const AnsiString RepBase="E:\\Allemand"; const int MaxDecal=100; //--------------------------------------------------------------------------- __fastcall TWave::TWave(TComponent* Owner) : TForm(Owner) { ListeSons = new TStringList; Serie = new TStringList; Integral = new TStringList; DepartMode->Text="1"; AllRep(); } //--------------------------------------------------------------------------- void __fastcall TWave::JoueClick(TObject *Sender) { if(!Integral->Count) { AnsiString M="Aucun fichiers Wave détectés à partir de "+RepBase; ShowMessage(M); return; } if(!Correct()) return; if(DepartMode->Text=="A") JoueAlea(); else JoueOrdre(); } //--------------------------------------------------------------------------- bool __fastcall TWave::Correct() { int i; for(i=0;iCount;i++) if(DepartMode->Text==IntToStr(i+1)) return true; return(DepartMode->Text=="A"); } //--------------------------------------------------------------------------- void __fastcall TWave::JoueOrdre() { int i=StrToInt(DepartMode->Text); int n=PosIntegral(Serie->Strings[i-1]); while(true) { if(!JoueRep(Integral->Strings[n++])) return; if(n==Integral->Count) n=0; } } //--------------------------------------------------------------------------- int __fastcall TWave::PosIntegral(AnsiString Rep) { AnsiString Nom; int i=0; while(true) { Nom=Integral->Strings[i++]; if(Nom.AnsiPos(Rep)==1) return(--i); } } //--------------------------------------------------------------------------- void __fastcall TWave::JoueAlea() { int i; AnsiString N; POINT P; GetCursorPos(&P); ListeSons->Clear(); for(i=0;iCount;i++) Ajoute(Integral->Strings[i]); Randomize(); while(true) if(abs(JoueUnite(RandomRange(0,ListeSons->Count-1))-P.x)>MaxDecal) return; } //--------------------------------------------------------------------------- bool __fastcall TWave::JoueRep(AnsiString R) { ListeSons->Clear(); Ajoute(R); return JoueTout(); } //--------------------------------------------------------------------------- void __fastcall TWave::Ajoute(AnsiString R) { TSearchRec SRec; FindFirst(R+"\\*.wav", faAnyFile, SRec); do ListeSons->Add(R + "\\" + SRec.Name); while(!FindNext(SRec)); FindClose(SRec); } //--------------------------------------------------------------------------- bool __fastcall TWave::JoueTout() { int i; POINT P; GetCursorPos(&P); for(i=0;iCount;i++) if(abs(JoueUnite(i)-P.x)>MaxDecal) return false; return true; } //--------------------------------------------------------------------------- int __fastcall TWave::JoueUnite(int i) { POINT P; AnsiString A=ListeSons->Strings[i]; FichierWave->Caption=A; Update(); Media->FileName = A; Media->Open(); Media->Wait=true; Media->Play(); Sleep(300); GetCursorPos(&P); return(P.x); } //--------------------------------------------------------------------------- void __fastcall TWave::AllRep() { int i; AnsiString M; CreateSerie(); for(i=0;iCount;i++) SousRep(Serie->Strings[i]); AjusteSerie(); if(!Serie->Count) M="Aucun fichier Wave trouvé à partir du répertoire de base"; if(Serie->Count==1) M="Entrez 1 ou A"; if(Serie->Count>1) M="Entrez un nombre entre 1 et "+IntToStr(Serie->Count)+" ou A"; DepartMode->ShowHint=true; DepartMode->Hint=M; } //--------------------------------------------------------------------------- void __fastcall TWave::AjusteSerie() { int i=0; while(i!=Serie->Count) if(ExisteInIntegral(Serie->Strings[i])) i++; else Serie->Delete(i); } //--------------------------------------------------------------------------- bool __fastcall TWave::ExisteInIntegral(AnsiString S) { int i; AnsiString A; for(i=0;iCount;i++) { A=Integral->Strings[i]; if(A.AnsiPos(S)==1) return(true); } return(false); } //--------------------------------------------------------------------------- void __fastcall TWave::CreateSerie() { AnsiString NomRep; TSearchRec SRec; bool REP; if(ExisteWave(RepBase)) Serie->Add(RepBase); if (!FindFirst(RepBase+"\\*.*", faAnyFile, SRec)) do { NomRep=SRec.Name; REP=SRec.Attr & faDirectory; if(REP & NomRep[1]!='.') Serie->Add(RepBase + "\\" + NomRep); } while(!FindNext(SRec)); FindClose(SRec); } //--------------------------------------------------------------------------- void __fastcall TWave::SousRep(AnsiString Rep) { AnsiString NomRep; TSearchRec SRec; bool REP; if(ExisteWave(Rep)) Integral->Add(Rep); if(!ExisteRep(Rep)) return; FindFirst(Rep+"\\*.*", faAnyFile, SRec); do { NomRep=SRec.Name; REP=SRec.Attr & faDirectory; if(REP & NomRep[1]!='.') SousRep(Rep+"\\"+NomRep); } while(!FindNext(SRec)); FindClose(SRec); } //--------------------------------------------------------------------------- bool __fastcall TWave::ExisteRep(AnsiString Rep) { WideString NomRep; TSearchRec SRec; bool REP=false; if (!FindFirst(Rep+"\\*.*", faAnyFile, SRec)) do { NomRep=SRec.Name; REP=(SRec.Attr & faDirectory) && (NomRep[1]!='.'); } while(!FindNext(SRec) && !REP); FindClose(SRec); return(REP); } //--------------------------------------------------------------------------- bool __fastcall TWave::ExisteWave(AnsiString Rep) { TSearchRec SRec; bool OK; OK=!FindFirst(Rep+"\\*.wav", faAnyFile, SRec); FindClose(SRec); return(OK); } //--------------------------------------------------------------------------- void __fastcall TWave::FormDestroy(TObject *Sender) { delete ListeSons; delete Serie; delete Integral; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //---------------------------------------------------------------------------