Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: Problème AS lib + EFS  (Lu 1351 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« 15 Décembre 2010, 20:42:58 »

Bonjour tout le monde, j'ai testé l'exemple AS lib + EFS avec ma version actuelle de PAlib.
J'ai remplacé ce qu'il y avait par int main() car ça ne compilait pas...

Alors j'ai voulu tester un MP3(une chanson de pokémon jaune) de 2,53 MO, mais quand je lance la rom, rien, pas de son, alors qu'avec le son d'origine, tout fonctionne bien...

Dans l'exemple, l'AS lib est initialisée comme ça :
Code:
// variables
    int i, rate = 0, newrate = 0;
    bool mp3_mode = true, autopan = false;
    u8 lastsfx = 0, usage = 0, pan = 0, fx_mode = AS_SURROUND;

// PALib Initialization
PA_Init();
PA_LoadDefaultText(0, 0);

// Initialize EFS
if (!EFS_Init(EFS_AND_FAT | EFS_DEFAULT_DEVICE, NULL)) {
        PA_OutputText(0, 1, 1, "EFS init error !!!");
        return 1;
}

// Check if test.mp3 is there, regardless if libfat or EFS_Lib is used
MP3FILE* file = FILE_OPEN("test.mp3");
if (!file) {
        PA_OutputText(0, 1, 1, "test.mp3 not found !!!");
        return 1;
}
FILE_CLOSE(file);

// Init AS_Lib for mp3
PA_VBLFunctionInit(AS_SoundVBL);
AS_Init(AS_MODE_MP3 | AS_MODE_SURROUND | AS_MODE_16CH);
AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);

J'aimerai savoir si les variables sont indispensables?
Je ne comprend pas pourquoi je n'ai pas de son... et ma chanson dans EFSroot s'appelle bien test.MP3...

De plus, ICON n'est plus présent dans le makefile alors j'aimerai savoir s'il  est toujours possible de changer d'icone de jeu?

Merci D'Avance.
Au Revoir.
« Dernière édition: 15 Décembre 2010, 22:49:56 par Happy » Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
Cid2Mizard Hors ligne
Super Mega Member
****
Messages: 4064


Voir le profil WWW
Disciple Kukulcanien

« Réponse #1 : 16 Décembre 2010, 00:37:05 »

Pour le logo, il te suffit d'ajouter la ligne suivante dans ton makefile :

Code:
ICON  := -b $(CURDIR)/../logo.bmp

en dessous de :

Code:
TEXT1 := PAlib Project
TEXT2 := Change this text
TEXT3 := for your project!

et de placer ton logo.bmp dans le répertoire de ton projet comme dans les anciennes version.


Pour le mp3, peux tu me dire ce que t'affiche MP3 Status : lorsque tu lances le binaire compilé avec ton mp3 ?
Les variables sont utiles dans l'exemple Palib puisqu'elles permettent de démontrer toutes les capacités de AS Lib mais dans ton projet si tu ne cherches qu'à lire et stopper ton mp3, tu n'en auras pas besoin.
Journalisée

Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« Réponse #2 : 16 Décembre 2010, 02:37:42 »

Ok j'ai rajouté le ligne dans le makefile, je vais devoirs créer une icone.

Sinon, lorsque je joue mon MP3, j'ai :
Sample rate : 0 et pan : 64
MP3 Status : playing

Je ne comprend pas Sad , normalement ça devrai fonctionner avec n'importe quel MP3 non?
Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
Synthesis Hors ligne
Global Moderator
*****
Messages: 176


Voir le profil WWW
Membre n° 341

« Réponse #3 : 16 Décembre 2010, 09:15:40 »

Code: (C)
AS_MP3StreamPlay("test.mp3");
Ça m'étonne que t'aies une fréquence de 0 Hz whistle


Edit: T'es sûr que tu as bien cette ligne :
Code:
AS_SoundVBL();
à côté du PA_WaitForVBL(); de ta boucle principale ?
« Dernière édition: 16 Décembre 2010, 09:25:41 par Synthesis » Journalisée

