Private pl As MediaPipeline
Public Sub ToggleButton1_Click()
Dim src, cnv, ven, omu, snk As MediaControl
Dim tm As Date
If ToggleButton1.Value Then
pl = New MediaPipeline
src = New MediaControl(pl, "uridecodebin")
src["uri"] = "http://dirección/web/flujo/radio" ' Dirección del flujo web radio
cnv = New MediaControl(pl, "audioconvert")
ven = New MediaControl(pl, "vorbisenc")
omu = New MediaControl(pl, "oggmux")
snk = New MediaControl(pl, "filesink")
snk["location"] = "/tmp/audio.ogg" ' Carpeta donde será guardado el archivo audio OGG
src.LinkLaterTo(cnv)
cnv.LinkTo(ven)
ven.LinkTo(omu)
omu.LinkTo(snk)
pl.Play()
Repeat ' Bucle para esperar a que la reproducción de audio se active
Wait 0.01
Until pl.State == Media.Playing
tm = Now
Repeat
Me.Caption = Format(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)), "hh:nn:ss")
Wait 0.01
Until pl.State == Media.Ready
Else
pl.Stop
pl.Close
Endif
End
(09-11-2020, 20:12)kokodrilo escribió: grabar la radio mientras se escucha
Private pl As MediaPipeline
Public Sub ToggleButton1_Click()
Dim src, tee, que As MediaControl
Dim cnv1, snk1 As MediaControl
Dim cnv2, ven, omu, snk2 As MediaControl
Dim tm As Date
If ToggleButton1.Value Then
pl = New MediaPipeline
src = New MediaControl(pl, "uridecodebin")
src["uri"] = "http://dirección/web/flujo/radio" ' Dirección del flujo web radio
tee = New MediaControl(pl, "tee")
que = New MediaControl(pl, "queue")
' Para escuchar el flujo radio web:
cnv1 = New MediaControl(pl, "audioconvert")
snk1 = New MediaControl(pl, "autoaudiosink")
' Para guardar el flujo radio web en formato OGG:
cnv2 = New MediaControl(pl, "audioconvert")
ven = New MediaControl(pl, "vorbisenc")
omu = New MediaControl(pl, "oggmux")
snk2 = New MediaControl(pl, "filesink")
snk2["location"] = "/tmp/audio.ogg" ' Carpeta donde será guardado el archivo audio OGG
' Divide el flujo de datos audio en dos ramas:
src.LinkLaterTo(tee)
' 1^ rama de datos audio (para escuchar):
tee.LinkTo(que)
que.LinkTo(cnv1)
cnv1.LinkTo(snk1)
' 2^ rama de datos audio (para guardar):
tee.LinkTo(cnv2)
cnv2.LinkTo(ven)
ven.LinkTo(omu)
omu.LinkTo(snk2)
pl.Play()
Repeat
Wait 0.01
Until pl.State == Media.Playing
tm = Now
Repeat
Me.Caption = Format(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)), "hh:nn:ss")
Wait 0.01
Until pl.State == Media.Ready
Else
pl.Stop
pl.Close
Endif
End
Public Sub Form_Close()
ToggleButton1.Value = False
' Ya que, al cerrar el Form, los datos guardados en el archivo inexplicablemente se pierden,
' tenemos que copiar el archivo de audio en un otro nuevo archivo similar:
Copy "/tmp/audio.ogg" To "/tmp/audiofinal.ogg"
End
(09-11-2020, 21:49)vuott escribió: ToggleButton1_Value = False
(10-11-2020, 07:42)kokodrilo escribió: ToggleButton1.Value = False
(10-11-2020, 07:42)kokodrilo escribió: poder escuchar solamente, y en algún momento grabar
(10-11-2020, 17:08)vuott escribió: crear y usar dos Pipeline diferentes
Private pl As MediaPipeline
Private tee As MediaControl
Private cnv2 As MediaControl
Private ven As MediaControl
Private omu As MediaControl
Private snk2 As MediaControl
Private i As Integer = -1
Public Sub Form_Open()
ToggleButton1.Text = "Escucha radio"
Button1.Enabled = False
Button2.Enabled = False
End
Public Sub ToggleButton1_Click()
If ToggleButton1.Value Then
ToggleButton1.Text = "Cerrar el programa"
Button1.Enabled = True
Button1.Text = "Guardar audio"
Button2.Enabled = True
Button2.Text = "Stop grabacion"
Audio()
Else
pl.Stop
pl.Close
Me.Close
Endif
End
Public Sub Button1_Click()
Audio()
End
Private Procedure Audio()
Dim src, que As MediaControl
Dim cnv1, snk1 As MediaControl
Dim tm As Date
pl = New MediaPipeline
src = New MediaControl(pl, "uridecodebin")
src["uri"] = "http://radiogalileo.it:8000/RadioStranamore"
tee = New MediaControl(pl, "tee")
que = New MediaControl(pl, "queue")
' Para escuchar el flujo radio web:
cnv1 = New MediaControl(pl, "audioconvert")
snk1 = New MediaControl(pl, "autoaudiosink")
' Para guardar el flujo radio web en formato OGG:
cnv2 = New MediaControl(pl, "audioconvert")
ven = New MediaControl(pl, "vorbisenc")
omu = New MediaControl(pl, "oggmux")
' Divide el flujo de datos audio en dos ramas:
src.LinkLaterTo(tee)
' 1^ rama de datos audio (para escuchar):
tee.LinkTo(que)
que.LinkTo(cnv1)
cnv1.LinkTo(snk1)
' 2^ rama de datos audio (para guardar):
tee.LinkTo(cnv2)
cnv2.LinkTo(ven)
ven.LinkTo(omu)
snk2 = New MediaControl(pl, "filesink")
Inc i
snk2["location"] = "/tmp/audio" & CStr(i) & ".ogg"
omu.LinkTo(snk2)
If Exist("/tmp/audio0.ogg") Then Kill "/tmp/audio0.ogg"
pl.Play()
Button2.Enabled = True
Repeat
Wait 0.01
Until pl.State == Media.Playing
tm = Now
Repeat
Me.Caption = Format(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond)), "hh:nn:ss")
Wait 0.01
Until pl.State == Media.Ready
End
Public Sub Button2_Click()
Move "/tmp/audio" & CStr(i) & ".ogg" To "/tmp/audiofinal" & CStr(i) & ".ogg" ' Cual es y donde está el archivo audio guardado
Button1.Enabled = True
Button2.Enabled = False
End