Olivier Dahan

Microsoft MVP Silverlight 2013, 2012,
2011, MVP CAD 2010, MVP C# 2009


Membre du Developer Guidance Advisory Council Microsoft

Audit, Conseil, Formation, Développement
[WPF, Silverlight, WinRT, MonoDroid]

Historique

La musique adoucit les mœurs...

La musique peut adoucir les mœurs, c’est connu, même des développeurs (c’est pour dire si ça marche!). J’en produit aussi quand mes activités m’en laisse le temps.. Et justement Ableton organisait un concours “Beat the clock” dont le chalenge était de composer un morceau sur la base de quelques sons fournis mais en 24h chrono, je ne disposais pas de plus dans mon emploi du temps, ça tombait bien ! J’ai participé pour le fun et pour relever le défi, ceux qui veulent écouter (et éventuellement voter) pour ce morceau de musique spécialement écrit en 5h environ pour le concours peuvent se rendre à l’adresse suivante : http://contest.ableton.com/tracks/1680 , Merci d’avance Sourire

138 sons gratuits pour vos applications Silverlight et WPF

Ajouter des petits clicks, des petits bruits pour souligner une validation, avertir l’utilisateur, marquer une erreur de saisie ou de comportement du programme peut s’avérer intéressant dans beaucoup d’applications pour peu qu’on n’abuse pas du procédé et que les sons en questions soient assez courts. Mais quels sons ? Je vous propose ici une petite bibliothèque de 138 sons prêts à l’usage.More...

Daminion - Review [organisez vos documents et vos photos]

Il est rare que je fasse une review de logiciel, il y a des sites spécialisés pour cela. Mais lorsque je rencontre un bon logiciel trop peu connu il m’arrive d’en parler. C’est le cas de Daminion, prochaine version de “PicaJet Fx”.More...

Du Son pour Silverlight !

Paradoxalement le son et l’image sont les parents pauvres de Silverlight. Certes il y a le MediaElement ou la nouvelle classe WriteableBitmap, mais on est encore loin du compte… More...

AnimatableSoundPlayer. Ou comment synchroniser du son sur une animation Silverlight

Hier je vous parlais d'animation et de sons et je vous présentais une petite démonstration (l'oscilloscope) dont le but était de montrer qu'on pouvait rapidement obtenir un effet visuel assez complexe sans programmation pour peu qu'on se donne la peine d'utiliser Blend et ses neurones... Pour synchroniser le bip avec le spot lumineux j'avais alors utilisé une ruse en indiquant qu'hélas Silverlight ne permettait pas de synchroniser du son dans une animation.

Je vous proposais alors une idée de solution en promettant une implémentation le temps de vous laisser réfléchir.

Regarder d'abord la démo ci-dessous. En cliquant sur "Start" vous lancerez une animation (StoryBoard) dont le but premier est de déplacer la boule verte un peu comme dans un billard. Elle rebondit sur des taquets pour finir dans un gobelet. Bien entendu tout cela est assez moche, les beaux dessins ne font pas partie de la question :-) Mais, en revanche, et si votre carte son fonctionne, vous noterez que plusieurs sons peuvent être entendus en parfaite synchronisation avec les "chocs" de la boule sur les taquets ou dans le gobelet final. Je vous laisse essayer et on en reparle :

Bon. Vous avez vu et aussi entendu ?

Comment est-ce possible (sachant que pour l'utilisateur Blend qui créé l'animation tout cela ne réclame aucun code) ?

Forcément il y a du code... En fait un petit UserControl dont le principe est fort simple.

AnimatableSoundPlayer

C'est son petit nom. Un joueur de sons animable. Joueur de sons car ce UserControl n'a pas de visuel. On pourrait en réalité jouer des vidéos de la même façon il suffirait de relooker le contrôle, mais ce n'était pas le but. Joueur de son animable car ce qui manque au MediaElement c'est bien d'avoir des propriétés "animables" pouvant être modifiées sur une timeline.

Le UserControl AnimatableSoundPlayer est ainsi une coquille presque vide, il ne contient qu'un MediaElement. Tout le reste est du code, fort peu en réalité.

Dans un premier temps j'ai ajouté plusieurs propriétés de dépendance qui relaient les propriétés du MediaElement : la Source (une Uri), le Volume, etc. Ensuite j'ai fait de même pour les principales méthodes (Play, Stop...).

