Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Timer fa le bizze!
Forum - C# / VB.NET - [VB.NET] Timer fa le bizze!

Avatar
Lafa_96 (Normal User)
Pro


Messaggi: 111
Iscritto: 09/03/2011

Segnala al moderatore
Postato alle 18:19
Lunedì, 30/05/2011
allora ho un timer che gestisce la funzione "loop" della mia console, in pratica quando viene attivata "looppa" la parte di traccia selezionata.
mi spiego meglio, quando clicco sul button5 la variabile "loopin" diventa uguale alla posizione di "deck" che è un secondarybuffer, e lo fa in questo modo
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
  2.         Dim x As Integer
  3.         deck.GetCurrentPosition(x, 0)
  4.         loopin = System.Math.Round(x, 2, MidpointRounding.AwayFromZero)
  5.     End Sub



e poi quando si preme il button6 la variabile "loopout" diventa di nuovo uguale alla posizione corrente di "deck", poi setta la posizione di "deck" uguale a "loopin" e avvia il timer; codici


Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
  2.         Dim x As Integer
  3.         deck.GetCurrentPosition(x, 0)
  4.         loopout = System.Math.Round(x, 2, MidpointRounding.AwayFromZero)
  5.         deck.SetCurrentPosition(loopin)
  6.         loooop.Start()
  7.     End Sub



Codice sorgente - presumibilmente VB.NET

  1. Private Sub looop_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles looop.Tick
  2.         Dim x As Integer
  3.         deck.GetCurrentPosition(x, 0)
  4.         If System.Math.Round(x, 2, MidpointRounding.AwayFromZero) = loopout Then
  5.             deck.SetCurrentPosition(loopin)
  6.         End If
  7.     End Sub



qual è il problema? il problema è che il timer "looop" che ha un interval di 1 funziona per un po' e poi non fa più quello che dovrebbe fare! all'inizio ho pensato che arrotondasse in maniera differente, così ho provate anche con System.Math.Truncate ma non funziona!! cos'è che non va?




Non hai bisogno di vedere l’intera scalinata. Inizia semplicemente a salire il primo gradino. (Martin Luther King)
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
2
Down
V
Segnala al moderatore
Postato alle 10:35
Giovedì, 02/06/2011
Dacci ulteriori informazioni sul "per un po'" e sul "poi". Intendi che il pezzo viene ripetuto un certo numero di volte e dopo l'n-esima va avanti invece di tornare al punto loop-in? Oppure che dopo aver cambiato i punti loop-out e loop-in più volte smette le ripetizioni?

P.S.: dov'è looop.Stop() ?

non ti preoccupare ho già risolto, in pratica la libreria direct.directsound calcola il tempo in un modo strano, in pratica per ottenere il valore del tempo in secondi bisogna dividere il tempo della traccia per 100001.75925925 (valore non proprio preciso), io non ne ho tenuto conto, quindi... - Lafa_96 - 02/06/11 17:54
...tentavo di arrotondare un numero intero! il che è abbastanza stupido e non cambiava nulla, quindi il timer non riusciva a stare dietro a un numero così preciso per cui qualche volta il valore di loopout poteva saltare e il timer giustamente non eseguiva le sue istruzioni! - Lafa_96 - 02/06/11 17:56


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM