Reproductor de archivos MP3 con Realbasic en macOS

Sencillo reproductor de audio MP3 realizado en Realbasic para Mac

«Realbasic es una herramienta de desarrollo visual de aplicaciones que utiliza el lenguaje BASIC, un lenguaje sencillo y directo. Sin embargo, no se trata del lenguaje BASIC tal y como se conocía en la década de 1980, sino que la implementación realizada por Real Software es la de un lenguaje BASIC moderno orientado a objetos, más parecido a lo que podemos conocer de otros lenguajes similares como puedan ser Visual Basic .NET o Delphi.

Cuando se crea un programa (ya sea en Realbasic para Linux, para Windows o para Mac) el mismo código fuente puede usarse tanto para compilar la aplicación para ser utilizada en macOS, Windows y Linux, ya que se puede compilar para las tres plataformas con sólo un clic (sin tener que migrar el código a otro lenguaje). Por ello podemos aprovechar esta herramienta para hacer aplicaciones multiplataforma» (Wikipedia).

Aunque en macOS el entorno de desarrollo más usado es Xcode y el lenguaje de programación específico es Objective-C, Real Software tiene un entorno para programar en Realbasic cuyas ventajas principales son:

  • sencillo de usar facilitando en gran medida la escritura de código
  • lenguaje que recuerda mucho a Visual Basic por lo que los programadores procedentes de Windows se adaptan muy deprisa
  • el mismo código puede ser compilado desde el IDE para Mac, Windows o Linux generando ejecutables diferentes para cada plataforma.

Como inconvenientes se pueden incluir lo poco que se parece a Objective-C y su menor potencia para determinadas tareas. Real Software ofrece una versión de prueba de 28 días plenamente funcional que puede servir para iniciarse en el lenguaje Realbasic. En este artículo se mostrará cómo programar un reproductor de audio muy sencillo como ejemplo básico para tomar contacto con este lenguaje. El ejercicio se basa en uno de los ejemplos instalados por Real Studio en la ruta
/Applications/Real Studio 2012/Example Projects/Graphics and Multimedia/Sound.

Puedes crear un proyecto nuevo o abrir el de ejemplo, que será ampliamente modificado. De cualquiera de las 2 maneras se diseña una ventana con 4 botones como la que muestra la imagen inicial y una etiqueta para mostrar mensajes de error o la canción que está sonando:

  • Abrir: abre un cuadro de diálogo que permite abrir un archivo MP3
  • Parar: detiene la reproducción actual
  • Reproducir: reinicia la reproducción detenida
  • Salir: cierra la aplicación.

(Ver los códigos al final del artículo)

Método GetSound()

Se crea un tipo de archivo dentro de la propia aplicación (busca la línea «Dim mp3Type as New FileType«) aunque no es imprescindible por tratarse de un tipo que ya existe en macOS pero sirve como aprendizaje para otros casos.

Hay un sencillo control de excepciones y errores mediante bucles If…Then para mostrar los mensajes en otro color en lugar del nombre de la canción:

Pero el control avanzado de excepciones se realiza con Try…Catch.

Método PlaySound()

Se limita a hacer sonar el archivo elegido si realmente hay alguno.

Ajustes de compilación

Aquí podemos elegir para qué plataformas queremos crear ejecutable y en el caso de macOS permite elegir entre Carbon (librería de clases más antiguas, de la transición de macOS 9 a X) y Cocoa (clases actuales que utiliza macOS).

Botones default y cancel en el formulario

Entre las propiedades de los botones de comando existen 2 llamadas default y cancel, sólo 1 botón puede tener asignado cada una de ellas de forma que el botón default se activa al pulsar la tecla INTRO y el botón default se activa al pulsar la tecla ESC. En este ejemplo he configurado el botón Abrir como default y el botón Salir como cancel.

Botón Abrir

'Si está sonando otra canción, pararla y dejar en blanco 'la etiqueta con el nombre de la canciónn y del artista If mSound <> Nil Then mSound.Stop lblNombre.Text = "" End If 'Método que permite elegir el archivo MP3 y reproducirlo GetSound
Lenguaje del código: PHP (php)


Método GetSound()

lblNombre.TextColor = &c000000 'etiqueta con letras de color negro lblNombre.Text = "" 'limpiar la etiqueta de texto '====================== 'Abrir cuadro de diálogoo para elegir un archivo MP3 Dim dialog As OpenDialog Dim soundFile As FolderItem Dim mp3Type as New FileType mp3Type.Name = "audio/mp3" mp3Type.MacType = "MP3" mp3Type.Extensions = "mp3;MP3" 'crear el diálogo (todavía no se muestra) dialog = New OpenDialog 'Filtrar archivos por extensiónn, se pueden definir tipos 'de archivos en la pestaña Proyecto con el menú Añadir 'Conjunto de tipos de archivos dialog.Filter = ".mp3" 'La clase OpenDialog permite personalizaciones… dialog.PromptText = "Selecciona archivo MP3..." dialog.Title = "Elegir archivo..." 'Mostrar diálogoo desplegable con dlg.showModalWithin(self) 'Mostrar diálogo modal con dlg.showModal soundFile = dialog.ShowModalWithin(self) 'Si se ha seleccionado algúnn archivo If dialog.Result<> Nil Then If soundFile <> Nil Then soundFile = GetFolderItem(soundFile.AbsolutePath) 'ruta al archivo elegido 'MsgBox(soundFile.Name) mSound = soundFile.OpenAsSound 'asignarlo a mSound lblNombre.Text = soundFile.Name 'mostrar nombre de canciónn PlaySound 'reproducir Else 'MsgBox("No encuentro el archivo " + soundFile.Name) lblNombre.TextColor = &cb22222 'letras de color magenta lblNombre.Text = "No encuentro el archivo " + soundFile.Name End If Else 'MsgBox "Error. ¿Has pulsado el botón Cancelar?" lblNombre.TextColor = &cb22222 'letras de color magenta lblNombre.Text = "Error. ¿Has pulsado el botón Cancelar?" End If
Lenguaje del código: PHP (php)


Método PlaySound()

'iniciar la reproducción If mSound <> Nil Then mSound.Play End If End Sub
Lenguaje del código: HTML, XML (xml)


Botón Parar

'Si no suena ninguna canción, no hacer nada If mSound <> Nil Then 'para la reproducción mSound.Stop End If
Lenguaje del código: HTML, XML (xml)


Botón Reproducir

'Si no suena ninguna canción, no hacer nada If mSound <> Nil Then 'iniciar la reproducción mSound.Play End If End Sub
Lenguaje del código: HTML, XML (xml)


Botón Salir

'cerrar el programa Quit()