Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ejecutar Un File Midi Con Las Funciones Externas Del API De SDL
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ejecutar Un File Midi Con Las Funciones Externas Del API De SDL 
 
Aquí está el código para ejecutar un archivo Midi con funciones externas del API de SDL.

Se necesita tener instalado el archivo soundfont de Timidity: "/usr/share/sounds/sf2/TimGM6mb.sf2", o aquello de Fluidsynth: "/usr/share/sounds/sf2/FluidR3_GM.sf2"

Private Const AUDIO_S16SYS As Integer = 32784
Private Const STEREO As Integer = 2


Library "libSDL_mixer-1.2:0.12.0"

' const char* Mix_GetSoundFonts(void)
Private Extern Mix_GetSoundFonts() As String

' int Mix_OpenAudio(Int frequency, Uint16 Format, Int channels, Int chunksize)
Private Extern Mix_OpenAudio(frequency As Integer, formatSh As Short, channels As Byte, chunksize As Integer) As Integer

' Mix_Music *Mix_LoadMUS(const char *file)
Private Extern Mix_LoadMUS(file As String) As Pointer

' int Mix_PlayMusic(Mix_Music *music, int loops)
Private Extern Mix_PlayMusic(music As Pointer, loops As Integer) As Integer

' Int Mix_PlayingMusic()
Private Extern Mix_PlayingMusic() As Integer

' void Mix_FreeChunk(Mix_Chunk *chunk)
Private Extern Mix_FreeChunk(chunk As Pointer)

' char * Mix_GetError()
Private Extern Mix_GetError() As String

' void Mix_CloseAudio(void)
Private Extern Mix_CloseAudio()


Public Sub Main()

 Dim err As Integer
 Dim audio_rate As Integer = 44100   ' Ajusta la frecuencia que será utilizada de "SDL_mixer"
 Dim audio_buffers As Short = 4096   ' Determina la cantidad de bloques de memoria que se utilizan para mantener y ejecutar el audio
 Dim music As Pointer


' Primero verifica si existe al menos uno de los dos banco SoundFont que se pueden utilizar:
   If (InStr(Mix_GetSoundFonts(), "TimGM6mb.sf2") = 0) And (InStr(Mix_GetSoundFonts(), "FluidR3_GM.sf2") = 0) Then
     Error.Raise("Ningún soundfont: 'TimGM6mb.sf2' o 'FluidR3_GM.sf2' en la dirección: '/usr/share/sounds/sf2' !")
   Else
     Print "Soundfont disponibles:\n"; Mix_GetSoundFonts()
   Endif
  
' Inicializa la librería "SDL_mixer" con las configuraciónes especificas del audio:
   err = Mix_OpenAudio(audio_rate, AUDIO_S16SYS, STEREO, audio_buffers)
   If err <> 0 Then Error.Raise("Imposible inicializar el audio: " & Mix_GetError())
 
' Carga el archivo Midi:
   music = Mix_LoadMUS("/dirección/del/file.mid")
   If IsNull(music) Then Error.Raise("Imposible cargar el file Midi: " & Mix_GetError())

' Ejecuta el archivo Midi. Si el segundo argumento se establece en 0, el archivo se ejecutará sólo una vez.
' Si se establece en -1 el archivo se ejecutará indefinidamente:
   err = Mix_PlayMusic(music, 0)
   If err < 0 Then Error.Raise("Imposible ejecutar el file Midi: " & Mix_GetError())


' Espere hasta que se termine el archivo Midi:
   While Mix_PlayingMusic() <> 0
     Wait 0.01
   Wend


' Libera la memoria asignada previamente a la ejecución de sonido:
   Mix_FreeChunk(music)
 
' Cierra la interfaz audio SDL_mixer:
   Mix_CloseAudio()
 
End




Referencias (en italiano):
http://www.gambas-it.org/wiki/index..._del_API_di_SDL
 



 
última edición por vuott el Domingo, 02 Marzo 2014, 00:02; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejecutar Un File Midi Con Las Funciones Externas Del API De SDL 
 
Gracias por el aporte, vuott.

¿Has pensado en juntar todo lo relativo a a SDL y Alsa y crear una aplicación grande, por ejemplo un secuenciador Midi o un editor tipo DAW (Como Sonar, Cubase, etc)?

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejecutar Un File Midi Con Las Funciones Externas Del API De SDL 
 
jguardon escribió: [Ver mensaje]

¿Has pensado en juntar todo....

Hola  jguardon,
yo estoy más interesado en el Midi que en el audio. Mi largo estudio de las funciones de Alsa para gestionar el Midi, me ha llevado a realizar el secuenciador Midi, que he adjuntado aquí:
http://foro.gambas-es.org/viewtopic.php?f=5&t=3586

Pero, de verdad, el mi objectivo final    es construir una aplicacion de escritura musical para hacer las partituras. ...estoy en el medio del obra.  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron