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()'"
(4 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= | ||
+ | Mostriamo un esempio pratico per registrare in WAV una fonte sonora esterna: | ||
Private audio As Pointer | Private audio As Pointer | ||
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 43: | 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 50: | 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 | ||
Wend | Wend | ||
− | <FONT Color=gray>' ''Arresta la registrazione del file | + | <FONT Color=gray>' ''Arresta la registrazione del file WAV:''</font> |
gst_element_set_state(audio, GST_STATE_NULL) | gst_element_set_state(audio, GST_STATE_NULL) | ||
gst_object_unref(audio) | gst_object_unref(audio) | ||
Riga 72: | 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 104: | Riga 104: | ||
Public Sub Main() | Public Sub Main() | ||
+ | Dim audio As Pointer | ||
Dim tempus As Long | Dim tempus As Long | ||
Riga 111: | 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 142: | 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 182: | 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 188: | Riga 189: | ||
<FONT Color=gray>' ''Arresta la registrazione del file OGG:''</font> | <FONT Color=gray>' ''Arresta la registrazione del file OGG:''</font> | ||
+ | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''gst_init (int *argc, char **argv[])'' | ||
+ | ' ''Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins.''</font> | ||
+ | Private Extern gst_init(argc As Pointer, argv As Pointer) | ||
+ | |||
+ | <FONT Color=gray>' ''GstElement * gst_parse_launch (const gchar *pipeline_description, GError **error)'' | ||
+ | ' ''Create a new pipeline based on command line syntax.''</font> | ||
+ | Private Extern gst_parse_launch(description As String, GError As Pointer) As Pointer | ||
+ | |||
+ | <FONT Color=gray>' ''GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state)'' | ||
+ | ' ''Sets the state of the element.''</font> | ||
+ | Private Extern gst_element_set_state(gstelement As Pointer, state As Integer) As Integer | ||
+ | |||
+ | <FONT Color=gray>' ''gboolean gst_element_query_position (GstElement *element, GstFormat format, gint64 *cur)'' | ||
+ | ' ''Queries an element for the stream position in nanoseconds.''</font> | ||
+ | Private Extern gst_element_query_position(gstelement As Pointer, gstformat As Pointer, cur As Pointer) As Boolean | ||
+ | |||
+ | <FONT Color=gray>' ''void gst_object_unref(gpointer object)'' | ||
+ | ' ''Decrements the reference count on object.''</font> | ||
+ | Private Extern gst_object_unref(gobject As Pointer) | ||
+ | |||
+ | |||
+ | Public Sub Main() | ||
+ | |||
+ | Dim tempus As Long | ||
+ | |||
+ | gst_init(0, 0) | ||
+ | |||
+ | <FONT Color=gray>' ''Questa pipeline consente di registrare in un file audio AAC:''</font> | ||
+ | audio = gst_parse_launch("alsasrc ! audioconvert ! faac ! audio/mpeg,stream-format=adts,channels=2,rate=44100 ! filesink location=<FONT Color=darkgreen>''/percorso/del/file.aac''</font>", 0) | ||
+ | |||
+ | <FONT Color=gray>' ''Avviamo la registrazione audio:''</font> | ||
+ | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''Arresta la registrazione del file AAC:''</font> | ||
gst_element_set_state(audio, GST_STATE_NULL) | gst_element_set_state(audio, GST_STATE_NULL) | ||
gst_object_unref(audio) | gst_object_unref(audio) |
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