Differenze tra le versioni di "Registrare il sonoro e salvarlo in un file audio con le funzioni esterne del API di VLC"

Da Gambas-it.org - Wikipedia.
 
(11 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La libreria di '''VLC''' mette a disposizione funzioni e risorse per eseguire una registrazione sonora e di salvarla in un file audio. Il dispositivo esterno riproduttore sonoro, del quale viene catturato l'audio, può essere ovviamente un microfono, un CD Audio, il sonoro di un DVD, o altri dispositivi.
 
La libreria di '''VLC''' mette a disposizione funzioni e risorse per eseguire una registrazione sonora e di salvarla in un file audio. Il dispositivo esterno riproduttore sonoro, del quale viene catturato l'audio, può essere ovviamente un microfono, un CD Audio, il sonoro di un DVD, o altri dispositivi.
  
E' necessario avere installata nel sistema e richiamare con Gambas la libreria dinamica condivisa: "''libvlc.so.5.6.0''"
+
E' necessario avere installata nel sistema e richiamare con Gambas la libreria condivisa: "''libvlc.so.5.6.1'' ".
  
 
+
Mostriamo un semplice esempio pratico in ambiente grafico, nel quale si registrerà il sonoro da un microfono.
Mostriamo un semplice esempio pratico, nel quali si registrerà il sonoro da un microfono. I dati vengono quindi salvati in un file audio Ogg-Vorbis: [<SUP>[[#Note|Note 1]]</sup>]
+
<BR>I dati saranno salvati in un file audio Ogg-Vorbis.
 
  Private bo As Boolean
 
  Private bo As Boolean
 
   
 
   
 
   
 
   
  Library "libvlc"
+
  Library "libvlc:5.6.1"
 
   
 
   
 
  <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)''
Riga 17: Riga 17:
 
  ' ''Create a media with a certain given media resource location, for instance a valid URL.''</font>
 
  ' ''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
 
  Private Extern libvlc_media_new_location(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_mi As Pointer, psz_options As String)
 
   
 
   
 
  <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)''
Riga 29: Riga 33:
 
  ' ''Play the video file.''</font>
 
  ' ''Play the video file.''</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_time_t libvlc_media_player_get_time(libvlc_media_player_t * p_mi)''
 
' ''Get the current movie time (in ms).''</font>
 
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)''
 
  <FONT Color=gray>' ''void libvlc_media_player_release (libvlc_media_player_t * p_mi)''
Riga 47: Riga 47:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub ToggleButton1_Click()
 
    
 
    
  TextBox1.Alignment = Align.Right
+
  Dim inst, mp, m As Pointer
 
+
  Dim tm As Date
'''End'''
 
 
   
 
   
 +
  If ToggleButton1.Value Then
 
   
 
   
'''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 nuovo file audio.''</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>
 
  <FONT Color=gray>' ''Inizializza la libreria VLC:''</font>
  inst = libvlc_new(argc, ss)
+
    inst = libvlc_new(0, Null)
 
+
   
  <FONT Color=gray>' ''Crea il media player:''</font>
 
  mp = libvlc_media_player_new(inst)
 
 
 
 
  <FONT Color=gray>' ''Crea un nuovo oggetto multimedia. Nel secondo argomento della funzione va specificato il sistema audio prescelto per registrare con il microfono.''
 
  <FONT Color=gray>' ''Crea un nuovo oggetto multimedia. Nel secondo argomento della funzione va specificato il sistema audio prescelto per registrare con il microfono.''
 
  ' ''In questo caso viene impostato il sistema ALSA. E' possibile anche utilizzare il sistema "PulseAudio" con "pulse://" o in modo più esteso "pulseaudio://" .''</font>
 
  ' ''In questo caso viene impostato il sistema ALSA. E' possibile anche utilizzare il sistema "PulseAudio" con "pulse://" o in modo più esteso "pulseaudio://" .''</font>
  m = libvlc_media_new_location(inst, "alsa://")
+
    m = libvlc_media_new_location(inst, "alsa://")
 
+
 
  <FONT Color=gray>' ''In alternativa al microfono è possibile, ad esempio, registrare e riprodurre contemporaneamente la traccia selezionata da CD Audio.''
 
  <FONT Color=gray>' ''In alternativa al microfono è possibile, ad esempio, registrare e riprodurre contemporaneamente la traccia selezionata da CD Audio.''
 
  ' ''In tal caso si dovrà avere cura di dichiarare con "Extern" la funzione esterna di VLC "libvlc_media_new_path()".''
 
  ' ''In tal caso si dovrà avere cura di dichiarare con "Extern" la funzione esterna di VLC "libvlc_media_new_path()".''
   ' '''m = libvlc_media_new_path(inst, "/run/user/1000/gvfs/cdda:host=sr0/Track 1.wav)'''</font>
+
'   '''m = libvlc_media_new_path(inst, "/run/user/1000/gvfs/cdda:host=sr0/Track 1.wav")'''</font>
 
+
  libvlc_media_player_set_media(mp, m)
+
<FONT Color=gray>' ''Imposta i parametri per il formato audio e per creare il file audio:''</font>
 
+
    libvlc_media_add_option(m, ":sout=#transcode{acodec=vorb,ab=96,channels=2}:standard{access=file,mux=ogg,dst=/tmp/audio.ogg}")
 +
 +
<FONT Color=gray>' ''Crea il media player:''</font>
 +
    mp = libvlc_media_player_new(inst)
 +
 +
    libvlc_media_player_set_media(mp, m)
 +
 +
    libvlc_media_release(m)
 +
 
  <FONT Color=gray>' ''Avvia la registrazione audio da parte del media player:''</font>
 
  <FONT Color=gray>' ''Avvia la registrazione audio da parte del media player:''</font>
  libvlc_media_player_play(mp)
+
    libvlc_media_player_play(mp)
 
+
  While bo = False
+
    tm = Now
    TextBox1.Text = Str(Date(0, 0, 0, 0, 0, 0, libvlc_media_player_get_time(mp)))
+
 +
    While bo = False
 +
      Me.Title = Str(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond))
 
  <FONT Color=gray>' ''Il Wait consente di agire su altri oggetti posti sul Form:''</font>
 
  <FONT Color=gray>' ''Il Wait consente di agire su altri oggetti posti sul Form:''</font>
    Wait 0.01
+
      Wait 0.01
  Wend
+
    Wend
   
+
 
  <FONT Color=gray>' ''Chiude la libreria VLC ed il programma:''</font>
 
  <FONT Color=gray>' ''Chiude la libreria VLC ed il programma:''</font>
  libvlc_media_player_release(mp)
+
    libvlc_media_player_release(mp)
  libvlc_media_release(m)
+
    libvlc_release(inst)
  libvlc_release(inst)
+
    Me.Close
  Me.Close
+
  Else
 
+
  <FONT Color=gray>' ''Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:''</font>
  '''End'''
+
    bo = True
 +
  Endif
 
   
 
   
   
+
  End
'''Public''' Sub Button2_Click()
+
 
 
+
 
<FONT Color=gray>' ''Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:''</font>
+
==Registrare in altri formati audio==
  bo = True
 
 
 
'''End'''
 
  
 +
===Registrare in formato MP3===
 +
Impostare i parametri audio come appresso:
 +
libvlc_media_add_option(m, ":sout=#transcode{acodec=mp3,ab=192,channels=2}:standard{access=file,mux=mp3,dst=/tmp/audio.mp3}")
  
 +
===Registrare in formato WAV===
 +
Impostare i parametri audio come appresso:
 +
libvlc_media_add_option(m, ":sout=#transcode{acodec=s16l,ab=128,channels=2}:standard{access=file,mux=wav,dst=/tmp/audio.wav}")
  
 +
===Registrare in formato FLV===
 +
Impostare i parametri audio come appresso:
 +
libvlc_media_add_option(m, ":sout=#transcode{acodec=mp3,ab=128,channels=2}:standard{access=file,mux=flv,dst=/tmp/audio.flv}")
  
=Note=
 
[1] Le ricerche sono state effettuate dal membro, chiamato ''[http://www.gambas-it.org/smf/index.php?action=profile;u=1366 sandro]'', del forum di gambas-it.org.
 
  
  

Versione attuale delle 19:17, 21 ago 2024

La libreria di VLC mette a disposizione funzioni e risorse per eseguire una registrazione sonora e di salvarla in un file audio. Il dispositivo esterno riproduttore sonoro, del quale viene catturato l'audio, può essere ovviamente un microfono, un CD Audio, il sonoro di un DVD, o altri dispositivi.

E' necessario avere installata nel sistema e richiamare con Gambas la libreria condivisa: "libvlc.so.5.6.1 ".

Mostriamo un semplice esempio pratico in ambiente grafico, nel quale si registrerà il sonoro da un microfono.
I dati saranno salvati in un file audio Ogg-Vorbis.

Private bo As Boolean


Library "libvlc:5.6.1"

' 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_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.
Private Extern libvlc_media_new_location(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_mi As Pointer, psz_options As String)

' 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

' 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 the video file.
Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer

' void libvlc_media_player_release (libvlc_media_player_t * p_mi)
' Release a media_player after use Decrement the reference count of a media player object.
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 ToggleButton1_Click()
 
 Dim inst, mp, m As Pointer
 Dim tm As Date

 If ToggleButton1.Value Then

' Inizializza la libreria VLC:
   inst = libvlc_new(0, Null)

' Crea un nuovo oggetto multimedia. Nel secondo argomento della funzione va specificato il sistema audio prescelto per registrare con il microfono.
' In questo caso viene impostato il sistema ALSA. E' possibile anche utilizzare il sistema "PulseAudio" con "pulse://" o in modo più esteso "pulseaudio://" .
   m = libvlc_media_new_location(inst, "alsa://")

' In alternativa al microfono è possibile, ad esempio, registrare e riprodurre contemporaneamente la traccia selezionata da CD Audio.
' In tal caso si dovrà avere cura di dichiarare con "Extern" la funzione esterna di VLC "libvlc_media_new_path()".
'   m = libvlc_media_new_path(inst, "/run/user/1000/gvfs/cdda:host=sr0/Track 1.wav")

' Imposta i parametri per il formato audio e per creare il file audio:
   libvlc_media_add_option(m, ":sout=#transcode{acodec=vorb,ab=96,channels=2}:standard{access=file,mux=ogg,dst=/tmp/audio.ogg}")

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

   libvlc_media_player_set_media(mp, m)

   libvlc_media_release(m)

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

   tm = Now

   While bo = False
     Me.Title = Str(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond))
' Il Wait consente di agire su altri oggetti posti sul Form:
     Wait 0.01
   Wend

' Chiude la libreria VLC ed il programma:
   libvlc_media_player_release(mp)
   libvlc_release(inst)
   Me.Close
 Else
' Causa l'arresto della registrazione, la chiusura della libreria VLC e del programma:
   bo = True
 Endif

End


Registrare in altri formati audio

Registrare in formato MP3

Impostare i parametri audio come appresso:

libvlc_media_add_option(m, ":sout=#transcode{acodec=mp3,ab=192,channels=2}:standard{access=file,mux=mp3,dst=/tmp/audio.mp3}")

Registrare in formato WAV

Impostare i parametri audio come appresso:

libvlc_media_add_option(m, ":sout=#transcode{acodec=s16l,ab=128,channels=2}:standard{access=file,mux=wav,dst=/tmp/audio.wav}")

Registrare in formato FLV

Impostare i parametri audio come appresso:

libvlc_media_add_option(m, ":sout=#transcode{acodec=mp3,ab=128,channels=2}:standard{access=file,mux=flv,dst=/tmp/audio.flv}")



Riferimenti