Autore Topic: Analizzare il valore RMS, il picco e il decay dei dati audio mediante gb.media  (Letto 154 volte)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.795
  • Ne mors quidem nos iunget
    • Mostra profilo
Il seguente codice consente di analizzare il valore RMS, il picco e il decay dei dati audio di un file WAV, usando il plug-ig "Level " di GStreamer mediante le Classi "MediaPipeline" e "MediaControl" del Componente gb.media .

Codice: [Seleziona]
Private pl As MediaPipeline
Private tb As ToggleButton


Public Sub _new()          ' _

  With Me
    .W = 500
    .H = 200
  End With
 
  With tb = New ToggleButton(Me) As "Tasto"
    .X = 300
    .Y = 100
    .W = 80
    .H = 40
    .Text = "Start"
  End With
 
End


Public Sub Form_Open()          ' _

  Dim src, par, con, lev, snk As MediaControl
 
   pl = New MediaPipeline As "Pipeline"
   
   src = New MediaControl(pl, "filesrc")
   src["location"] = "/percorso/del/file.wav"
   par = New MediaControl(pl, "wavparse")
   con = New MediaControl(pl, "audioconvert")
   lev = New MediaControl(pl, "level")
   snk = New MediaControl(pl, "alsasink")
   src.LinkTo(par)
   par.LinkTo(con)
   con.LinkTo(lev)
   lev.LinkTo(snk)

End


Public Sub Tasto_Click()          ' _
 
 If tb.Value Then
   pl.Play()
   tb.Text = "Stop"
 Else
   pl.Stop()
   pl.Close()
   Me.Close
 Endif
 
End


Public Sub Pipeline_Event(Message As MediaMessage)
 
  Dim can, b As Byte
  Dim rms As Float
 
   Print
   If Message.Name = "level" Then
     For can = 0 To Message[Message.Keys[5]].count - 1   ' Numero canali
       Print "\nCanale " & CStr(can + 1)
       Print Message.Keys[0], CStr(Date(0, 0, 0, 0, 0, 0, Message[Message.Keys[can]] / 1000000))
       Print
       For b = 5 To Message.count - 1
         With Message
           Write "   " & CStr(.Keys[b]) & ": " & CStr(Message[.Keys[b]][can])
         End With
         If b = 5 Then
           rms = (10 ^ (Message[Message.Keys[b]][can] / 20))
           Print "     Valore rms normalizzato: "; rms
         Endif
       Next
     Next
   Endif
   
End
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 594
    • Mostra profilo
scusa vuot, ma mi restituisce "not an object":

Codice: [Seleziona]
If Message.Name = "level" Then
     For can = 0 To Message[Message.Keys[5]].count - 1   ' Numero canali

nel debug ho:
gb.media: warning: unsupported datatype: GValueArray
« Ultima modifica: 11 Settembre 2017, 12:09:42 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 594
    • Mostra profilo
cosi' leggo qualcosa:

Codice: [Seleziona]
Public Sub Pipeline_Event(Message As MediaMessage)
   
    If Message.Name = "level" Then
      Debug Message.Key
     
      Debug Message.Keys[0] 'endtime
      Debug Message.Keys[1] 'timestamp
      Debug Message.Keys[2] 'stream-time
      Debug Message.Keys[3] 'running-time
      Debug Message.Keys[4] 'duration
      Debug Message.Keys[5] 'rms
      Debug Message.Keys[6] 'peak
      Debug Message.Keys[7] 'decay
    Endif
   
   
End

ma non riesco a ottenere dati "dentro" ai vari key/keys ....
« Ultima modifica: 11 Settembre 2017, 13:12:20 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.795
  • Ne mors quidem nos iunget
    • Mostra profilo
Ho sollevato quel problema lo scorso mese su Bugtracker:  bug report 1140.
Il problema è stato risolto: devi evidentemente effettuare l'aggiornamento di Gambas.
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 594
    • Mostra profilo
che versione hai? io la 3.9.1 .. ma dal repositori gambas-team mi si distrugge tutto apt ...
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.795
  • Ne mors quidem nos iunget
    • Mostra profilo
A me è:

Gambas=3.10.90 1434cb0 (master)

Aggiornamento via GIT con metodo "sotema/Gianluigi".
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.795
  • Ne mors quidem nos iunget
    • Mostra profilo
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 594
    • Mostra profilo
passato a 3.10 dal repository lanchpad gambas-team ma nulla da fare ...

Citazione
gb.media: warning: unsupported datatype: GValueArray
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.795
  • Ne mors quidem nos iunget
    • Mostra profilo
Evidentemente non aggiorna.
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 594
    • Mostra profilo
Questo lo hai provato ?

http://www.gambas-it.org/smf/index.php?topic=5864.0

si ho modificato questa riga per far analizzare anche file compressi:

Codice: [Seleziona]
lev = gst_parse_launch("filesrc location=" & fileaudio & " ! mad ! audioconvert ! level interval=1000000 ! audio/x-raw,channels=2 ! fakesink", 0)

ma ho dovuto anche installare la libreria condivisa con:
Codice: [Seleziona]
sudo apt-get install libgstreamer1.0-dev libgstreamer1.0-0

funziona ..... con le librerie esterne
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Senatore Gambero
  • ******
  • Post: 6.795
  • Ne mors quidem nos iunget
    • Mostra profilo
ma ho dovuto anche installare la libreria condivisa con:
Codice: [Seleziona]
sudo apt-get install libgstreamer1.0-dev libgstreamer1.0-0

Riprova ora con gb.media .
" Chi non vede il non senso del mondo, è vano a sua volta. "

(B. Pascal, 1623 – 1662)