Italian far eseguire 10 file audio senza accavallamento

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ciao a tutti, ho realizzato un multitimer fino a 50 postazioni, ad ogni fine tempo del timer una voce in mp3 dirà: Numero 1...tempo scaduto e cosi via con gli altri, il problema si pone quando contemporaneamente partono ad esempio 3 timer ed allo scadere del tempo si accavallano tutti e 3 non riuscendo a capire nulla, la domanda è la seguente: come faccio a far riprodurre in sequenza i timer senza nessun accavallamento, considerando che sono 50 i timer ed e possibile che in questi 50 spesso succedono 4 o più timer che scadono allo stesso tempo, faccio presente che per questo progetto ho utilizzato 50 mediaplayer quindi: mp1 as mediaplayer , mp2 as mediaplayer e così fino ad arrivare a 50, pensate che si possa fare qualcosa che eviti l'accavallemento? esiste già un software per windows che qualcuno a realizzato ed ha questa funzione di evitare l'accavallamento, sapete come fare? grazie in anticipo della risposta spero positiva o di un piccolo esempio.
 

LucaMs

Expert
Licensed User
Longtime User
Sicuro che ti serva tutta quella roba, 50 timer e 50 mediaplayer?

Poi parli di windows... quindi tu stai sviluppando in b4j?

Non ho capito benissimo :D ciò che devi fare, ma a naso tutto dipende dall'evento Tick, in cui gestire magari l'avvio di altri timer (o forse "impiccarsi" un po' con i Wait For).
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
no, ho sviluppato e terminato una app per android con 50 timer per uso giostre e possessori di tappeti elastici e gonfiabili a tempo, solo che mi hanno fatto notare che appena partono 3 timer o più contemporaneamente si riproducono alla fine del tempo tutti e tre e non in sequenza cosa che dovrebbe fare, non saprei come e cosa fare per far ciò, questo il link su youtube del video del timer da 20 posti per renderti conto di ciò che ho realizzato e vorrei sistemare questo problema, premetto che uso 50 image click per far partire il timer, 50 timer da tm1 a tm50 con 50 mediaplayer da mp1 a mp50.

premetto che è attivato il loop nell'ultima versione e quindi ripete sempre la stessa frase fin quando si preme stop.
 

LucaMs

Expert
Licensed User
Longtime User
Prima ti dico cosa farei e... che non ti consiglio di fare, perché temo che dovresti "studiare" un po'.

1) Creerei una Custom View, ovvero una tua view personalizzata, che fa ciò che fanno le 20 Imageview dell'app.
2) le metterei in una ScrollView (o in una CustomListView, forse); in questo modo non saresti costretto ad averne un numero prefissato, potresti averne da 1 fino anche a 10.000, volendo.

Poi... il problema. Se ho capito bene, il problema è che due o più timer potrebbero scattare nello stesso momento e di conseguenza avviare contemporaneamente il relativo file audio, quindi questi andrebbero a sovrapporsi.

Se è questo, non penso che ci sia una soluzione.
 

LucaMs

Expert
Licensed User
Longtime User
Se è questo, non penso che ci sia una soluzione.
Forse una soluzione c'è ma solo perché i timer non devono essere precisi al secondo, semmai al minuto.

Dovresti creare una coda (una List) degli oggetti MediaPlayer da far suonare. Quando un timer scatta, vai a controllare se la List è vuota; se lo è, fai suonare il file e basta.
Se non lo è, accodi quel MediaPlayer. Quando scatta l'evento MediaPlayer1_Complete, elimini il primo della lista e fai suonare il successivo nella lista.

Tutti i mediaplayer devono essere inizializzati con lo stesso nome evento.
 

udg

Expert
Licensed User
Longtime User
Un altro modo potrebbe essere una variabile globale (es. PossoAnnunciare).
Il primo timer che scatta la setta a False e così gli altri si pongono in attesa (magari assegnando un extra time randomo di qualche secondo). Appena termina il primo annuncio, questi setta la variabile a True, così il prossimo timer a scattare potrà eseguire il suo play.

La soluzione di LucaMs è molto più pulita, ma potrebbe richiedere del lavoro che non hai voglia di fare. Questa è una "pezza" che ti permette di venirne a capo con gli elementi che hai già.

In generale, spero tu non abbia 50 timer. Ne basta uno solo che ogni 15/30/60 secondi pemetta ai vari elementi di capire se devono preparare un annuncio o meno.
Qualcosa tipo:
- timer_tick
- checkAllContatori
- aggiungi alla lista suggerita da LucaMs quei MP relativi ai contatori giunti al 100% (es. fine turno)

Un servizio a parte si occuperà di "consumare" la lista, eseguendo il play in sequenza dei messaggi accodati.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
anche nell'altro programma che hai fatto (il salta file) ti avevo detto che dovevi usare un solo timer, e qui è la stessa cosa.

Devi creare un array di 50 elementi e ogni elemento conterrò un orario.
Quando devi far partire il conteggio scrivi dentro questa lista l'orario di quando il timer deve avvisare che è scaduto l'orario.

Hai un solo timer, impostato ad un secondo, ed ogni secondo controlli la lista, se trovi un orario scaduto lo azzeri e fai partire il messaggio.
Terminato il messaggio, il timer di 1 secondo riparte, se ci sono altri avvisi li farà quindi uno alla volta.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Il problema è che non sapendo come impostare il programma, ho realizzato 50 timer indipendenti, 50 mp indipendenti, 50 sub reset, e così via, quindi non so come fare adesso, forse la soluzione sarebbe quellainiziale di portare a false i timer ma la vedo in effetti una cosa mooolto lunga da fare, ora vedremo, sonoin confusione effettivamente, mi rimane solo questo per renderlo professionale.
 
Top