PDA

Ver la versión completa : SDL_Mixer, problemas al poner musiquitas y sonidicos :P



cybernoid
09/08/2008, 17:43
Hola,

Estoy haciendo algunas pruebecillas con la Gp, concretamente estaba intentando hacer sonar un mod y no hay manera.

Alguien sabe si hay algun problema al ejecutar mods/wavs u lo que sea? en el PC me funciona sin problemas, pero en la 2x no hay manera.

¿teneis alguna idea de cual puede ser el problema?

os pongo aqui el código de la aplicacion:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <SDL.h>
#include <SDL/SDL_mixer.h>
/* GP2X button mapping */
enum MAP_KEY
{
VK_UP , // 0
VK_UP_LEFT , // 1
VK_LEFT , // 2
VK_DOWN_LEFT , // 3
VK_DOWN , // 4
VK_DOWN_RIGHT , // 5
VK_RIGHT , // 6
VK_UP_RIGHT , // 7
VK_START , // 8
VK_SELECT , // 9
VK_FL , // 10
VK_FR , // 11
VK_FA , // 12
VK_FB , // 13
VK_FX , // 14
VK_FY , // 15
VK_VOL_UP , // 16
VK_VOL_DOWN , // 17
VK_TAT // 18
};
/* The screen surface, joystick device */
SDL_Surface *screen = NULL;
SDL_Joystick *joy = NULL;
void Terminate(void)
{
SDL_Quit();
#ifdef GP2X
chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
#endif
}
Mix_Music * musica;
int canal;
int main (int argc, char *argv[])
{
int done;
/* Initialize SDL */
if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0) {
fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ());
exit (1);
}
atexit (Terminate);
SDL_ShowCursor(SDL_DISABLE);
/* Set 320x240 16-bits video mode */
screen = SDL_SetVideoMode (320, 240, 16, SDL_SWSURFACE);
if (screen == NULL) {
fprintf (stderr, "Couldn't set 320x240x16 video mode: %s\n", SDL_GetError ());
exit (2);
}
/* Check and open joystick device */
if (SDL_NumJoysticks() > 0) {
joy = SDL_JoystickOpen(0);
if(!joy) {
fprintf (stderr, "Couldn't open joystick 0: %s\n", SDL_GetError ());
}
}
if (Mix_OpenAudio(22050,AUDIO_S16,2,4096))
{
fprintf(stderr,"no se puede inicializar SDL_Mixer %s\n", Mix_GetError());
printf("no se puede inicializar SDL_Mixer %s\n",Mix_GetError());
exit(1);
}
#ifdef GP2X
/* Only use GP2X code here */
#endif
#ifdef WIN32
/* Only use Windows code here */
#endif
musica=Mix_LoadMUS ("DARK.S3M");
canal=Mix_PlayMusic(musica,-1);
done = 0;
while (!done)
{
SDL_Event event;

/* Check for events */
while (SDL_PollEvent (&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
/* if press Ctrl + C, terminate program */
if ( (event.key.keysym.sym == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) )
done = 1;
break;
case SDL_KEYUP:
break;
case SDL_JOYBUTTONDOWN:
/* if press Start button, terminate program */
if ( event.jbutton.button == VK_START )
done = 1;
break;
case SDL_JOYBUTTONUP:
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
/* Processing */
SDL_Flip(screen);
}
return 0;
}

Puck2099
10/08/2008, 00:02
Más que el código péganos las líneas de compilación.

¿Estás enlazando con la biblioteca libmikmod?

cybernoid
10/08/2008, 01:32
M&#225;s que el c&#243;digo p&#233;ganos las l&#237;neas de compilaci&#243;n.

&#191;Est&#225;s enlazando con la biblioteca libmikmod?

Estoy utilizando el SDK oficial para windows, sin ningun a&#241;adido.
&#191;no funciona con el SDK oficial?

aqu&#237; las lineas de compilacion, es el make que genera la plantilla DevCpp



Compilador: gp2x
Building Makefile: "C:\GP2XSDK\proyectos\CM\Makefile.gp2x"
Ejecutando make clean
rm -f gp2x/main.o CargaMus.gpe
cygwin-mkdir -p "gp2x"
g++.exe -c main.c -o gp2x/main.o -I"C:/GP2XSDK/Tools/include/c++/3.4.6/backward" -I"C:/GP2XSDK/Tools/include/c++/3.4.6" -I"C:/GP2XSDK/Tools/arm-gp2x-linux/include" -I"C:/GP2XSDK/Tools/include" -I"C:/GP2XSDK/Tools/include/SDL" -DGP2X
g++.exe gp2x/main.o -o CargaMus.gpe -L"C:/GP2XSDK/Tools/arm-gp2x-linux/lib" -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_inifile -lSDL -lpng -ljpeg -lvorbisidec -lmad -lfreetype -lz -lunicodefont
Ejecuci&#243;n Terminada

Puck2099
10/08/2008, 01:34
Pues si no me equivoco para reproducir trackers necesita la biblioteca mikmod, así que es normal que al no enlazarla no suenen.

Aiken
10/08/2008, 03:09
Pues si no me equivoco para reproducir trackers necesita la biblioteca mikmod, así que es normal que al no enlazarla no suenen.


y si usa las funciones no deberia dar un error en momento de compilacion?

Aiken

cybernoid
10/08/2008, 12:48
ok, probare a bajar la libreria

la cuestion es que WAV tampoco me suena &#191;puede ser de lo mismo?

< - >
pues nada ni mikmod ni nada, he probado a compilarlo con libmikmod y la cosa sigue igual, no suena nada.



C:\SimpleDevStudio_07b_withSDK\Demos\CM>path=C:\SimpleDevStudio_07b_withSDK\gp2x
\bin\
C:\SimpleDevStudio_07b_withSDK\Demos\CM>C:\SimpleDevStudio_07b_withSDK\gp2x\bin\
\arm-linux-g++.exe -o"C:\SimpleDevStudio_07b_withSDK\Demos\CM\main.c.gpe" "C:\Si
mpleDevStudio_07b_withSDK\Demos\CM\main.c" -IC:\SimpleDevStudio_07b_withSDK\gp2x
\include\ -LC:\SimpleDevStudio_07b_withSDK\gp2x\lib\ -O2 -s -Wall -DGP2X -static
-lSDL_gfx -lSDL_ttf -lfreetype -lSDL_image -ljpeg -lpng12 -lz -lSDL_mixer -lvor
bisidec -lmikmod -lmad -lSDL -lgcc -lm -lc -lexpat -lpthread -msoft-float
C:\SimpleDevStudio_07b_withSDK\Demos\CM>pause
Presione una tecla para continuar . . .


ni con los wav



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "SDL\SDL.h"
#include "SDL\SDL_ttf.h"
#include "SDL\SDL_image.h"
#include "SDL\SDL_rotozoom.h"
#include "SDL\SDL_mixer.h"
/* GP2X button mapping */
enum MAP_KEY
{
VK_UP , // 0
VK_UP_LEFT , // 1
VK_LEFT , // 2
VK_DOWN_LEFT , // 3
VK_DOWN , // 4
VK_DOWN_RIGHT , // 5
VK_RIGHT , // 6
VK_UP_RIGHT , // 7
VK_START , // 8
VK_SELECT , // 9
VK_FL , // 10
VK_FR , // 11
VK_FA , // 12
VK_FB , // 13
VK_FX , // 14
VK_FY , // 15
VK_VOL_UP , // 16
VK_VOL_DOWN , // 17
VK_TAT // 18
};
TTF_Font * font;
SDL_Color color={255,255,200};
/* The screen surface, joystick device */
SDL_Surface *screen = NULL;
SDL_Joystick *joy = NULL;
void cls()
{
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); // dibujamos un rectangulo negro para borrar el frame anterior
}
void DrawText(char * texto,int x,int y, TTF_Font *font)
{
SDL_Color color={0,0,0};
SDL_Rect rect;
rect.x=x;
rect.y=y;
SDL_BlitSurface(TTF_RenderText_Solid(font,texto,co lor) ,NULL,screen,&rect); // FPS
}
void DrawText(char * texto,int x,int y, TTF_Font *font,SDL_Color color)
{
SDL_Rect rect;
rect.x=x;
rect.y=y;
SDL_BlitSurface(TTF_RenderText_Solid(font,texto,co lor) ,NULL,screen,&rect); // FPS
}
void Terminate(void)
{
SDL_Quit();
#ifdef GP2X
chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
#endif
}
Mix_Music * musica;
Mix_Chunk *sonido;
int canal;
int main (int argc, char *argv[])
{
int done;
/* Initialize SDL */
if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0) {
fprintf (stderr, "Couldn't initialize SDL: &#37;s\n", SDL_GetError ());
exit (1);
}
atexit (Terminate);
SDL_ShowCursor(SDL_DISABLE);
/* Set 320x240 16-bits video mode */
screen = SDL_SetVideoMode (320, 240, 16, SDL_SWSURFACE);
if (screen == NULL) {
fprintf (stderr, "Couldn't set 320x240x16 video mode: %s\n", SDL_GetError ());
exit (2);
}
/* Check and open joystick device */
if (SDL_NumJoysticks() > 0) {
joy = SDL_JoystickOpen(0);
if(!joy) {
fprintf (stderr, "Couldn't open joystick 0: %s\n", SDL_GetError ());
}
}
if (TTF_Init() == -1)

