Titre: BassBox
Description: Audio + OpenGL visualisations
Auteur : Patrice Terrier
Sujet : OpenGL, Librairie Audio BASS.DLL, GDIPLUS, VISTA DWM
Langage : PowerBASIC, C, VB6 (using low level SDK programming style)
Plateforme : Windows XP, 2003, VISTA
Technologie : Win32, GDI+, OpenGL
Audience : Dev
Niveau : Expert
1 - Introduction
BassBox est un player multimedia, open source, qui combine audio et effets visuels OpenGL.
Le projet couvre différents aspects de la programmation bas niveau en mode SDK.
Idéalement chaque code source aurait dû faire l'objet d'un article distinct, mais cela m'aurait pris beaucoup trop de temps, alors je vous livre la totale a vous de faire votre marché.
Comme BassBox est hébergé sur un forum ou l'anglais est la langue de travail, la documentation (fichier CHM) est aussi dans cette langue, néanmoins je vous conseille de la lire pour compléter cet article.
Chaque plugin BassBox illustre un aspect différent de l'API OpenGL, en s'efforcant de produire la meilleure interaction entre audio et 3D, tout en privilégiant le coté artistique visuel de la scène.
L'interface spécifique a nécessité la création de différents éléments graphiques (créés avec photoshop) pour les composants du Skin, les images de fond du player et les différentes textures OpenGL.
Mon but, en postant BassBox sur ce forum, est de trouver de nouveaux contributeurs qui acceptent de partager leurs connaissances en OpenGL pour agrandir la liste des plugins proposés.
Le projet complet est hébergé ici :
http://www.jose.it-berater.org/smfforum/index.php?board=179.0
Note : Pour télécharger la dernière version, vous devrez tout d'abord vous enregistrer en utilisant votre nom réel.
Le forum de mon ami Jose Roca, comporte également de nombreux articles destinés aux programmeurs SDK bas niveau illustrés par de nombreux codes sources.
(anglais obligatoire).
La partie audio du projet s'appuie sur l'excellente librairie BASS.DLL de Ian Luck (www.un4seen.com).
Actuellement tous les plugins visuels sont écrits en OpenGL. Le support de DirectX est prévu, mais is sera mis en place lorsque les specs DX10 seront mieux connues.
BassBox est composé de 2 parties principales :
- Le Kernel, "BassBox.exe" qui est écrit en mode Win32 SDK natif en PowerBASIC.
- Les plugins, qui doivent être de véritables DLLs Win32.
BassBox fonctionne avec XP et VISTA, il est 100% compatible DWM en mode AERO "Blur" ou "Crystal" (mode GDImage).
Le code utilise uniquement GDIPLUS en mode "flat API", pour des raisons d'optimisation et de compatibilité avec DWMAPI.DLL, ce qui permet à BassBox de dessiner directement en mode AERO GLASS natif sous VISTA.
Le player utilise une interface skinnée dont le code source se trouve dans "zSkin.inc" et dont l'utilisation est expliquée en détail sur le forum de José Roca dans la section "SDK programming" qui se trouve ici :
http://www.jose.it-berater.org/smfforum/index.php?board=151.0
2 - Utilisation du player
- Décompresser le ZIP en préservant l'arborescence des répertoires.
- Créer un raccourci vers BassBox.exe sur le bureau de Windows.
- Faire un "tiré-déplacé" d'un dossier contenant des fichiers audio, ou des sous-dossiers imbriqués, depuis 'Explorateur vers l'icône du bureau ou directement sur le player, si celui-ci est déjà entrain de jouer.
- Utiliser les boutons de navigation pour passer d'une musique à l'autre lorsque plusieurs fichiers sont séléctionnés.
- Les boutons "Play" et "pause" permettent de démarrer ou suspendre le flux audio.
- Le curseur de volume permet d'ajuster le niveau sonore.
- Effets DirectSound : reverberation, chorus, flanger, echo, sound rotation.
- Presser la touche F1 ou l'icône située dans le coin supérieur gauche pour afficher l'aide au format CHM.
Format audio supportés :
- De type stream, aif, mp1, mp2, mp3, ogg, wav, wma.
- De type SoundTracker, mo3, it, xm, s3m, mtm, mod, umx.
Play list extension :
.bbp (BassBox Playlist) c'est un texte au format ASCII comportant une liste de fichiers audio avec leur chemin local complet (full qualified path)
Il est également possible d'indiquer dans la liste une URL au format "http" ou "ftp" pour effectuer du streaming internet.
En mode streaming internet, BassBox créé un répertoire local dans lequel il sauvegarde automatiquement les fichiers mp3 joués "en live".
3 - Origine du projet
BassBox est une refonte complète du projet C# "BlackBox" qui se trouve ici :
http://www.codeproject.com/script/Articles/list_articles.asp?userid=1378591
Il comporte également différents éléments de mes démos C# OpenGL qui sont ici :
http://www.zapsolution.com/winlift/ccorner.htm
Vous vous demandez surement pourquoi, alors que mes contributions antérieures étaient en C#, j'ai choisi d'écrire le Kernel en PowerBASIC ?
Tout d'abord je voulais être sûr de m'affranchir des problèmes générés par le GC (garbage collector) lorsqu'on utilise du code API bas niveau (mode unsafe, haha!).
Ensuite j'ai choisi celui qui me paraissait le plus adpaté pour faire du temps réel et qui utilise une syntaxe de type procédurale que tous les programmeurs peuvent comprendre.
Et puis j'ai aussi pensé aux VBistes qui seront ici en pays de connaissance.
Concernant OpenGL, fort heureusement la syntaxe est toujours la même quel que soit le langage, tant que l'on utilise le modèle procedural.
Pour le reste, vous pouvez consulter l'historique complet du projet ici :
http://www.jose.it-berater.org/smfforum/index.php?topic=1364.0
4 - Utilisation du code
zSkin.inc (fichier include) contient le code source du Skin Engine et de l'API Kernel utilisée par le projet.
AudioFX.inc (fichier include) l'interface DirectSound pour les effets Bass audio.
BBPlugin.inc (fichier include) contient les déclarations de structures et l'API (helper) de base des plugins.
BassBox.bas (Main section) Le programme principal dénomé le "kernel".
BassBox.zsk (Skin UIS) La charte graphique de l'application "User Interface Specification".
Pour plus de détails sur chacun des différents modules, merci de consulter le fichier d'aide au format CHM.
BassBox utilise la même technique que GDImage pour dessiner en mode "composited" sur la section "glass" de l'interface VISTA AERO.
Tout est expliqué dans la démo "Crystal" qui se trouve ici :
http://www.jose.it-berater.org/smfforum/index.php?topic=1372.0
Et tant que vous y êtes, essayez aussi "XP AERO GLASS is alive!" qui se trouve là :
http://www.jose.it-berater.org/smfforum/index.php?topic=1263.0
Ce code source explique non seulement comment utiliser l'API DWM de VISTA, mais aussi comment émuler le mode AERO GLASS sous XP !!!.
6 - Quelques points d'intérêt
Avec VISTA, BassBox utilise une region DWM négative pour créer l'aspect "Crystal", voir dans "zSkin.inc" la procédure :
- zSetCrystalBehindMode
A voir dans les différents plugins :
- La façon dont le signal audio est "postprocessed" pour amplifier le signal FFT à l'aide de la fonction SQR.
A voir aussi dans BBPlugin.inc :
- La création de textures OpenGL à partir de n'importe quel format graphique compatible GDIPLUS.
- La façon de convertir des fontes True Type pour pouvoir les utiliser avec OpenGL.
- La façon de lire un fichier séquentiel en utilisant uniquement l'API I/O bas niveau.
7 - Historique
L'historique complet de BassBox peut être consulté ici :
http://www.jose.it-berater.org/smfforum/index.php?topic=1364.0
8 - Captures d'écrans
Vous pouvez voir quelques captures d'écrans de plugins visuels ici :
http://www.powerbasic.com/support/pbforums/showthread.php?t=35346
9 - Fichiers audio "libre de droits"
Vous en trouverez queques uns spécialement sélectionnés pour BassBox ici :
http://www.jose.it-berater.org/smfforum/index.php?board=191.0
10 - Télécharger la dernière version
Je vous invite a consulter régulièrement le site de Jose Roca qui héberge le projet BassBox, afin de télécharger les mises à jour ou les nouveaux plugins disponibles.
J'aimerai créer un "Space theme" complet basé sur l'album "The songs of Distant Earth" de Mike Oldfield.
Par exemple le plugin "HAL" est destiné a illustrer le morceau intitulé "In the Begining", "Genesis" est conçu pour "Hibernaculum" et "Day One" pour "The Chamber" etc.