Gambas-it
Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Berserker79 - 01 Agosto 2010, 03:19:02
-
Ciao, sto scrivendo un programmino e utilizzo il componente timer per riprodurre un suono alla frequenza da me desiderata.
Se il delay del timer è di un secondo, funziona tutto regolare, ma se comicio a diminuirlo portandolo a 500 ms, allora la riproduzione del suono non avviene
più in maniera costante, ma si avvertono delle irregolarità nel tempo di riproduzione.
Per riprodurre il suono, ho dichiarato un oggetto sound che poi riproduco tramite il metodo play() nell'evento generato dal timer.
Grazie anticipatamente per l'aiuto. Ciao.
-
accanto al componente c'è una dicitura che dice "non finito ma stabile" forse è solo quello il problema, prova ad utilizzare metodi alternativi tipo da shell.
-
Ciao, sto scrivendo un programmino e utilizzo il componente timer per riprodurre un suono alla frequenza da me desiderata.
Se il delay del timer è di un secondo, funziona tutto regolare, ma se comicio a diminuirlo portandolo a 500 ms, allora la riproduzione del suono non avviene
più in maniera costante, ma si avvertono delle irregolarità nel tempo di riproduzione.
Per riprodurre il suono, ho dichiarato un oggetto sound che poi riproduco tramite il metodo play() nell'evento generato dal timer.
Grazie anticipatamente per l'aiuto. Ciao.
Nel tuo stesso problema sono incappato anche io....purtroppo pare che la gestione di frequenza troppo alte sia mal supportata dall'oggetto timer. Se non ricordo male a tempo suo ricorsi a WAIT....certo, non è la più elegante delle soluzioni ma bene o male funzionava. Anche WAIT però al di sotto di una certa frequenza fa le bizze quindi fai delle prove approfondite.
Per curiosità, qual'è la frequenza del tuo computer?
-
Ho provato anche io con il WAIT, ma anche così a frequenze "altine" c'è lo stesso problema.
Il mio pc monta un AMD 64 X2 6000+ a 3,1 GHz.
Forse potrei risolvere il problema utilizzando il parametro loop per il metodo play, ma dovrei realizzare un file audio con la durata giusta per ogni frequenza desiderata e poi
non potrei gestire tante altre cosucce interessanti che avevo in mente.
Che amarezza, mi sà che dovrò arrendermi......
-
Potresti allegare l'esempio?
-
Cerrrrrrrrrrto. Il programma mira ad essere un metronomo digitale.
E' ancora nella fase iniziale, infatti non ho implementato la scelta dei BPM e delle battute.
La frequenza di riproduzione del suono al momento la gestico manualmente dall'IDE prima di eseguire il programma.
Cmq è già sufficente per mostrare il problema segnalato.
-
Con una shell potresti risolvere il problema anche perchè, se il componente non è ancora finito, potrebbe essere quello il problema .
con WAIT senza il timer dovrebbe funzionare, hai provato ? :D
-
hai provato ad utilizzare canali diversi se il suono da riprodurre ha un tempo maggiore del tempo impostato sul timer?
-
Boh, non capisco... a me sembra funzionare nel senso che se imposto il timer con delay a 1000, 500 o 250 per esempio io avverto la differenza senza disturbi come quelli da te menzionati. Non dipenderà mica dal server sonoro in uso? Che distro utilizzi?
-
Con una shell potresti risolvere il problema anche perchè, se il componente non è ancora finito, potrebbe essere quello il problema .
con WAIT senza il timer dovrebbe funzionare, hai provato ? :D
Mi pare di capire che il timer vuole essere il più preciso possibile e l'uso della SHELL, come discusso in altri topic, porta dei ritardi non voluti. Suggerire l'uso della SHELL deve essere l'ultima dele soluzioni poichè abbiamo un linguaggio e dobbiamo cercare di sfruttarlo fin quando possibile...se continuaiamo ad usare la shell tanto conviene programmare in bash... :)
-
hai provato ad utilizzare canali diversi se il suono da riprodurre ha un tempo maggiore del tempo impostato sul timer?
Non ho provato a cambiare il canale, anche perchè non so come si faccia. Però il suono da riprodurre l'ho ridotto proprio per escludere quanto da te menzionato.
Boh, non capisco... a me sembra funzionare nel senso che se imposto il timer con delay a 1000, 500 o 250 per esempio io avverto la differenza senza disturbi come quelli da te menzionati. Non dipenderà mica dal server sonoro in uso? Che distro utilizzi?
Uso ubuntu 10.04 64 bit. Anche io avverto la variazione di frequenza, ma fra la riproduzione di un suono e quello successivo, non è sempre costante il lasso di tempo trascorso.
Dato che lo scopo del programma è quello di riprodurre il suono alla frequenza desiderata costantemente nel tempo per permettere a chi studia musica di esercitarsi, questa irregolarità rende di fatto inutile il programma.
Posso provare ad emulare il programma da terminale per verificare se il problema è del timer di gambas o del componente sound. Se avete dei suggerimente in tal senso sono ben accetti. Ciao.
-
Se non stai usando il beeper interno, ma la scheda audio, è molto probabile che il driver abbia dei problemi del tipo da te segnalato.
Se ne hai la possibilità, prova su un altro pc, anche se una prova l'ha già fatta Leo con successo, il che indica che con molta probabilità il problema sia proprio causato dai driver...
-
io ho provato sul mio pc e sento anch'io delle irregolarità. Senza mettere in discussione le capacità musicali di Leo a volte non tutti sono in grado di percepire delle piccole irregolarità di frequenza (intesa come durata tra beep e beep). Forse non è il problema di Leo, forse sul suo sistema il prog fa veramente il suo dovere. Io suggerirei di provare con il tuo orecchio su più pc e magari di registrare e misurare su un audio editor la distanza tra i beep.
-
Puo anche essere un problema del gestore audio ??? ???
-
Dal mio pc su cui ho scritto il programma, ho creato un pacchetto di installazione e l'ho installato su di un altro pc.
Ma anche li stesso problema.
Vorrei capire se il problema sta nel timer o nella classe Sound che al momento di riprodurre il suono perde tempo a trovare un canale libero.
Comunque se nel metodo play utilizzo il parametro loop, il suono viene emesso perfettamente, quindi "basterebbe" creare un file audio della durata giusta per ogni frequenza e impostare il parametro loop a -1 per una riproduzione infinita.
Soluzione poco elegante ma sicuramente funzionante.
-
tieni conto però che il timer non è mai molto preciso soprattutto su tempi molto bassi, dovresti utilizzare il timer di sistema e magari un kernel real-time come richiedono vari programmi musicali
-
tieni conto però che il timer non è mai molto preciso soprattutto su tempi molto bassi, dovresti utilizzare il timer di sistema e magari un kernel real-time come richiedono vari programmi musicali
:'( mi sà che ho sottovalutato la cosa, pensavo di poterci riuscire con i soli strumenti di gambas.
Vi comunico che ho anche provato con gambas3, ma il risultato non è cambiato.