30 septiembre 2011

Sonidos y Visual Basic

20091123-musicaAlgo que es indispensable para muchos programas (especialmente si estamos programando un videojuego) es el sonido.  Imagínate estar jugando Lego Star Wars sin el sonido de la respiración de Darth Vader, el sonido de los light sabers, el ruidito que hace R2D2 o la música de la marcha imperial.  Hay miles de estudios que muestran que el sonido afecta nuestra percepción, estado de ánimo, etc. y es muy aprovechado por el cine, TV, etc. para transmitir drama, suspenso, etc.  En conclusión: habrán momentos en que necesitamos que nuestros programas incluyan audio.  Pero, ¿cómo le hago?  Eso precisamente es de lo que voy a hablar en este post.

Para cosas sencillas Visual Basic .NET cuenta con la clase System.Media.SoundPlayer.  Es limitado y no tiene muchas funciones, pero para efectos de tocar un WAV, basta y sobra.  Tal vez pienses que con la popularidad que tiene el formato MP3 estos archivos ya no se usan, pero generalmente todos los efectos especiales que puedes descargar en línea están en este formato.  Así que es una clase muy útil.

Lo primero que se tiene que hacer es declarar un objeto:

Dim sonidito As System.Media.SoundPlayer

Si al principio del código agregamos System.Media (con la instrucción Imports), podemos escribir simplemente SoundPlayer.  Tiene dos constructores: con uno podemos cargar el archivo WAV directamente:

sonidito=New SoundPlayer(“sonido.wav”)

O bien, puedo usar el constructor default (sin parámetros) y usar las propiedades SoundLocation para definir el archivo y Load para cargarlo a la memoria:

sonidito=New SoundPlayer()
sonidito.SoundLocation(“sonido.wav”)
sonidito.Load()

NOTA: si de plano el archivo WAV es demasiado grande y dura unos segundo en cargar, puedes usar la función SoundPlayer.LoadAsync para cargar el sonido y SoundPlayer.IsLoadComplete para saber si ya terminó de cargar a la memoria.  Esto es útil porque si tu programa tarda unos segundos en cargar el sonido, es probable que el usuario piense que el programa dejó de responder y lo cierre.

Para que comiencen a sonar las bocinas con tu WAV, solo basta usar la función Play()para que se escuche:

sonidito.Play()

¿Qué sucedería si alguien elimina el archivo WAV de la carpeta donde lo necesitas?  Como te imaginarás, deja de funcionar.  Una forma de evitar esto es incluir el archivo WAV como parte del proyecto, es decir, que sea un recurso del programa.  Antes que nada, hay que incluir un archivo de recurso al proyecto.  En el proyecto, elige del menú Project la opción Add new item.  Aparece la siguiente ventana:

00-VentanaAddNew

En esta ventana, selecciona la opción Resources File (está en esta ventana o en el grupo General [los grupos están de lado izquierdo]).  Después de esto, se agrega un archivo llamado Resources1.resx al proyecto (a menos que le hayas cambiado el nombre).  Debería abrirse en automático.  Si no , haz doble clic sobre el archivo en la ventana de la solución.  Haz clic sobre el tipo de recurso (ahorita dice Strings) y selecciona Audio.  Después haz clic en Add Resource, Add Existing File y selecciona el archivo WAV que quieres incluir.  Aquí se ven las opciones:

01-AgregarRecursoAudio
02-AgregarRecursoAudio
     

Nota: para ahorrarte esto, podrías simplemente arrastrar un archivo WAV desde Windows hasta esta ventana.

Una vez agregado el recurso, es hora de echarlo a andar.  Tomando en cuenta que mi recurso (otro archivo WAV) se llama Sonidito2 y que al principio importé Microsoft.VisualBasic para no escribir tanto, el código quedaría así:

Dim sonidito2 As Devices.Audio
sonidito2 = New Devices.Audio
sonidito2.Play(My.Resources.Resource1.Sonidito2,AudioPlayMode.Background)

Aunque estos dos objetos nos dejan escuchar sonido, son medios limitados.  En un futuro post trataré del uso de Windows Media Player en Visual Basic .net (particularmente en la versión 2010).  ¡Hasta la próxima!

P.D. Imagen de la música con ecuaciones tomada del blog de The All-Knowing 4.  Las demás imágenes las hice yo.  Parte del material aquí expuesto viene del libro Visual Basic Game Programming for Teens.

26 septiembre 2011

El Rap del Photoshop, parte II