{
fprintf(stderr,"Unable to initialize SDL_ttf: %s \n", TTF_GetError());
//Put here however you want to do about the error.
//you could say:
//return true;
//Or:
//exit(1);
}
if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,AUDIO_S16,MIX _DEFAULT_CHANNELS,128))
{
fprintf(stderr,"no se puede inicializar SDL_Mixer %s\n", Mix_GetError());
printf("no se puede inicializar SDL_Mixer %s\n",Mix_GetError());
exit(1);
}
#ifdef GP2X
/* Only use GP2X code here */
#endif
#ifdef WIN32
/* Only use Windows code here */
#endif
font=TTF_OpenFont("img/fuente.ttf", 8);
//fprintf (stderr, "cargando musica");
//musica=Mix_LoadMUS ("DARK.S3M");
if (font==NULL)
fprintf (stderr, "error en la carga");
sonido=Mix_LoadWAV("PASO10.WAV");
//canal=Mix_PlayMusic(musica,-1);
done = 0;
Mix_PlayChannel(-1,sonido,0);
while (!done)
{
SDL_Event event;

/* Check for events */
while (SDL_PollEvent (&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
/* if press Ctrl + C, terminate program */
if ( (event.key.keysym.sym == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) )
done = 1;
break;
case SDL_KEYUP:
break;
case SDL_JOYBUTTONDOWN:
/* if press Start button, terminate program */
if ( event.jbutton.button == VK_START )
done = 1;
break;
case SDL_JOYBUTTONUP:
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
if (!Mix_Playing(-1))
Mix_PlayChannel(-1,sonido,0);
// cls();
DrawText("TEST SONIDO",10,50,font,color);
if (sonido==NULL)
DrawText("NO CARGA SONIDO",10,100,font,color);
/* Processing */
SDL_Flip(screen);
}
return0;
}



venga, seguro que a alguien le ha pasado !!! hecharme una mano por el amor de dioossss, que me estoy volviendo loco :loco::loco:

:) gracias chicos