The Turrican DS Project
NitroTracker songs
Scape Original Soundtrack (Includes 3 leftovers)
Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« Réponse #4 : 16 Décembre 2010, 11:12:43 »

Pareil, le sample rate reste à zéro.... Sad
Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
Copper Hors ligne
Mega Member
***
Messages: 1296


Voir le profil
« Réponse #5 : 16 Décembre 2010, 12:00:37 »

L'ASLib ne fonctionne pas avec tous les mp3 :

Citation
up to 44Khz/stereo/96Kbps, though I recommend using 32Khz/stereo/80Kbps max, which is enough for the DS and works great with up to +25%/-100% pitching
Journalisée
Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« Réponse #6 : 16 Décembre 2010, 21:18:49 »

Alors je ne peux donc pas lire mon MP3? Il n'y a-t-il rien à faire? Cry
Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
Synthesis Hors ligne
Global Moderator
*****
Messages: 176


Voir le profil WWW
Membre n° 341

« Réponse #7 : 16 Décembre 2010, 21:24:18 »

Ben tu peux le reconvertir avec un bitrate plus faible, dans la limite de ce que t'a dit Copper.
Journalisée

The Turrican DS Project
NitroTracker songs
Scape Original Soundtrack (Includes 3 leftovers)
Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« Réponse #8 : 16 Décembre 2010, 22:00:23 »

C'est quoi un bitrate? Comment le faire?
La qualité de la chanson sera-t-elle conservée?

Merci D'Avance.
Au Revoir.
Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
EvilTroopa Hors ligne
Administrateur
*****
Messages: 648


Voir le profil WWW
1010011010 the Number of the Beast

« Réponse #9 : 16 Décembre 2010, 22:05:28 »

Il faut que tu convertisses ton mp3 avec un soft.
Je te conseille d'utiliser Switch : http://www.01net.com/telecharger/windows/Multimedia/encodeurs_et_decodeurs/fiches/32122.html

En gros, un mp3 se définit en qualité par son bitrate, plus c'est haut, meilleure est la définition du son.
Seulement, si c'est plus gros, ça demande aussi plus de ressources, il faut donc donner à la DS un format qu'elle arrivera à digérer. Ici passe sur du 96 kb/s maximum.
« Dernière édition: 16 Décembre 2010, 22:07:58 par EvilTroopa » Journalisée

A mushroom a day, keeps the koopas away.
Copper Hors ligne
Mega Member
***
Messages: 1296


Voir le profil
« Réponse #10 : 16 Décembre 2010, 22:14:26 »

Eventuellement tu peux aussi utiliser la dernière version gratuite de dbPowerAmp r10 :

http://www.321download.com/LastFreeware/page11.html

Par contre la qualité de la chanson ne sera pas préservé (mais il est fort possible qu'on n'entende pas la différence sur DS)
« Dernière édition: 16 Décembre 2010, 22:16:27 par Copper » Journalisée
Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« Réponse #11 : 16 Décembre 2010, 22:30:43 »

