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 }); }