esosiqueno
10/08/2008, 13:39
Posiblemente sea problema de las librerias que tienes instaladas.
Prueba a bajar de aquí el paquete que hay de precompiladas o te las compilas a tu gusto:

http://wiki.open2x.org/open2x/wiki/index.php?title=Main_Page

De todas formas, si tienes acceso a la terminal de la consola podrías ver que error te da, ejecutando el programa desde la línea de comandos. y así aclarar el tema.


Saludos.

cybernoid
10/08/2008, 17:20
pues nada, tampoco consigo hacerlo funcionar.

ahora estoy probando con el devkitgp2x, compilando el ejemplo que trae la libreria mikmod



#include <unistd.h>
#include <mikmod.h>
main()
{
MODULE *module;
/* register all the drivers */
MikMod_RegisterAllDrivers();
/* register all the module loaders */
MikMod_RegisterAllLoaders();
/* initialize the library */
md_mode |= DMODE_SOFT_MUSIC;
if (MikMod_Init("")) {
fprintf(stderr, "Could not initialize sound, reason: %s\n",
MikMod_strerror(MikMod_errno));
return;
}
/* load module */
module = Player_Load("folk.mod", 64, 0);
if (module) {
/* start module */
Player_Start(module);
while (Player_Active()) {
/* we're playing */
usleep(10000);
MikMod_Update();
}
Player_Stop();
Player_Free(module);
} else
fprintf(stderr, "Could not load module, reason: %s\n",
MikMod_strerror(MikMod_errno));
/* give up */
MikMod_Exit();
}




el resultado de la compilacion:


