Curso de Programación

1, 2, 3
SuperBerny escribió:Bueno, espero no ser baneado por doble post, pero hace muchos dias que pregunte y nadie a respuesto aun.
Realmente no hay nadie (aparte del MAESTRO) al que le interesen estos temas?

Pues amí si Super, pero estoy empezando y solamente estoy al margen de los post que publicais.
Además, no nos conocemos? [sati]
Buenas, aqui probando para hacer 4 cosillas... me encuentro con esto:

bonus@asdfg:/opt/devkitpro/examples_hermes/example1$ make
main.c
/opt/devkitpro/devkitPPC/bin/powerpc-gekko-gcc: 1: Syntax error: "(" unexpected
make[1]: *** [main.o] Error 2
make: *** [build] Error 2


estoy con ubuntu 9.10, los export son correctos y apuntan donde deben... pero... es el ejemplo1 (de hecho el error lo da en todo) y el devkit es el r17

edito:

Creo que lo tengo... x86_64... no hay para 32bits en linux??? :S

Tendre que usar virtualbox... :S
Segun la salida del compilador tienes un error de sintaxis en la primera linea del main.c, algo sobre un parentesis inexperado. ¿Podrias copiarnos las 3 o 4 primeras lineas del main.c?
SuperBerny escribió:
Por otro lado estoy intendo crea un clon del popular juego Pong, ya lo tengo casi listo pero me falta añadirle sonido (una especie de beep cuando la bola rebota). He copiado esta parte del codigo de uLoader para generar el patron de sonido:
// sound pattern generator
      for(n=0;n<2;n++)
      {
      int m,l;
      switch(n)
         {
         case 0:
            l=64;
            for(m=0;m<2048;m++)
             {
              sound_effects[0][m]=((m) & l) ? 127 : -128;
             if((m & 255)==0) l>>=1; if(l<16) l=16;
             }
         break;

         case 1:
            l=127;
            for(m=0;m<2048;m++)
             {
              sound_effects[1][m]=((m) & 8) ? l : -l;
             if((m & 7)==0) l--; if(l<0) l=0;
             }
         break;

         }
      }

pero me gustaria saber que es lo q estoy haciendo realmente.
Donde puedo encontrar mas informacion sobre esto?
Existe alguna utilidad similar al SpriteGen pero para crear efectos de sonido?

EDITO: Bueno, pues ya he descifrado los patrones creados por el codigo los podeis ver en forma de grafica en este excel. Aun asi sigo con las mismas dudas que antes ¿como afecta un patro u otro al sonido?


Jejeje, eso es un generador de patrón de sonido al voleo, sin ajustar nada, salvo de oído.

Siento no haberte leído antes pero la verdad, es que no me paso por aquí hace mucho [+risas]

Si quieres te explico un poco sobre la generación de sonido en sí, que sobre esa rutina guarra-salchichera improvisada XD.

Bueno, allá voy:

El sonido se compone de una onda o serie de ondas a cierta frecuencia-as. La onda puede tener una determinada forma y en electrónica es corriente hablar de onda cuadrada, triangular o sinusoidal debido a como se representan gráficamente.

Las tarjetas de sonido y en este caso, el hardware de la Wii, utiliza un sistema de codificación de samples llamado PCM.

El PCM consiste en un numero que se traduce en una tensión de salida hacia al altavoz mediante un conversor digital a analógico.

Así pues, si tenemos un sample de 16 bits, tenemos un rango de -32768 - 0 - 32767 para representar el pico negativo, cero voltios y el pico positivo de la señal analógica. Lo mismo ocurriría a 8 bits, con -128 - 0 - 127. Básicamente el sample así codificado, establece la altura de la señal si la estuviéramos representando gráficamente.

Al mismo tiempo, tenemos un parámetro que se llama "sample rate", que basicamente es la "velocidad" a la que se irán interpretando los samples en formato PCM para producir sonido.

El sample rate del hardware de Wii está en 48 Khz, lo cual equivale a reproducir 48000 samples por segundo, pudiéndose utilizar otros sample rates mediante la asndlib utilizando un método de ensanchamiento o encogimiento de la señal, que básicamente consiste en suprimir samples o replicarlos, para adaptarlo a los 48Khz finales.

Por tanto, si quisiéramos representar un sonido en pantalla, tendríamos que el nivel del sample, establece la altura y el sample rate, se representaría horizontalmente.

