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.
(3 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'' ". | ||
− | + | 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 | ||
Library "libsmf:0.0.0" | 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 | ||
+ | |||
<FONT Color=gray>' ''smf_t * smf_load (const char * file_name)'' | <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 | + | 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 | + | 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 | + | Dim smf As Smf_struct |
+ | Dim evento As Pointer | ||
− | + | smf = smf_load("<FONT Color=gray>''/percorso/del/file.mid''</font>") | |
− | + | 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''' | '''End''' | ||
− | |||
Versione 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