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.
 
(17 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.
  
E' necessario aver installata nel proprio sistema e richiamare in Gambas la libreria dinamica condivisa: "''libvlc.so.5.6.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:
 
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 --sout "#transcode{acodec=mp3,ab=128,samplerate=44100,channels=2}:standard{access=file,mux=raw,dst='<FONT Color=gray>''/percorso/del/nuovo/file.mp3''</font>'}" '<FONT Color=gray>''/percorso/del/file.mid''</font>'
+
  :~$ 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 ''wav'':
 
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.0"
+
  Library "libvlc:5.6.1"
 
   
 
   
 
  Private Enum libvlc_NothingSpecial = 0,
 
  Private Enum libvlc_NothingSpecial = 0,
Riga 21: Riga 21:
 
  ' ''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_player_t * libvlc_media_player_new(libvlc_instance_t *p_libvlc_instance)''
 +
' ''Create an empty Media Player object.''</font>
 +
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)''
 
  <FONT Color=gray>' ''libvlc_media_t *libvlc_media_new_path(libvlc_instance_t *p_instance, const char * path)''
Riga 26: Riga 30:
 
  Private Extern libvlc_media_new_path(p_instance As Pointer, path As String) As Pointer
 
  Private Extern libvlc_media_new_path(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>' ''void libvlc_media_add_option (libvlc_media_t * p_md, const char * psz_options)''
  ' ''Create an empty Media Player object.''</font>
+
  ' ''Add an option to the media.''</font>
  Private Extern libvlc_media_player_new(p_libvlc_instance As Pointer) As Pointer
+
  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 59: Riga 63:
 
    
 
    
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
+
 
   Dim inst, mp, m As Pointer
 
   Dim inst, mp, m As Pointer
  Dim ss As String[]
+
  Dim argc as Integer
+
  <FONT Color=gray>' ''Inizializza la libreria VLC, passando i valori al e al 2° argomento della funzione "libvlc_new()":''</font>
   
+
   inst = libvlc_new(0, Null)
  <FONT Color=gray>' ''Vengono impostate le opzioni ed il percorso ove sarà salvato il file audio wav:''</font>
+
  ss = ["--sout=#transcode{acodec=s16l,ab=128,samplerate=44100, channels=2}:standard{access=file,mux=wav,dst=/tmp/audio.wav}"]
 
     
 
<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 wav:''</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_path(inst, "<FONT Color=gray>''/percorso/del/file.mid''</font>")
+
   m = libvlc_media_new_path(inst, "<FONT Color=darkgreen>''/percorso/del/file.mid''</font>")
 
+
 +
<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}")
 +
 
   libvlc_media_player_set_media(mp, m)
 
   libvlc_media_player_set_media(mp, m)
 
+
 
   libvlc_media_release(m)
 
   libvlc_media_release(m)
 
+
 
  <FONT Color=gray>' ''Avvia la realizzazione del file audio da parte del media player:''</font>
 
  <FONT Color=gray>' ''Avvia la realizzazione del file audio da parte del media player:''</font>
  libvlc_media_player_play(mp)
+
  libvlc_media_player_play(mp)
   
+
  While libvlc_media_player_get_state(mp) < libvlc_Stopped
+
  While libvlc_media_player_get_state(mp) < libvlc_Stopped
    Write Str(Time(0, 0, 0, libvlc_media_player_get_time(mp))) & "\r"
+
    Write "\r" & Str(Time(0, 0, 0, libvlc_media_player_get_time(mp)))
  Wend
+
    Wait 0.01
   
+
  Wend
 +
 
  <FONT Color=gray>' ''Chiude il media player, la libreria VLC ed il programma:''</font>
 
  <FONT Color=gray>' ''Chiude il media player, la libreria VLC ed il programma:''</font>
  libvlc_media_player_release(mp)
+
  libvlc_media_player_release(mp)
  libvlc_release(inst)
+
  libvlc_release(inst)
 
+
  Print "\nFile audio WAV creato !"
  '''End'''
+
 
+
  End
  
  
Riga 106: Riga 105:
 
===Formato audio ''MP3''===
 
===Formato audio ''MP3''===
 
Per ottenere un file audio di formato ''mp3'', è necessario sostituire la stringa delle opzioni con la seguente:
 
Per ottenere un file audio di formato ''mp3'', è necessario sostituire la stringa delle opzioni con la seguente:
  ss = ["--sout=#transcode{acodec=mp3,ab=128,samplerate=44100, channels=2}:standard{access=file,mux=raw,dst=/tmp/audio.mp3}"]
+
  ":sout=#transcode{acodec=mp3,ab=128,samplerate=44100, channels=2}:standard{access=file,mux=raw,dst=/tmp/audio.mp3}"
  
 
===Formato audio ''OggVorbis''===
 
===Formato audio ''OggVorbis''===
 
Per ottenere un file audio di formato ''OggVorbis'', è necessario sostituire la stringa delle opzioni con la seguente:
 
Per ottenere un file audio di formato ''OggVorbis'', è necessario sostituire la stringa delle opzioni con la seguente:
  ss = ["--sout=#transcode{acodec=vorb,ab=96,channels=2}:standard{access=file,mux=ogg,dst=/tmp/audio.ogg}"]
+
  ":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 119: 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