Bassbox (audio + opengl visual plugins)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 344 fois - Téléchargée 23 fois

Contenu du snippet

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 participatif, 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.

Source / Exemple :


5 - Plugin section
 
Note : Certaines cartes graphiques ont des problèmes de compatibilité avec OpenGL.
Si vous rencontrez un problème lorsque vous utilisez un plugin spécifique, retirez-le (ou renommez-le) du dossier "BBPlugin\", puis redémarrez BassBox.
 
Tous les plugins sont rangés dans le sous-dossier "BBPlugin\" 
Les ressources utilisées par les plugins sont stockées dans les 2 sous-dossier "Texture\" et "Include\". 
Chaque plugin est une petite DLL Win32 qui exporte une seule fonction nommée "BBProc". 
La procédure exportée "BBProc" permet de communiquer avec le Kernel en utilisant un pointeur In/Out vers une structure de type BBPLUGIN (passage par référence).

La procédure BBProc fonctionne exactement comme une procédure SDK WinProc standard, à la seule différence qu'elle reçoit ses messages du Kernel en temps réel et non pas depuis la file d'attente de Windows.
 
Toutes les tâches triviales sont gérées par le Kernel, de telle façon que le plugin ait juste à s'occuper de dessiner dans le buffer OpenGL, c'est tout.
 
TYPE BBPLUGIN                   '// 256 bytes
    Msg          AS LONG        '// The plugin's message (see above constant list).
    ParentWindow AS LONG        '// The parent window handle.
    DC           AS LONG        '// The parent window DC (while in play mode).
    RC           AS LONG        '// The parent OpenGL RC (while in play mode).
    Lpeak        AS WORD        '// The left audio channel peak value (while in play mode).
    Rpeak        AS WORD        '// The right audio channel peak value (while in play mode).
    Title        AS ASCIIZ * 32 '// Plugin's name or title.
    Author       AS ASCIIZ * 64 '// Plugin's author name.
    Version      AS DWORD       '// LOWRD major, HIWRD minor.
    RenderTo     AS LONG        '// BBP_GDIPLUS, BBP_OPENGL, BBP_DIRECTX.
    BackARGB     AS LONG        '// Default ARGB color background.
    FFTdata      AS DWORD       '// DWORD pointer to the FFT() AS SINGLE array.
    FFTsize      AS WORD        '// Size of the FFT array.
    WinMsg       AS LONG        '// True Windows message.
    wParam       AS LONG        '// wParam 
    lParam       AS LONG        '// lParam
    Reserved     AS ASCIIZ * 110'// Reserved for future extension.
END TYPE
 
'// The main exported plugin's function would be bbProc, like this:
FUNCTION BBProc ALIAS "BBProc" (BYREF BBP AS BBPLUGIN) EXPORT AS LONG
    LOCAL nRet AS LONG
    nRet = BBP_SUCCESS
    SELECT CASE LONG BBP.Msg
    CASE BBP_RENDER
         '// Draw the scene using BBP.LeftPeak and BBP.RightPeak
    CASE BBP_CREATE
         '// Retrieve plugin details
         BBP.Title    = "My BB plugin"
         BBP.Author   = "My Name"
         BBP.Version  = MAKDWD(1, 0) '// Version 1.0"
         BBP.RenderTo = BBP_OPENGL   '// or BBP_GDIPLUS, or BBP_DIRECTX
    CASE BBP_INIT
         '// Do your code initialisation there
    CASE BBP_SIZE
         '// The size of the view port has changed.
    CASE BBP_KEYBOARD
         '// Handle all Windows keyboard messages there
         Msg = BBP.WinMsg
         wParam = BBP.wParam
         lParam = BBP.lParam
    CASE BBP_MOUSE
         '// Handle all Windows mouse messages there
         Msg = BBP.WinMsg
         wParam = BBP.wParam
         lParam = BBP.lParam
    CASE BBP_DESTROY
         '// Free up your resources there
    CASE ELSE
        nRet = BBP_ERROR
    END SELECT
    FUNCTION = nRet
END FUNCTION

Conclusion :


Comme ce site n'accepte pas les ZIP de plus de 1 Mo et que le projet complet fait 2880 Ko, vous pouvez télécharger la version complète en utilisant le lien vers le forum de José roca qui figure au début de cet article ou en cliquant sur le lien direct qui figure ci-dessous :
http://www.zapsolution.com/BassBox/BassBox.zip


Patrice Terrier
www.zapsolution.com

A voir également

Ajouter un commentaire

Commentaires

Messages postés
78
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
14 août 2010

Monsieur,

Je vous remercie pour votre commentaire.

Au sujet des problèmes que vous rencontrez sur votre ordinateur, ceux-ci proviennent certainement de votre carte graphique (mémoire video insuffisante) ou du processeur lui-même, qui soit n'est pas assez véloce, soit ne dispose pas de drivers OpenGL optimisés. Dans tous les cas, l'utilisation d'un Dual Core 2Ghz+ et d'une mémoire vive suffisante est fortement recommandé pour utiliser BassBox en mode AERO. La mémoire vidéo partagée est à proscrire avec OpenGL.

Vous trouverez deux nouveaux plugins sur le site dédié à BassBox, ici :
http://www.jose.it-berater.org/smfforum/index.php?topic=2975.msg9093;topicseen#msg9093
et là :
http://www.jose.it-berater.org/smfforum/index.php?topic=1364.0

Note : vous devez vous enregistrer au préalable avant de pouvoir télécharger les ZIP.
Messages postés
149
Date d'inscription
vendredi 3 novembre 2006
Statut
Membre
Dernière intervention
25 janvier 2011

Bonsoir,
Je viens de télécharger votre source. Je ne connais rien au vb ni à tout les langage que vous avez préciter, je ne peux donc pas juger votre travail au niveau du code.
En tant qu'utilisateur par contre, je tient à vous féliciter, ce lecteur est formidablement bien fait.
Par contre, je suis utilisateur de vista et je rencontre un léger bug (ça vient peut-être de mon ordinateur) qui fait que tout autour du lecteur l'écran devient noir.
Ainsi que lorsque je déplace celui ci une trainée de l'application se forme et fait légèrement laggé le logiciel.
Je trouve aussi dommage que nous ne puissions pas ouvrir un fichier via le logiciel en lui même (ex : fichier / ouvrir un fichier ).
Je voudrais encore une fois vous féliciter quand même de ce formidable travail, soignée et appliqué.

Cordialement
Messages postés
78
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
14 août 2010

Un nouveau plugin visuel OpenGL est disponible pour "BassBox", il se nomme "FlashBack".

Comme la majorité des plugins créés pour BassBox, il est difficile à décrire, cependant voici une capture d'écran pour vous donner une idée du rendu.

http://www.zapsolution.com/pictures/Flashback.jpg

A noter sur la capture d'écran, le dockbar "OfTheBay" (écrit en PowerBASIC) utilisant un jeu d'icônes personnalisées.

Ce plugin nécessite l'utilisation de BassBox 2.10+

Vous pouvez télécharger directement le nouveau plugin "FlashBack" ici :
http://www.zapsolution.com/preview/Flashback.zip

...
Messages postés
78
Date d'inscription
samedi 26 août 2006
Statut
Membre
Dernière intervention
25 novembre 2016

Trop excelent ton logiciel, c'est rien a coté de Windows Media Player, 10/10 bien évidemment et bonne continuation

Benji2000
Messages postés
78
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
14 août 2010

Des animations supplémentaires sont disponibles sur le site de José Roca dont le lien figure dans la documentation.
Afficher les 16 commentaires

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.