Si quisiéramos representar una señal cuadrada a una determinada frecuencia, lo que habría que hacer es fijar un nivel positivo durante una serie de samples y luego fijar un nivel negativo por otra serie de samples. El número de samples a mantener el pico, vendría determinado por el sample rate de la señal, la frecuencia que queramos obtener, dividido entre dos para cada uno de los ciclos positivo y negativo.

Por ejemplo, si tenemos 48000 Hz de sample rate y queremos obtener una señal cuadrada de 500Hz, deberíamos dividir 48000/(500*2), lo cual nos daría que habría que generar 48 samples positivos (a 8 bits el maximo sería 127) y 48 samples negativos (a 8 bits el máximo sería -128) de forma cíclica para obtener dicha señal. Como veis el sistema es sencillo, en el caso de la onda cuadrada, aunque también es fácil de adivinar que un sample rate de 48Khz no es demasiado preciso para representar fielmente frecuencias altas.

Con 48Khz de sample rate, la máxima frecuencia representable serían 24Khz, puesto que para representar una señal necesitas un pico alto y otro bajo como mínimo y por tanto se necesitan dos samples para 24Khz (no tienen los picos porque estar por encima o por debajo de cero obligatoriamente, aunque se supone que una señal pura (sin componente continua o mezclada con otra seña) si debería representarse así). Una señal de 1Hz (inaudible), precisaría 24 mil samples positivos y otros 24 mil negativos

La señal cuadrada es un poco "dura" para el oído así que es mas corriente usar una señal sinusoidal. La función seno te puede ayudar a obtener esta característica forma. Por ejemplo en el caso de los 500Hz de antes, interpolando los valores de dicha función en 96 pasos (puesto que seno produce una curva positiva y luego una curva negativa, se obtendrían los samples necesarios dividiendo 48000/500= 96) desde 0 a 2*pi y multiplicando el valor por el "volumen" (de 0 a 127 para 8 bits o de 0 a 32767 para 16) de la onda.

Con estos sistemas obtenemos señales demasiado puras para el oído y tal vez queramos enriquecer el sonido. Una forma de hacerlo es mezclando diferentes ondas con frecuencias armónicas de igual forma que cuando en un teclado, en vez de pulsar la nota do, la combinamos con otras notas para obtener un acorde.

También nos puede interesar crear un efecto de reverberación (con retardar una señal unos 20 ms vale, o sea, que la señal volvería a empezar a esa distancia) o de eco. Incluso tal vez establecer efectos de ataque (haciendo que durante un tiempo, el "volumen" del sample se multiplique por una valor que crece de 0 a X y dividiéndolo después entre X) sostenimiento (lo dejamos tal cual) caída (parecido al ataque, solo que al revés, iríamos de X a 0, dividiendo el resultado entre X). Por cierto, cuidado al operar con enteros con no desbordar el resultado de las operaciones y evidentemente, todas las cifras de tiempo, habrá que traducirlas a samples (si sample rate 48Khz -> 48000 samples = 1 segundo luego 20 ms = 48000* 0.020 seg= 960 samples. Nuestra X podria ser 960 si por ejemplo, queremos hacer un decay de 20 ms)

Y bueno, ya solo queda mencionar la mezcla: el mezclado de dos samples consiste en sumar ambos valores y luego comprobar si excede de los límites y en caso afirmativo, ajustarlo al valor máximo de pico

Por ejemplo, si tenemos dos samples de 8 bits, uno con el valor 100 y otro con el valor 60, al sumarlos, excederán de 127, que es el valor máximo con signo que podemos almacenar con 8 bits. Por tanto, el resultado abría que ajustarlo a 127 como mucho. Esto provocaría un recorte de la señal, obviamente, provocando una distorsión de sonido... pero es la forma de hacerlo.

Por cierto, estamos hablando de señales monofónicas. Si la señal fuera estereofónica, habría que tener en cuenta que lo normal es que los samples izquierdo y derecho vayan intercalados corrientemente así: IDIDIDID... así pues, se necesitarían 96000 samples para 48Khz al tratarse de dos canales y habría que tener en cuenta ese entrelazamiento de los samples. (por cierto en Wii, si usais la DMA los samples se almacenan como DIDIDI... posiblemente porque se lean los samples como un dato de 32 bits big endian en el hardware)

Ya que estamos y como última cuestión, está el tema de adaptar el sample rate. Por ejemplo, si tengo un mp3 que se reproduce a 44100Hz, el sample rate es 44100, pero el hardware de la Wii lo hace a 48000.

