Windows Phone Mango : Créer une sonnerie personnalisée
Une des nouveautés de Windows Phone Mango est la possibilité de créer soi même des sonneries personnalisées (j’ai envie de dire : c’est pas trop tôt !).
Voici les restrictions imposées par le système :
- La sonnerie soit être en MP3 ou WMA (non DRM-isé)
- Elle doit durer moins de 40 secondes
- Et peser moins de 1 Mo.
Il n’est donc pas possible de balancer une chanson comme un bourrin et d’en faire sa sonnerie.
Voici donc un petit tutoriel pour prendre un bout de chanson (ou de vidéo) pour en faire une sonnerie. Ca parait long à première vue mais au final ca n’est que quelques clics.
Il vous faudra juste disposer du logiciel Microsoft Expression Encoder, gratuit dans sa version de base (largement suffisante pour notre usage) et téléchargeable ici.
Une fois Expression Encoder téléchargé, installé et lancé, il vous propose cet écran, dans lequel il faut cliquer sur ”Projet de transcodage” :
![]()
Une fois la fenêtre principale ouverte, cliquez sur le bouton “Importer” en bas à gauche.
Choisissez ensuite la chanson (ou la vidéo) que vous voulez transformer en sonnerie. ![]()
Cet article vous décrira les formats supportés par Expression Encoder.
Une fois la chanson importée, c’est à vous de savoir quelle portion vous voulez comme sonnerie, comme le refrain par exemple.
Pour ce faire, déplacez le curseur orange au début de l’extrait désiré (utilisez le zoom pour être plus précis). ![]()
Cliquez ensuite sur le bouton de découpe![]()
Ceci aura pour effet de morceler la chanson.
Cliquez droit sur le morceau de gauche, et sélectionnez “Supprimer le clip”.
Déplacez le curseur à la fin de votre extrait, et cliquez de nouveau sur le bouton de découpe. ![]()
Attention : vérifiez bien que la durée de l’extrait n’atteint pas les 40 secondes. ![]()
Supprimez alors le morceau à droite de votre extrait. Il ne devrait rester plus que celui-ci à l’écran.
Vient alors le moment de l’encodage. Dans le panneau “Encoder” à droite, mettez les paramètres comme dans cette capture :
Vous pouvez bien sur jouer sur la qualité, mais pour une sonnerie est-ce bien raisonnable…
En revanche, vérifiez bien que la case “Vidéo” est décochée, si vous avez choisi une vidéo à la place d’un fichier audio ![]()
Dans l’onglet “Sortie”, définissez le dossier dans lequel la sonnerie sera déposée.
Il faut que ce dossier soit reconnu par Zune pour pouvoir transférer le fichier sur le téléphone par la suite.
Mon conseil : faites-vous un dossier “Sonneries” quelque part et incluez-le dans votre bibliothèque Musique.
Il ne vous reste plus qu’à cliquer sur le bouton “Encoder” en bas à gauche.
Une fois le travail effectué, ouvrez le dossier que vous avez choisi, et sélectionnez le fichier.
Il faut modifier les propriétés du fichier. Cela se fait directement dans le panneau bleu en bas de la fenêtre, ou en cliquant droit sur le fichier et en sélectionnant l’onglet Détails du menu Propriétés.
Indiquez un titre à votre sonnerie.
Je vous conseille de mettre également un nom d’album, commun à toutes vos sonneries, afin de les retrouver facilement dans Zune.
Enfin, très important, indiquez “ringtone” dans le champ Genre.
Il ne reste plus qu’à envoyer le fichier dans le téléphone.
Depuis Zune, ouvrez l’album “Sonneries”, et synchronisez le fichier avec votre appareil. ![]()
Votre sonnerie est alors disponible sur votre téléphone, que ce soit dans le menu paramètres, ou directement en modifiant un contact.
Import du flux XML NoAir
La première étape est d’importer les données depuis les flux fournis par Nolife dans une base locale.
Il fallait donc une base de données. J’ai utilisé SQL Server Express et Entity Framework Code First pour créer mon modèle.
Cette technologie permet d’écrire des classes “normalement” ; c’est-à-dire dans dériver depuis d’autres classes ou encore implémenter des interfaces de fou ; et de créer la base de données en partant de ces classes.
Un exemple, avec la classe “Episode” :
1 Public Class Episode 2 Public Property EpisodeID As Integer 3 Public Property NolifeOnlineID As Integer? 4 Public Property MasterShowID As Guid? 5 6 Public Property DatePremièreDiffusion As DateTime? 7 Public Property DateApparitionSurNolifeOnline As DateTime? 8 Public Property DateDispatirionDeNolifeOnline As DateTime? 9 10 ''' <summary> 11 ''' Durée de l'épisode, en secondes 12 ''' </summary> 13 ''' <value></value> 14 ''' <returns></returns> 15 ''' <remarks></remarks> 16 Public Property Durée As Integer 17 18 Public Property Titre As String 19 Public Property EpisodeNumber As Integer? 20 Public Property Description As String 21 22 ''' <summary> 23 ''' sub-title ou détail ou nom du clip.... 24 ''' </summary> 25 ''' <value></value> 26 ''' <returns></returns> 27 ''' <remarks></remarks> 28 Public Property Détail As String 29 30 Public Property CSA As Integer 31 Public Property ScreenshotURL As String 32 Public Property NolifeOnlineURL As String 33 Public Property ExternalURL As String 34 35 Public Property ExtraitAvailable As Boolean 36 Public Property ExtraitDemande As Boolean 37 38 Public Property GeneriqueAvailable As Boolean 39 Public Property NombreDeGeneriques As Integer 40 41 Public Overridable Property Diffusions As ICollection(Of Diffusion) 42 Public Overridable Property Animateur As Animateur 43 Public Overridable Property Emission As Emission 44 Public Overridable Property Saison As Saison 45 End Class 46
Une fois toutes nos classes écrites, on va en créer une dernière qui servira de glue pour toutes les autres, et définir le schéma de la base.
1 Imports System.Data.Entity 2 Imports System.Data.Entity.Infrastructure 3 4 Public Class NolifeDB 5 Inherits DbContext 6 7 Public Property Emissions As DbSet(Of Emission) 8 Public Property Episodes As DbSet(Of Episode) 9 Public Property Animateurs As DbSet(Of Animateur) 10 Public Property Diffusions As DbSet(Of Diffusion) 11 Public Property Saisons As DbSet(Of Saison) 12 Public Property Clips As DbSet(Of Clip) 13 Public Property Artistes As DbSet(Of Artiste) 14 End Class
Notez que c’est à cet endroit que l’on hérite d’Entity Framework, par la classe DbContext.
Pour plus d’infos sur Entity Framework, voyez le post explicatif de Scott Guthrie.
Une fois la base créée, j’ai pu m’attaquer à son remplissage.
En premier lieu, j’ai un peu bourriné triché, en codant rapidement une application console qui aspirait le site de Nolife Online, et créait les entrées correspondantes dans la base.
Ensuite, je me suis attaqué à l’importation d’un flux fourni par Nolife.
Il s’agit de NoAir, le fichier XML décrivant ce qui passe à l’antenne. Toutes les informations sur ce flux sont disponibles sur le forum du site de la chaîne.
Rien de bien folichon là-dedans, lecture du flux, création/modification des entités et envoi dans la base. Tout ça grâce à Linq et VB.net (ou comment parser du XML dans se prendre la tête)
1 Dim context As New NolifeDB 2 Dim feed = XDocument.Load(NolifeOnlineFeedURL) 3 4 If feed...<NoAir>.First.@version <> NoAirVersionCompatibility Then 5 'TODO: Alerter changement de version 6 Exit Sub 7 End If 8 9 InitializeAzureStorage() 10 11 'on vire les diffusions futures qui auraient déjà été rentrées (précédentes MAJ depuis NO) 12 ' _slotdate est en format UTC ! 13 Dim _slotDate = DateTime.Parse(feed...<slot>.First.@dateUTC) 14 Dim _futuresdiffusions = context.Diffusions.Where(Function(d) d.DateDiffusion >= _slotDate) 15 For Each _futurediffusion In _futuresdiffusions 16 Console.WriteLine(vbTab + vbTab + vbTab + vbTab + "Suppression diffusion " + _futurediffusion.DateDiffusion.ToString) 17 context.Diffusions.Remove(_futurediffusion) 18 Next 19 20 For Each slot In feed...<slot> 21 'bla bla bla on cherche l'émission, l'épisode, on crée, on met à jour... 22 Next 23 24 'Et on envoie tout ca à la base \o/ 25 context.SaveChanges()
Dans la classe Episode vous pouvez voir qu’il y a 2 champs "ExtraitDemande” et “ExtraitAvailable”. Quand le flux fournit un épisode qui est nouveau, je met le champ “ExtraitDemande” à true, et j’enregistre un message dans une file Azure.
Ce message contient l’ID de l’épisode en question, sa durée, ainsi que l’heure de diffusion. Ce message sera récupéré de l’autre côté pour enregistrer l’extrait.
Et enfin, j’ai enrobé le tout dans un service Windows, qui tourne sur le serveur “in da cloud” toutes les 5 minutes pour importer le flux.
En route vers les Techdays !
Bonjour a tous !
Un petit post rapide pour vous sire qu’aujourd’hui je serai aux Microsoft Techdays à Paris, au palais des congrès. Si vous avez le temps, passez y faire un your, ca dure 3 jours et c’est gratuit.
Toutes les infos sur , avec une webtv en direct !
A toute à l’heure dans la Capitale
Posted from WordPress for Windows Phone
Nolife pour Windows Phone 7 : Architecture du projet
Voici donc le détail de mon projet.
Le but est d’avoir un client Nolife complet sur son Windows Phone, avec le programme TV en cours (NoAir), mais aussi accès à la liste des émissions de la chaîne, avec des infos complémentaires, les clips, le classement du J-top…
Ceci est l’objectif à long terme.
Pour le moment, je veux créer et valider cette architecture :
Les fonctionnalités que je compte livrer en premier sont le flux NoAir et la liste/descriptions des émissions, avec un extrait si possible (le processus d’enregistrement/encodage est visible en bas à gauche du diagramme).
Cet extrait vidéo ne se fera pas totalement en automatique, je compte bien les valider avant publication (pour éviter d’envoyer des pubs par exemple, si la programmation a eu un accroc).
J’ai déjà attaqué le codage, en utilisant Entity Framework Code First pour gérer les données, et une application console pour tester l’intégration des flux NoAir et Nolife Online, et l’encodage.
Nolife, kézako ?
Nolife, c’est une chaîne de TV disponible sur l’ADSL et le câble par Bouygues.





Elle diffuse musique japonaise, émissions sur la culture japonaise, et traite de l’actualité des jeux vidéos.
(DISCLAIMER : cette définition est très réductrice. Lisez donc la FAQ sur le site de la chaîne qui est bien plus complète)
Le problème qu’a Nolife, c’est qu’ils n’ont pas de sous. Je vais pas refaire ici l’histoire de la chaîne, mais pour faire court, ils n’arrivent pas encore à avoir de la pub à l’antenne.
Du coup, ils ont lancé durant l’été 2009 un système de VOD/Catch-up TV par abonnement.
Nolife a mis en place NoAir, un système de programme TV sous forme de XML. Ce fichier est généré depuis la régie, et donne moult informations concernant ce qui va passer à l’antenne.
Beaucoup de clients, pour beaucoup de supports différents, ont été créés. Mais aucun pour Windows Phone 7. Je vais donc en faire un (en re-faire un pour être précis, mais je reviendrai là dessus plus tard).
Si vous aussi vous voulez créer un client NoAir ou juste voir ce que c’est, je vous conseille la lecture du post explicatif de Cyril Lambin (directeur technique de la chaîne) sur le forum officiel.
Bienvenue
Bienvenue sur mon blog.
(Note pour plus tard : trouver une phrase d’introduction plus originale)
Je vous parlerai de développement – plus particulièrement de mes découvertes et de mon projet d’application pour Windows Phone – et surement d’autres choses dont je n’ai pas encore moi-même la teneur
Je travaille dans une entreprise dans laquelle je ne fais pas que du développement (loin de là !), et donc je développe plus particulièrement sur mon temps libre.
N’hésitez pas à me contacter, en utilisant les commentaires sur ce blog, ou par twitter @actionthomas.
