Newsgroup: it.comp.lang.visual-basic
Titolo: Lavorare con i byte in una variabile long

Ciao a tutti!
Vorrei chiedervi 1 mano perché non riesco a muovermi da questa posizione,
nemmeno consultando la guida MSDN.
In un programmino che ho fatto utilizzo il controllo Multimedia MCI. Come da
istruzioni per visualizzare la lunghezza di una traccia di 1 Cd musicale
devo usare il comando "controlloMM.TrackLenght" e fin qui tutto bene. Il
bello viene adesso: devo impostare il formato di visualizzazione della
lunghezza (es <3:20>) con il comando "controlloMM.Time format 1". Uso
l'impostazione 1 per avere il risultato in Hms. Il problema è che le ore, i
minuti e i secondi vengono raggruppati in interi di 4 byte. Dal byte meno
significativo al byte più significativo, i singoli valori sono: Ore (byte
meno significativo) ==> Minuti ==> Secondi ==> Non utilizzato (byte più
significativo). Tutto questo l'ho tratto direttamente dalla giuda online!
Ora non so come trasformare il bel numero che mi dà il comando TrackLenght
(Long) in h:m:s (es 157347 ==> 2:37)!
Ringrazio anticipatamente per l'attenzione
Grazie

 Grazie
Spiegati meglio.
Il numero 157347 in che formato è ?
Numero di secondi o il discorso dei byte dentro un long ?
Dammi ulteriori informazioni perchè ho fatto un po' di
confusione................
Ciao
Sir Jo

 lunghezza (es <3:20>) con il comando "controlloMM.Time format 1".
Ecc.
Un mio vecchio post (auto-[ec]citazione ?) che tratta l'argomento.
------------------------------------------------------------------
Il valore restituito da .TrackLength è la conversione in formato Long
derivato dalla "somma" di 4 byte, i quali rappresentano delle misure
che variano in base all'impostazione della proprietà .TimeFormat.
Es:
Ammettendo di aver impostato .TimeFormat = mciFormatHms,
se una traccia ha una durata di 5 min. e 40 sec., la rappresentazione
in byte è:
&H0 ore;   &H05 min.;    &H28 sec.;    (non usato)
Se "incolliamo" i byte uno all'altro  (considerando che il byte
relativo alle ore è il "meno significativo", ossia sta a destra
della rappresentazione) otteniamo &HXX280500, dove XX è
il valore attribuito al 4° byte, che non è rilevante - perché non
rientra nella valutazione del tempo - però ha un valore. Supponiamo
che questo valore sia 17 (ha un significato, ma qui conta poco).
Il numero esadecimale composto sarà &H17280500.
Quindi, se una traccia ha durata 5'40", il valore restituito da
.TrackLength *dovrebbe essere* Val(&H17280500).
Invece no. In questo caso .TrackLength = Val(&H172805).
Il 1° byte, che ha valore nullo, non viene rappresentato (anche
perché il valore long stesso non potrebbe essere rappresentato).
Date queste idiosincrasie nella rappresentazione numerica,
si preferisce spesso dialogare direttamente con il sotto-sistema MCI
per la valutazione del tempo/traccia - tempo/registrazione.
Ti sottopongo alcuni metodi alternativi al controllo multimediale.
Public Declare Function mciSendString Lib "winmm.dll" _
        Alias "mciSendStringA" _
        (ByVal lpstrCommand As String, _
        ByVal lpstrReturnString As String, _
        ByVal uReturnLength As Long, _
        ByVal hwndCallback As Long) As Long
'Apertura della periferica
    'Corrisponde a MMControl1.Command = "open"
    mciSendString "open cdaudio alias cd wait shareable", 0, 0, 0
'Formato del tempo in TMSF
    'Corrisponde a MMControl1.TimeFormat = mciFormatTmsf
    mciSendString "set cd time format tmsf wait", 0, 0, 0
'Formato del tempo in millisecondi
    'Corrisponde a MMControl1.TimeFormat = mciFormatMilliseconds
    mciSendString "set cd time format milliseconds", 0, 0, 0
'Verifica della presenza del cd
Dim tmpBuff As String
    tmpBuff = Space(30)
    mciSendString "status cd media present", tmpBuff, Len(tmpBuff), 0
    'tmpBuff contiene la risposta al ritorno
'Verifica se la periferica è in Play
Dim tmpBuff As String
    tmpBuff = Space(30)
    mciSendString "status cd mode", tmpBuff, Len(tmpBuff), 0
    If Mid$(tmpBuff, 1, 7) = "playing" Then
        'Lo è
    End If
'Numero di tracce
'Corrisponde a [Tracce] = MMControl1.Tracks
Dim tmpBuff As String
    tmpBuff = Space(30)
    mciSendString "status cd number of tracks wait", tmpBuff, Len(tmpBuff), 0
    [Tracce] = CInt(Mid$(tmpBuff, 1, 2))
'Tempo di registrazione del cd (complessivo)
'Restituisce un valore formattato in "ore:min:sec"
'Corrisponderebbe a [RegCd] = MMControl1.Lenght
Dim tmpBuff As String
    tmpBuff = Space(30)
    mciSendString "status cd length wait", tmpBuff, Len(tmpBuff), 0
    [Length] = tmpBuff
'Durata della traccia
'Restituisce un valore formattato in "min:sec:ms"
'Corrisponderebbe a [TrackLength] = MMControl1.TrackLength
Dim tmpBuff As String
    tmpBuff = Space(30)
    mciSendString "status cd length track " & [NumTraccia], _
                            tmpBuff, Len(tmpBuff), 0
    [TrackLength] = tmpBuff
'Posizione attuale della testina di lettura del Cd
Dim tmpBuff As String
    tmpBuff = Space(30)
    mciSendString "status cd position", tmpBuff, Len(tmpBuff), 0
    [Traccia] = CInt(Mid$(tmpBuff, 1, 2))
    [Min.] = CInt(Mid$(tmpBuff, 4, 2))
    [Sec.] = CInt(Mid$(tmpBuff, 7, 2))
'Vai alla traccia [Traccia]%
    mciSendString "seek cd to " & Format$([Traccia]), 0, 0, 0
'Vai indietro o indietro di [Num_Ms] millisecondi
Dim tmpBuff As String
    tmpBuff = Space(30)
    [Tempo in millisecondi]
    mciSendString "status cd position wait", tmpBuff, Len(tmpBuff), 0
    [Controlla se il Cd è in "play"]
    [Se è in "play"]
        mciSendString "play cd from " & _
                        CStr(CLng(tmpBuff) [+/-] [Num_Ms]), 0, 0, 0
    [Altrimenti]
        mciSendString "seek cd to " & _
                        CStr(CLng(tmpBuff) [+/-] [Num_Ms]), 0, 0, 0
    [Tempo in tmsf]
'Start
    mciSendString "play cd", 0, 0, 0
'Stop
    mciSendString "stop cd wait", 0, 0, 0
'Pause
    mciSendString "pause cd", 0, 0, 0
'Chiudi tutto
    mciSendString "close all", 0, 0, 0
------------------------------------------------------------------

 Un mio vecchio post (auto-[ec]citazione ?) che tratta l'argomento.
Welcome back :)
Gia' visti i molti messaggi per te? :)
Ti do' due dritte: cerca Jimi (noo, davvero?) e FAQ...
Ciaotutti,
Alessandro

 Ti do' due dritte: cerca Jimi (noo, davvero?) e FAQ...
Visti, visti...
Ma hai idea di quanto scrivete (voi, io sono solo 12° :) in
due misere settimane ? Sono stato obbligato a saltare un numero
inusitato di post per recuperare (di quelli che ho saltato non credo
sentirò la mancanza, comunque :).
Abbiamo qualche cosa in sospeso :) ?

 wrote in message
news:93d33c$a5h82$1...@ID-51240.news.dfncis.de...
