[NDS][Programación con Palib] 8. Sonido y opciones avanzadas

PiratePila está baneado por "crearse clones para trollear"
polo_polo escribió:Que va, no lo es, te lo intento explicar detalladamente.
Te voy a poner un ejemplo para hacer un menú con una sola opción, que si lo entiendes serás capaz de hacerlo con varias...
Defines una variable (puede ser la que quieras, en este caso vamos a usar bool porque permite solo dos valores y consume muy poco).
La defines como false (o 0, que es lo mismo) "bool menu = false" y en la condición añades que para que se cumpla menu tiene que ser falso (o cero).


La verdad es que no me queda muy claro, pero lo intentaré. [+risas]

EDITO: Con la musica tengo un problema;

#include <PA9.h>
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "mario.h"

u8 volumem = 250;


Lo tengo así y la musica se escucha muy floja, se escucha igual de floja ponga el valor que ponga.

¿ Alguien sabe a que se puede deber esto ?
con algunos archivos me sale este error

hikaru.raw
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/c/devkitPro/PAlib/lib -specs=ds_arm9.specs dbz.o fma.o hikaru.o main.o -L/c/devkitPro/PAlib/lib -lpa9 -L/c/devkitPro/libnds/lib -lfat -lnds9 -ldswifi9 -o build.elf
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: region ewram is full (build.elf section .rodata)
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .init [02000000 -> 02000237] overlaps section .init_array [02000000 -> 02000003]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .fini_array [02000004 -> 02000007] overlaps section .init [02000000 -> 02000237]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .text [02000240 -> 020075e7] overlaps section .itcm [02000234 -> 020003c3]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .bss [020003c4 -> 02033bb3] overlaps section .text [02000240 -> 020075e7]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .fini [020075e8 -> 020075ff] overlaps section .bss [020003c4 -> 02033bb3]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .init lma 0x2000000 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .fini_array lma 0x2000004 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .eh_frame lma 0x2000008 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .jcr lma 0x200000c overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .data lma 0x2000010 overlaps previous sections
collect2: ld returned 1 exit status
make[1]: *** [/d/homebrew/pruebas/pruebas.elf] Error 1
make: *** [build] Error 2


tambien me sale al meter 3 songs en al carpeta data. Creo que hay alguna limitación en cuanto al tamaño o algo, pero prefiero que plata (o alguno) me lo aclare
PiratePila escribió:
EDITO: Con la musica tengo un problema;

#include <PA9.h>
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "mario.h"

u8 volumem = 250;


Lo tengo así y la musica se escucha muy floja, se escucha igual de floja ponga el valor que ponga.

¿ Alguien sabe a que se puede deber esto ?


no se instruccion estas usando
si usas PA_PlaySimpleSound(PA_Channel, sound) no te permite cambiar el sonido (por lo menos directamente)

si quieres modificarla con esa intruccion deberias entrar en PA_SetDefaultSound (u8 volume, int freq, s16 format) y cambiar el u8 volume.
EL max creo qe es 127
Tb tienes el PA_SetSoundVol (u8 Volume), qe es el master.
mira a ver si esta instruccion te puede servir si ves qe nada.
PA_PlaySound (u8 PA_Channel, const void *data, s32 length, u8 volume, u32 freq)
Play a given sound effect, with default format (raw)


Luiszu, yo en data he tenido mas de 3 canciones, pero ocupando muy poco, asi qe no se qe decirte.
Plata escribió:NOTA: En los emuladores se escucha muy rapido, pero en la ds se escucha perfecto.


Disculpa... he probado (el tuto 8.1) en un emulador (NO$GBA) y funciona de Lujo.... ^^
esque uso el ideas, que me va vastante vien con homebrew :p
Yo uso el ideas y el no$gba. Lo malo del ideas es que va demasiado rápido (o solo es a mi?) y distorsiona el sonido. El no$gba, sin embargo, me dibuja mal los degradados en figuras 3D XD. Utilizo los 2 según lo que quiera probar.
ARRGG!!!!!

[buuuaaaa]

Porque compila BIEN y no funcionaaaaaaaa

He usado variables y booleanos. Y NADA DE NADA. No funcionaa... :-?

Aqui los 2 códigos:

Con variables:
#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "sonido.h"