¿Como podría adaptarlo? Pues parece obvio que hay que estirar la señal de alguna manera. La forma de hacerlo sería establecer una relación entre los dos sample rates de forma que tendríamos un contador que contaría de uno en uno para copiar el valor actual de la tabla que contiene los samples de 44100 a 48000. Sin embargo, solo se avanzaría al siguiente valor de la tabla de 44100 si al acumular 44100 en un contador rebasara o fuera igual al valor 48000, haciendo despues el ajuste pertinente del acumulador para que almacenase solo el valor que rebase.

Sería algo así:

void convertir_44100_a_48100(short *tab44100, short *tab48000, int numsamples)
{
int n;
int a=0,b=0,c=0;

// convertidor estéreo
for(n=0;n<numsamples;n++)
{
tab48000[a]=tab44100[b];
tab48000[a+1]=tab44100[b+1];

a+=2; // incrementamos dos samples

c+=44100;
if(c>=48000) {c-=48000; /* corrección de acumulador*/ b+=2;}

}

}



Esta rutina tiene varios inconvenientes:

- El primero es que está pensada solo para adaptar desde un sample rate menor o igual al que queremos convertir y por supuesto, en estereo.

- El segundo es que se limita a rellenar los "huecos" que resultan al estirar con el valor actual que señale la tabla de 44100hz, cuando sería mas correcto almacenar un valor interpolado (intermedio) entre el sample actual de la tabla 44100 y el siguiente para los "huecos". En el caso de 44100 a 48000, como solo vamos a encontrarnos un hueco cada cierto tiempo, bastaría con un solo valor intermedio, pero si estuviéramos convirtiendo un sample rate bastante inferior, habría un mayor número de huecos consecutivos y la rutina encargada de interpolar los valores, sería mas compleja (incluso se podría recurrir a otros algoritmos en lugar de usar una simple interpolación lineal)

- El tercero es que lo normal, es que el la "tabla" de 48Khz trabaje como un doble buffer en anillo y aquí estamos omitiendo algunos detalles necesarios.

Pero vamos, básicamente aquí tenéis todo lo necesario para trabajar y experimentar con el sonido, concentrado en un solo post [+risas]
SuperBerny escribió:Segun la salida del compilador tienes un error de sintaxis en la primera linea del main.c, algo sobre un parentesis inexperado. ¿Podrias copiarnos las 3 o 4 primeras lineas del main.c?


Lo se, pero es que ese error me lo da en cualquier cosa que intente compilar, todos los ejemplos que encuentro, codigo fuente, etc... la verdad es que resulta raro...
se puede compilar en mac??
Realmente increíble, aunque no entiendo nada, valla currada de trabajo Hermes.

Alucinado me dejas.

Gracias.
Buenas!

Saludos a todos, en especial a Hermes por este impresionante trabajo de recopilación y explicación; un 10 para tí, sí señor!

Tengo ganas de absorber todos estos conocimientos de programación en Wii para desarrollar un juego en el que aparece un tablero (tipo Oca, para que nos entendamos); hace tiempo aprendí los pilares de la programación en C pero tengo poca idea del uso de gràficos.

He ido leyendo todos los tutoriales pero tengo una duda inicial, ¿Que recomendaríais para programar un tablero con las piezas moviéndose por encima? ¿Dibujarlo y cargarlo como imagen png?, ¿Utilizar los sprites?... Si alguien pudiera darme algun pequeño consejo al respeto le estaría muy agradecido para al menos saber por donde empezar.

Muchas gracias!
Desarchivado a peticion de usuarios.
mm no tengo ni zorra de programar en C alguno me puede aconsejar por donde empezar? (no se si me puede faltar base para seguir este tuto)

otra cuestión puedo hacer cualquier cosa en Wii programando en C (para wii obviamente)?

espero que alguien me eche una mano un saludo
sephirot99 escribió:mm no tengo ni zorra de programar en C alguno me puede aconsejar por donde empezar? (no se si me puede faltar base para seguir este tuto)

otra cuestión puedo hacer cualquier cosa en Wii programando en C (para wii obviamente)?

espero que alguien me eche una mano un saludo


Hay mogollón de información; mis lugares de referencia son http://c.conclase.net/curso (en el que se imparte por el camino C++ también), cplusplus.net para alguna referencia, y las típicas guías de "Aprenda C / C++ como si estuviera en primero". Para empezar desde el principio, te recomiendo las últimas.