No es que yo sea muy fan del rap, pero hace tiempo incursioné en el género como una idea de mis alumnos y lo aproveché para explicar los conceptos básicos de la programación orientada a objetos en C++ (tanto la letra y música como en video).  Luego me topé con un rap tutorial de Photoshop y hoy vi la segunda parte que les comparto.  Parece broma, pero explica bastante bien lo de los canales de color.  ¡Que lo disfruten!

Originalmente es de CollegeHumor, pero yo lo vi en el blog de MakeUseOf.

21 septiembre 2011

Teclado verde

solarkeyboard

Hace rato vi en el blog de Lifehacker este teclado que me parece una idea eco-maravillosa.  Se trata el teclado Logitech Wireless Keyboard K750 y es un teclado inalámbrico que no usa pilas AA sino que tiene dos paneles solares que lo cargan.  Supuestamente si lo dejas cargado, puede pasar un mes funcionando sin problemas hasta volverlo a cargar.  También tiene una aplicación que monitorea como se está cargando para que puedas jugar un poco con las posiciones de tu lámpara o lo que sea que esté iluminando el teclado para conseguir la recarga más rápida.  Buena idea: comodidad, tecnología y ecológico.

A ver cuando me compro uno Sonrisa.

20 septiembre 2011

Apple, desde sus inicios (infografía)

Ayer vi en el blog de conecti.ca una infografía que resume la historia de Apple, misma que comparto con ustedes (haz clic sobre la imagen para verlo en grande en otra ventana/pestaña).  Se me hizo interesante y espero que les sea informativa.

history_of_apple-1000px

13 septiembre 2011

Historia de la PC

Parece que ando haciendo un blog de historia de las computadoras, pero últimamente me he topado con historias en imágenes que se me han hecho muy interesantes.  Por ejemplo, hoy me encontré con esta imagen en el blog de conecti.ca que muestra como ha evolucionado la computadora PC.  Aunque faltan muchos pormenores, de todos modos es un buen resumen de la historia de este aparatejo que ha cambiado la faz del mundo (bueno, exageré… pero de todos modos sí ha cambiado nuestra forma de jugar, trabajar, investigar, comunicarnos, dibujar y diseñar, y otras mil cosas que terminan con ar).

Una de las cosas que me parece novedoso en comparación a otras historias, pone el precio de las computadoras en dólares actuales.  HAz clic sobre la imagen para verlo en tamaño natural en otra ventana.

Espero que les sea ilustrativo Sonrisa

11 septiembre 2011

Evolución de las Supercomputadoras

supercomputersHace rato vi en el blog de MakeUseOf una imagen interesante que muestra la forma en que han evolucionado las supercomputadoras.  Se me hizo muy interesante, sobre todo para comprender mejor la historia de la computación.

Aquí les comparto la imagen (haz clic sobre él para que se vea más grande Lengua fuera).

¡Espero que les guste!

07 septiembre 2011

Heroes of Newerth: Un juego multijugador de estrategia en línea

intro15Hace rato en el blog de MakeUseOf me encontré con un nuevo juego que parece estar muy interesante.  Es un juego de estrategia en tiempo real basado en WarCraft, multijugador y funciona tanto en Windows, MacOX y Linux.  Originalmente era software comercial (tenías que comprarlo), pero ahora ya es gratuito.

En este videojuego los jugadores se dividen en 2 equipos: Legion ó Hellbourne que están ubicados en lados opuestos de un mapa similar a los que hay en la versión original de Warcraft donde cada equipo debe defender una base para no perder.

Puedes descargar el juego aquí.  Dependiendo de la versión que bajes, pero generalmente las descargas están alrededor de 600 Mb.  ¡Que se diviertan!

05 septiembre 2011

Vectores, iteradores y STL…

C  Hace unos días escribí acerca del uso del contenedor vector para poder manejar una lista en C++.  Aunque el vector es muy útil, resulta más interesante y de mayor utilidad si agregamos el uso de iteradores (iterators).  Los iteradores (no sé si esa sea la traducción correcta, pero es lo que más “le suena”) son importantes porque nos permiten accesar de forma fácil a los elementos del contenedor (en este caso un vector), algo así como los apuntadores, solo que más sencillos de manejar y menos susceptibles a errores por parte del programador.  También es importante saber usarlos porque son necesarios para poder usar una serie de algoritmos que ya están programados en la STL y que toman iteradores como parámetros.
Pero, como dijo Jack el destripador: “vámonos por partes”.  Primero voy a decir cómo declarar un iterador, luego como recorrer el vector usándolo, luego funciones que pueden ser de utilidad.

Declarando un iterador

