Synchroniser de l'opengl sur un mp3 via fmod et demo opengl

Soyez le premier à donner votre avis sur cette source.

Vue 10 632 fois - Téléchargée 2 419 fois

Description

Ce code explique comment utiliser OpenGL et FMOD pour ecrire des programmes reagissant selon les impulsions presentes dans une musique (les "beat").
Vous trouverez ici une implementation complete des algorithme de "beat detection" (google powa si vous voulez en savoir plus) ainsi qu'une petite demo qui lit un fichier mp3 et qui lance des animations (a la maniere de AVS pour wiinamp).
Ce programme contient quelques effets sympathiques que vous pouvez facilement reutiliser dans vos programmes (afficher dans une texture, radial blur, effet "goutte d'eau", ...). Par defaut le programme lit le petit mp3 fournit avec winamp mais vous pouvez naturellement lire une de vos chansons en faisant un drag&drop de celle-ci sur le exe du projet.
Il ya aussi une unit pour gerer FMOD et recuperer le spectre de l'equalizer.

Source / Exemple :


voir  le source :p

Conclusion :


Le header Opengl a ete trouve sur : www.sulaco.co.za (je vous conseille de le visiter si ce n'est pas deja fait) et un pdf sur les algoritmes sur le son est telechargeable sur http://www.programmersheaven.com/d/click.aspx?ID=A8563.

Bon code ^^

UPDATE: J'aim remis au propre tout l'algo de detection d'impulsion de maniere a ce qu'il fonctionne pour le mieux. En fait j'ai pousse plus loin l'interaction entre le son et l'image en rajoutant des mouvements et des changements de couleurs.

fps chez moi : ~100

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
16
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
8 mars 2010
1
Bonsoir.
Après avoir chargé la JVCL, je suis en DELPHI 7,j'ai essayé de lancer le module mais à la compil. la classe JvxLabel, entre autres classes, n'est pas trouvée; d'ailleurs toutes les classes du même type,Jvx...., ne sont pas trouvées, aucun composant de ce type n'existe dans la JVCL.
Est-ce que ce sont des classes particulières et où les trouver pour les charger?
Merci par avance.
Cordialement.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
32
heu petit probleme de commentaire

le code que je te fournis c'est pour remplacer le composant "scrute"
c'est une methode trés rapide et qui empeche l'installation d'un composant.
c'etait juste une petite erreur de copier coller et de relecture.

il fallait lire :

pour trouver les fichier MP3 tu peu ecrire ta propre fonction ou utiliser les composant existant dans delphi (ttreeview ect... palette exemple de delphi)
plutot que d'utiliser les composants Jedi (qui deconne un peu parfois malgrés leur grande qualitées...) ou d'autre composant que certains n'ont pas forcement.

procedure MP3search(path : string);
// code...
procedure TfrmPlayer.dirOutlineChange(Sender: TObject);
// code...
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
32
alors

trés sympa, sauf que tu pourrais fournir la DCU "scrute"
et dire que tu utilise les composant Jedi.

ensuite niveau code, ajouter du commentaire
prefere .Append() a .Add() pour les ajout de données dans tout ce qui est
composant DBGrid, Memo, RichEdit, Listbox ect... c'est une methode plus rapide
car elle ne renvoie pas de valeur de verification (que l'on utilise que trés rarement)

pour trouver les fichier MP3 tu peu ecrire ta propre fonction
plutot que d'utiliser les composants Jedi (qui deconne un peu parfois malgrés leur grande qualitées...)

procedure MP3search(path : string);
var sr : TSearchRec; fn : string; n : TListItem;
begin
with frmplayer do begin
lstFile.Clear;
animS.Active:=true;
// recherche des MP3 a l'ancienne comme sur turbo pascal
// methode bourrine mais neanmoins super rapide.
FindFirst(path+'\*.mp3',faAnyFile,sr);
while FindNext(sr) = 0 do begin
JvId3v11.FileName:= sr.name;
JvId3v11.ReadTag;
n:=lstFile.Items.Add;
n.Caption:=sr.Name;
n.SubItems.Add(JvId3v11.Artist);
n.SubItems.Add(JvId3v11.Album);
n.SubItems.Add(JvId3v11.SongName);
n.SubItems.Add(JvId3v11.Year);
n.SubItems.Add(JvId3v11.GenreToString(JvId3v11.Genre));
end;
FindClose(sr);
animS.Active:=false;
end;
end;

procedure TfrmPlayer.dirOutlineChange(Sender: TObject);
begin
mp3search(diroutline.Directory);
end;


pour les idtags tu peux utiliser la DCU ID3Tag (qui est bien plus rapide et meilleure que celle de Jedi)
de Andrey V.Sorokin dispo ici http://RegExpStudio.com
a toi de tester et voir si cela te convient mieux en tout cas moi je n'utilise pas le composant jedi qui a quelques probleme et est beaucoup trop lent.

ensuite je ne comprend pas pourquoi tu declare autant les procedures Volup, voldown, goforward et gobackward ?
tu aurait dus utiliser un trackbar ou quelque chose du genre pour gerer le niveau.
et des bouttons pour passer les piste ...
certainement beaucoup plus rapide.

pour finir, essaye de regarder aussi au niveau de l'openGL car je n'ai pas decolé de 14FPS avec une FX 5600 reglée en haute perf aas0x et ani2x...
si il faut une 6600GT en SLI ... faut le dire.

voila
travail bien et bon courage.
Messages postés
16
Date d'inscription
lundi 3 février 2003
Statut
Membre
Dernière intervention
1 septembre 2008

Euh il y a encore deux bugs mineurs que je vais bientot resoudre dans le prog : le mode fullscreen ne fonctionne pas (probleme de viewporrt ;) et les textures ne sont pas chargee quand on fait un drag&drop de mp3 sur le exe ...
Je vais reparer ca dans le courant de la semaine prochaine ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.