C:\devkitGP2X\demo>make
C:/devkitGP2X/bin/arm-linux-gcc `C:/devkitGP2X/bin/arm-linux-sdl-config --cflags
` -O2 -Wall -c -o demo.o demo.c
demo.c:5: warning: return type defaults to 'int'
demo.c: In function 'main':
demo.c:19: warning: 'return' with no value, in function returning non-void
C:/devkitGP2X/bin/arm-linux-g++ -static -o demo.gpe demo.o `C:/devkitGP2X/bin/ar
m-linux-sdl-config --libs` -lmikmod
C:/devkitGP2X/lib\libmikmod.a(mdriver.o): In function `MD_DropPrivileges':
../playercode/mdriver.c:919: warning: Using 'getpwnam' in statically linked appl
ications requires at runtime the shared libraries from the glibc version used fo
r linking
C:/devkitGP2X/bin/arm-linux-strip demo.gpe



no hay manera, no hace nada, ejecuto la aplicacion y como si nada :(

me estoy volviendo loco!!!!! alguien me puede pasar un ejemplo que funcione y un make para el devkitgp2x?


de verdad que no se que mas probar :( no debe ser tan dificil

tambien tengo que decir que yo con los compiladores siempre me hago la picha un lio :(

^MiSaTo^
10/08/2008, 17:46
Igual digo una tontería porque hace mil años que no cojo la GP2X para nada pero... puede ser que la librería te falte en la consola?

hardyx
10/08/2008, 18:34
A m&#237; me pas&#243; igual que a t&#237; hace tiempo. La causa es que la librer&#237;a SDL_Mixer que viene con el SDK de GPH para windows, no soporta formatos como .mod, .s3m y otros porque no est&#225; compilada con la mikmod. Prueba con formato .ogg que s&#237; est&#225; soportado. Hay otras librer&#237;as alternativas (paeryn, open2x) que si incluyen ese soporte. Adem&#225;s las librer&#237;as oficiales no est&#225;n muy optimizadas y pueden ralentizar un juego con m&#250;sica de fondo.

A m&#237; me daban problemas de compatibilidad estas librer&#237;as con el compilador que trae el SDK oficial, as&#237; que ahora uso el SDK de Codeblocks (http://www.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,2295) para gp2x, que viene con las librer&#237;as optimizadas y soporte para todo tipo de archivos de m&#250;sica. La diferencia de rendimiento comparado con las originales es impresionante...

:lovegp2x:

BuD
10/08/2008, 20:08
No se si os servirá de algo, pero hace como N meses donde N > 6 que hice un mixer para minimal library que reproducía exclusivamente OGG a 44100 HZ (falta resampling). Además no está acabado ni de documentar ni de debuggear, pero como llevo como un porrón de meses sin tocarlo, como quien no quiere la cosa yo lo digo, lo pongo aquí y dependiendo del interés por este de la gente quizás lo termine.

Saludetes.

PD: Consume relativamente poco, al tener fijado los HZ de los OGGs. Probado con Minlib 0.B

cybernoid
11/08/2008, 09:36
Igual digo una tontería porque hace mil años que no cojo la GP2X para nada pero... puede ser que la librería te falte en la consola?

Pues posible es, como ya digo no tengo mucha idea sobre compiladores y linkadores, :P

he dado por supuesto que con la opcion -static linkaban estaticamente...



A mí me pasó igual que a tí hace tiempo. La causa es que la librería SDL_Mixer que viene con el SDK de GPH para windows, no soporta formatos como .mod, .s3m y otros porque no está compilada con la mikmod. Prueba con formato .ogg que sí está soportado. Hay otras librerías alternativas (paeryn, open2x) que si incluyen ese soporte. Además las librerías oficiales no están muy optimizadas y pueden ralentizar un juego con música de fondo.

A mí me daban problemas de compatibilidad estas librerías con el compilador que trae el SDK oficial, así que ahora uso el SDK de Codeblocks (http://www.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,2295) para gp2x, que viene con las librerías optimizadas y soporte para todo tipo de archivos de música. La diferencia de rendimiento comparado con las originales es impresionante...

:lovegp2x:

Pues como me recomiendas, me he bajado el Codeblocks y estoy jugando con el, ya me he encontrato la primera pega :( no tengo ni idea de como decirle a Codeblocks que compile en C++ ya que en el codigo que tengo estoy utilizando poliformismo y ahora mismo no puedo compilar nada de nada :(

sabes donde se cambia esto? (estoy utilizando la plantilla que viene por defecto) he mirado las opciones de compilacion y no se ver donde cambiarlo :(

No se si os servirá de algo, pero hace como N meses donde N > 6 que hice un mixer para minimal library que reproducía exclusivamente OGG a 44100 HZ (falta resampling). Además no está acabado ni de documentar ni de debuggear, pero como llevo como un porrón de meses sin tocarlo, como quien no quiere la cosa yo lo digo, lo pongo aquí y dependiendo del interés por este de la gente quizás lo termine.

Saludetes.

PD: Consume relativamente poco, al tener fijado los HZ de los OGGs. Probado con Minlib 0.B


Mirare de probarla :) gracias!

hardyx
11/08/2008, 10:07
Para compilar en c++, creo que poniendo el c&#243;digo en ficheros .cpp en vez de .c ya te lo detecta el compilador. Para compilar c++ se usa el comando g++ en vez de gcc. Adem&#225;s le tienes que a&#241;adir la librer&#237;a -lstdc++ en las opciones si no la tiene. Ahora no lo tengo delante, pero code::Blocks tiene un asistente para crear proyectos c++ y te crea autom&#225;ticamente todo, luego le a&#241;ades los ficheros y a compilar...

Aqui tienes un mini tutorial (http://iie.fing.edu.uy/&#37;7Evagonbar/gcc-make/gcc.htm) de gcc en espa&#241;ol.

Te doy un truco para depurar en la consola: Lanza el programa de esta manera y te crear&#225; ficheros de texto con los mensajes.
./programa.gpe > output.txt 2> error.txt

cybernoid
11/08/2008, 22:10
Para compilar en c++, creo que poniendo el código en ficheros .cpp en vez de .c ya te lo detecta el compilador. Para compilar c++ se usa el comando g++ en vez de gcc. Además le tienes que añadir la librería -lstdc++ en las opciones si no la tiene. Ahora no lo tengo delante, pero code::Blocks tiene un asistente para crear proyectos c++ y te crea automáticamente todo, luego le añades los ficheros y a compilar...

Aqui tienes un mini tutorial (http://iie.fing.edu.uy/%7Evagonbar/gcc-make/gcc.htm) de gcc en español.


gracias por el tutorial :) desde luego , me hace falta empollarme algo así.

De momento he hecho una solución chapucera, he cambiado en Global settings gcc por g++ :) así las llamadas siempre se compilan en c++, por que cambiando la extensión ya lo había probado y nada :(

lo dicho, muchas gracias :)

en cuanto llegue a casa probare si el tema de los sonidos me funciona compilando con esta versión del sdk.

ya os contare.

< - >
bueno, ya he conseguido que suene el MOD.

El problema es que suena tan flojito que casi ni se oye, he provado a subir el volumen con Mix_VolumeMusic pero no hace absolutamente nada ...

se os ocurre que pueda probar algo?

lo mejor de todo es que en la f100 se escucha bien :(, ¡¡¡dios!!!!, es para volverse loco...

Puck2099
11/08/2008, 22:55
El problema es que suena tan flojito que casi ni se oye, he provado a subir el volumen con Mix_VolumeMusic pero no hace absolutamente nada ...

Por SDL no se puede subir que yo sepa... Tendrás que tirar de los registros hardware de la consola, mira las minilib si solo quieres extraer esa parte del código.

hardyx
12/08/2008, 08:40
Siento llevarte la contraria Puck, pero en el port de xpired que usa &#250;nicamente SDL, se est&#225; cambiando el volumen con estas llamadas. Se usan valores de 0 a 128.

Mix_Volume(-1,sound_volume); // para el sonido
Mix_VolumeMusic(music_volume); // para la m&#250;sica

cybernoid
12/08/2008, 08:44
Siento llevarte la contraria Puck, pero en el port de xpired que usa únicamente SDL, se está cambiando el volumen con estas llamadas. Se usan valores de 0 a 128.

Mix_Volume(-1,sound_volume); // para el sonido
Mix_VolumeMusic(music_volume); // para la música

si, con esto ya he probado, en f100 funciona pero en f200 aunque lo pongas a 128 casi no se oye :(

mirare el tema de las minilib.

luego cuento algo :) (luego es a la noche cuando llegue a casa)

Puck2099
12/08/2008, 09:01
Siento llevarte la contraria Puck, pero en el port de xpired que usa únicamente SDL, se está cambiando el volumen con estas llamadas. Se usan valores de 0 a 128.

Mix_Volume(-1,sound_volume); // para el sonido
Mix_VolumeMusic(music_volume); // para la música

Joe, pues será con SDL nuevas, hace un par de años, cuando lo necesité yo, solo tiraba a través de minilib... :confused:

cybernoid
14/08/2008, 08:40
nada, no hay manera de que en f200 suene en condiciones el mod, incluso con el codigo de la minilib suena flojito flojito.

probare con mikmod a ver si hay suerte, ya os contare :(

hardyx
14/08/2008, 09:22
Haz una prueba, pasa el .mod a .ogg con el WinLame (http://winlame.sourceforge.net/index.php) y lo cargas en la consola a ver que tal va el sonido. A lo mejor es que no van muy bien los mod de sonido.

Por cierto, &#191;que versi&#243;n de firmware tienes? Es que despu&#233;s de la 4.0 bajaron el sonido, pero se tiene que oir bien.

cybernoid
14/08/2008, 20:44
Haz una prueba, pasa el .mod a .ogg con el WinLame (http://winlame.sourceforge.net/index.php) y lo cargas en la consola a ver que tal va el sonido. A lo mejor es que no van muy bien los mod de sonido.

Por cierto, ¿que versión de firmware tienes? Es que después de la 4.0 bajaron el sonido, pero se tiene que oir bien.

Cuando llegue a casa probare lo del WinLame, tengo la ultima versión, la actualice hace poco

< - >
nada, esto sigue sonando hiper flojo, en la f100 suena bien, sin ningun problema, pero en la f200 no hay manera, ni mod, ni ogg ni nada, todo suena flojo...


ya no se que mas hacer.

alguien tiene algun codigo en C+SDL que suene bien en la F200?

kennyspirit
15/08/2008, 12:06
sin mucho conocimiento del tema, (sobretodo porque a&#250;n no se sabe que en cierto proyecto quepa el sonido en memoria) &#191;por qu&#233; no le subes "manualmente" el volumen a todos los archivos desde PC lo m&#225;ximo posible sin que se distorsionen mucho y lo vuelves a probar? (es una soluci&#243;n cutre, pero si no hay m&#225;s remedio...)

cybernoid
15/08/2008, 13:39
sin mucho conocimiento del tema, (sobretodo porque aún no se sabe que en cierto proyecto quepa el sonido en memoria) ¿por qué no le subes "manualmente" el volumen a todos los archivos desde PC lo máximo posible sin que se distorsionen mucho y lo vuelves a probar? (es una solución cutre, pero si no hay más remedio...)


no creo que solucione nada con eso, no te puedes imaginar lo flojiiiitoo que suena, te dire que para escucharla tengo que ponerme la consola en la oreja (a modo de auricular) y entonces se oye superflojito el sonido sonando.

no entiendo nada... no se como esto no lo soluciona Gamepark en el sdk, me parece muy fuerte.

BuD
15/08/2008, 17:12
Cuando llegue a casa probare lo del WinLame, tengo la ultima versión, la actualice hace poco

< - >
nada, esto sigue sonando hiper flojo, en la f100 suena bien, sin ningun problema, pero en la f200 no hay manera, ni mod, ni ogg ni nada, todo suena flojo...


ya no se que mas hacer.

alguien tiene algun codigo en C+SDL que suene bien en la F200?

Has probado de compilar el tutorial 3 del mixer de la minimal library que puse en este thread? Debería funcionar, en mi GP2X F200 lo hace. Por si acaso, te lo compilo y te hago un ejecutable y lo pruebas a ver si te funciona a ti también.

BuD
15/08/2008, 17:21
Aquí tienes el binario. Lo he probado y funciona OK.

START (Salir de la aplicación)
+ / - (Subir / Bajar volumen)

hardyx
16/08/2008, 01:02
Prueba tambi&#233;n el sdltest (http://www.emuboards.com/guyfawkes/sdltest.htm) de guyfawkes. Es el programa est&#225;ndar para probar las funcionalidades de la SDL en la consola. Viene preparado para ejecutar con un .mod de ejemplo y el c&#243;digo fuente, y se tiene que oir por narices... (a m&#237; me funciona)

cybernoid
16/08/2008, 16:41
buenas,

la libreria de Bud suena a un volumen bastante bueno :D , el SDLtest suena flojo :( ...

en SDL ni con mod ni ogg ni wav ni nada, todo suena flojo.


hardyx lo has probado en una f200?

Bud, con tu libreria puedo hacer sonar wav o ogg a la vez que la musica?


pd. gracias a todos por la ayuda :)

< - >
a ver se me ha ocurrido probar con el Gmenu y desde alli lanzar el sdltest y asi si que funciona...

ahora si que estoy flipando...


alguna idea?

BuD
17/08/2008, 05:27
buenas,

la libreria de Bud suena a un volumen bastante bueno :D , el SDLtest suena flojo :( ...

en SDL ni con mod ni ogg ni wav ni nada, todo suena flojo.


hardyx lo has probado en una f200?

Bud, con tu libreria puedo hacer sonar wav o ogg a la vez que la musica?


pd. gracias a todos por la ayuda :)


Sí. Para reproducir sonidos, se explica en el tutorial 1 y 2. Falta un tutorial donde explicara como cargar tus propios formatos de audio. Esta en el "TO DO". xD



a ver se me ha ocurrido probar con el Gmenu y desde alli lanzar el sdltest y asi si que funciona...

ahora si que estoy flipando...


alguna idea?

Me da que SDL lo hace volumen por software de todas formas. Y GMenu lo que hace es poner el volumen del hardware a toda castaña, haciendo esto puedes "viajar por todo el espectro de posibilidades de volúmenes" vía volumen por software. xD

Es solo una teoría, nada mas. ;)

cybernoid
17/08/2008, 10:54
Me da que SDL lo hace volumen por software de todas formas. Y GMenu lo que hace es poner el volumen del hardware a toda castaña, haciendo esto puedes "viajar por todo el espectro de posibilidades de volúmenes" vía volumen por software. xD

Es solo una teoría, nada mas. ;)

Tendre de volver a probar a ver si con las minilib puedo subir el volumen :(

alguien tiene un codigo para subir el volumen por hard?

juanvvc
17/08/2008, 11:05
El volumen por hardware estar&#225; en las minilib, digo yo. Coge el c&#243;digo de cualquier juego o emulador liberado, que en todos funciona el sonido y el volumen :)

A todo esto no has comentado qu&#233; SDK est&#225;s usando, versi&#243;n de las SDL, si lincas din&#225;mica o est&#225;ticamente...No sea que el problema venga por aqu&#237;.

BuD
17/08/2008, 22:08
Tendre de volver a probar a ver si con las minilib puedo subir el volumen :(

alguien tiene un codigo para subir el volumen por hard?



#include <unistd.h>
#include <fcntl.h>

static unsigned long mixer_device = 0;
void volmanager_init()
{
if(!mixer_device) mixer_device = open("/dev/mixer", O_RDWR);
}

void volmanager_set(int L /*0..100*/, int R /*0..100*/)
{
if(!mixer_device) return;

L=(((L*0x50)/100)<<8)|((R*0x50)/100);
ioctl(mixer_device, SOUND_MIXER_WRITE_PCM, &L);
}

void volmanager_quit()
{
close(mixer_device);
}

Recien sacado del horno. Este c&#243;digo deber&#237;a ser capaz de cambiar el volumen por hardware. Puedes cambiar el volumen de ambos altavoces de forma independiente y tienes que pasar un valor de 0 a 100.

EDIT1: Me faltan includes, tanto para el ioctl como para la constante SOUND_MIXER_WRITE_PCM, creo que faltan estos dos includes.

#include <sys/ioctl.h>
#include <sys/soundcard.h>

miq01
18/08/2008, 03:52
Cybernoid, yo tambi&#233;n hace un mont&#243;n que no toco la consola as&#237; que no te puedo echar una mano. Yo mods no reproduc&#237;a, pero WAVs y OGGs s&#237;. Si quieres te busco el comando que utilizaba para compilar. O mejor (y as&#237; me lo ahorro :D) &#233;chale t&#250; mismo un vistazo al Makefile del c&#243;digo fuente de Beat2X (http://www.gp32spain.com/foros/downloads.php?do=file&id=493). Claro que yo ten&#237;a la primera versi&#243;n de GP2X...


Joe, pues ser&#225; con SDL nuevas, hace un par de a&#241;os, cuando lo necesit&#233; yo, solo tiraba a trav&#233;s de minilib... :confused:
Pues yo estoy casi seguro al 100&#37; de que cambiaba el volumen a trav&#233;s de SDL en Beat2X, y de eso har&#225; ya 2 a&#241;os y pico. ***** c&#243;mo pasa el tiempo... [Ahhh]


Saludetes.
Hola BuD. :D

cybernoid
18/08/2008, 08:40
Cybernoid, yo también hace un montón que no toco la consola así que no te puedo echar una mano. Yo mods no reproducía, pero WAVs y OGGs sí. Si quieres te busco el comando que utilizaba para compilar. O mejor (y así me lo ahorro :D) échale tú mismo un vistazo al Makefile del código fuente de Beat2X (http://www.gp32spain.com/foros/downloads.php?do=file&id=493). Claro que yo tenía la primera versión de GP2X...


Pues yo estoy casi seguro al 100% de que cambiaba el volumen a través de SDL en Beat2X, y de eso hará ya 2 años y pico. ***** cómo pasa el tiempo... [Ahhh]


Hola BuD. :D

le pegare un vistazo, pero el problema no lo tengo con la f100, con la f100 chuta perfecto, el problema es al ponerlo en la f200

< - >


#include <unistd.h>
#include <fcntl.h>

static unsigned long mixer_device = 0;
void volmanager_init()
{
if(!mixer_device) mixer_device = open("/dev/mixer", O_RDWR);
}

void volmanager_set(int L /*0..100*/, int R /*0..100*/)
{
if(!mixer_device) return;

L=(((L*0x50)/100)<<8)|((R*0x50)/100);
ioctl(mixer_device, SOUND_MIXER_WRITE_PCM, &L);
}

void volmanager_quit()
{
close(mixer_device);
}

Recien sacado del horno. Este código debería ser capaz de cambiar el volumen por hardware. Puedes cambiar el volumen de ambos altavoces de forma independiente y tienes que pasar un valor de 0 a 100.

EDIT1: Me faltan includes, tanto para el ioctl como para la constante SOUND_MIXER_WRITE_PCM, creo que faltan estos dos includes.

#include <sys/ioctl.h>
#include <sys/soundcard.h>


gracias :)

en cuanto llegue a casa lo pruebo :)

< - >

El volumen por hardware estará en las minilib, digo yo. Coge el código de cualquier juego o emulador liberado, que en todos funciona el sonido y el volumen :)

A todo esto no has comentado qué SDK estás usando, versión de las SDL, si lincas dinámica o estáticamente...No sea que el problema venga por aquí.

estoy usando el devkitgp2x que viene con el Kit del codeblocks preparado para gp2x

la compilacion debe ser estatica por que con el SDK oficial no suenan los MOD.

< - >

<object width="425" height="344"><param name="movie" value="<A href="http://www.youtube.com/v/gl5M9_Ad26g&hl=en&fs=1"></param><param">http://www.youtube.com/v/gl5M9_Ad26g&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param></object>

¿ein?:confused:

BuD
18/08/2008, 10:30
Hola BuD. :D Hola Soler. :D


en cuanto llegue a casa lo pruebo :)

Uhm, he hecho un .h y un .c para comodidad de la gente. Ea aquí un código que usa este .h y .c


#include "volman.h"

int main(int argc, char **argv)
{
//INITS como SDL_Init(......);
//Y ahora tocaría inicializar el volume manager
volmanager_init();

int NoMePiro = 1;
int vol = 100;
//Aquí reside la magia.
volmanager_set(vol, vol);

//MAIN LOOP
while(NoMePiro)
{
//INPUT
if(input[vol_up])
{
vol += 10;
if (vol > 100) vol = 100;
volmanager_set(vol, vol);
}
if(input[vol_down])
{
vol -= 10;
if (vol < 0) vol = 0;
volmanager_set(vol, vol);
}

//CODIGO BLAH BLAH
// BLAH BLAH BLAH
}

//DEINITS como SDL_QUIT()
volmanager_quit();

}

Es un poco pseudo-codigo, por supuesto no compila, pero solo te tienes que fijar en las llamadas a las funciones "volmanager_XXXXX()" y usarlas en tu código. Como podrás ver es una tontería.

hardyx
18/08/2008, 11:57
Gracias Bud por la clase y el ejemplo del volmanager. Podr&#237;a ser que en el &#250;ltimo firmware hayan bajado el volumen hardware. Pero en mi F200 con firmware 4.1.0 se oye bien. Tendr&#233; que hacer m&#225;s pruebas.

cybernoid
18/08/2008, 20:49
Es un poco pseudo-codigo, por supuesto no compila, pero solo te tienes que fijar en las llamadas a las funciones "volmanager_XXXXX()" y usarlas en tu código. Como podrás ver es una tontería.
gracias :)



Gracias Bud por la clase y el ejemplo del volmanager. Podría ser que en el último firmware hayan bajado el volumen hardware. Pero en mi F200 con firmware 4.1.0 se oye bien. Tendré que hacer más pruebas.

hardyx me puedes pasar algun compilado tuyo para probarlo en mi consola?

asi saldremos de dudas.

< - >
bueno chicos,

esto ya esta funcionando :)

suena como dios manda (por fiiiin!!!)

gracias a todos [wei6]

BuD
19/08/2008, 01:09
bueno chicos,

esto ya esta funcionando :)

suena como dios manda (por fiiiin!!!)

gracias a todos [wei6]

Un placer. :brindis: Al final te sirvió mi código?

cybernoid
19/08/2008, 08:40
Un placer. :brindis: Al final te sirvió mi código?

si, es el que uso actualmente :) :brindis:[wei2]

se agradece la ayuda de todos, puedo asegurar que empezaba a desesperarme xD

hardyx
19/08/2008, 11:30
El sdltest del enlace que te puse vienen compilado y a m&#237; me funciona el sonido. Puedes bajarte mi port de xpired (http://www.gp32spain.com/foros/downloads.php?do=file&id=2004) que usa s&#243;lo SDL a ver que tal se te oye. Tiene control de volumen por software y creo que a todos se le oye bien. Aunque podr&#237;a ser que las librer&#237;as SDL de paeryn (optimizadas) suban el volumen hardware al iniciarse...