Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: luca1202 - 03 Gennaio 2010, 15:18:58

Titolo: [risolto]determinare lunghezza file audio
Inserito da: luca1202 - 03 Gennaio 2010, 15:18:58
ciao a tutti mi chiamo Luca e mi sono appena iscritto al forum!!
è da un pò che lavoro in gambas e mi trovo ad avere un problema al quale non riesco a trovare una soluzione!!

sto realizzando un player audio e ho un problema con la barra di scorrimento della canzone in quanto non riesco a determinare a priori quanto dovrà essere lunga!!
ho utilizzato uno slider e il maxvalue l'ho metto io ma non va bene!!

a questo punto si prospetta un problema... come faccio a determinare a priori la lunghezza di una canzone? utilizzo la libreria gb.sdl.sound e non c'è una funzione per fare questo!!
qualcuno conosce un metodo o una libreria che mi possa aiutare?
Titolo: Re: determinare lunghezza file audio
Inserito da: fsurfing - 03 Gennaio 2010, 16:25:16
se la canzone è un mp3 con tag v2 ce sritto all' interno, altrimenti dovresti analizzare il file e in base al bitrate e alla dimensione fai una stima della durata.

io in un mio player ho saltato bellamente questo passo non includendo alcuna barra di scorrimento,

kokko mi pare abbia realizzato un bellissimo player in gambas, mi pare si chiami XT7-player prova a fare una ricerca in google, magari lui ha trovato un buon sistema
Titolo: Re: determinare lunghezza file audio
Inserito da: giulio - 03 Gennaio 2010, 17:20:26
Se hai mplayer installato, prova l'esempio allegato.

Guarda il codice, è molto semplice da capire.
Apri un file audio e avrai la lunghezza.

Siccome mplayer restituisce la durata in secondi, ho scrtitto
una piccola funzione per convertirlo in hh:mm:ss.cc-

Allego.
Titolo: Re: determinare lunghezza file audio
Inserito da: Ceskho - 03 Gennaio 2010, 17:44:27
Comunque il problema era già stato affrontato ed era stato lo stesso giulio a risolverlo ad un altro utente..
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 03 Gennaio 2010, 19:49:14
ottimo vi ringrazio per l'aiuto!!
ora provo!!
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 03 Gennaio 2010, 20:14:13
dunque il codice del file durata-video è molto semplice, c'è solo un problema!!

non capisco come fa la variabile sDurataVideo a contenere la durata del file considerando che non viene mai usata!!

l'unica parte del codice in cui viene usata è commentata... non capisco proprio!! magari sfugge qualcosa a me!
Titolo: Re: determinare lunghezza file audio
Inserito da: fsurfing - 03 Gennaio 2010, 20:29:39
in effetti la variabile sduratavideo è vuota e mai usata

il comando shell ti scrive il valore della console

per scrivere il valore nella variabile in modo che poi utilizzarlo in altre parti del programma devi modificare così:

Codice: [Seleziona]
Quote.Shell(sFileVideo) & " 2>&1 | grep ID_LENGTH | cut -f2 -d=" WAIT TO sDurataVideo 
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 03 Gennaio 2010, 20:43:47
ti posso assicurare che l'ho eseguito con quella linea commentata e ha funzionato!! ho provato a scommentarla e mi dà errore...

il mistero s'infittisce  :-o
Titolo: Re: determinare lunghezza file audio
Inserito da: fsurfing - 03 Gennaio 2010, 20:46:40
forse mi sono spiegato male
ti lascio il pacchetto con una modifica
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 03 Gennaio 2010, 20:54:44
ah ok adesso capisco!!!

grazie mille!!
Titolo: Re: determinare lunghezza file audio
Inserito da: giulio - 04 Gennaio 2010, 00:26:52
Scusate, errore mio. Ho modificato al volo un esempio
che riguardava la durata video per rispondere alla richiesta
della durata audio. Grazie fsurfing per la 'pezza'. Ciao.
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 04 Gennaio 2010, 10:51:48
avrei un ulteriore domanda sempre legata al codice.
ok ora funziona però mi dà il risultato in una stringa e io avrei bisogno di un intero!!

come posso fare? più che altro perchè questa cosa la sò fare in C che conosco bene, in gambas nonostante mi sia scaricato diversi manuali e ho sempre google sott'occhio qualcosa ancora mi sfugge!!