Con eso, y ganas, puedes empezar a hacerte un hueco :)
Buenísimos los tutos, son muy buenos, muchas gracias por acercárnoslos.
Una duda: se necesita la última versión de devkitpro o se necesita alguna que ya esté desfasada?
No sé si me expliqué bien...
Salu2
ola, a ver si me podeis exar una mano, necesito reproducir WAV, pero sin usar SDL_audio ni SDL_mixer, como lo hago? xd
Cuando descargo del DEvKitPro se queda pegado descargando y tira un error, lo he intentado de mil formas y no se deja descargar..quien me hecha una mano?

EDITO: ya lo solucione, hay que cerrar el Antivirus y Firewall y listo.

Por otro lado me gustaria que Hermes se asomara por este curso y nos diera una manita actualizandolo... ya que me interesa programar en la Wii..
MMM creo recordar que Hermes dejó la Scene de Wii y actualmente se esta dedicando a PS3.
Pregunta y aver si te podemos hechar una mano.
Hola Hermes, soy tu amigo, el tiempo largo ya fam, me encantaría aprender a crear software para juegos de vídeo, el amor a meterse con el desbloqueo y reparación. quería una ayuda de usted, y lo mejor para mí.
pontogames escribió:Hola Hermes, soy tu amigo, el tiempo largo ya fam, me encantaría aprender a crear software para juegos de vídeo, el amor a meterse con el desbloqueo y reparación. quería una ayuda de usted, y lo mejor para mí.

Yo no se Hermes, pero yo no he entendido nada del mensaje...
Felicidades por el curso
dark_on_5 está baneado por "saltarse baneo temporal con clon"
Hola, lo primero, este hilo sigue activo?

Segundo XD:

Tengo un programa muy cutre de test de botones, y tengo varios problemas.

1- Música
Se detiene cuando se acaba, o unos segundos antes. Quiero que se repita. La música está en formato mp3, y estoy usando la libreria de marioga.

2- Detección de movimiento del mando
Quiero que se puestren en la pantalla los valores de inclinación del mando, y por mucho que miro, no lo consigo.

3- Testo con fuentes.
En el post se habla de texturas, pero no tengo ni p*** idea XD Como podria poner fuentes? Porque un fondo currado con un texto con esa font y encima el fondo del texto es negro...

Gracias y espero las respuestas.
JairMercury escribió:Cuando descargo del DEvKitPro se queda pegado descargando y tira un error, lo he intentado de mil formas y no se deja descargar..quien me hecha una mano?

EDITO: ya lo solucione, hay que cerrar el Antivirus y Firewall y listo.

Por otro lado me gustaria que Hermes se asomara por este curso y nos diera una manita actualizandolo... ya que me interesa programar en la Wii..

Hola, yo tambien tenia el mismo problema. Este es probocado por el antivirus. Desconecta la proteccion a tiempo real y veras como lo consigues descargar todo e instalarlo. Si tienes el Nod32 desactiva la proteccion Antivirus y Antiespia.

Saludos.



EDITO: joer... me quede a medias leyendo tu post... jejejeje XD XD
Parece un poco rollo, aunque parece muy interesante.
Tremendamente fabuloso.

ESPECTACULAR!!! [plas] [plas]
Borrado ya que solucioné mis dudas en otra parte. Por cierto, no hay mucho movimiento en este hilo...
Tengo un problemilla al instalar el sdk en ubuntu, os cuento:

Tengo devkitpro y ppc instalado en la siguiente ruta:
usr/local/devkitPro
usr/local/devkitPro/devkitPPC

y uso las variables de entorno en...
alberto@alberto-desktop:~$ gksudo gedit /etc/environment

DEVKITPRO=/usr/local/devkitPro/
DEVKITPPC=/usr/local/devkitPro/devkitPPC
PATH=$PATH:/usr/local/devkitPro/devkitPPC/bin


