Differenze tra le versioni di "Registrare in un file audio una fonte sonora esterna usando una linea di pipeline con la funzione 'gst parse launch()'"
(3 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 3: | Riga 3: | ||
Mediante tale funzione esterna ed un'apposita pipeline di elementi ''GStreamer'' è possibile registrare una fonte audio esterna e salvare, quanto registrato, in un file audio. | Mediante tale funzione esterna ed un'apposita pipeline di elementi ''GStreamer'' è possibile registrare una fonte audio esterna e salvare, quanto registrato, in un file audio. | ||
− | Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria condivisa: "''libgstreamer-1.0'' ". | + | Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria condivisa: "''libgstreamer-1.0.so.0.2407.0'' ". |
=Registrare una fonte audio esterna in un file audio di formato WAV= | =Registrare una fonte audio esterna in un file audio di formato WAV= | ||
Riga 11: | Riga 11: | ||
− | Library "libgstreamer-1.0" | + | Library "libgstreamer-1.0:0.2407.0" |
Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | ||
Riga 44: | Riga 44: | ||
<FONT Color=gray>' ''Salviamo, quanto registrato, in un file WAV 44100 hertz, 16-bit, 2 canali:''</font> | <FONT Color=gray>' ''Salviamo, quanto registrato, in un file WAV 44100 hertz, 16-bit, 2 canali:''</font> | ||
− | audio = gst_parse_launch("alsasrc ! audio/x-raw,rate=<FONT Color= | + | audio = gst_parse_launch("alsasrc ! audio/x-raw,rate=<FONT Color=red>44100</font>,depth=<FONT Color=red>16</font>,channels=<FONT Color=red>2</font>,width=16,signed=true ! volume volume=2.0 ! wavenc ! filesink location=<FONT Color=darkgreen>''/percorso/del/file.wav''</font>", 0) |
<FONT Color=gray>' ''Avviamo la registrazione audio:''</font> | <FONT Color=gray>' ''Avviamo la registrazione audio:''</font> | ||
Riga 51: | Riga 51: | ||
While Not bo | While Not bo | ||
gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | ||
− | + | Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) | |
Flush | Flush | ||
Wait 0.1 | Wait 0.1 | ||
Riga 73: | Riga 73: | ||
=Registrare una fonte audio esterna in un file audio di formato MP3= | =Registrare una fonte audio esterna in un file audio di formato MP3= | ||
Mostriamo un esempio pratico per registrare in MP3 una fonte sonora esterna: | Mostriamo un esempio pratico per registrare in MP3 una fonte sonora esterna: | ||
− | |||
Private bo As Boolean | Private bo As Boolean | ||
− | Library "libgstreamer-1.0" | + | Library "libgstreamer-1.0:0.2407.0" |
Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | ||
Riga 105: | Riga 104: | ||
Public Sub Main() | Public Sub Main() | ||
+ | Dim audio As Pointer | ||
Dim tempus As Long | Dim tempus As Long | ||
Riga 112: | Riga 112: | ||
audio = gst_parse_launch("alsasrc ! audioconvert ! lamemp3enc ! filesink location=<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>", 0) | audio = gst_parse_launch("alsasrc ! audioconvert ! lamemp3enc ! filesink location=<FONT Color=darkgreen>''/percorso/del/file.mp3''</font>", 0) | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Avvia la registrazione audio:''</font> |
gst_element_set_state(audio, GST_STATE_PLAYING) | gst_element_set_state(audio, GST_STATE_PLAYING) | ||
While Not bo | While Not bo | ||
gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | ||
− | + | Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) | |
Flush | Flush | ||
Wait 0.1 | Wait 0.1 | ||
Riga 143: | Riga 143: | ||
− | Library "libgstreamer-1.0" | + | Library "libgstreamer-1.0:0.2407.0" |
Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | ||
Riga 183: | Riga 183: | ||
While Not bo | While Not bo | ||
gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | ||
− | + | Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) | |
Flush | Flush | ||
Wait 0.1 | Wait 0.1 | ||
Riga 209: | Riga 209: | ||
− | Library "libgstreamer-1.0" | + | Library "libgstreamer-1.0:0.2407.0" |
Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING | ||
Riga 249: | Riga 249: | ||
While Not bo | While Not bo | ||
gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | ||
− | + | Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) | |
Flush | Flush | ||
Wait 0.1 | Wait 0.1 |
Versione attuale delle 14:29, 2 set 2024
La funzione esterna "gst_parse_launch()" della libreria GStreamer consente di costruire e gestire in modo semplice una pipeline GStreamer. La riga della pipeline gestita dalla funzione esterna "gst_parse_launch()" è un insieme di elementi separati da punti esclamativi (!). Le proprietà possono essere aggiunte agli elementi, sotto forma di: proprietà = valore.
Mediante tale funzione esterna ed un'apposita pipeline di elementi GStreamer è possibile registrare una fonte audio esterna e salvare, quanto registrato, in un file audio.
Sarà necessario avere installata nel sistema e richiamare nell'applicazione Gambas la libreria condivisa: "libgstreamer-1.0.so.0.2407.0 ".
Indice
Registrare una fonte audio esterna in un file audio di formato WAV
Mostriamo un esempio pratico per registrare in WAV una fonte sonora esterna:
Private audio As Pointer Private bo As Boolean Library "libgstreamer-1.0:0.2407.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING Private Const GST_FORMAT_TIME As Integer = 3 ' 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) ' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error) ' Create a new pipeline based on command line syntax. Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur) ' Queries an element for the stream position in nanoseconds. Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Public Sub Main() Dim tempus As Long gst_init(0, 0) ' Salviamo, quanto registrato, in un file WAV 44100 hertz, 16-bit, 2 canali: audio = gst_parse_launch("alsasrc ! audio/x-raw,rate=44100,depth=16,channels=2,width=16,signed=true ! volume volume=2.0 ! wavenc ! filesink location=/percorso/del/file.wav", 0) ' Avviamo la registrazione audio: gst_element_set_state(audio, GST_STATE_PLAYING) While Not bo gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) Flush Wait 0.1 Wend ' Arresta la registrazione del file WAV: gst_element_set_state(audio, GST_STATE_NULL) gst_object_unref(audio) Print "\nRegistrazione terminata." Quit End Public Sub Application_Read() bo = True End
Registrare una fonte audio esterna in un file audio di formato MP3
Mostriamo un esempio pratico per registrare in MP3 una fonte sonora esterna:
Private bo As Boolean Library "libgstreamer-1.0:0.2407.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING Private Const GST_FORMAT_TIME As Integer = 3 ' 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) ' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error) ' Create a new pipeline based on command line syntax. Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur) ' Queries an element for the stream position in nanoseconds. Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Public Sub Main() Dim audio As Pointer Dim tempus As Long gst_init(0, 0) ' Questa pipeline consente di registrare in un file audio MP3: audio = gst_parse_launch("alsasrc ! audioconvert ! lamemp3enc ! filesink location=/percorso/del/file.mp3", 0) ' Avvia la registrazione audio: gst_element_set_state(audio, GST_STATE_PLAYING) While Not bo gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) Flush Wait 0.1 Wend ' Arresta la registrazione del file MP3: gst_element_set_state(audio, GST_STATE_NULL) gst_object_unref(audio) Print "\nRegistrazione terminata." Quit End Public Sub Application_Read() bo = True End
Registrare una fonte audio esterna in un file audio di formato OGG
Mostriamo un esempio pratico per registrare in OGG una fonte sonora esterna:
Private audio As Pointer Private bo As Boolean Library "libgstreamer-1.0:0.2407.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING Private Const GST_FORMAT_TIME As Integer = 3 ' 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) ' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error) ' Create a new pipeline based on command line syntax. Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur) ' Queries an element for the stream position in nanoseconds. Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Public Sub Main() Dim tempus As Long gst_init(0, 0) ' Questa pipeline consente di registrare in un file audio OGG: audio = gst_parse_launch("alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=/percorso/del/file.ogg", 0) ' Avviamo la registrazione audio: gst_element_set_state(audio, GST_STATE_PLAYING) While Not bo gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) Flush Wait 0.1 Wend ' Arresta la registrazione del file OGG: gst_element_set_state(audio, GST_STATE_NULL) gst_object_unref(audio) Print "\nRegistrazione terminata." Quit End Public Sub Application_Read() bo = True End
Registrare una fonte audio esterna in un file audio di formato AAC
Mostriamo un esempio pratico per registrare in AAC una fonte sonora esterna:
Private audio As Pointer Private bo As Boolean Library "libgstreamer-1.0:0.2407.0" Private Enum GST_STATE_VOID_PENDING = 0, GST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING Private Const GST_FORMAT_TIME As Integer = 3 ' 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) ' GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error) ' Create a new pipeline based on command line syntax. Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer ' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state) ' Sets the state of the element. Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer ' gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur) ' Queries an element for the stream position in nanoseconds. Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean ' void gst_object_unref(gpointer object) ' Decrements the reference count on object. Private Extern gst_object_unref(gobject As Pointer) Public Sub Main() Dim tempus As Long gst_init(0, 0) ' Questa pipeline consente di registrare in un file audio AAC: audio = gst_parse_launch("alsasrc ! audioconvert ! faac ! audio/mpeg,stream-format=adts,channels=2,rate=44100 ! filesink location=/percorso/del/file.aac", 0) ' Avviamo la registrazione audio: gst_element_set_state(audio, GST_STATE_PLAYING) While Not bo gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) Flush Wait 0.1 Wend ' Arresta la registrazione del file AAC: gst_element_set_state(audio, GST_STATE_NULL) gst_object_unref(audio) Print "\nRegistrazione terminata." Quit End Public Sub Application_Read() bo = True End