J'essaye avec Switch avant, alors j'add mon MP3, je vais dans Encoder Options et je met ça :
Constante Bitrate : 96(comme on me l'a conseillé non?) et je laisse coché high quality encoding et j'ai stéréo dans la partie Other.
Mais je ne test sur la DS, rien du tout, j'essaye avec d'autres bitrate pour voir...

Edit : Avec dbPowerAmp r10, je met les options citées par Copper, c'est-à-dire : 32Khz/stereo/80Kbps max, et quand je lance mon projet, je n'ai que 1 seconde de son, je met mon code ici :

Code:

//Includes
#include <PA9.h>
#include"EFS_Lib.h"
#include"KT_Lib.h"
#include"PA_FatLoad.h"
#include"SpriteLoad.h"
#include "all_gfx.h" //Juste pour les polices...
#include "Babye.h"  //Quand on ferme le couvercle(check lid)
#include "HereWeGo.h" //Quand on ouvre le couvercle(check lid)

#include <stdio.h> //Pour des fonctions comme sprintf
#include <stdlib.h>

//Défines
#define ECRAN_DU_HAUT 1
#define ECRAN_TACTILE 0
#define _256COULEURS 1
#define _16COULEURS 0
#define ARRIERE_PLAN_IMAGES 1
#define ARRIERE_PLAN_TEXTE 0 //Plus la valeur est petite, plus elle s'affiche devans les autres éléments

#define DIR_HAUT DIRECTION_HAUT
#define DIR_BAS DIRECTION_BAS
#define DIR_GAUCHE DIRECTION_GAUCHE
#define DIR_DROITE DIRECTION_DROITE
#define DIRECTION_PERSONNAGE_AU_DEPART 2

typedef enum Direction Direction;
enum Direction
{
DIRECTION_HAUT, DIRECTION_BAS, DIRECTION_GAUCHE, DIRECTION_DROITE
};

//enum {DIRECTION_HAUT, DIRECTION_BAS, DIRECTION_GAUCHE, DIRECTION_DROITE};

//Fonction main
int main()
{
    //Variables
    int x = 120;
    int y = 64;

    //Initialisation
PA_Init();
PA_LoadDefaultText(ECRAN_DU_HAUT, //sur l'écran du haut
                   ARRIERE_PLAN_TEXTE); //Arrière plan numéro 4(le dernier)
PA_SetAutoCheckLid(0); //On initialise la détection de l'ouverture/fermeture du coucercle

// Load a custom text font
PA_LoadText(ECRAN_DU_HAUT, //Ecran du haut
  ARRIERE_PLAN_TEXTE, //numéro arrière plan
  &Police_Arial); //nom de la police

EFS_Init(EFS_AND_FAT | EFS_DEFAULT_DEVICE, NULL);

//On charge la chanson en mémoire !
MP3FILE* file = FILE_OPEN("test.mp3"); //Dans le dossier EFS
if (!file) {
        PA_OutputText(0, 1, 1, "test.mp3 not found !!!");
        return 1;
}
FILE_CLOSE(file);

//On initialise le son
    //PA_VBLFunctionInit(AS_SoundVBL);
    AS_Init(AS_MODE_MP3 | AS_MODE_SURROUND | AS_MODE_16CH);
    AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);

//On joue la chanson
if (AS_GetMP3Status() & MP3ST_PAUSED) {

                    AS_MP3Unpause();

                } else {

                    AS_MP3StreamPlay("test.mp3");

                    AS_SetMP3Loop(true);
                }

    KT_ShowBG(ECRAN_DU_HAUT, ARRIERE_PLAN_IMAGES,"Arrière plan/Fond_blanc"); //On affiche une image sur l'écran du haut
    KT_ShowBG(ECRAN_TACTILE, ARRIERE_PLAN_IMAGES,"Arrière plan/Fond_etoiles"); //On affiche une image sur l'écran du bas

    PA_EasyFatLoadSprite(ECRAN_TACTILE, 0,"Sprites/Personnage", OBJ_SIZE_16X32, _256COULEURS, 0, x, y);
    //PA_SetSpriteAnim(ECRAN_TACTILE, 0, 8); //On fait le sprite regarder vers le bas
    //Pour qu'il soit automatiquement orienté vers le bas, il faut que la première frame(du haut vers le bas) : 0
    //représente le personnage regardant vers le bas

    //On oriente le sprite :
    Direction Direction_Personnage = DIR_BAS;
    switch(Direction_Personnage)
    {
        case DIRECTION_HAUT:
        PA_SetSpriteAnim(ECRAN_TACTILE, 0, 0);
        break;
        case DIRECTION_BAS:
        PA_SetSpriteAnim(ECRAN_TACTILE, 0, 8);
        break;
        case DIRECTION_GAUCHE:
        PA_SetSpriteAnim(ECRAN_TACTILE, 0, 4);
        PA_SetSpriteHflip(0, 0, 1); //On fait une rotatation car le direction
        //gauche n'est pas présente sur la feuille de sprite
        break;
        case DIRECTION_DROITE:
        PA_SetSpriteAnim(ECRAN_TACTILE, 0, 4); //On ne fait pas de rotation ici
        break;
    }

/*PA_OutputText(ECRAN_DU_HAUT,
                    1, //Position x du texte
                    1, //Position y du texte
                    "Bonjour.\nTest effectué par\nABOSO Aymerik."
                        "\n\nDéplcez le cube avec les touches\n"
"directionnelles !!!"); //Texte qu'on affiche*/

//On affiche les texte dans la boite
int nombreLettres = 0; //Nombre de lettre à afficher
int lettres = 0; //Nombre de lettres affichées actuellement
    int i = 0;

    //Affichage simple sans variables
while (lettres == nombreLettres) //Tant que toutes les lettres n'ont pas été affichées
{
    //Affichage du texte
++nombreLettres; //On incrémente le nombre de lettre affichées de 1
lettres = PA_BoxText(1, 1, 1, 30, 22, "Bonjour.\nTest effectué par\nABOSO Aymerik."
        "\n\nDéplcez le personnage avec les touches"
        " directionnelles.\n\nCeci est un teste afin de déplacer des sprite et de"
        " les animer !!!\n\n\nAppuyez sur A.\n\n\nCrée par ABOSO Aymerik.", nombreLettres);

        for(i = 0; i < 6; i ++)
        {
            PA_WaitForVBL();
        }
}

//On reset les variables
nombreLettres = 0;
    lettres = 0;
    i = 0;

PA_WaitFor(Pad.Held.A); //On attend que le joueur appuie sur A
PA_ClearTextBg(ECRAN_DU_HAUT);

    char chaine[1000]; //Caractère à compter
    int age = 145214;
sprintf(chaine, "Bonjour tout le monde, j'ai %d ans !!!", age);

    //Affichage complexe : avec des variabes
    //On prépare d'abord notre phrase
while (lettres == nombreLettres) //Tant que toutes les lettres n'ont pas été affichées
{
    //Affichage du texte
++nombreLettres; //On incrémente le nombre de lettre affichées de 1
lettres = PA_BoxText(1, 1, 1, 30, 22, chaine, nombreLettres);

        for(i = 0; i < 6; i ++)
        {
            PA_WaitForVBL();
        }
}

//On reset les variables
nombreLettres = 0;
    lettres = 0;
    i = 0;

PA_WaitFor(Pad.Held.A); //On attend que le joueur appuie sur A

PA_ClearTextBg(ECRAN_DU_HAUT);

//Boucle infinie
while(true)
{
//On commence par changer de frame pour le sprite
if(Pad.Newpress.Up)
{
PA_StartSpriteAnim(0, 0, 0, 3, 6);
Direction_Personnage = DIRECTION_HAUT; //On actualise la position du sprite
}
if(Pad.Newpress.Down)
{
PA_StartSpriteAnim(0, 0, 8, 11, 6);
Direction_Personnage = DIRECTION_BAS;
}
if(Pad.Newpress.Right)
{
PA_StartSpriteAnim(0, 0, 4, 7, 6);
PA_SetSpriteHflip(0, 0, 0);
Direction_Personnage = DIRECTION_DROITE;
}
if(Pad.Newpress.Left)
{
PA_StartSpriteAnim(0, 0, 4, 7, 6);
PA_SetSpriteHflip(0, 0, 1);
Direction_Personnage = DIRECTION_GAUCHE;
}

        //-------------------------------
//On arrête le sprite dans la bonne direction
if(!((Pad.Held.Left)||(Pad.Held.Up)||(Pad.Held.Down)||(Pad.Held.Right))) //Si on n'appuis sur
//aucune touche directionnelles
{
    switch(Direction_Personnage)
            {
                case DIRECTION_HAUT:
                PA_SetSpriteAnim(ECRAN_TACTILE, 0, 0);
                PA_SpriteAnimPause(0, 0, 1);
                break;
                case DIRECTION_BAS:
                PA_SetSpriteAnim(ECRAN_TACTILE, 0, 8);
                PA_SpriteAnimPause(0, 0, 1);
                break;
                case DIRECTION_GAUCHE:
                PA_SetSpriteAnim(ECRAN_TACTILE, 0, 4);
                PA_SetSpriteHflip(0, 0, 1); //On fait une rotatation car le direction
                //gauche n'est pas présente sur la feuille de sprite
                PA_SpriteAnimPause(0, 0, 1);
                break;
                case DIRECTION_DROITE:
                PA_SetSpriteAnim(ECRAN_TACTILE, 0, 4); //On ne fait pas de rotation ici
                PA_SpriteAnimPause(0, 0, 1);
                break;
            }
}

x += Pad.Held.Right - Pad.Held.Left;
y += Pad.Held.Down - Pad.Held.Up;

//On empêche le personnage de sortir de l'écran
if(x < 0) x = 0;
if(x > (256 - 16)) x = (256 - 16);
if(y < 0) y = 0;
if(y > (192 - 32)) y = (192 - 32);

//Si le stylet est utilisé, on place le personnage à sa position
if(Stylus.Held)
{
x = Stylus.X;
y = Stylus.Y;

if(x < 0) x = 0;
if(x > (256 - 16)) x = (256 - 16);
if(y < 0) y = 0;
if(y > (192 - 32)) y = (192 - 32);
}

//On change la position du personnage à l'écran
PA_SetSpriteXY(ECRAN_TACTILE, // screen
   0, // sprite
   x, // x position
   y); // y...

//On affiche du texte, le sprite et l'arrière plan
        PA_OutputText(ECRAN_DU_HAUT,
                    1, //Position x du texte
                    1, //Position y du texte
                    "Bonjour.\nTest effectué par\nABOSO Aymerik."
                        "\n\nPosition du sprite à l'écran : \n"
                        "X = %03d\nY = %03d"
"\n\nVos informations :"
"\nNom : %s\nAnniversaire : %02d/%02d"
"\nAlarme : %02dH%02d\nDate d'aujourd'hui : %02d/%02d/%02d\nMessage : %s\nHeure : %02d heures, %02d minutes\net %02d secondes"
"\n\nDéplcez le cube avec les \ntouches directionnelles ou avec\n"
"le stylet !!!"
, x, y, PA_UserInfo.Name, PA_UserInfo.BdayDay ,PA_UserInfo.BdayMonth, PA_UserInfo.AlarmHour, PA_UserInfo.AlarmMinute
, PA_RTC.Day, PA_RTC.Month, PA_RTC.Year, PA_UserInfo.Message, PA_RTC.Hour, PA_RTC.Minutes, PA_RTC.Seconds); //Texte qu'on affiche

PA_CloseLidSound2(Babye, HereWeGo); //Sond ouverture/fermeture du coucercle
PA_WaitForVBL(); //On rafraichit l'écran à 60 images par secondes.
}
}

