Aller au menu - Aller au contenu

Icône Le son

Avatar
Avatar
Mise à jour : 14/10/2009
Difficulté : Facile Facile
282 visites depuis 7 jours, classé 354/786
Vous avez déjà vu un jeu sans son ? Bon oui d'accord ça s'est déjà vu par le passé, mais à l'heure actuelle un jeu sans son serait assez mal vu. C'est pourquoi nous allons aborder cette notion tout de suite ;) !
Sommaire du tutoriel :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Outils nécessaires

Les Nintendo DS savent lire deux types de fichiers : les .raw et les .mod . On va uniquement créer des fichiers .raw parce qu'ils sont plus faciles à créer.
Mais nous devons télécharger un programme qui peut transformer des fichiers .mp3, .wav, etc. en fichiers .raw.
Pour cela, je vous conseille Switch.
Vous aurez peut-être aussi besoin d'éditer les fichiers sons avec Audacity (petit tuto sur le sujet :) ). Mais je ne vais pas vous en dire plus sur ce dernier.
Mais comment on transforme un fichier .wav en fichier .raw, alors ?

Lancez Switch. Glissez le fichier à transformer dans le grand panel blanc où il est écrit :
Citation
Add Files to Convert into this list by clicking the "Add Files" button or pressing Alt+A on your keyboard.

Ecrivez le chemin du dossier (dans lequel sera mis le fichier .raw) à droite de "Output Folder".
Ensuite, dans "Output Format", sélectionnez ".raw".
Puis, cliquez sur "Encoder Options..." et mettez :
  • Format : 8 bit signed ;
  • Sample rate : 11025 ;
  • Channels : Stereo.

Et cliquez sur ok.
Enfin, cliquez sur le gros bouton "Convert".
Et voilà :) .
Créez ensuite un dossier nommé "data" dans le répertoire de votre jeu et copiez-y le fichier .raw.

Le code, enfin

Il faut d'abord importer le son. Lorsque vous cliquez sur build.bat, le compilateur met le fichier raw et tous les fichiers mp3 dans du code : si vous avez le_nom_du_fichier.raw, vous devrez inclure le_nom_du_fichier.h, idem pour les fichiers mp3.
Il faut initialiser le son avec :
Code : C
1
2
AS_Init(AS_MODE_MP3 | AS_MODE_SURROUND | AS_MODE_16CH);
AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);
.
Et vous aurez un son en surround.

Les sons MP3



Les sons MP3 ont une façon spécifique de fonctionner. Pour jouer un MP3, il faut écrire (par exemple pour data/test.mp3) :
Code : C
1
AS_MP3DirectPlay((u8*)test, (u32)test_size);

Si vous voulez jouer le son en boucle, vous utiliserez la fonction :
Code : C
1
AS_SetMP3Loop(1);

A l'inverse, si vous ne voulez plus que le son soit joué en boucle, mettez 0.

Pour mettre un MP3 en pause, on utilisera AS_MP3Pause(); , pour arrêter un MP3 AS_MP3Stop(); .
Si vous voulez obtenir des indications sur le système MP3 (si un son est joué, en pause, arrêté, etc.), la fonction AS_GetMP3Status(); nous renvoie des flags pouvant être :
  • MP3ST_STOPPED (canal stoppé) ;
  • MP3ST_PAUSED (canal en pause) ;
  • MP3ST_PLAYING (canal occupé) ;
  • MP3ST_OUT_OF_DATA (on a dépassé le nombre maximal de données de la musique, ne devrait pas arriver) ;
  • MP3ST_DECODE_ERROR (le système n'a pas pu décoder le MP3) ;
  • MP3ST_INITFAILED (l'initialisation du système MP3 a échoué).


Les fichiers RAW



Si vous voulez jouer un son RAW (supposons que vous ayez data/boum.raw) :
Code : C
1
AS_SoundQuickPlay(boum);

Et votre son sera joué ;) !

Vous pouvez aussi utiliser des sons PSG : vous définissez note par note les sons qui seront joués dans votre Nintendo DS. L'avantage c'est que l'on peut jouer facilement sur les sons (que l'enceinte droite, que l'enceinte gauche, créer soi-même ses sons, etc.). L'inconvénient (qui efface totalement l'avantage), est que souvent le son est bizarre et il faut une bonne habitude des PSG pour faire une belle mélodie, alors qu'avec la méthode que je vous ai citée plus haut, vous n'avez pas besoin de définir le contenu de la chanson ;) . Vous pouvez chercher dans les exemples de PALib des codes permettant de jouer des PSG.


Gardez bien en tête que si votre musique n'est ni de vous, ni libre, elle est soumise aux droits d'auteurs !

Le micro !

Vous attendiez sûrement ce moment : contrôler le micro :p !
Le mieux dans tout ça, est que c'est super facile.
Il y a quatre étapes :
  • déclarer globalement la variable qui contiendra la voix du joueur (cette variable est aussi appelée "buffer") ;
  • enregistrer la voix avec void PA_MicStartRecording(u8 *buffer,s32 longueur) ;
  • réécouter la voix avec void PA_MicReplay(u8 *buffer,s32 longueur) ;
  • afficher l'intensité de la voix avec la macro PA_MicGetVol(); .

Voici donc ce que l'on peut faire :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <PA9.h>
 
u8 buffer[100000];
int main(int argc, char ** argv)
{
    PA_Init();
    PA_InitVBL();
        
    PA_InitText(1,0);

    AS_Init(AS_MODE_SURROUND | AS_MODE_16CH);
    AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);
 
    PA_OutputText(1,0,0,"Appuyez sur A pour enregistrer et sur B pour réécouter");
        
    while (1)
    {           
        if(Pad.Newpress.A)
            PA_MicStartRecording(buffer,sizeof(buffer)/sizeof(u8));
 
        else if(Pad.Newpress.B) 
            PA_MicReplay(buffer,sizeof(buffer)/sizeof(u8));
 
        PA_OutputText(1,0,10,"%d  ",PA_MicGetVol());
        PA_WaitForVBL();
    }
    return 0;
}


Avouez que ce n'était pas bien compliqué :p
Voilà, vous vous coucherez encore plus intelligent ce soir :p .
Chapitre précédent Sommaire Chapitre suivant

Partager

11 commentaires pour "Le son"
Note moyenne : 3.57 / 4 (65 votes)
Pseudo Commentaire
Hors ligne Grade # Posté le 31/03/2009 à 17:25:27

Ben si je prends la 8 je ne peux pas compiler (cf les commentaires du premier chapitre).

Sinon quand je prends PA_PlaySoundEx avec un fichier .raw ça marche, mais ça laisse un petit grésillement sur le son, et c'est vraiment pas terrible...

EDIT: Ah si je convertie un mid en raw par contre ça le fait pas :) .
EDIT2: C'est le mp3 qui est convertie en raw qui marche pas. C'est pas PAlib :) .
EDIT3: Par contre si je convertie le mp3 en raw en 16bit ça va :) .
EDIT4: Ah non il veut pas compiler :( .

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne monpoke # Posté le 02/11/2009 à 11:18:00
L'unique Monpoke :p
Avatar

Ville : Erre
Pays : France métropolitaine

Bon tuto !

Hormis quelques problémes avec les .raw. Quand il essaie de lire le son, cela fait «bzzzzz» :´(
 
Hors ligne NintendoPlayers # Posté le 10/03/2010 à 10:26:07
Avatar

Très bon tutoriel :)

Pour la partie concernant le son, j'ai rencontré quelques petits problèmes :(

Concernant les MP3, il faut entrer la taille du MP3, si j'ai bien suivi le tutoriel. Mais sa taille, c'est son poids en octets, sa longueur en secondes, ...? :o

Pour les RAW, j'ai utilisé Switch comme indiqué et mon son est ralenti lorsqu'il est joué :lol:

Un petit ccoup de pouce serait le bienvenue. :)

Merci d'avance.
Hors ligne snake_48 # Posté le 10/03/2010 à 14:19:27
Il me manque un bit.
Avatar

Études : INSA Lyon

Bonjour,
Quand tu encodes ton MP3 (automatiquement grâce au make), il va se créer une variable tonMP3_size. Donc, comme dit dans le tuto, tu n'as qu'à mettre cette variable ;) .
Pour les RAW, si le son est ralenti c'est que tu as dû de tromper dans la fréquence d'échantillonnage au moment de la conversion avec Switch...

Programmez sur votre Wii ! | Programmez sur votre Nintendo DS ! | Charger des fichiers .OBJ | Introduction au scripting avec Python
Création d'un moteur physique (en cours)
Code Lyoko Strategy Game Coder
Langages connus : AS3, Batch, C, C++, HTML, Java, Javascript, PHP, Python.
Programme sur : PC, Nintendo DS, Wii.
o----}=========>
 
Hors ligne troloul # Posté le 11/05/2011 à 12:01:04
POOOOOOOOOOO!
Avatar

Bonjour,

C'est posible de faire
if (le micro a enregiste une frequence aigu){} ?

J'ai 11 ans ^^
C/C++, XHTML/CSS, Visual basic, PureBasic, lua
 

Voir tous les commentaires