u8 a=0;

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitSound();

PA_LoadSpritePal(0, 0, (void*)sprites_Pal);
PA_CreateSprite(0, 0, (void*)boton_Sprite, OBJ_SIZE_32X32, 1, 0, 0, 0);

while (1)
{
if((a==0) && (Stylus.Held) && PA_StylusInZone(0, 0, 32, 32))
{
PA_PlaySimpleSound(0, sonido);
PA_SetSpriteAnim(0, 0, 1);
a++;
}
if((a==1) && (Stylus.Held) && PA_StylusInZone(0, 0, 32, 32))
{
PA_StopSound(0);
PA_SetSpriteAnim(0, 0, 0);
a--;
}
PA_WaitForVBL();
}
return 0;
}


Con booleanos:
#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "sonido.h"

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitSound();

bool menu = false;

PA_LoadSpritePal(0, 0, (void*)sprites_Pal);
PA_CreateSprite(0, 0, (void*)boton_Sprite, OBJ_SIZE_32X32, 1, 0, 0, 0);

while (1)
{
if(menu == false && (Stylus.Newpress) && PA_StylusInZone(0, 0, 32, 32))
{
PA_PlaySimpleSound(0, sonido);
PA_SetSpriteAnim(0, 0, 1);
menu = true;
}
if(menu == true && (Stylus.Newpress) && PA_StylusInZone(0, 0, 32, 32))
{
PA_StopSound(0);
PA_SetSpriteAnim(0, 0, 0);
menu = false;
}
PA_WaitForVBL();
}
return 0;
}


}:/
Luiszu escribió:con algunos archivos me sale este error

hikaru.raw
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/c/devkitPro/PAlib/lib -specs=ds_arm9.specs dbz.o fma.o hikaru.o main.o -L/c/devkitPro/PAlib/lib -lpa9 -L/c/devkitPro/libnds/lib -lfat -lnds9 -ldswifi9 -o build.elf
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: region ewram is full (build.elf section .rodata)
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .init [02000000 -> 02000237] overlaps section .init_array [02000000 -> 02000003]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .fini_array [02000004 -> 02000007] overlaps section .init [02000000 -> 02000237]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .text [02000240 -> 020075e7] overlaps section .itcm [02000234 -> 020003c3]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .bss [020003c4 -> 02033bb3] overlaps section .text [02000240 -> 020075e7]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .fini [020075e8 -> 020075ff] overlaps section .bss [020003c4 -> 02033bb3]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .init lma 0x2000000 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .fini_array lma 0x2000004 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .eh_frame lma 0x2000008 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .jcr lma 0x200000c overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .data lma 0x2000010 overlaps previous sections
collect2: ld returned 1 exit status
make[1]: *** [/d/homebrew/pruebas/pruebas.elf] Error 1
make: *** [build] Error 2


tambien me sale al meter 3 songs en al carpeta data. Creo que hay alguna limitación en cuanto al tamaño o algo, pero prefiero que plata (o alguno) me lo aclare


plata, dime que pasa con eso, plis
judelco escribió:ARRGG!!!!!

[buuuaaaa]

Porque compila BIEN y no funcionaaaaaaaa

He usado variables y booleanos. Y NADA DE NADA. No funcionaa... :-?

Aqui los 2 códigos:

Con variables:


Con booleanos:


}:/


ejemmmmmmmmm

termina el bucle, anda

buscando a while xD


-----------------------

Luiszu escribió:con algunos archivos me sale este error

hikaru.raw
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/c/devkitPro/PAlib/lib -specs=ds_arm9.specs dbz.o fma.o hikaru.o main.o -L/c/devkitPro/PAlib/lib -lpa9 -L/c/devkitPro/libnds/lib -lfat -lnds9 -ldswifi9 -o build.elf
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: region ewram is full (build.elf section .rodata)
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .init [02000000 -> 02000237] overlaps section .init_array [02000000 -> 02000003]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .fini_array [02000004 -> 02000007] overlaps section .init [02000000 -> 02000237]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .text [02000240 -> 020075e7] overlaps section .itcm [02000234 -> 020003c3]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .bss [020003c4 -> 02033bb3] overlaps section .text [02000240 -> 020075e7]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: section .fini [020075e8 -> 020075ff] overlaps section .bss [020003c4 -> 02033bb3]
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .init lma 0x2000000 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .fini_array lma 0x2000004 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .eh_frame lma 0x2000008 overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .jcr lma 0x200000c overlaps previous sections
c:/devkitpro/devkitarm/bin/../lib/gcc/arm-eabi/4.1.1/../../../../arm-eabi/bin/ld.exe: build.elf: section .data lma 0x2000010 overlaps previous sections
collect2: ld returned 1 exit status
make[1]: *** [/d/homebrew/pruebas/pruebas.elf] Error 1
make: *** [build] Error 2


