Audio/video

Dans le WLangage, les fonctions MCI permet de jouer les fichiers musicaux ou vidéos mais donne trop peu d’infos sur le média joué : son état, la position du curseur de lecture, la taille (pour les vidéos) et le nombre de pistes.

Pour ouvrir un peu le champ de la gestion des médias, sans réinventer la roue, Betula vous propose d’utiliser les bibliothèques MediaInfo.dll et AudioGenie3.dll (chacune en 32 ou 64 bits selon votre préférence).

Le tout est utilisable à travers 2 classes : cMedia (de base) et cFichierMP3 spécifique, vous l’avez compris, au format audio populaire mp3 (d’autres formats suivront). Les dll sont détectées automatiquement soit dans le répertoire de l’exécutable, soit dans le répertoire Windows (suffixez le nom des dll avec _32 ou _64 si votre application doit livrer les deux). Il n’est pas nécessaire d’avoir les 2 dll, une suffit, mais cela bridera évidemment les informations disponibles.

MediaInfo (22.6.0.0 testée) est spécialisé dans la lecture des informations des flux audio et vidéo (les formats supportés sont nombreux : mkv/mka/mks, ogg/ogm, avi/wav, mpeg/mpg/vob, mp4, mpgv/mpv/m1v/m2v, mp2/mp3, asf/wma/wmv, qt/mov, rm/rmvb/ra, ifo, ac3, dts, aac, ape/mac, flac, dat, aiff/aifc, au, iff, paf, sd2, irca, w64, mat, pvf, xi, sds, avr). Par contre, la lecture des tags est limitée et il n’est pas possible de les modifier.

C’est pourquoi, AudioGenie3 (2.0.4.0 testée) vient en soutient puisqu’il va plus loin dans la lecture des tags (une centaine pour le mp3 avec nom en angais et en français) et permettra, dans une version future, de les modifier ou de les supprimer. La classe cFichierMP3 contient également une centaine de genre musicaux reconnus par les tags V1.

Comparatif avec Foobar2000 (à gauche), MP3Tag (au centre) et cFichierMP3 (à droite)

Code d’exemple qui a permit la copie d’écran ci-dessus

clAudio est un cFichier_MP3()
SI clAudio.Ouvre("C:\Temp\Tina Brooks - Minor Move.mp3") ALORS
	sRes est une chaîne
	nIndice est un entier
	POUR TOUT sValeur,sCode de clAudio.m_taValeurs
		SI sCode="MP3INFO" ALORS CONTINUER	//car contient plusieurs infos
		nIndice = TableauCherche(cFichier_MP3.mg_tabMP3Tag,tcDichotomique,"sCode",sCode)
		SI sValeur>"" _ET_ nIndice>0 ALORS  
			SI sCode="TXCUSTOM" ALORS
				sRes+=[RC]+cFichier_MP3.mg_tabMP3Tag[nIndice].sNom5
				POUR TOUTE CHAÎNE sInfo DE sValeur SEPAREE PAR RC
					sRes+=[RC]+"   "+Remplace(sInfo,TAB," : ")
				FIN
			SINON
				sRes+=[RC]+cFichier_MP3.mg_tabMP3Tag[nIndice].sNom5+" : "+sValeur
			FIN
		FIN
	FIN
	sRes+=[RC]+"Tags"+" : "+(clAudio.p_bTagV1Existe ? "V1" SINON "")+[" & "]+(clAudio.p_bTagV2Existe ? "V"+clAudio.p_sVersion2 SINON "")
	sRes+=[RC]+"Durée"+" : "+clAudio.p_sDurée
	sRes+=[RC]+"MP3 version"+" : "+clAudio.p_sMP3Version
	sRes+=[RC]+"MP3 profile"+" : "+clAudio.p_sMP3Profile
	sRes+=[RC]+"MP3 setting"+" : "+clAudio.p_sMP3Paramètres
	sRes+=[RC]+"MP3 type débit"+" : "+clAudio.p_sMP3TypeDébit
	sRes+=[RC]+"MP3 débit"+" : "+clAudio.p_sMP3Débit
	sRes+=[RC]+"MP3 canaux"+" : "+clAudio.p_sMP3Canaux
	sRes+=[RC]+"MP3 échantillonnage"+" : "+clAudio.p_sMP3Échantillonnage
	sRes+=[RC]+"MP3 compression"+" : "+clAudio.p_sMP3Compression
	Info(sRes)
SINON
	Erreur(clAudio.p_sErreurTout)
FIN