Differenze tra le versioni di "Conoscere in tempo reale con "proc...fdinfo" la quantità dei dati elaborati di un file audio"
Riga 1: | Riga 1: | ||
===Introduzione=== | ===Introduzione=== | ||
− | La sottodirectory "''/fdinfo/''", posta sotto la gerarchia "''/proc/[pid]/fdinfo/''", contiene un riferimento per ogni file che il processo ha aperto, chiamato dal suo descrittore di file. Il contenuto di ogni file può essere letto per ottenerne le informazioni sul descrittore di file corrispondente. | + | La sottodirectory "''/fdinfo/'' ", posta sotto la gerarchia "''/proc/[pid]/fdinfo/'' ", contiene un riferimento per ogni file che il processo ha aperto, chiamato dal suo descrittore di file. Il contenuto di ogni file può essere letto per ottenerne le informazioni sul descrittore di file corrispondente. |
− | <BR>Ovviamente la cartella "'''[pid]'''" del percorso "''/proc/[pid]/fdinfo/''" rappresenta il numero identificativo del processo del programma Gambas che sta elaborando il file audio. | + | <BR>Ovviamente la cartella "'''[pid]'''" del percorso "''/proc/[pid]/fdinfo/'' " rappresenta il numero identificativo del processo del programma Gambas che sta elaborando il file audio. |
− | In particolare, se un programma Gambas oppure un multimediale esegue un file audio, viene generato nella sottodirectory "''/proc/[pid]/fd/''" un collegamento al file audio in esecuzione. Così nella sottodirectory "''/proc/[pid]/fdinfo/''" viene generato un file che fa riferimento al ''file-descriptor'', posto in "''/proc/[pid]/fd/''", collegato con il file audio eseguito. | + | In particolare, se un programma Gambas oppure un multimediale esegue un file audio, viene generato nella sottodirectory "''/proc/[pid]/fd/'' " un collegamento al file audio in esecuzione. Così nella sottodirectory "''/proc/[pid]/fdinfo/'' " viene generato un file che fa riferimento al ''file-descriptor'', posto in "''/proc/[pid]/fd/'' ", collegato con il file audio eseguito. |
− | Il file di riferimento, posto in "''/proc/[pid]/fdinfo/''", fornisce tre righe (campi) di informazioni. La riga che per l'argomento, trattato in questa pagina, ci interessa, è la prima. Tale primo campo di informazioni è chiamato "''pos''", e rappresenta un numero intero decimale che mostra l'offset del file in esecuzione, ossia la quantità di byte del file audio sino a quel momento elaborati dal programma lanciato. | + | Il file di riferimento, posto in "''/proc/[pid]/fdinfo/'' ", fornisce tre righe (campi) di informazioni. La riga che per l'argomento, trattato in questa pagina, ci interessa, è la prima. Tale primo campo di informazioni è chiamato "''pos''", e rappresenta un numero intero decimale che mostra l'offset del file in esecuzione, ossia la quantità di byte del file audio sino a quel momento elaborati dal programma lanciato. |
− | Tale risorsa, rappresentata dalla sottodirectory "''/proc/[pid]/fdinfo/''", può essere utilizzata anche in Gambas per conoscere in tempo reale la quantità di dati elaborati di un file audio da un'applicazione Gambas con le specifiche risorse di un apposto Componente, oppure da un programma esterno multimediale, lanciato dall'applicazione Gambas mediante ''Shell'' e gestito con le risorse della Classe ''Process''. | + | Tale risorsa, rappresentata dalla sottodirectory "''/proc/[pid]/fdinfo/'' ", può essere utilizzata anche in Gambas per conoscere in tempo reale la quantità di dati elaborati di un file audio da un'applicazione Gambas con le specifiche risorse di un apposto Componente, oppure da un programma esterno multimediale, lanciato dall'applicazione Gambas mediante ''Shell'' e gestito con le risorse della Classe ''Process''. |
==Caso in cui il file audio è eseguito con le risorse native di Gambas== | ==Caso in cui il file audio è eseguito con le risorse native di Gambas== | ||
Mostriamo un esempio con un'applicazione a ''riga di comando'' usando le risorse del Componente "gb.media", che dunque dovrà essere preliminarmente attivato: | Mostriamo un esempio con un'applicazione a ''riga di comando'' usando le risorse del Componente "gb.media", che dunque dovrà essere preliminarmente attivato: | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 20: | Riga 20: | ||
Dim fl As File | Dim fl As File | ||
− | med = "<FONT Color= | + | med = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>" |
Print "File audio: "; File.Name(med) | Print "File audio: "; File.Name(med) | ||
Print "Dimensione: "; Stat(med).Size; " byte\n" | Print "Dimensione: "; Stat(med).Size; " byte\n" | ||
Riga 57: | Riga 57: | ||
pl.Close | pl.Close | ||
− | + | End | |
==Caso in cui il file audio è eseguito da un programma lanciato con Gambas mediante Shell== | ==Caso in cui il file audio è eseguito da un programma lanciato con Gambas mediante Shell== | ||
Mostriamo un esempio in ambiente grafico, nel quale si lancerà il programma multimediale VLC, passandogli un file audio da eseguire, e si mostrerà nell'intestazione della finestra del "Form" la quantità corrente dei dati del file audio eseguiti. | Mostriamo un esempio in ambiente grafico, nel quale si lancerà il programma multimediale VLC, passandogli un file audio da eseguire, e si mostrerà nell'intestazione della finestra del "Form" la quantità corrente dei dati del file audio eseguiti. | ||
− | + | Public Sub Button1_Click() | |
Dim pr As Process | Dim pr As Process | ||
Riga 68: | Riga 68: | ||
Dim i As Integer | Dim i As Integer | ||
− | media = "<FONT Color= | + | media = "<FONT Color=darkgreen>''/percorso/del/file/audio''</font>" |
<FONT Color=gray>' ''Lancia il programma VLC passandogli il percorso del file audio da eseguire:''</font> | <FONT Color=gray>' ''Lancia il programma VLC passandogli il percorso del file audio da eseguire:''</font> | ||
Riga 95: | Riga 95: | ||
pr.Kill | pr.Kill | ||
− | + | End | |
− | + | Public Sub Form_Close() | |
<FONT Color=gray>' ''Se viene comunque chiuso il "Form", allora viene terminato il processo del programma multimediale:''</font> | <FONT Color=gray>' ''Se viene comunque chiuso il "Form", allora viene terminato il processo del programma multimediale:''</font> | ||
Shell "killall vlc" | Shell "killall vlc" | ||
− | + | End | |
Versione attuale delle 18:06, 17 giu 2024
Indice
Introduzione
La sottodirectory "/fdinfo/ ", posta sotto la gerarchia "/proc/[pid]/fdinfo/ ", contiene un riferimento per ogni file che il processo ha aperto, chiamato dal suo descrittore di file. Il contenuto di ogni file può essere letto per ottenerne le informazioni sul descrittore di file corrispondente.
Ovviamente la cartella "[pid]" del percorso "/proc/[pid]/fdinfo/ " rappresenta il numero identificativo del processo del programma Gambas che sta elaborando il file audio.
In particolare, se un programma Gambas oppure un multimediale esegue un file audio, viene generato nella sottodirectory "/proc/[pid]/fd/ " un collegamento al file audio in esecuzione. Così nella sottodirectory "/proc/[pid]/fdinfo/ " viene generato un file che fa riferimento al file-descriptor, posto in "/proc/[pid]/fd/ ", collegato con il file audio eseguito.
Il file di riferimento, posto in "/proc/[pid]/fdinfo/ ", fornisce tre righe (campi) di informazioni. La riga che per l'argomento, trattato in questa pagina, ci interessa, è la prima. Tale primo campo di informazioni è chiamato "pos", e rappresenta un numero intero decimale che mostra l'offset del file in esecuzione, ossia la quantità di byte del file audio sino a quel momento elaborati dal programma lanciato.
Tale risorsa, rappresentata dalla sottodirectory "/proc/[pid]/fdinfo/ ", può essere utilizzata anche in Gambas per conoscere in tempo reale la quantità di dati elaborati di un file audio da un'applicazione Gambas con le specifiche risorse di un apposto Componente, oppure da un programma esterno multimediale, lanciato dall'applicazione Gambas mediante Shell e gestito con le risorse della Classe Process.
Caso in cui il file audio è eseguito con le risorse native di Gambas
Mostriamo un esempio con un'applicazione a riga di comando usando le risorse del Componente "gb.media", che dunque dovrà essere preliminarmente attivato:
Public Sub Main() Dim pl As MediaPipeline Dim med, prc, s, dati, dt As String Dim i As Integer Dim tm As Date Dim dur As Float Dim fl As File med = "/percorso/del/file/audio" Print "File audio: "; File.Name(med) Print "Dimensione: "; Stat(med).Size; " byte\n" pl = New MediaPipeline(Null, "playbin") pl["uri"] = Media.URL(med) pl.Play() tm = Now Repeat dur = pl.Duration Until dur > 0 prc = "/proc" &/ CStr(Application.Handle) Repeat Inc i s = Dir(prc &/ "fd", "*", gb.Device)[i] Until Stat(prc &/ "fd" &/ s).Link == med ' Se il file descriptor è un link al file audio eseguito,... ' ...allora viene eseguito il ciclo per leggere il corrispondente file nella sottodirectory "/proc/[pid]/fdinfo/": Repeat fl = Open prc &/ "fdinfo" &/ s For Read Line Input #fl, dati ' Estrapola la parte della stringa afferente ai byte processati: dt = Scan(dati, "*\t*")[1] Write "\r \e[0mByte processati: \e[31m" & dt Flush fl.Close Wait 0.01 ' Quando il tempo trascorso dall'inizio dell'esecuzione audio è uguale alla durata del file audio, si esce dal ciclo: Until DateDiff(tm, Now, gb.Second) >= dur Print "\n\n\e[0mEsecuzione terminata !" pl.Stop pl.Close End
Caso in cui il file audio è eseguito da un programma lanciato con Gambas mediante Shell
Mostriamo un esempio in ambiente grafico, nel quale si lancerà il programma multimediale VLC, passandogli un file audio da eseguire, e si mostrerà nell'intestazione della finestra del "Form" la quantità corrente dei dati del file audio eseguiti.
Public Sub Button1_Click() Dim pr As Process Dim fl As File Dim media, prc, s, dati As String Dim i As Integer media = "/percorso/del/file/audio" ' Lancia il programma VLC passandogli il percorso del file audio da eseguire: pr = Shell "cvlc " & media ' Individua con precisione il numero del processo del programma VLC dalla proprietà ".Handle" della variabile "Process", aumentato di un'unità: prc = "/proc" &/ CStr(pr.Handle + 1) Wait 0.5 Repeat Inc i s = Dir(prc &/ "fd", "*", gb.Device)[i] Until Stat(prc &/ "fd" &/ s).Link == media ' Se il file descriptor è un link al file audio eseguito,... ' ...allora viene eseguito il ciclo per leggere il corrispondente file nella sottodirectory "/proc/[pid]/fdinfo/": While Exist(prc &/ "fdinfo" &/ s) fl = Open prc &/ "fdinfo" &/ s For Read Line Input #fl, dati ' Mostra i dati audio sino a questo momento processati: Me.Text = "Dati audio processati: " & Scan(dati, "*\t*")[1] fl.Close Wait 0.1 Wend Print "termine" pr.Close pr.Kill End Public Sub Form_Close() ' Se viene comunque chiuso il "Form", allora viene terminato il processo del programma multimediale: Shell "killall vlc" End