tambien me sale al meter 3 songs en al carpeta data. Creo que hay alguna limitación en cuanto al tamaño o algo, pero prefiero que plata (o alguno) me lo aclare



creo que es porque no convertiste bien algun sonido, mira aver si pusiste las opciones bien en el convertidor.

salu2
Buenisimo tutorial gracias
Plata escribió:ejemmmmmmmmm

termina el bucle, anda

buscando a while xD


Ese no es el fallo, los corchetes están bien.
[quote="Plata"]creo que es porque no convertiste bien algun sonido, mira aver si pusiste las opciones bien en el convertidor./QUOTE]

eso creo que descartado, pues todos los sonidos fueron convertidos simultaneamente y unos si van y otros no van, y uno de ellos solo va cuando esta solo, xD
ANTONIOND escribió:
Ese no es el fallo, los corchetes están bien.


Ya SE que los corchetes están bien.... que es???? T_T
judelco escribió:
Ya SE que los corchetes están bien.... que es???? T_T


Pon Stylus.Newpress en lugar de Stylus.Held. Si lo que quieres es que sea un botón deberías hacerlo así. Lo que hace tu código es:

a==0, pulsado -> a=1.

a==1,pulsado -> a=0.


Te quedas donde estabas. ¿Ves el problema? En el mismo paso del programa hace los 2 cambios.
ANTONIOND escribió:
Pon Stylus.Newpress en lugar de Stylus.Held. Si lo que quieres es que sea un botón deberías hacerlo así. Lo que hace tu código es:

a==0, pulsado -> a=1.

a==1,pulsado -> a=0.


Te quedas donde estabas. ¿Ves el problema? En el mismo paso del programa hace los 2 cambios.


Mmm... lo probaré. MUCHAS GRACIAS por la ayuda, compañero [oki]
judelco escribió:

Mmm... lo probaré. MUCHAS GRACIAS por la ayuda, compañero [oki]


De nada, para eso estamos ^^.

Ya nos dirás si era eso. De todos modos a mi me ha pasado muchas veces lo que te he dicho, por eso me he fijado.
ANTONIOND escribió:
De nada, para eso estamos ^^.

Ya nos dirás si era eso. De todos modos a mi me ha pasado muchas veces lo que te he dicho, por eso me he fijado.


Pues nada...... sigue sin irse. Ya me estoy mosqueando con lo que dice Plata sobre el while.....

este es el codigo con el newpress y compila sin problemas, pero no cumple su función....

#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
#include "sonido.h"

u8 a=0;

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_InitSound();

PA_LoadSpritePal(0, 0, (void*)sprites_Pal);
PA_CreateSprite(0, 0, (void*)boton_Sprite, OBJ_SIZE_32X32, 1, 0, 0, 0);

while (1)
{

if((Stylus.Newpress) && PA_StylusInZone(0, 0, 32, 32) && a == 0)
{
PA_PlaySimpleSound(0, sonido);
PA_SetSpriteAnim(0, 0, 1);
a++;
}
if((Stylus.Newpress) && PA_StylusInZone(0, 0, 32, 32) && a == 1)
{
PA_StopSound(0);
PA_SetSpriteAnim(0, 0, 0);
a--;
}
PA_WaitForVBL();
}
return 0;
}


Nota: En negrita lo de while, para que se vea que SI está
judelco escribió:

Pues nada...... sigue sin irse. Ya me estoy mosqueando con lo que dice Plata sobre el while.....

este es el codigo con el newpress y compila sin problemas, pero no cumple su función....



Nota: En negrita lo de while, para que se vea que SI está


FALLO MIO
Pasa lo mismo de antes...

