Rilevare in tempo reale la quantità di frame audio processati dalla scheda audio
Da Gambas-it.org - Wikipedia.
Versione del 5 ago 2020 alle 15:07 di Vuott (Discussione | contributi)
Per rilevare in tempo reale la quantità di frame audio processati dalla scheda audio, si verificherà in continuazione il valore associato all'elemento "hw_ptr" nel file "/proc/asound/card.../pcm...p/sub0/status".
In particolare il driver ALSA aggiorna "hw_ptr" dopo aver copiato un frame nel framework ALSA.
Mentre un qualunque programma sta eseguendo un file audio o Midi, è possibile lanciare il codice sottostante:
Public Sub Main() Dim s, pr, dis As String Dim fl As File Dim i, hz, fr, mid As Integer Dim can, bla, bit As Short s = "/percorso/del/file" Print "File audio: "; s fl = Open s For Read i = Lof(fl) Read #fl, mid If mid == 1684558925 Then Print "Dimensione: "; i; " byte" i = 2147483647 can = 2 hz = 44100 bla = 4 bit = 16 Else i -= 44 Print "Dati audio: "; i; " byte" Seek fl, InStr(fl.Load(s), "fmt ") + 9 Read #fl, can Print "Canali: "; can Read #fl, hz Print "Frequenza: "; hz Seek #fl, 32 Read #fl, bla i /= bla pr = CStr(i) Read #fl, bit Print "Risoluzione: "; bit; " bit" Endif fl.Close dis = DispositivoAttivo() Print Repeat s = File.Load("/proc/asound/card" & dis &/ "sub0/status") If s == "closed\n" Then Break fr = Val(Scan(s, "*hw_ptr*: *\n*")[2]) Write "\r\e[0mFrame da processare: " & pr & " | Frame processati: \e[34m\e[1m" & CStr(fr) & "\e[0m | Tempo trascorso: \e[35m" & CStr(Date(0, 0, 0, 0, 0, 0, ((fr * 8 * bla) / (hz * can * bit)) * 1000)) Until fr >= i End Private Function DispositivoAttivo() As String ' Verifica quale dispositivo audio è attivo Dim b, c As Byte Dim s As String ' Verifica se qualche dispositivo audio è presente nel sistema: If Dir("/proc/asound", "card*", gb.Directory).Count == 0 Then Error.Raise("Dispositivo audio assente !") Repeat For Each s In Dir("/proc/asound/card" & CStr(b), "pcm*p", gb.Directory) If File.Load("/proc/asound/card" & CStr(b) &/ s & "/sub0/status") Like "*RUNNING*" Then c = 1 Next Inc b Until c == 1 Return CStr(b - 1) &/ s End
Pagina in costruzione !