Differenze tra le versioni di "La gestione dei file MIDI mediante le funzioni esterne del API di Rhythmbox"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "''Rythmbox'' è una libreria del progetto GNOME capace di gestire ed eseguire (oltre a vari formati audio) i file MIDI. Va utilizzata congiuntamente con alcune funzioni ester...")
 
 
(11 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
''Rythmbox'' è una libreria del progetto GNOME capace di gestire ed eseguire (oltre a vari formati audio) i file MIDI.
 
''Rythmbox'' è una libreria del progetto GNOME capace di gestire ed eseguire (oltre a vari formati audio) i file MIDI.
  
Va utilizzata congiuntamente con alcune funzioni esterne della libreria di ''GStreamer''. Pertanto sarà necessario avere intallate nel sistema e richiamare in Gambas le librerie dinamiche condivise: "''librhythmbox-core.so.9.0.0''" e "''libgstreamer-1.0.so''"
+
Va utilizzata congiuntamente con alcune funzioni esterne della libreria di ''GStreamer''. Pertanto sarà necessario avere intallate nel sistema e richiamare in Gambas le librerie dinamiche condivise: "''librhythmbox-core.so.10.0.0'' " e "''libgstreamer-1.0.so'' ".
  
  
Mostriamo un semplice esempio pratico:
+
Mostriamo un semplice esempio pratico, in cui si eseguirà un file Midi:
  Library "librhythmbox-core:9.0.0"
+
  Library "librhythmbox-core:10.0.0"
 
   
 
   
 
  Private Enum RB_PLAYER_PLAY_REPLACE = 0, RB_PLAYER_PLAY_AFTER_EOS, RB_PLAYER_PLAY_CROSSFADE
 
  Private Enum RB_PLAYER_PLAY_REPLACE = 0, RB_PLAYER_PLAY_AFTER_EOS, RB_PLAYER_PLAY_CROSSFADE
Riga 24: Riga 24:
 
  ' ''Returns the current playback for the current stream in nanoseconds.''</font>
 
  ' ''Returns the current playback for the current stream in nanoseconds.''</font>
 
  Private Extern rb_player_get_time(player As Pointer) As Long
 
  Private Extern rb_player_get_time(player As Pointer) As Long
 +
 +
<FONT Color=gray>' ''gboolean rb_player_close (RBPlayer *player, const char *uri, GError **error)''
 +
' ''Close the stream corresponding to that URI and free any resources related resources.''</font>
 +
Private Extern rb_player_close(player As Pointer, uri As String, gerror As Pointer) As Boolean
 
   
 
   
 
   
 
   
Riga 39: Riga 43:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim pl, err As Pointer
+
   Dim pl As Pointer
 
   Dim bo As Boolean
 
   Dim bo As Boolean
   Dim tm1 As Long
+
   Dim filemidi As String
 
+
  Dim tm As Long
  gst_init(0, 0)
+
 
 
+
  filemidi = "<FONT Color=gray>''/percorso/del/file.mid''</font>"
  pl = rb_player_new(False, 0)
 
  If pl = 0 Then Error.Raise("ERRORE !")
 
 
    
 
    
  err = Alloc(SizeOf(gb.Pointer), 1)
+
  gst_init(0, 0)
 
    
 
    
  bo = rb_player_open(pl, g_filename_to_uri("<FONT Color=gray>''/percorso/del/file.mid''</font>", Null, 0), 0, 0, err)
+
  pl = rb_player_new(False, 0)
  If Not bo Then Error.Raise("ERRORE !")
+
  If pl == 0 Then Error.Raise("ERRORE !")
 
    
 
    
  bo = rb_player_play(pl, RB_PLAYER_PLAY_AFTER_EOS, 0, 0)
+
  bo = rb_player_open(pl, g_filename_to_uri(filemidi, Null, 0), 0, 0, 0)
  If Not bo Then Error.Raise("ERRORE !")
+
  If Not bo Then Error.Raise("ERRORE !")
 
 
  Wait 0.3
 
 
 
  Repeat
 
    tm1 = rb_player_get_time(pl)
 
    Write "\r" & CStr(Date(0, 0, 0, 0, 0, 0, tm1 / 1000000))
 
    Wait 0.001
 
  Until tm1 = rb_player_get_time(pl)
 
 
 
  Free(err)
 
 
    
 
    
 +
  bo = rb_player_play(pl, RB_PLAYER_PLAY_AFTER_EOS, 0, 0)
 +
  If Not bo Then Error.Raise("ERRORE !")
 +
 
 +
<FONT Color=gray>' ''Compie il ciclo sino a che non viene ottenuto dalla funzione "rb_player_get_time()" un valore superiore a zero:''</font>
 +
  Repeat
 +
    Wait 0.01
 +
  Until rb_player_get_time(pl) > 0
 +
 
 +
  Print "File Midi: "; filemidi
 +
 
 +
  Repeat
 +
    tm = rb_player_get_time(pl)
 +
    Write "\r\e[31m" & CStr(Time(0, 0, 0, tm / 1000000))
 +
    Wait 0.001
 +
  Until tm == rb_player_get_time(pl)
 +
 
 +
  rb_player_close(pl, g_filename_to_uri(filemidi, Null, 0), 0)
 +
 
 
  '''End'''
 
  '''End'''
 
  
  

Versione attuale delle 18:09, 26 giu 2021

Rythmbox è una libreria del progetto GNOME capace di gestire ed eseguire (oltre a vari formati audio) i file MIDI.

Va utilizzata congiuntamente con alcune funzioni esterne della libreria di GStreamer. Pertanto sarà necessario avere intallate nel sistema e richiamare in Gambas le librerie dinamiche condivise: "librhythmbox-core.so.10.0.0 " e "libgstreamer-1.0.so ".


Mostriamo un semplice esempio pratico, in cui si eseguirà un file Midi:

Library "librhythmbox-core:10.0.0"

Private Enum RB_PLAYER_PLAY_REPLACE = 0, RB_PLAYER_PLAY_AFTER_EOS, RB_PLAYER_PLAY_CROSSFADE

' RBPlayer * rb_player_new (gboolean want_crossfade, GError **error)
' Creates a new player object.
Private Extern rb_player_new(want_crossfade As Boolean, gerror As Pointer) As Pointer

' gboolean rb_player_open (RBPlayer *player, const char *uri, gpointer stream_data, GDestroyNotify stream_data_destroy, GError **error)
' Prepares a stream for playback.
Private Extern rb_player_open(player As Pointer, uri As String, stream_data As Pointer, stream_data_destroy As Pointer, gerror As Pointer) As Boolean

' gboolean rb_player_play (RBPlayer *player, RBPlayerPlayType play_type, gint64 crossfade, GError **error)
' Starts playback of the most recently opened stream.
Private Extern rb_player_play(player As Pointer, play_type As Integer, crossfade As Long, gerror As Pointer) As Boolean

' gint64 rb_player_get_time (RBPlayer *player)
' Returns the current playback for the current stream in nanoseconds.
Private Extern rb_player_get_time(player As Pointer) As Long

' gboolean rb_player_close (RBPlayer *player, const char *uri, GError **error)
' Close the stream corresponding to that URI and free any resources related resources.
Private Extern rb_player_close(player As Pointer, uri As String, gerror As Pointer) As Boolean


Library "libgstreamer-1.0"

' gst_init (int *argc, char **argv[])
' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins.
Private Extern gst_init(argc As Pointer, argv As Pointer)

' gchar * g_filename_to_uri (const gchar *filename, const gchar *hostname, GError **error)
' Converts an absolute filename to an escaped ASCII-encoded URI.
Private Extern g_filename_to_uri(filename As String, hostname As String, GError As Pointer) As String


Public Sub Main()

 Dim pl As Pointer
 Dim bo As Boolean
 Dim filemidi As String
 Dim tm As Long
 
 filemidi = "/percorso/del/file.mid"
  
 gst_init(0, 0)
  
 pl = rb_player_new(False, 0)
 If pl == 0 Then Error.Raise("ERRORE !")
  
 bo = rb_player_open(pl, g_filename_to_uri(filemidi, Null, 0), 0, 0, 0)
 If Not bo Then Error.Raise("ERRORE !")
  
 bo = rb_player_play(pl, RB_PLAYER_PLAY_AFTER_EOS, 0, 0)
 If Not bo Then Error.Raise("ERRORE !")
 
' Compie il ciclo sino a che non viene ottenuto dalla funzione "rb_player_get_time()" un valore superiore a zero:
 Repeat 
   Wait 0.01
 Until rb_player_get_time(pl) > 0
 
 Print "File Midi: "; filemidi
 
 Repeat
   tm = rb_player_get_time(pl)
   Write "\r\e[31m" & CStr(Time(0, 0, 0, tm / 1000000))
   Wait 0.001
 Until tm == rb_player_get_time(pl)
 
 rb_player_close(pl, g_filename_to_uri(filemidi, Null, 0), 0)
 
End


Riferimenti