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()'"
(Creata pagina con "La funzione esterna "gst_parse_launch()" della libreria ''GStreamer'' consente di costruire e gestire in modo semplice una pipeline ''GStreamer''. La riga della pipeline gesti...") |
|||
Riga 5: | Riga 5: | ||
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'' ". | ||
− | =Registrare in un file | + | =Registrare una fonte audio esterna in un file audio di formato WAV= |
+ | Private audio As Pointer | ||
+ | Private bo As Boolean | ||
+ | |||
+ | |||
+ | Library "libgstreamer-1.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>' ''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=#B22222>44100</font>,depth=<FONT Color=#B22222>16</font>,channels=<FONT Color=#B22222>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> | ||
+ | gst_element_set_state(audio, GST_STATE_PLAYING) | ||
+ | |||
+ | While Not bo | ||
+ | gst_element_query_position(audio, GST_FORMAT_TIME, VarPtr(tempus)) | ||
+ | Write "\rTempo trascorso: " & Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) | ||
+ | Flush | ||
+ | Wait 0.1 | ||
+ | Wend | ||
+ | |||
+ | <FONT Color=gray>' ''Arresta la registrazione del file MP3:''</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 MP3= | ||
+ | Mostriamo un esempio pratico per registrare in MP3 una fonte sonora esterna: | ||
+ | Private audio As Pointer | ||
+ | Private bo As Boolean | ||
+ | |||
+ | |||
+ | Library "libgstreamer-1.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 MP3:''</font> | ||
+ | audio = gst_parse_launch("alsasrc ! audioconvert ! lamemp3enc ! filesink location=<FONT Color=darkgreen>''/percorso/del/file.mp3''</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: " & Write "\rTempo trascorso: " & Str(Time(0, 0, 0, tempus / 1000000)) | ||
+ | Flush | ||
+ | Wait 0.1 | ||
+ | Wend | ||
+ | |||
+ | <FONT Color=gray>' ''Arresta la registrazione del file MP3:''</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 OGG= | ||
Mostriamo un esempio pratico per registrare in OGG una fonte sonora esterna: | Mostriamo un esempio pratico per registrare in OGG una fonte sonora esterna: | ||
Private audio As Pointer | Private audio As Pointer |
Versione delle 16:43, 11 gen 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 ".
Registrare una fonte audio esterna in un file audio di formato WAV
Private audio As Pointer Private bo As Boolean Library "libgstreamer-1.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: " & 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 MP3
Mostriamo un esempio pratico per registrare in MP3 una fonte sonora esterna:
Private audio As Pointer Private bo As Boolean Library "libgstreamer-1.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 MP3: audio = gst_parse_launch("alsasrc ! audioconvert ! lamemp3enc ! filesink location=/percorso/del/file.mp3", 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: " & 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" 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: " & 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