Prueba poniendo en el segundo "if", "else if". Newpress no cambia en un paso, cambia de uno para el otro...
judelco escribió:
Pues nada...... sigue sin irse. Ya me estoy mosqueando con lo que dice Plata sobre el while.....

este es el codigo con el newpress y compila sin problemas, pero no cumple su función....



Nota: En negrita lo de while, para que se vea que SI está


ups, no vi el while... xD

lo de pone else if te da lo mismo, por experiencia propia. no uses para esto varibles, usa boleanos.
voy a provar tu codigo y mirar si me va.

una cosa, as provado en la nds a ver si el fallo es del emu???

salu2
¿Y por qué no lo simplificas así?
Lo del else if lo arreglaría, ya he dicho que pasa lo mismo de antes, hace los dos cambios en el mismo paso. Así solo hace uno de los 2.

while (1)
{
if((Stylus.Newpress) && PA_StylusInZone(0, 0, 32, 32))
{
if(a == 0)
{
PA_PlaySimpleSound(0, sonido);
PA_SetSpriteAnim(0, 0, 1);
a++;
}
else if(a == 1)
{
PA_StopSound(0);
PA_SetSpriteAnim(0, 0, 0);
a--;
}
}
PA_WaitForVBL();
}


Nota: Se puede cambiar (a == 0) por (!a) y (a == 1) por (a).
tienes razon, una colada de pata xD...

ademas lo explique bien mas arriva...

ala, ya sabeis, no soy perfecto xD

P.D: es mas comoda la forma que dice el... lo unico que haces el liarlo
Bueno, a ver que nos responde, que si no nos quedamos con la duda. XD
ANTONIOND escribió:¿Y por qué no lo simplificas así?
Lo del else if lo arreglaría, ya he dicho que pasa lo mismo de antes, hace los dos cambios en el mismo paso. Así solo hace uno de los 2.

while (1)
{
if((Stylus.Newpress) && PA_StylusInZone(0, 0, 32, 32))
{
if(a == 0)
{
PA_PlaySimpleSound(0, sonido);
PA_SetSpriteAnim(0, 0, 1);
a++;
}
else if(a == 1)
{
PA_StopSound(0);
PA_SetSpriteAnim(0, 0, 0);
a--;
}
}
PA_WaitForVBL();
}


Nota: Se puede cambiar (a == 0) por (!a) y (a == 1) por (a).


AAAAAAAAAAAAAAAA!!!! Ahora sI!! claro, poniendo el if dentro del if.... bueno, no se explicarlo, pero ya se que es lo que hice mal, muchas gracias. Ahora puedo continuar con el código... XD

Cuando acabe con el, lo postearé (el .nds y el source)

A ver como me quedará ^^

PD: MUCHAS gracias, Antonio [reojillo]
ANTONIOND escribió:De nada, hombre. [oki]


Estas siempre aqui.... posteo en donde sea y ya estas contestando XD

Bueno, pienso añadirle bastantes cositas al código, solo posteé esa parte porque era la que me daba problemas..... y gracias a tu ahora puedo continuar "developeando" XD

Bye! [beer]
judelco escribió:Estas siempre aqui.... posteo en donde sea y ya estas contestando XD


Ya... es que tengo mucho tiempo libre XD.
Bueno, ya he acabado el proyecto y ya esta "adornado".

Este es un screenshot (si, usando alt+imprimirpant)

Imagen

El source lo colgaré más adelante. Ahora de momento si quereis podeis ir escuchando la musiquilla que tiene.... :P

PD: Voy a INTENTAR añadirle un "menú" para que tenga varias canciones (ya que plata aún no nos ha enseñado fat... los .raw seguirán estando en el .nds XD)

Aqui está los .nds y .sc.nds:

http://rapidshare.com/files/88602811/DSMusic.rar

Bye! [looco]
judelco escribió:...


Al final te ha salido, ¿eh? Enorabuena.
ANTONIOND escribió:
Al final te ha salido, ¿eh? Enorabuena.


Pues si, ahora estoy acabando de implementarle un menú para elegir entre 9 canciones y los créditos. En cada cancion se puede volver hacia atras (al menú) y elegir otra sin problemas, indefinidamente......

[plas]
78 respuestas
1, 2