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.
 
(6 versioni intermedie di uno stesso utente non sono mostrate)
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 62: Riga 66:
 
   
 
   
 
   Dim inst, mp, m As Pointer
 
   Dim inst, mp, m As Pointer
  Dim ss As String[]
 
 
<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>' ''Inizializza la libreria VLC, passando i valori al 1° e al 2° argomento della funzione "libvlc_new()":''</font>
 
  <FONT Color=gray>' ''Inizializza la libreria VLC, passando i valori al 1° e al 2° argomento della funzione "libvlc_new()":''</font>
   inst = libvlc_new(ss.Count, ss)
+
   inst = libvlc_new(0, Null)
 
   
 
   
 
  <FONT Color=gray>' ''Crea il media player:''</font>
 
  <FONT Color=gray>' ''Crea il media player:''</font>
Riga 76: Riga 76:
 
  ' ''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=darkgreen>''/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)
Riga 85: Riga 88:
 
   
 
   
 
   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)))
 +
    Wait 0.01
 
   Wend
 
   Wend
 
   
 
   
Riga 91: Riga 95:
 
   libvlc_media_player_release(mp)
 
   libvlc_media_player_release(mp)
 
   libvlc_release(inst)
 
   libvlc_release(inst)
 +
  Print "\nFile audio WAV creato !"
 
   
 
   
 
  End
 
  End
Riga 100: 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}"
  
  
Riga 118: 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