No hay que incluir ninguna librería nueva porque el vector ya lo contiene.  Para declarar uno, la sintaxis sería la siguiente:
vector<tipo>::iterator nombre;
por ejemplo
vector<string>::iterator miIterador;
declara un iterador a un vector de elementos que son de tipo string llamado miIterador.  También es posible declarar iteradores constantes, es decir, que no pueden cambiar de valor.  Esto se haría así:
vector<string>::const_iterator it;
Este ejemplo declara un iterador constante llamado it.

Recorriendo el vector

Si recuerdas en el programa anterior (y si no recuerdas, lee el post anterior que es vital para entender este rollo) podía recorrer el vector manejándolo como si fuera un arreglo.  El código que cumplía tal fin era este (suponiendo que inventario es un vector):
for (unsigned int i = 0; i < inventario.size(); ++i) {
    cout << inventario[i] << endl;
}

Esto está bien, pero con un iterador, puedo hacerlo de la siguiente manera (suponiendo que it es un iterador):
for (it = inventario.begin(); it != inventario.end(); ++it) {
    cout << *it << endl;
}

Fíjate en el operador * que funciona igual que con los apuntadores.

Modificando elementos del vector

También es posible cambiar un elemento del vector.  Supongamos que quiero cambiar lo que tengo de inventario en el primer elemento.  Esto lo podría hacer posicionando el iterador en el primer elemento y usar la notación * para cambiar el valor.  Claro que si quieres cambiar otro elemento, lo tienes que encontrar primero.
it = inventario.begin();
*it = “Guadaña”;

Funciones y elementos del vector

Es posible hacerlo con la misma notación que los apuntadores.  Es decir, si quiero saber el número de elementos del vector inventario puedo hacerlo de cualquiera de estas maneras: (*it).size() o it->size()

Insertando elementos en cualquier posición

Para esto me sirve la función insert.  Supongamos que quiero poner antes del primer elemento un objeto que acabo de encontrar.  Entonces haría lo siguiente:
inventario.insert(inventario.begin(), "Botella llena de Curare");
Claro que si lo quieres insertar en otro lugar, solo posiciona un iterador en el lugar en donde quieres insertarlo y escribe eso en lugar del inventario.begin().

Eliminando cualquier elemento

El contenedor vector tiene la función pop_back para eliminar el último elemento, pero nada más.  ¿Y si quiero eliminar lo que tengo en la posición 3 de mi inventario?  Con iteradores puedo hacerlo de la siguiente manera:
inventario.erase((inventario.begin() + 2));

Y para terminar, referencias y atracciones futuras

Con esto más o menos cubrí lo que puedes hacer con un iterador con el contenedor vector.  Faltaría ver como usar algoritmos de la STL para hacernos la vida todavía más sencilla porque puedo aprovechar funciones ya creadas para ordenar, mezclar, etc.
Para crear este artículo, me basé en el mismo libro de la vez anterior (vuelvo a poner la referencia abajo) y la imagen del C++ chuvidubis es cortesía del blog de Etienne GT.  ¡Hasta la próxima!

02 septiembre 2011

Videojuegos y educación. Explorando aprendizaje entre adolescentes.

wa3ftLes anuncio a todos que por fin voy a terminar mi maestría.  Si, entré en agosto del 2005 y mi última materia fue a principios de este año, es decir que una maestría que generalmente se hace en 2 años yo lo hice en 5.5 años.  Mi examen recepcional será el lunes 3/Oct a las 12:30pm en la sala B del edificio R (el administrativo) del ITESO.  Para que se vayan dando cuenta de lo que se va a tratar, te dejo este avance cinematográfico de mi tesis.

Si puedes, allá nos veremos.  Hasta habrá un poco de vino tinto para brindar al terminar.  Si me dan el título de maestro, brindamos por eso y si no, por lo menos con el alcohol se nos olvida un poco Risa.

Avance cinematográfico de mi Tesis :)

01 septiembre 2011

El número de videojuegos para móviles

Ayer vi en el blog de Conecti.ca me topé con esta infografía que me parece muy interesante.  Se trata de la forma en que está actualmente el mercado de los videojuegos para dispositivos móviles (concretamente celulares, nada del DS, 3DS, PSP, ni de otras consolas de videojuegos portátiles).

La imagen original salió en DailyMobile.  Puedes hacer clic sobre la imagen para verlo en grandote en otra ventana o pestaña Sonrisa.

¡Se divierten (y si es con un juego en dispositivo móvil, mejor tantito)!

Related Posts Plugin for WordPress, Blogger...