Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Note musicali e VB

Vorrei fare una semplice applicazione che visualizza la tastiera di un
pianoforte e permette, premendo i vari tasti, di sentire la
corrispondente nota musicale.
Per poter realizzare questo programma devo ogni volta creare il file wav
corrispondente alla nota del tasto premuto ed eseguirlo?
Dove trovo il formato dei file wav e magari un esempio per costruirlo?
E la corrispondenza tra note musicali e valori da inserire nel file wav?
Grazie per le risposte
Angelo
-------------------------------------------------------------------------------------
Le risposte alle tue domande le potresti trovare sul Sito Comune di
questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
-------------------------------------------------------------------------------------

 corrispondente alla nota del tasto premuto ed eseguirlo?
Noooooooooo!!!!
Ci sono le seguenti api:
midiOutShortMsg
midiOutOpen
midiOutClose
midiOutNumDevs
midiOutDevCaps
la funzione midiOutOpen apre il device:
midiOutShortMsg hMidi, device, 0, 0, 0
in hMidi ti ci mette l'handle che dovrà essere usato con midiOutShortMsg.
device è un intero che va da -1 a n, dove n è il numero dei device -1
Esempio. Tu hai 3 device: SB MIDI Out, SB Awe [620], SB creative synt [220].
questi sono indicizzati con 0, 1, 2. il valore -1 corrisponde a MIDI Mapper,
ovvero al device di default di windows.
Per avere il numero di device si usa midiOutNumDevs
numero = midiOutNumDevs
per ottenere i nomi dei device si usa midiOutDevCaps
alla quale va passato come parametro il tipo MIDIOUTCAPS e l'indice del
device:
    Dim cap As MIDIOUTCAPS
    Dim numeroDevice As Long
    Dim conta As Long
    lstDevice.AddItem "MIDI Mapper"
    numeroDevice = midiOutGetNumDevs
    For conta = 0 To numeroDevice - 1
        midiOutGetDevCaps conta, cap, Len(cap)
        lstDevice.AddItem cap.szPname
    Next
Per selezionare un device, chiudi prima la sessione:
midiOutClose hMidi
e poi la riapri:
midiOutOpen hMidi, device, 0, 0, 0
Le note usate da un device vanno da 0 a 127 e partono da Do
Le ottave vanno da 0 a 11 (l'ultima non è completa)
Ogni ottava è composta da 12 semitoni che vanno da 0 a 11 (0=Do, 1=Do#, etc)
quindi se vuoi la nota n dell'ottava o, devi fare:
    index = 12*o + n
Per suonare una nota si usa l'API midiOutShortMsg
midiOutShortMsg hMidi, &H90 + (Index * &H100) + (sldVolume.Value * &H10000)
+ 1
Dove Index è l'indice che va da 0 a 128. sldVolume.Value è il volume (che si
seleziona tramite una SlideBar) e l'1 finale è il canale MIDI.
Per fermare una nota:
midiOutShortMsg hMidi, &H80 + (Index * &H100) + 1
Ciao
P.S Per eventuali dubbi posta nel NG, non in email, perché potrebbe essere
un argomento di interesse generale e conta che io questa cosa del midi l'ho
imparata oggi ^_^;;

 visto quante note ha il pianoforte... :)).
Quante ne ha?
Ne ha 7 come tutti gli stumenti. ^_^
Ciao


Piu' le 5 alterazioni fanno 12 !
;-)

 ;-)
Ehm... no no. Le note sono 7. Mentre i suoni di un'ottava sono 12 e si
chiamano semitoni (7 naturali e 5 alterati). Le alterazioni non sono 5 ma
14, solo che ci sono suoni omologhi e togliendo questi si riducono a 5 nuovi
suoni.


Era solo una battuta.
Ciao


Ehm... quindi sai come cambiare strumento con le api? Come si fa?
Ciao

Proprio qualche giorno fa ho scritto un picoolo componente che ingloba
proprio queste funzioni per il controllo del midi out.
Se avete problemi o volete il controllo utente di esempio MAIL ME
Comunque Angelo voleva le note musicali!!
Cerco a casa e poi te le mando, ho avuto un problema simile...
Per esperienza ti dico che e' praticamente impossibile creare i file e
suonarli in tempo reale, viene un po' (molto) male in VB, inoltre vuoi
costruire un pianoforte MONOFONICO ?
Comix
aco...@tiscalinet.it


Non ci ho capito niente... ma di cosa parlate?
Ciao


Scusate se mi intrometto, ma avete gia' visto l'esempio di "pianola" midi
presente sul Sito Comune (
www.murialdo.it/it_lang_vb
) ?
--
Roal Zanazzi
z...@iol.it

>


 presente sul Sito Comune (
www.murialdo.it/it_lang_vb
) ?
Mah... il mio è più bello (mi piace però l'idea dei check box per i tasti).
Ciao


No, con quella mandi solo il messaggio per la nota, il volume e il canale.
Per lo strumento c'è midiOutCachePatches, ma non so come si usa.
Ciao


Mi manderesti il sorgente via email per favore?
Non so dove trovare i messaggi esadecimali per i vari change.
Ciao

...



-_-;;; Che notivo c'č da incavolarsi tanto, non lo sapevo.
Grazie


Non preoccuparti, problema risolto. Basta inviare un Messaggio program
change, cioč: HC0. ^_^
Ciao