Deux choses ont été ajoutées. Côté méthodes j'ai créer PlayFromStart(). Elle ne fait que faire "Stop(); Play();". C'est tout bête mais très souvent on a besoin d'enchaîner ces deux méthodes pour s'assurer qu'un son est bien rejouer depuis le début, il faut rembobiner la bande avec Stop() pour réécouter un son.

La seconde chose ajoutée est la plus importante. Il s'agit de la propriété de dépendance AnimatablePlay de type double. Pourquoi double ? Simplement parce Silverlight sait animer des doubles et par forcément autrechose... Le mécanisme intéressant se trouve dans la méthode AnimatablePlayChanged, le callback de modification de la valeur initialisé lors de la création de la propriété de dépendance. A l'intérieur de ce callback nous trouvons la logique de cette propriété :

   1:  #region AnimatablePlay property
   2:          /// <summary>
   3:          /// Gets or sets the animatable play.
   4:          /// Value = 0 means <see cref="Stop"/>
   5:          /// Value sup.to 0 means <see cref="PlayFromStart"/>
   6:          /// Value inf.to 0 means <see cref="Play"/> / <see cref="Pause"/>
   7:          /// </summary>
   8:          /// <value>The animatable play.</value>
   9:          [Category("Media")]
  10:          public double AnimatablePlay
  11:          {
  12:              get { return (double)GetValue(AnimatablePlayProperty); }
  13:              set { SetValue(AnimatablePlayProperty, value); }
  14:          }
  15:   
  16:          public static readonly DependencyProperty AnimatablePlayProperty =
  17:              DependencyProperty.Register("AnimatablePlay", typeof(double),
  18:              typeof(SynchedSoundPlayer), new PropertyMetadata(0.0d, AnimatablePlayChanged));
  19:   
  20:          private static void AnimatablePlayChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  21:          {
  22:              var mp = ((SynchedSoundPlayer)d);
  23:              if ((double)e.NewValue > 0d) mp.PlayFromStart();
  24:              if ((double)e.NewValue == 0d) mp.Stop();
  25:              if ((double)e.NewValue < 0d)
  26:              {
  27:                  if (mp.internalMP.CurrentState == MediaElementState.Playing) mp.Pause();
  28:                  else mp.Play();
  29:              }
  30:          }
  31:   
  32:          #endregion

Simple et efficace : toute valeur positive déclenche un "PlayFromStart", d'où l'utilité de cette méthode qui nous assure que le son est bien rejoué depuis le début. Toute valeur nulle appelle "Stop" et toute valeur négative entraîne un cycle Play/Pause selon l'état actuel du contrôle.

Le UserControl relaie aussi l'événement MediaFailed si on désire être prévenu en cas de difficulté rencontrée par le MediaElement pour charger le son (qui peut être dans le Xap comme dans la présente démo ou sur un serveur distant).

Grâce à cette convention il devient très simple de synchroniser des sons avec une animation !

Si on suit l'exemple live proposé plus haut : Trois sons sont joués, un numéro est indiqué sur chaque "obstacle" pour mieux se repérer. Sur ces trois sons il y en a un qui utilisé deux fois. Pour synchroniser ces trois sons on reprend la timeline de la boule verte et à chaque fois qu'on désire qu'un son soit joué on incrémente sa propriété AnimatablePlay. Simple. Vu la taille des valeurs maximales d'un double, on ne risque pas de tomber sur une limite... surtout qu'il n'est pas interdit de faire un retour à zéro quand on le veut.

Un petit détail à savoir : quand on créé une animation, par défaut Silverlight effectue une interpolation des valeurs fixées dans les keyframes qui se suivent. Si vous tapez la valeur 1 à la frame A et que vous tapez 2 à la frame B, durant le temps qui sépare A de B la valeur augmentera progressivement de 1 vers 2. C'est le comportement par défaut, ce qui est bien utile puisque justement le plus souvent on désire avoir une continuité dans le changement des valeurs (déplacements notamment). En revanche il y a des cas où on préfère que la valeur change brutalement, une "anti animation" en quelque sorte. Cela est parfois utile. Pour utiliser AnimatableSoundPlayer ce n'est pas une option, c'est une obligation. Il faut que les valeurs ne changent que lorsqu'une nouvelle keyframe est rencontrée. Sinon le son sera rejoué sans cesse depuis le début à toutes les valeurs intermédiaires, ce qui n'est pas du tout l'effet recherché.