y al intentar compilar me sale esto:
alberto@alberto-desktop:~$ cd /usr
alberto@alberto-desktop:/usr$ cd ./local
alberto@alberto-desktop:/usr/local$ cd ./devkitPro
alberto@alberto-desktop:/usr/local/devkitPro$ cd ./examples
alberto@alberto-desktop:/usr/local/devkitPro/examples$ cd ./wii
alberto@alberto-desktop:/usr/local/devkitPro/examples/wii$ cd ./template
alberto@alberto-desktop:/usr/local/devkitPro/examples/wii/template$ make
Makefile:10: /opt/devkitpro/devkitPPC/wii_rules: No existe el archivo o directorio
make: *** No hay ninguna regla para construir el objetivo `/opt/devkitpro/devkitPPC/wii_rules'.  Alto.
alberto@alberto-desktop:/usr/local/devkitPro/examples/wii/template$


La verdad es que no entiendo el porque, aver si alguien me puede orientar.
Comprueba el makefile (o postealo)
he conseguido reproducir tu mismo error comentando include $(DEVKITPPC)/wii_rules en el makefile
Bueno ya el error anterior lo solucione realizando una buena instalacion de devkitPPC y añadiendo correctamente las variables pero ahora me sale el siguiente error al compilar:

alberto@alberto-desktop:~$ cd /opt/devkitpro/examples/wii/template
alberto@alberto-desktop:/opt/devkitpro/examples/wii/template$ make
template.c
/opt/devkitpro/devkitPPC/bin/powerpc-eabi-gcc: 4: Syntax error: "(" unexpected
make[1]: *** [template.o] Error 2
make: *** [build] Error 2
alberto@alberto-desktop:/opt/devkitpro/examples/wii/template$


Es curioso ya que he seguido el tutorial de instalación de la web devkitpro así que no se porque me da el fallo.
http://devkitpro.org/wiki/Getting_Started/devkitPPC
Eso ya es un error de sintaxis en el archivo.. Coloca el archivo que estás intentando compilar.

Saludos!
Ya tengo echas mis dos primeras aplicaciones, un hola mundo y otra que cambia el color de la pantalla segun el boton que toques. Por algo se empieza [sonrisa]
Hola buenas noches,
Visto lo visto ya solo falta, al menos en caso mio, que nos enseñen a programar en assembler para wii, ya que toda mi experiencia de megadrive, nes, gp2x wiz, caanoo ha assembler que tengo algo de experiencia, también se del pentium.
Con assembler podría adaptar slackware para wii.
Y crear nuevos drivers.
Un curso de assembler please y aprovechar al máximo el potencial de wii.
Un cordial saludo.
cjv99.
Me parece interesante, aunque solo lo he mirado por encima. En cuanto termine un proyecto en android que me está llevando mucho más de lo que tenía previsto... quizás me anime con la wii.

un saludo y gracias por el curso.
Muy bueno el tutorial, vendrá bien para refrescar C que hace un tiempo que no lo toco ;)
Ohhh Hermes, que grande eres
En verdad no estoy usando el tuto de Hermes sino que ando intentando trastear con las GRRLIB; me salta el siguiente error tratando de compilar cualquiera de los ejemplos incluidos con la última versión de estas librerías:
linking ... 3D_sample4.elf
/opt/devkitpro/libogc/lib/wii/libogc.a(wiisd.o):(.rodata.__io_wiisd+0x0): multiple definition of `__io_wiisd'
/opt/devkitpro/libogc/lib/wii/libfat.a(wiisd.o):(.rodata.__io_wiisd+0x0): first defined here
/opt/devkitpro/libogc/lib/wii/libogc.a(usbstorage.o):(.data.__io_usbstorage+0x0): multiple definition of `__io_usbstorage'
/opt/devkitpro/libogc/lib/wii/libfat.a(usbstorage.o):(.rodata.__io_usbstorage+0x0): first defined here
/opt/devkitpro/libogc/lib/wii/libfat.a(partition.o): In function `_FAT_partition_getPartitionFromPath':
c:\devkitPro\libfat\libogc\wii_release/c:/devkitPro/libfat/libogc/../source/partition.c:445: undefined reference to `__ctype_ptr'
c:\devkitPro\libfat\libogc\wii_release/c:/devkitPro/libfat/libogc/../source/partition.c:445: undefined reference to `__ctype_ptr'
collect2: ld returned 1 exit status
make[1]: *** [/opt/devkitpro/examples/wii/GRRLIB/3D_sample4/3D_sample4.elf] Error 1
make: *** [build] Error 2

¿A alguien más le pasó y supo salir del atolladero?

(llevo eones sin programar)

*****************************

EDIT: ya he conseguido solucionar el problema bajando la última versión de libfat y sustituyendo los archivos anteriores :)
Alguien sabe donde puedo encontrar informacion de como acceder a la tarjeta wifi de la wii? si es que se puede claro está es que no he encontrado informacion de esto. Muchas gracias
(mensaje borrado)
Muy buena info, gracias
Buenos días.

Estoy montando un portal de cursos Online.

Si alguien esta interesado en dar algún curso de programación, Scene, Hackeo, etc por favor contacte conmigo en cristian@thecodeboys.com

Gracias.
Bueno, pues poco a poco y con paciencia habrá que empezar. Muchas gracias!!!!!
141 respuestas
1, 2, 3