Differenze tra le versioni di "Ottenere un file audio da un file Midi con le funzioni esterne del API di VLC"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "La libreria '''VLC''' consente di poter ottenere un file audio da un file Midi. <BR>E' necessario aver installata nel proprio sistema la risorsa ''Fluidsynth'', nonché anche...")
 
 
(39 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La libreria '''VLC''' consente di poter ottenere un file audio da un file Midi.
 
La libreria '''VLC''' consente di poter ottenere un file audio da un file Midi.
<BR>E' necessario aver installata nel proprio sistema la risorsa ''Fluidsynth'', nonché anche richiamare in Gambas la libreria dinamica condivisa: "''libvlc.so.5.4.0''"
 
  
 +
E' necessario aver installata nel proprio sistema e richiamare in Gambas la libreria condivisa: "''libvlc.so.5.6.1'' ".
  
 +
Ricordiamo che, utilizzando in terminale il programma "cvlc", la riga di comando essenziale per ottenere un file audio (ad esempio un file MP3) da un file Midi è la seguente:
 +
:~$ cvlc '<FONT Color=darkgreen>''/percorso/del/file.mid''</font>' --sout "#transcode{acodec=mp3,ab=128,samplerate=44100,channels=2}:standard{access=file,mux=raw,dst='<FONT Color=darkgreen>''/percorso/del/nuovo/file.mp3''</font>'}" <FONT Color=gray>'</font> <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
  
Mostriamo un esempio pratico in ambiente grafico, in cui da un file Midi si otterrà un file audio di formato ''OggVorbis'':
+
Mostriamo un esempio pratico in ambiente grafico, in cui da un file Midi si otterrà un file audio di formato ''wav'':
  Private bo As Boolean
+
  Library "libvlc:5.6.1"
 
   
 
   
   
+
  Private Enum libvlc_NothingSpecial = 0,
Library "libvlc:5.4.0"
+
              libvlc_Opening,
 +
              libvlc_Buffering,
 +
              libvlc_Playing,
 +
              libvlc_Paused,
 +
              libvlc_Stopped,
 +
              libvlc_Ended,
 +
              libvlc_Error
 
   
 
   
 
  <FONT Color=gray>' ''libvlc_instance_t * libvlc_new (int argc, const char *const *argv)''
 
  <FONT Color=gray>' ''libvlc_instance_t * libvlc_new (int argc, const char *const *argv)''
 
  ' ''Create And initialize a libvlc instance.''</font>
 
  ' ''Create And initialize a libvlc instance.''</font>
 
  Private Extern libvlc_new(argc As Integer, argv As String[]) As Pointer
 
  Private Extern libvlc_new(argc As Integer, argv As String[]) As Pointer
 
<FONT Color=gray>' ''libvlc_media_t *libvlc_media_new_location(libvlc_instance_t *p_instance, const char * psz_mrl)''
 
' ''Create a media with a certain given media resource location, for instance a valid URL.''</font>
 
Private Extern libvlc_media_new_location(p_instance As Pointer, path As String) As Pointer
 
 
   
 
   
 
  <FONT Color=gray>' ''libvlc_media_player_t * libvlc_media_player_new(libvlc_instance_t *p_libvlc_instance)''
 
  <FONT Color=gray>' ''libvlc_media_player_t * libvlc_media_player_new(libvlc_instance_t *p_libvlc_instance)''
 
  ' ''Create an empty Media Player object.''</font>
 
  ' ''Create an empty Media Player object.''</font>
 
  Private Extern libvlc_media_player_new(p_libvlc_instance As Pointer) As Pointer
 
  Private Extern libvlc_media_player_new(p_libvlc_instance As Pointer) As Pointer
 +
 +
<FONT Color=gray>' ''libvlc_media_t *libvlc_media_new_path(libvlc_instance_t *p_instance, const char * path)''
 +
' ''Create a media for a certain file path.''</font>
 +
Private Extern libvlc_media_new_path(p_instance As Pointer, path As String) As Pointer
 +
 +
<FONT Color=gray>' ''void libvlc_media_add_option (libvlc_media_t * p_md, const char * psz_options)''
 +
' ''Add an option to the media.''</font>
 +
Private Extern libvlc_media_add_option(p_md As Pointer, psz_options As String)
 
   
 
   
 
  <FONT Color=gray>' ''void libvlc_media_player_set_media(libvlc_media_player_t *p_mi, libvlc_media_t *p_md)''
 
  <FONT Color=gray>' ''void libvlc_media_player_set_media(libvlc_media_player_t *p_mi, libvlc_media_t *p_md)''
Riga 27: Riga 39:
 
   
 
   
 
  <FONT Color=gray>' ''int libvlc_media_player_play (libvlc_media_player_t * p_mi)''
 
  <FONT Color=gray>' ''int libvlc_media_player_play (libvlc_media_player_t * p_mi)''
  ' ''Play the video file.''</font>
+
  ' ''Play.''</font>
 
  Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer
 
  Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer
 +
 +
<FONT color=gray>' ''libvlc_state_t libvlc_media_player_get_state(libvlc_media_player_t *p_mi)''
 +
' ''Get current movie state.''</font>
 +
Private Extern libvlc_media_player_get_state(p_mi As Pointer) As Integer
 
   
 
   
 
  <FONT Color=gray>' ''libvlc_time_t libvlc_media_player_get_time(libvlc_media_player_t * p_mi)''
 
  <FONT Color=gray>' ''libvlc_time_t libvlc_media_player_get_time(libvlc_media_player_t * p_mi)''
 
  ' ''Get the current movie time (in ms).''</font>
 
  ' ''Get the current movie time (in ms).''</font>
 
  Private Extern libvlc_media_player_get_time(p_mi As Pointer) As Integer
 
  Private Extern libvlc_media_player_get_time(p_mi As Pointer) As Integer
 +
 +
<FONT color=gray>' ''void libvlc_media_player_release (libvlc_media_player_t * p_mi)''
 +
' ''Release a media_player after use.''</font>
 +
Private Extern libvlc_media_player_release(p_mi As Pointer)
 +
 +
<FONT color=gray>' ''void libvlc_media_release (libvlc_media_t *p_md)''
 +
' ''Decrement the reference count of a media descriptor object.''</font>
 +
Private Extern libvlc_media_release(p_md As Pointer)
 
   
 
   
 
  <FONT Color=gray>' ''libvlc_release (libvlc_instance_t * p_instance)''
 
  <FONT Color=gray>' ''libvlc_release (libvlc_instance_t * p_instance)''
 
  ' ''Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.''</font>
 
  ' ''Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.''</font>
 
  Private Extern libvlc_release(p_instance As Pointer)
 
  Private Extern libvlc_release(p_instance As Pointer)
 +
 
 
   
 
   
 +
Public Sub Main()
 
   
 
   
'''Public''' Sub Form_Open()
+
   Dim inst, mp, m As Pointer
    
 
  TextBox1.Alignment = Align.Right
 
 
 
'''End'''
 
 
   
 
   
 +
<FONT Color=gray>' ''Inizializza la libreria VLC, passando i valori al 1° e al 2° argomento della funzione "libvlc_new()":''</font>
 +
  inst = libvlc_new(0, Null)
 
   
 
   
'''Public''' Sub Button1_Click()
 
 
 
  Dim inst, mp, m As Pointer
 
  Dim ss As String[]
 
  Dim argc as Integer
 
   
 
<FONT Color=gray>' ''Vengono impostate le opzioni ed il percorso ove sarà salvato il file audio .ogg:''</font>
 
  ss = ["--sout=#transcode{acodec=vorb,ab=96,channels=2}:standard{access-file,mux=ogg,dst=/tmp/audio.ogg}"]
 
     
 
<FONT Color=gray>' ''Imposta il valore del 1° argomento della funzione "libvlc_new()":''</font>
 
  argc = 1
 
 
 
<FONT Color=gray>' ''Inizializza la libreria VLC:''</font>
 
  inst = libvlc_new(argc, ss)
 
 
 
 
  <FONT Color=gray>' ''Crea il media player:''</font>
 
  <FONT Color=gray>' ''Crea il media player:''</font>
  mp = libvlc_media_player_new(inst)
+
  mp = libvlc_media_player_new(inst)
 
+
 
  <FONT Color=gray>' ''Crea un nuovo oggetto multimedia.''
 
  <FONT Color=gray>' ''Crea un nuovo oggetto multimedia.''
  ' ''Nel secondo argomento della funzione va specificato il percorso del file Midi da cui ottenere il file audio .ogg:''</font>
+
  ' ''Nel secondo argomento della funzione va specificato il percorso del file Midi da cui ottenere il file audio wav:''</font>
  m = libvlc_media_new_location(inst, "file://<FONT Color=gray>''/percorso/del/file.mid''</font>")
+
  m = libvlc_media_new_path(inst, "<FONT Color=darkgreen>''/percorso/del/file.mid''</font>")
 
+
  libvlc_media_player_set_media(mp, m)
+
<FONT Color=gray>' ''Vengono impostate le opzioni e il percorso per creare il file audio wav:''</font>
 
+
  libvlc_media_add_option(m, ":sout=#transcode{acodec=s16l,ab=128,samplerate=44100,channels=2}:standard{access=file,mux=wav,dst=/tmp/audio.wav}")
  <FONT Color=gray>' ''Avvia la realizzazione del file Midi da parte del media player:''</font>
+
  libvlc_media_player_play(mp)
+
  libvlc_media_player_set_media(mp, m)
 
+
  While bo = False
+
  libvlc_media_release(m)
    TextBox1.Text = Str(Date(0, 0, 0, 0, 0, 0, libvlc_media_player_get_time(mp)))
+
<FONT Color=gray>' ''Il Wait consente di agire su altri oggetti posti sul Form:''</font>
+
  <FONT Color=gray>' ''Avvia la realizzazione del file audio da parte del media player:''</font>
    Wait 0.01
+
  libvlc_media_player_play(mp)
  Wend
+
   
+
  While libvlc_media_player_get_state(mp) < libvlc_Stopped
<FONT Color=gray>' ''Chiude la libreria VLC ed il programma:''</font>
+
    Write "\r" & Str(Time(0, 0, 0, libvlc_media_player_get_time(mp)))
  libvlc_release(inst)
+
    Wait 0.01
  Me.Close
+
  Wend
 
 
'''End'''
 
 
   
 
   
 +
<FONT Color=gray>' ''Chiude il media player, la libreria VLC ed il programma:''</font>
 +
  libvlc_media_player_release(mp)
 +
  libvlc_release(inst)
 +
  Print "\nFile audio WAV creato !"
 
   
 
   
  '''Public''' Sub Button2_Click()
+
  End
 
+
 
<FONT Color=gray>' ''Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:''</font>
+
 
  bo = True
+
==Ottenere altri formati di file audio==
 
+
Oltre al formato WAV è possibile ottenere qualche altro formato di file audio.
'''End'''
+
 
 +
===Formato audio ''MP3''===
 +
Per ottenere un file audio di formato ''mp3'', è necessario sostituire la stringa delle opzioni con la seguente:
 +
":sout=#transcode{acodec=mp3,ab=128,samplerate=44100, channels=2}:standard{access=file,mux=raw,dst=/tmp/audio.mp3}"
 +
 
 +
===Formato audio ''OggVorbis''===
 +
Per ottenere un file audio di formato ''OggVorbis'', è necessario sostituire la stringa delle opzioni con la seguente:
 +
":sout=#transcode{acodec=vorb,ab=96,channels=2}:standard{access=file,mux=ogg,dst=/tmp/audio.ogg}"
 +
 
 +
 
  
 +
----
 +
=Note=
 +
[1] Circa le opzioni vedere questa pagina: https://wiki.videolan.org/VLC_command-line_help/
  
  
Riga 100: Riga 123:
 
* http://www.videolan.org/developers/vlc/doc/doxygen/html/index.html
 
* http://www.videolan.org/developers/vlc/doc/doxygen/html/index.html
 
* https://wiki.videolan.org/Libvlc
 
* https://wiki.videolan.org/Libvlc
 +
* https://forum.videolan.org/viewtopic.php?t=99284
 +
* https://stackoverflow.com/questions/15427452/libvlc-and-sout-option

Versione attuale delle 16:05, 20 ago 2024

La libreria VLC consente di poter ottenere un file audio da un file Midi.

E' necessario aver installata nel proprio sistema e richiamare in Gambas la libreria condivisa: "libvlc.so.5.6.1 ".

Ricordiamo che, utilizzando in terminale il programma "cvlc", la riga di comando essenziale per ottenere un file audio (ad esempio un file MP3) da un file Midi è la seguente:

:~$ cvlc '/percorso/del/file.mid' --sout "#transcode{acodec=mp3,ab=128,samplerate=44100,channels=2}:standard{access=file,mux=raw,dst='/percorso/del/nuovo/file.mp3'}" ' [nota 1]

Mostriamo un esempio pratico in ambiente grafico, in cui da un file Midi si otterrà un file audio di formato wav:

Library "libvlc:5.6.1"

Private Enum libvlc_NothingSpecial = 0,
             libvlc_Opening,
             libvlc_Buffering,
             libvlc_Playing,
             libvlc_Paused,
             libvlc_Stopped,
             libvlc_Ended,
             libvlc_Error

' libvlc_instance_t * libvlc_new (int argc, const char *const *argv)
' Create And initialize a libvlc instance.
Private Extern libvlc_new(argc As Integer, argv As String[]) As Pointer

' libvlc_media_player_t * libvlc_media_player_new(libvlc_instance_t *p_libvlc_instance)
' Create an empty Media Player object.
Private Extern libvlc_media_player_new(p_libvlc_instance As Pointer) As Pointer

' libvlc_media_t *libvlc_media_new_path(libvlc_instance_t *p_instance, const char * path)
' Create a media for a certain file path.
Private Extern libvlc_media_new_path(p_instance As Pointer, path As String) As Pointer

' void libvlc_media_add_option (libvlc_media_t * p_md, const char * psz_options)
' Add an option to the media.
Private Extern libvlc_media_add_option(p_md As Pointer, psz_options As String)

' void libvlc_media_player_set_media(libvlc_media_player_t *p_mi, libvlc_media_t *p_md)
' Set the media that will be used by the media_player.
Private Extern libvlc_media_player_set_media(p_md As Pointer, mp As Pointer)

' int libvlc_media_player_play (libvlc_media_player_t * p_mi)
' Play.
Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer

' libvlc_state_t libvlc_media_player_get_state(libvlc_media_player_t *p_mi)
' Get current movie state.
Private Extern libvlc_media_player_get_state(p_mi As Pointer) As Integer

' libvlc_time_t libvlc_media_player_get_time(libvlc_media_player_t * p_mi)
' Get the current movie time (in ms).
Private Extern libvlc_media_player_get_time(p_mi As Pointer) As Integer

' void libvlc_media_player_release (libvlc_media_player_t * p_mi)
' Release a media_player after use.
Private Extern libvlc_media_player_release(p_mi As Pointer)

' void libvlc_media_release (libvlc_media_t *p_md)
' Decrement the reference count of a media descriptor object.
Private Extern libvlc_media_release(p_md As Pointer)

' libvlc_release (libvlc_instance_t * p_instance)
' Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.
Private Extern libvlc_release(p_instance As Pointer)
 

Public Sub Main()

 Dim inst, mp, m As Pointer

' Inizializza la libreria VLC, passando i valori al 1° e al 2° argomento della funzione "libvlc_new()":
 inst = libvlc_new(0, Null)

' Crea il media player:
 mp = libvlc_media_player_new(inst)

' Crea un nuovo oggetto multimedia.
' Nel secondo argomento della funzione va specificato il percorso del file Midi da cui ottenere il file audio wav:
 m = libvlc_media_new_path(inst, "/percorso/del/file.mid")

' Vengono impostate le opzioni e il percorso per creare il file audio wav:
 libvlc_media_add_option(m, ":sout=#transcode{acodec=s16l,ab=128,samplerate=44100,channels=2}:standard{access=file,mux=wav,dst=/tmp/audio.wav}")

 libvlc_media_player_set_media(mp, m)

 libvlc_media_release(m)

' Avvia la realizzazione del file audio da parte del media player:
 libvlc_media_player_play(mp)

 While libvlc_media_player_get_state(mp) < libvlc_Stopped
   Write "\r" & Str(Time(0, 0, 0, libvlc_media_player_get_time(mp)))
   Wait 0.01
 Wend

' Chiude il media player, la libreria VLC ed il programma:
 libvlc_media_player_release(mp)
 libvlc_release(inst)
 Print "\nFile audio WAV creato !"

End


Ottenere altri formati di file audio

Oltre al formato WAV è possibile ottenere qualche altro formato di file audio.

Formato audio MP3

Per ottenere un file audio di formato mp3, è necessario sostituire la stringa delle opzioni con la seguente:

":sout=#transcode{acodec=mp3,ab=128,samplerate=44100, channels=2}:standard{access=file,mux=raw,dst=/tmp/audio.mp3}"

Formato audio OggVorbis

Per ottenere un file audio di formato OggVorbis, è necessario sostituire la stringa delle opzioni con la seguente:

":sout=#transcode{acodec=vorb,ab=96,channels=2}:standard{access=file,mux=ogg,dst=/tmp/audio.ogg}"



Note

[1] Circa le opzioni vedere questa pagina: https://wiki.videolan.org/VLC_command-line_help/


Riferimenti