Pour arriver à ce résultat il suffit de ne pas oublier de paramétrer les keyframes servant à animer le son afin qu'à la place d'une EasingDoubleKeyFrame le type devienne DiscreteDoubleKeyFrame. Sous Blend il suffit de cliquer sur la keyframe en question et de la passer en mode "Hold in". C'est la seule contrainte du composant.

Et voilà ! Avec un peu d'imagination on peut parfaitement créer un composant réutilisable qui ne prend que quelques lignes de code et qui permet de synchroniser du son dans une animation Silverlight. C'est pas magique ?

Je suis certain que vous trouverez des tas d'améliorations à porter au composant, alors n'hésitez surtout pas à m'en faire part je pourrais même diffuser vos versions modifiées si vous le voulez.

Le code du projet fourni contient l'exemple complet ainsi que le code du composant et les sons utilisés.

Quelques restrictions : Si vous modifiez le code obligez vous à publier le code source de votre version gratuitement. Si vous publier un article ou un billet de blog, soyez sympa et indiquez le lien vers mon billet. Si vous utilisez mon code dans un projet, commercial ou non, dites le moi ça me fera plaisir.
Si vous respectez ce petit deal, alors faites ce que voulez du code. Dans la négative que les foudres du Grand Bug Céleste s'abattent sur vous et chaque octet que vous coderez jusqu'à la fin de vos jours (c'est bien horrible ça non ? Laughing).

Enfin bon, dans tous les cas, si vous en voulez encore du Silverlight, vous connaissez le refrain : Stay Tuned !!!

Le code du projet : SyncSound.zip (209,05 kb)

Xaml, l'ami des artistes

XAML, comme le savez, est au coeur de WPF et de Silverlight. Sa puissance, doublée par celle du Framework et de langages comme C#, en fait une machine de guerre sans équivalent pour qui veut développer des applications modernes, c'est à dire efficaces techniquement mais "lookées". 

Mais si XAML est l'ami des développeurs, il est aussi celui des artistes !
Il créé un lien entre deux mondes parallèles : celui des métiers IT et celui des métiers de l'art, graphisme, vidéo, son et musique.

Démontrer une nouvelle technologie est généralement assez facile, il suffit de se former et d'écrire un article et des exemples. Mais comment "démontrer" et rendre tangible ce lien immatériel entre informatique et art créé par XAML ?

Car une application aujourd'hui, en plus du fonctionnel, c'est aussi de l'image et du son. De l'interface, mais aussi de la "promo" visuelle, des vidéos, de la musique, des logos.

Evoquer ce lien entre art et technique, c'est la finalité de E-Naxos Art, une démo Silverlight 2 qui permettra peut-être de réveiller l'artiste qui sommeille en vous et vous inciter à vous lancer dans WPF et Silverlight si vous hésitez encore !

Pour l'instant l'application est en bêta et elle n'est pas encore très fournie. Il y a tout de même à voir des vidéos en 3D, des dessins et des bouts de sons ou de musiques. Tout cela sera complété au fil du temps.

Alors pour mieux comprendre le mariage entre "art" et technologie que matérialise XAML, bonne visite sur E-Naxos Art !

Et Stay tuned ! 

 

Télécharger de la musique sans se faire pincer ? La solution existe !

Pour aborder un sujet qui change de l'informatique, la musique.

C'est un sujet qui me tient tout autant à coeur et même plus que l'informatique. Musicien, compositeur, quand je ne développe pas, je joue (ou je vais à la pèche mais c'est plus rare malgré tout :-) ). Seule la contemplation de la voûte étoilée ou un bon film de SF peut arriver à me distraire de mes claviers, Azerty ou Midi. Bref même si j'en parle moins ici, ce n'est pas la moindre de mes occupations. Et les nouvelles lois anti piratage me concerne forcément, triplement même. En tant que musicien, en tant que membre de la SACEM, et en tant que simple citoyen.

Le pirate tueur de l'Art ?

Les lois contre le piratage de musique sont dénuées de sens, et je ne m'étalerai pas trop de peur de déraper vers un langage plus.. vert ! Toutefois leur seul et véritable argument est que cela tue la "création", et à grand renfort de vedettes(*) trustant déjà l'essentiel des dividendes de la SACEM on nous explique, en gros, que si Johnny ou Cabrel ne peuvent pas sortir leur 253eme album c'est l'art qui meurt... A pleurer.

(*) voici la liste des vendus à la cause des majors, ce n'est pas secret (on comprend bien de quoi je parle, des johnny en fin de carrière qui veulent toucher encore plus de sous, des jeunôts qui voudraient palper autant que leurs aînés, et plein de nains de l'art (avec petit a) qui pensent que ça fera du buzz autour de leur nom de faire partie des 52... J'exagère, dans le tas il y a aussi des sarkozystes, pas mal même). Tiens, le plus amusant, c'est peut-être qu'ils sont jaloux des artistes qui se font vraiment pirater (signe de reconnaissance), car eux, je n'ai aucun mp3 à leur nom, et pareil chez mes amis... Des gros jaloux ces 52 ? Fort possible. Car un artiste piraté est aussi un artiste qui vend, c'est donc pas le mieux placé pour se plaindre en général.

Les 52 vendus, le premier ça me fait de la peine j'avais de l'estime pour lui (sans l'écouter, juste de la sympathie, c'est fini) : Etienne Daho, Christophe Maé, Kery James, Sinik, Francis Cabrel, Patrick Bruel, Jean-Jacques Goldman, Jenifer, Stanislas, Raphaël, M Pokora, Keren Ann, Thomas Dutronc, Eddy Mitchell, Isabelle Boulay, Maxime Le Forestier, Martin Solveig, Marc Lavoine, Calogero, Gérard Darmon, Pascal Obispo, Jacob Devarrieux, Elie Seimoun, Alain Bashung, Bernard Lavilliers, Rachid Taha, Bob Sinclar, Psy4delarime, Abd Al Malik, Anis, André Manoukian, Charles Aznavour, Alain Souchon, Mademoiselle K, Soprano, Arthur H, BB Brunes, Liane Foly, Emmanuelle Seigner, Ridan, Renan Luce, Zita Swoon, Johnny Hallyday, Empyr, Kenza Farah, Shine, Camaro, Diam's, Renaud, Romane Cerda, Cali et la Grande Sophie. Lire la  dépêche AFP sur le site de Yahoo.

La réalité c'est que ce sont les majors qui tuent l'art et la création en bastonnant quelques "vedettes" sur lesquelles elles misent et investissent comme un riche émir investit dans quelques chevaux de course. Cela est-il profitable à l'espèce équine dans son ensemble pour autant ? Certes non. Les riches émirs pourraient arrêter de s'échanger des chevaux à plusieurs millions de dollars, la race équine n'en mourrait pas, elle existe en dehors des "bêtes à concours". La musique c'est pareil. Sans les majors qui se focalisent sur des bêtes à concours, il existe des milliers, des millions peut être même, d'artistes qui ont aussi le droit de s'exprimer et qui dans tous les cas ne touchent absolument rien de la SACEM ! Si demain le piratage était réduit à zéro, Johnny aurait certainement un chèque encore plus gros en fin d'année, mais AUCUN de tous les artistes non affiliés à la SACEM ne toucherait quoi que ce soit (et d'ailleurs les "petits" membres de la SACEM ne touchent rien non plus de toute façon, il faut le savoir, question de pourcentage de passage ... dans les radio vendues aux majors notamment...). Rappelons aussi que les majors affament les artistes : en moyenne c'est 60 eurocents par CD, 30 eurocents un DVD live et 4 eurocent le titre ! Avec de tels "salaires" on voit comment les majors aident l'art et les artistes...

De toute façon Résumer l'Art et surtout la musique à la "danse des canards" ou l'équivalent chez Jhonny, Cabrel et d'autres hasbeen est donc une hérésie, voire un crime contre l'humanité tellement l'art est indissociable de la nature humaine. Tuer le premier c'est tuer la seconde. Et les majors sont des assassins de l'Art.

De l'obligation morale de mettre hors jeu les majors

Face aux nouvelles dérives agressivement sécuritaires et répressives de notre président (petit p) de la République (grand R, la République est une noble idée) contre les méchants pirates il est temps de faire quelque chose. Les majors ont, soi disant, perdu 50% de leur chiffre d'affaire ? Prouvez-leur que leur stratégie répressive va les amener à perdre le reste ! Le système des majors est d'un autre âge, il a vécu, ils se sont goinfrés sur notre dos à chaque occasion, aujourd'hui ils ne servent plus à rien. On n'a pas hésité à mettre sur le carreau les mineurs du Nord, les gars des manufactures de Saint Etienne, les artisans fabriquants de chaussures ou de tissus et tout un tas de gens dont on a balayé l'existence d'un geste "parce que c'est le progrès", le temps est venu de balayer les majors sans plus de ménagement et pour les mêmes raisons !

Acte 1 : Achetez de la musique aux labels indépendants !

En effet il existe des tas de labels indépendants qui eux se mouillent pour proposer des oeuvres vraiment différentes, il y a de tout et je ne ferai pas l'apologie d'un style ou d'un autre, pour moi l'art est forcément multiple. Si vous trippez sur la techno ou le free-jazz ou le rap français ça ne fait aucune différence.  Il y a aussi Internet qui permet aujourd'hui à des artistes et aux petits labels de se faire connaître, voire de vendre en direct leur musique. C'est le sens de l'histoire. Sans les majors.

Les mesures de plus en plus répressives prisent contre les "pirates" sont féodales. Le Roi a toujours protégé les plus riches, ses alliés. Notre président est à la solde de son ami Bush, du libéralisme débridé, à la solde des gens capables de lui offrir des week-end sur des bateaux de luxe pour protéger leur business dans des rapprochements de république bananière, et à la solde des majors et de tous les rois de la finance et de la spéculation grâce à qui il vit bon train pendant que le peuple tire de plus en plus la langue. Il est l'heure de mettre un coup de pied dans la fourmilière. Globalement, politiquement. Mais revenons à la musique pour l'instant...

Je n'appellerai pas à la révolution, même si je la sens et la sais nécessaire, la dernière, celle de  1789 n'a fait qu'instrumentaliser le peuple pour virer les nobles au profit des bourgeois, ce qui n'a pas fait beaucoup progresser le mot "égalité" de notre devise nationale, c'est un simple constat pas une opinion politique... Et puis verser le sang et couper des têtes est à mon goût trop barbare. La révolution doit être silencieuse et efficace, il faut taper, fort, mais pas sur la tête, au portefeuille, la chose la plus sacrée pour ces adorateurs de dividendes.

Au lieu d'acheter de la musique à des majors, achetez à des petits labels indépendants. Découvrez qu'en dehors de Lorie il existe tout un vaste monde, celui de l'Art justement. Au lieu d'écouter les radios "d'Etat" qui bastonnent les "oeuvres" des majors, écouter la radio sur Internet il y a pour tous les goûts. Et pour nourrir votre lecteur MP3, ne téléchargez pas sur la Mule pour vous faire coincer et faire le jeu des tyrans, mais enregistrez la musique des radios Internet ! Inrepérable, légal, vous n'en aurez pas moins au bout d'un certain temps une collection de mp3 à faire pâlir de jalousie les pirates les plus fous !

Acte 2 : Téléchargez gratuitement et sans risque, enregistrez tout simplement !

Pour enregistre de la musique Internet facilement, sans que cela ne soit brouillé par les sons de windows ou autre, surtout n'utilisez pas des programmes qui enregistrent le "mixage stéréo" de votre carte son, le résultat est affreux. Utilisez plutôt un logiciel comme l'excellent (et gratuit) Screamer. Il vous permet de sélectionner la radio et de l'enregistrer (un fichier mp3 par morceau avec son nom, c'est pas merveilleux ça ? !). Bien entendu choisissez des radios de bonne qualité qui émettent en 128k.

