ciao a tutti. il mio prof di informatica mi ha consigliato, come progetto per la tesina di maturità, di sviluppare una tastiera MIDI in C#. Ho provato a scrivere qualche linea di codice, ma mi sono bloccato e non so cosa dovrei modificare
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
[DllImport("winmm.dll")]
private static extern int midiOutOpen(ref int handle, int deviceID,
int proc, int instance, int flags);
[DllImport("winmm.dll")]
private static extern int midiOutClose(int handle);
[DllImport("winmm.dll")]
protected static extern int midiOutShortMsg(int handle, int message);
namespace midi
{
public partial class Form1 : Form
{
private Button apriMidiBtn;
private int lphMidiOut;
[DllImport("winmm.dll")]
private static extern int midiOutOpen(ref int handle, int deviceID,
int proc, int instance, int flags);
[DllImport("winmm.dll")]
private static extern int midiOutClose(int handle);
[DllImport("winmm.dll")]
protected static extern int midiOutShortMsg(int handle, int message);
[DllImport("winmm.dll")]
protected static extern int midiOutGetDevCaps(int deviceID,
ref int caps, int sizeOfMidiOutCaps);
[DllImport("winmm.dll")]
protected static extern int midiOutGetNumDevs();
public Form1() //constructor
{
InitializeComponent();
}
private void apriMidiMapper_Click(object sender, EventArgs e)
{
if (midiOutOpen(ref lphMidiOut, -1, 0, 0, 0) != 0) MessageBox.Show("non posso aprire il MidiMapper");
else
{
MidiOutMessage(lphMidiOut, 0xC0, 0, 19, 0);
MidiOutMessage(lphMidiOut, 0xC0, 12, 19, 0);
}
}
int MidiOutMessage(int handle, int iStatus, int iCanale, int iDato1, int iDato2)
{
int message=0;
message = iStatus | iCanale | (iDato1 << 8) | (iDato2 << 16);
return midiOutShortMsg(handle , message);
}
int MidiNoteOn(int hMidi, int iCanale, int iNota, int iVel)
{
return MidiOutMessage(hMidi, 0x090, iCanale, iNota, iVel);
}
int MidiNoteOff(int hMidi, int iCanale, int iNota, int iVel)
{
return MidiOutMessage(hMidi, 0x080, iCanale, iNota, iVel);
}
private void chidiMidiMapper_Click(object sender, EventArgs e)
{
midiOutClose(lphMidiOut);
}
private void suona_Click(object sender, EventArgs e)
{
MidiNoteOn(lphMidiOut, 0 , 69, 60);
}
private void basta_Click(object sender, EventArgs e)
{
MidiNoteOff(lphMidiOut, 0 , 69, 0);
}
int MidiOutMessage(int handle, int iStatus, int iCanale, int iDato1, int iDato2)
{
int message=0;
message = iStatus | iCanale | (iDato1 << 8) | (iDato2 << 16);
return midiOutShortMsg(handle , message);
}
int MidiNoteOn(int hMidi, int iCanale,int ottava, int iNota, int iVel)
{
return MidiOutMessage(hMidi, 0x090, iCanale,12*ottava+iNota , iVel);
}
int MidiNoteOff(int hMidi, int iCanale, int ottava, int iNota, int iVel)
{
return MidiOutMessage(hMidi, 0x080, iCanale, 12*ottava+iNota,iVel);
}
void cambiaStrumento(int strumento)
{
MidiOutMessage(lphMidiOut, 0xC0, 1, strumento, 0);
}
}
}
un'altra domanda: oltre al fatto che il programma non va, il prof mi ha chiesto di cambiare l'interfaccia grafica e di mettere i tasti, come fosse una vera tastiera MIDI e poi di controllarla con la keyboard. sono assolutamente nel panico... qualcuno potrebbe darmi una mano?