コード例 #1
0
ファイル: Synth.cs プロジェクト: yxy332/monotouch-samples
        public void StartPlayNoteNumber(int noteNum)
        {
            uint onVelocity  = 127;
            uint noteCommand = (int)MIDIMessage.NoteOn << 4 | 0;

            var result = samplerUnit.MusicDeviceMIDIEvent(noteCommand, (uint)noteNum, onVelocity, 0);

            if (result != AudioUnitStatus.NoError)
            {
                Console.WriteLine("Unable to start playing the mid note.  Error code: {0}", (int)result);
            }
        }
コード例 #2
0
        void MidiMessageReceived(object sender, MidiPacketsEventArgs midiPacketArgs)
        {
            var packets = midiPacketArgs.Packets;

            for (int i = 0; i < packets.Length; i++)
            {
                var    packet = packets [i];
                byte[] data   = new byte[packet.Length];
                Marshal.Copy(packet.Bytes, data, 0, packet.Length);
                var midiStatus  = data [0];
                var midiCommand = midiStatus >> 4;

                if (midiCommand == 0x09)
                {
                    var note     = data [1] & 0x7F;
                    var velocity = data [2] & 0x7F;

                    int    noteNumber = ((int)note) % 12;
                    string noteType;
                    switch (noteNumber)
                    {
                    case 0:
                        noteType = "C";
                        break;

                    case 1:
                        noteType = "C#";
                        break;

                    case 2:
                        noteType = "D";
                        break;

                    case 3:
                        noteType = "D#";
                        break;

                    case 4:
                        noteType = "E";
                        break;

                    case 5:
                        noteType = "F";
                        break;

                    case 6:
                        noteType = "F#";
                        break;

                    case 7:
                        noteType = "G";
                        break;

                    case 8:
                        noteType = "G#";
                        break;

                    case 9:
                        noteType = "A";
                        break;

                    case 10:
                        noteType = "Bb";
                        break;

                    case 11:
                        noteType = "B";
                        break;

                    default:
                        throw new NotImplementedException();
                    }

                    samplerUnit.MusicDeviceMIDIEvent((uint)midiStatus, (uint)note, (uint)velocity);

                    label.InvokeOnMainThread(delegate {
                        label.Text = String.Format("Playing: {0}: {1}", noteType, noteNumber);
                    });
                }
            }
        }