|
|
|||||||
|
Je me suis amusé à développer un petit jeu style "Simon". Vous savez, ce jeu où vous devez répétser une séquence de plus en plus longue de notes couplées à des couleurs. Dans un premier temps j'ai associé à chaque couleur un petit fichier .wav correspondant à chaque note. Le problème c'est qu'à la longue le .exe devient assez volumineux, et ce à cause des 8 fichiers .wav que j'avais inclus aux ressources. Une seule solution, trouver le moyen de jouer une note sans passer par le pré-enregistrement de celle-ci en .wav
Si on regarde attentivement la documentation concernant le SDK Pocket PC 2002 on remarque une section "MIDI". Cette section implique que Pocket PC 2002 est capable de jouer des fichiers au format MIDI où la partition est décrite sous la forme de notes pour des instruments. Les fichiers MIDI sont très petits car ils expliquent à l'ordinateur comment jouer la musique et ne stockent pas la musique elle-même. Attention tout de même, les fonctions MIDI sont présentes dans Pocket PC 2002, mais pas dans Pocket PC 2000. En les utilisant vous rendez votre programme incompatible avec les Pocket PC 2000, mais aujourd'hui, ce n'est pas trop un problème puisque la quasi totalité des Pocket PC du marché sont sous OS Pocket PC 2002.
En lisant la doc je suis tombé sur un exemple qui permet de jouer un son DTMF (vous savez les sons émis par les téléphone quand on tape un numéro). J'ai adapté cette exemple pour en faire une fonction directement utilisable. Cette fonction permet de jouer une note pendant un certain temps. En fait, c'est 2 fonctions que nous allons coder car l'appel étant asynchrone ont doit attendre la fin de la note pour fermer le service. Pour commencer vous devez déclarer en variable globale un handle qui servira d'événement pour la gestion de la fin de la note :
Vous devez ajouter une fonction qui sera utilisée comme callback par le service qui produit les sons. Voici son code (les paramètres doivent être impérativement du même type que dans le code qui suit) :
Vous pouvez ensuite ajouter le code même de la fonction "PlayNote". Le premier paramètre est la fréquence de la note. Plus cette fréquence est faible, plus la note des grave. Le second paramètre est le durée en 1/10ème de seconde.
Pour jouer une note il vous suffit d'appeler dans votre code par exemple :
Pour que la note dont la fréquence est 2000 soit jouée pendant 3/10ème de seconde.
Cette fonction est synchrone. Elle est utilisable dans la pluparts des cas. C'est un beep fortement amélioré. Son défaut c'est qu'elle ne vous rend la main qu'une fois la note complètement jouée. Dans l'exemple PlayNote(2000, 3); votre programme est suspendu pendant 3/10ème de seconde... Si quelqu'un veut proposer une solution (qui marches) je suis prêt à la publier. Si vous rencontrez des problèmes concernant cet article, n'hésitez pas à poser vos questions sur les forums "eVC++" ou "Articles eVC++" de CodePPC. |
|
||||||
|
|
|||||||
|
Copyright 2001-2004 - Tous droits réservés
|
|||||||
|
iPAQ
est un produit de COMPAQ.
|