示例#1
0
        private void PlayTone(string id, string note, string beat)
        {
            if (_firmata == null)
            {
                return;
            }

            if (_waitIds.ContainsValue("tone"))
            {
                return; // one tone at a time for now
            }
            var noteValue = _notes.IndexOf(note.ToLowerInvariant());

            if (noteValue == -1)
            {
                return;
            }

            int duration;

            switch (beat.ToLowerInvariant())
            {
            case "eighth":
                duration = 1;     // duration in eighth notes
                break;

            case "quarter":
                duration = 2;
                break;

            case "half":
                duration = 4;
                break;

            case "whole":
                duration = 8;
                break;

            case "double":
                duration = 16;
                break;

            default:
                // invalid value
                return;
            }

            var idVal = int.Parse(id);

            _waitIds.Add(idVal, "tone");
            _firmata.SendExtendedMessage((byte)ExtendedMessageCommand.PlayTone,
                                         new byte[]
            {
                LowByte(idVal),
                HighByte(idVal),
                (byte)noteValue, (byte)duration
            });
        }