Differenze tra le versioni di "Eseguire e salvare un'onda sinusoidale mediante il Componente gb.media"
Da Gambas-it.org - Wikipedia.
(3 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 4: | Riga 4: | ||
==Eseguire un'onda sinusoidale== | ==Eseguire un'onda sinusoidale== | ||
Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio: | Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio: | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 25: | Riga 25: | ||
pl.Close | pl.Close | ||
− | + | End | |
+ | ====Usando la connessione al Server audio "Jack"==== | ||
In quest'altro esempio, simile al precedente, si farà uso della connessione al Server audio "Jack" (bisogna ricordare che ''Jack'' va avviato <SPAN Style="text-decoration:underline">prima</span> di lanciare il seguente codice gambas). | In quest'altro esempio, simile al precedente, si farà uso della connessione al Server audio "Jack" (bisogna ricordare che ''Jack'' va avviato <SPAN Style="text-decoration:underline">prima</span> di lanciare il seguente codice gambas). | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 49: | Riga 50: | ||
pl.Close | pl.Close | ||
− | + | End | |
+ | |||
==Eseguire e salvare un'onda sinusoidale== | ==Eseguire e salvare un'onda sinusoidale== | ||
− | |||
Per eseguire e contemporaneamente salvare in un file WAV un'onda sinusoidale, è possibile usare il seguente codice: | Per eseguire e contemporaneamente salvare in un file WAV un'onda sinusoidale, è possibile usare il seguente codice: | ||
Private bo As Boolean | Private bo As Boolean | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, con, tee, que, wav, snk, aas As MediaControl | Dim src, con, tee, que, wav, snk, aas As MediaControl | ||
− | |||
− | |||
pl = New MediaPipeline | pl = New MediaPipeline | ||
Riga 76: | Riga 75: | ||
wav = New MediaControl(pl, "wavenc") | wav = New MediaControl(pl, "wavenc") | ||
snk = New MediaControl(pl, "filesink") | snk = New MediaControl(pl, "filesink") | ||
− | snk["location"] = | + | snk["location"] = "/tmp/onda.wav" |
aas = New MediaControl(pl, "autoaudiosink") | aas = New MediaControl(pl, "autoaudiosink") | ||
Riga 94: | Riga 93: | ||
Wait 0.01 | Wait 0.01 | ||
Until bo = True | Until bo = True | ||
− | |||
− | |||
pl.Stop | pl.Stop | ||
Riga 104: | Riga 101: | ||
Quit | Quit | ||
− | + | End | |
+ | |||
− | + | Public Sub Application_Read() <FONT Color=gray>' ''Premendo il tasto "Invio" della tastiera, si termina il programma:''</font> | |
bo = True | bo = True | ||
− | + | End | |
Versione attuale delle 17:50, 17 gen 2024
Indice
Usando le Classi "MediaPipeline" e "MediaControl"
Mostriamo di seguito alcune modalità usando le Classi MediaPipeline e MediaControl del Componente gb.media.
Eseguire un'onda sinusoidale
Per solo eseguire un'onda sinusoidale si potrà adottare il seguente esempio:
Public Sub Main() Dim pl As MediaPipeline Dim src, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "audiotestsrc") src["volume"] = "0.5" src["freq"] = "440" src["wave"] = 0 ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1] snk = New MediaControl(pl, "autoaudiosink") src.LinkTo(snk) pl.Play() Wait 10 pl.Close End
Usando la connessione al Server audio "Jack"
In quest'altro esempio, simile al precedente, si farà uso della connessione al Server audio "Jack" (bisogna ricordare che Jack va avviato prima di lanciare il seguente codice gambas).
Public Sub Main() Dim pl As MediaPipeline Dim src, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "audiotestsrc") src["volume"] = "0.5" src["freq"] = "440" src["wave"] = 0 ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1] snk = New MediaControl(pl, "jackaudiosink") src.LinkTo(snk) pl.Play() Wait 10 pl.Close End
Eseguire e salvare un'onda sinusoidale
Per eseguire e contemporaneamente salvare in un file WAV un'onda sinusoidale, è possibile usare il seguente codice:
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src, con, tee, que, wav, snk, aas As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "audiotestsrc") src["volume"] = "0.5" src["freq"] = "440" src["wave"] = 0 ' Il valore 0 consente che sia riprodotta un'onda di tipo sinusoidale [nota 1] tee = New MediaControl(pl, "tee") ' "tee" duplica il flusso di dati audio [nota 2] que = New MediaControl(pl, "queue") con = New MediaControl(pl, "audioconvert") wav = New MediaControl(pl, "wavenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/onda.wav" aas = New MediaControl(pl, "autoaudiosink") src.LinkTo(tee) tee.LinkTo(que) que.LinkTo(con) con.LinkTo(wav) wav.LinkTo(snk) tee.LinkTo(aas) pl.Play() Repeat Write "\r\e[0mTempo trascorso: \e[31m" & Str(Time(0, 0, 0, pl.Position * 1000)) Wait 0.01 Until bo = True pl.Stop pl.Close Print "\n\e[0m Operazione terminata !" ' Usando l'Evento "Application_Read()", è necessario invocare "Quit" per terminare il programma: Quit End Public Sub Application_Read() ' Premendo il tasto "Invio" della tastiera, si termina il programma: bo = True End
Note
[1] Al riguardo vedere: https://gstreamer.freedesktop.org/documentation/audiotestsrc/index.html?gi-language=c
[2] Vedere la seguente pagina: Duplicare il flusso dei dati audio di una pipeline della Classe ''MediaPipeline'' del componente gb.media