ho pensato di prendere la stringa ottenuta e tramite la funzione "split" farla diventare un array di stringhe cosi da poter convertire elemento per elemento solo che non sò come muovermi all'interno di una stringa (es. in C posso scrivere stringa mentre in gambas non ne vuole sapere, ho provato anche con stringa(i), con qualche vago ricordo di visual basic, ma niente) può andare il mio metodo o c'è un metodo che me lo fa lui istantaneamente tipo java?
Titolo: Re: determinare lunghezza file audio
Inserito da: giulio - 04 Gennaio 2010, 11:14:16
intero = Val(stringa)
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 04 Gennaio 2010, 11:21:55
Val(stringa) mi restituisce null e in stringa sono sicuro che c'è qualcosa

ho capito dove sta il problema... il numero che ritorna dalla funzione che mi hanno postato qua ritorna un numero tipo 214.5 e questo non me lo riesce a convertire (suppongo per via del .) devo risolvere questo problema!
Titolo: Re: determinare lunghezza file audio
Inserito da: fsurfing - 04 Gennaio 2010, 12:14:39
se il problema è quello puoi fare cosi:

Codice: [Seleziona]


intero=val(replace(stringa,".",","))



ma forse invece di un integer dovresti usare un float così tieni anche i decimali
Titolo: Re: determinare lunghezza file audio
Inserito da: giulio - 04 Gennaio 2010, 12:21:06
Comunque a me Val("23.56") restituisce 23 e non NULL. Val non ha problemi con il punto
separatore dei decimali. Uso Gambas 2.16.
Titolo: Re: determinare lunghezza file audio
Inserito da: luca1202 - 04 Gennaio 2010, 12:22:41
ho già risolto!!

avevo provato con replace ma il problema persisteva allora ho seguito un'altra strada!!

ho preso la parte prima della virgola tramite la funzione "left" di quello ho preso il valore usando la funzione Val(stringa) e a quel valore ho aggiunto 1, in questo modo la barra di progresso ora funziona correttamente!!
ottimo grazie a tutti per la pazienza  :-D
Titolo: Re: [risolto]determinare lunghezza file audio
Inserito da: Ceskho - 04 Gennaio 2010, 15:08:44
Ma sei sicuro che il left copra tutti i tipi di dati? Hai tenuto presente che il numero di cifre prima della virgola varia?
Titolo: Re: [risolto]determinare lunghezza file audio
Inserito da: vuott - 14 Settembre 2012, 12:34:22
Un segnale per poter essere ricostruito a partire dai suoi campioni, deve essere campionato con una "frequenza di campionamento" fs pari al doppio della banda del segnale, ossia più precisamente della frequenza più alta contenuta nello spettro del segnale di partenza (Teorema di Nyquist-Shannon). Nel caso di segnali audio, poiché la banda di udibilita' degli esseri umani si estende da 0Hz a 20000Hz, avremo:
 fs=2*20000=40000Hz
(per motivi tecnici i CD vengono campionati con fs=44000Hz=44KHz).

Se ad ogni campione associamo n bit, allora abbiamo il "bit-rate" Br=n*fs
(nei CD: 16 bit=>Br=16*44000 bit/secondo)

Quindi se il brano è mono a 16 bit campionato con frequenza fs e dura T secondi, significa che - ad esempio - un lettore CD legge un numero di bit pari a: "numero di bit del brano=T*Br";
se fosse stereo allora basterebbe moltiplicare per 2
mono: bit_letti=T*Br
stereo: bit_letti=2*T*Br

Se conosciamo la dimensione in bit del brano(bit_letti), si usa la formula inversa:
 T=bit_letti/Br, se mono
 T=(bit_letti/Br)/2, se stereo
e non resta che calcolare Br in base ai dati disponibili del brano (mono, stereo, frequenza di campionamento).


In ogni caso rinvio a questa pagina della nostra Wiki:

   https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Gestione_dei_dati_audio_e_dei_file_audio


Titolo: Re: [risolto]determinare lunghezza file audio
Inserito da: md9327 - 14 Settembre 2012, 17:43:13
Se parti da una stringa, puoi usare Split(valore, ",") per dividere in intero e mantissa.
In alternativa, se sei sicuro di avere sempre un valore numerico, puoi convertirlo con CFloat(Replace(value,",",".")), sostituendo la virgola con un punto.
Il formato di conversione dipende molto dal Local, ovvero dall'impostazione di lingua del proprio sistema e nazione. In Italia si usa appunto la virgola per rappresentare un valore in virgola mobile. Cosa diversa in USA...
Per ovviare a questo, o si tratta tutto a livello binario, ovvero con tipi di dato adatti (che non è sempre possibile), oppure creare funzioni apposite di conversione.