Differenze tra le versioni di "Estrarre in formato testuale i dati di un file Midi con le funzioni esterne del API di Libsmf"

Da Gambas-it.org - Wikipedia.
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La libreria '''Libsmf''' consente di gestire i file Midi.
 
La libreria '''Libsmf''' consente di gestire i file Midi.
  
 +
Per poter fruire nei programmi Gambas le sue risorse, è necessario installare e richiamare la libreria condivisa: "''libsmf:0.0.0'' ".
  
Per poter fruire nei programmi Gambas le sue risorse, è necessario installare e richiamare la libreria condivisa: "''libsmf:0.0.0''"
+
Mostriamo di seguito un semplice esempio per ottenere in formato testuale gli eventi Midi presenti in uno ''standard Midi file'':
 
 
 
 
Mostriamo di seguito un semplice esempio per ottenere in formato testuale gli eventi Midi presenti in uno ''standard Mdi file'':
 
 
  Library "libsmf:0.0.0"
 
  Library "libsmf:0.0.0"
 
   
 
   
  <FONT Color=gray>' ''smf_t* smf_load (const char * file_name)''
+
Public Struct smf_struct
 +
  formati As Integer
 +
  ppqn As Integer
 +
  frames_per_second As Integer
 +
  resolution As Integer
 +
  number_of_tracks As Integer
 +
  streamf As Pointer
 +
  file_buffer As Pointer
 +
  file_buffer_length As Integer
 +
  next_chunk_offset As Integer
 +
  expected_number_of_tracks As Integer
 +
  tracks_array As Pointer
 +
  last_seek_position As Float
 +
  tempo_array As Pointer
 +
End Struct
 +
 
 +
  <FONT Color=gray>' ''smf_t * smf_load (const char * file_name)''
 
  ' ''Loads SMF file.''</font>
 
  ' ''Loads SMF file.''</font>
  Private Extern smf_load(file_name As String) As Pointer
+
  Private Extern smf_load(file_name As String) As Smf_struct
 
   
 
   
 
  <FONT Color=gray>' ''smf_event_t * smf_get_next_event (smf_t * smf)''
 
  <FONT Color=gray>' ''smf_event_t * smf_get_next_event (smf_t * smf)''
 
  ' ''Next event, in time order, or NULL, if there are none left.''</font>
 
  ' ''Next event, in time order, or NULL, if there are none left.''</font>
  Private Extern smf_get_next_event(smf_t As Pointer) As Pointer
+
  Private Extern smf_get_next_event(smf_t As Smf_struct) As Pointer
 
   
 
   
  <FONT Color=gray>' ''char * smf_event_decode (const smf_event_t * event)
+
  <FONT Color=gray>' ''char * smf_event_decode (const smf_event_t * event)''
 
  ' ''Textual representation of the event given, or NULL, if event is unknown.''</font>
 
  ' ''Textual representation of the event given, or NULL, if event is unknown.''</font>
 
  Private Extern smf_event_decode(smf_event As Pointer) As String
 
  Private Extern smf_event_decode(smf_event As Pointer) As String
 +
 +
<FONT Color=gray>' ''void smf_delete (smf_t *smf)''
 +
' ''Frees smf and all it's descendant structures.''</font>
 +
Private Extern smf_delete(smf As Smf_struct)
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim smf, evento As Pointer
+
   Dim smf As Smf_struct
   Dim durata As Float
+
   Dim evento As Pointer
    
+
 
  smf = smf_load("''/percorso/del/file.mid''")
+
   smf = smf_load("<FONT Color=gray>''/percorso/del/file.mid''</font>")
   
 
  evento = smf_get_next_event(smf)
 
 
      
 
      
  While IsNull(evento) = False
+
  evento = smf_get_next_event(smf)
     
+
If evento == 0 Then Error.Raise("Errore !")
    Print smf_event_decode(evento)
 
 
      
 
      
    evento = smf_get_next_event(smf)
+
  While evento > 0
 +
    Print smf_event_decode(evento)
 +
    evento = smf_get_next_event(smf)
 +
  Wend
 
    
 
    
  Wend
+
  smf_delete(smf)
 
   
 
   
 
  '''End'''
 
  '''End'''
 
  
  

Versione attuale delle 16:12, 4 gen 2022

La libreria Libsmf consente di gestire i file Midi.

Per poter fruire nei programmi Gambas le sue risorse, è necessario installare e richiamare la libreria condivisa: "libsmf:0.0.0 ".

Mostriamo di seguito un semplice esempio per ottenere in formato testuale gli eventi Midi presenti in uno standard Midi file:

Library "libsmf:0.0.0"

Public Struct smf_struct
  formati As Integer
  ppqn As Integer
  frames_per_second As Integer
  resolution As Integer
  number_of_tracks As Integer
  streamf As Pointer
  file_buffer As Pointer
  file_buffer_length As Integer
  next_chunk_offset As Integer
  expected_number_of_tracks As Integer
  tracks_array As Pointer
  last_seek_position As Float
  tempo_array As Pointer
End Struct
 
' smf_t * smf_load (const char * file_name)
' Loads SMF file.
Private Extern smf_load(file_name As String) As Smf_struct

' smf_event_t * smf_get_next_event (smf_t * smf)
' Next event, in time order, or NULL, if there are none left.
Private Extern smf_get_next_event(smf_t As Smf_struct) As Pointer

' char * smf_event_decode (const smf_event_t * event)
' Textual representation of the event given, or NULL, if event is unknown.
Private Extern smf_event_decode(smf_event As Pointer) As String

' void smf_delete (smf_t *smf)
' Frees smf and all it's descendant structures.
Private Extern smf_delete(smf As Smf_struct)


Public Sub Main()

 Dim smf As Smf_struct
 Dim evento As Pointer
  
 smf = smf_load("/percorso/del/file.mid")
   
 evento = smf_get_next_event(smf)
If evento == 0 Then Error.Raise("Errore !")
   
 While evento > 0
   Print smf_event_decode(evento)
   evento = smf_get_next_event(smf)
 Wend
  
 smf_delete(smf)

End


Riferimenti