Désolé mais c'est un projet tutoriel que je fais tout seul, pour que j'aille vérifier dedans quand je travaillerai sur un vrai projet...

Merci D'Avance.
Au Revoir.
« Dernière édition: 16 Décembre 2010, 22:47:37 par Happy » Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
Copper Hors ligne
Mega Member
***
Messages: 1296


Voir le profil
« Réponse #12 : 16 Décembre 2010, 23:19:20 »

Tu as essayé avec la ligne :

PA_VBLFunctionInit(AS_SoundVBL);

(dans ton post elle est en commentaire)
Journalisée
Happy Hors ligne
Full Member
***
Messages: 105


Voir le profil
« Réponse #13 : 17 Décembre 2010, 00:26:54 »

A ok, le problème est résolu, par contre, la qualité de mon MP3 en a pris un coup...
Il n'y a pas de moyen de faire une conversion parfaite?

Edit : Avec ces réglage, ça beaucoup mieux niveau qualité :
32Khz/stereo/96Kbps max comme me l'a conseillé EvilTroopa pour le 96Kbps max^^

Merci beaucoup pour votre aide !!!
Je vais pouvoir attaquer mon projet pour les vacances de la noël Wink ce week-end donc Wink
« Dernière édition: 17 Décembre 2010, 00:36:44 par Happy » Journalisée

Non non mais ça rapelle vraiment de bon souvenirs :
http://www.youtube.com/watch?v=rGDiO1G0-K0
Pages: [1]   Haut de page
Imprimer

Aller à: