Newsgroup: it.comp.lang.visual-basic
Titolo: *TESTO DA MIDI*

Salve a tutti, chiedo cortesemente come poter fare per ricavare il testo da
un *.mid.
Spero ci sia qualcuno tanto gentile da mostrarmi del codice, perchè sono
alle prime armi!
Mi è stato suggerito un messaggio scritto il 07/03/2001 alle 23.21, ma come
lo trovo visto che ho inserito da poco il News?
Grazie anticipatamente, Apuleius
apul...@tiscalinet.it

 ha scritto nel messaggio
news:98u3aj$43t$1...@lacerta.tiscalinet.it...

Eccoti servito con un a autocitazione:
Ciao VB
Premessa: il seguente metodo è un po' grezzo, ma funziona, sicuramente si
può fare di meglio
Prima un po' di teoria (se non ti interessa salta direttamente alla fine):
Questo erano parte delle specifiche che avevo postato:
The following table lists meta-events which have no midi channel number.
They are of the format:
FF xx nn dd
01       00000001     nn tt ..      Text event- any text you want. nn=length
in bytes of text tt=text characters
05       00000101     nn tt ..      Lyric nn tt=same as text event
Da qui si deduce (almeno io l'ho dedotto), che i meta-eventi (credo siano i
dati non legati a un canale midi) sono riconosciuti dal valore FF in
esadecimale (255 in decimale), seguiti da un numero che indica il comando,
seguito da un numero che indica la lunghezza dei dati da leggere, seguito da
dei numeri che indicano i dati (i numeri sono Byte). Il comando 05
esadecimale (5 in decimale) contraddistingue un testo Lyrics (praticamente
il testo della canzone)
Concludendo: dentro il file MIDI dobbbiamo cercare un byte di valore 255
seguito da un byte di valore 5, il byte successivo ci dice quanto è lungo il
testo da leggere, e il byte ancora successivo è il primo carattere del
testo.
Pratica:
Inserisci in un form una casella di testo settando le proprietà
Multiline=True e ScrollBar=Vertical, poi inserisci un CommanButton, e infine
copi il seguente codice nel modulo del form:
Option Explicit  'E' meglio metterlo sempre
Private Sub Command1_Click()
    Dim bytDato As Byte
    Dim lngNumCarTesto As Long
    Open C:\1.mid" For Binary Access Read As #1
    Screen.MousePointer = vbHourglass 'Così capisco che sta lavorando
    Do While Not EOF(1)  'Eseguo il ciclo finché non raggiungo la fine del
file
        Get #1, , bytDato 'Leggo 1 byte
        If bytDato = 255 Then
            Get #1, , bytDato
            If bytDato = 5 Then
                Get #1, , bytDato 'Se sono arrivato fin qua ho trovato
255+5=Lyrics
                For lngNumCarTesto = 1 To bytDato 'Eseguo il ciclo per
quanti caratteri devo leggere
                    Get #1, , bytDato
                    If bytDato = 13 Then 'Se il byte vale 13 inserisco un a
Capo
                        Text1 = Text1 & vbCrLf
                    Else
                        Text1 = Text1 & Chr$(bytDato)
                    End If
                    'La riga seguente rallenta ma
                    'mi piace vedere quello che succede sullo schermo
                    DoEvents
                Next lngNumCarTesto
            End If
        End If
    Loop
    Screen.MousePointer = vbDefault
    Close #1
End Sub
Sperando di esserti stato utile (a me lo è stato in quanto pensavo fosse un
formato più complicato)
Ciao VB  ;-)


==========================
1.
Mi sembra che outlook express permetta di impostare il numero di messaggi che vuoi scaricare.
Se non lo fa, allora cambia newsreader :)
==========================
2.
Il motore di ricerca piu' conosciuto per le news e' 
www.dejanews.com
 
(comprato recentemente da google) ed e' molto utile soprattutto per rintracciare messaggi vecchi
o cancellati dal proprio news server;
==========================
3.
Dato che mi par di capire che sei agli inizi con l' uso dei newsgroups, mi permetto di suggerirti di leggere
il manifesto di questo ng, che e' pubblicato sul sito comune: 
www.murialdo.it/it_lang_vb/
e cerca in rete informazioni sulla netiquette.
==========================
4. Ecco il messaggio che cercavi, postato da Valter (VB) il 7/3 alle 23:21







Pratica:



==========================
ciao, hal

Porca vacca, Valter, l' avessi saputo avrei evitato di cercarlo ! :)
ciao, hal


In effetti anch'io avrei voluto spiegargli come fare per trovare o scaricare
i messaggi vecchi, ma dopo tre birre a digiuno mi risultava un po'
difficile, invece un  CTRL C+CTRL V riuscivo ancora a farlo ;-)
Ciao VB