Le temps de la "réponse graduée" contre les majors, ces assassins de l'art, ces spéculateurs qui trustent le pouvoir est arrivé. Mais sans jamais lever la main, non simplement en refusant de la mettre au portefeuille. Ils aiment l'argent plus que tout, les en priver c'est leur faire plus de mal que d'assassiner leur famille.

Acte 3 : Choisir de bonnes radio Internet sans pub 

Eclatez vous, "consommez" encore plus de musique qu'avant, mais en bypassant les vampires et en donnant votre argent aux labels indépendants ou bien en subventionnant une radio Internet comme SOMA FM, radio sans pub, soutenue par ses auditeurs et proposant une dizaines de programmation différentes pour tous les goûts. En cherchant un peu sur le Web on trouve pour tous les goûts de la musique de qualité.

ça fait du bien de gueuler un bon coup de temps en temps...

La prochaine fois je vous reparle de C#, c'est promis :-)

Et Stay Tuned !

 Signé un citoyen membre de la SACEM ... (comme quoi ils ne sont pas tous vendus, et comme des centaines de compositeurs je n'ai pas mandaté les 52 crétins pour parler à ma place, leur démarche est une provocation et une traitrise. Que les dieux de la musique leur fasse faire des fausses notes jusqu'à la fin de leurs jours - c'est pas si méchant comme mauvais sort, pour la plupart vous ne verrez pas la différence je vous l'assure !).