示例#1
0
        private void PlayTextStub(object sender, DoWorkEventArgs e)
        {
            // Получение параметров
            List <uint> parameters;
            uint        currentVolume, currentChannel;

            try
            {
                parameters     = (List <uint>)e.Argument;
                currentChannel = parameters[0];
                currentVolume  = AlignVolume(parameters[1]);
            }
            catch
            {
                return;
            }

            // Проигрывание
            for (int i = 2; i < parameters.Count; i += 2)
            {
                HardWorkExecutor hwe2 = new HardWorkExecutor(PlayNoteStub, new uint[] { parameters [i],
                                                                                        currentVolume, parameters [i + 1], currentChannel });

                Thread.Sleep((int)parameters[i + 1]);
            }

            // Завершено
            e.Result = null;
        }
示例#2
0
        /// <summary>
        /// Метод преобразует текстовую строку в проигрываемую мелодию и запускает воспроизведение
        /// </summary>
        /// <param name="Text">Преобразуемая строка</param>
        /// <param name="Volume">Громкость (0 –127)</param>
        /// <param name="NoteDuration">Длительность каждой ноты в миллисекундах</param>
        /// <param name="Channel">Канал воспроизведения</param>
        /// <returns>Возвращает true в случае успеха</returns>
        public bool PlayText(string Text, uint Channel, uint Volume, uint NoteDuration)
        {
            // Контроль
            if (!isInited || ((Channel & 0xFu) == beatsChannel))
            {
                return(false);
            }

            if ((Volume * NoteDuration == 0) || (Text == null) || (Text == ""))
            {
                return(true);
            }

            // Сборка нот для проигрывания
            byte[]      values  = Encoding.Default.GetBytes(Text.ToCharArray());
            List <uint> message = new List <uint> ();

            message.Add(Channel);
            message.Add(Volume);

            for (int i = 0; i < values.Length; i++)
            {
                if (values[i] > 128)
                {
                    // Нужен нормальный алгоритм преобразования
                    /*message.Add ((uint)values[i] % 12 + NoteAndOctaveToCommand (MIDINotes.До, MIDIOctaves.Первая));*/
                    message.Add(NoteDuration);
                }
                else
                {
                    message[message.Count - 1] += NoteDuration;
                }
            }
            message[message.Count - 1] += (2 * NoteDuration);

            // Запуск
            HardWorkExecutor hwe = new HardWorkExecutor(PlayTextStub, message);

            return(true);
        }
示例#3
0
        /// <summary>
        /// Метод воспроизводит указанный бит
        /// </summary>
        /// <param name="BeatInstrument">Инструмент бита</param>
        /// <param name="Volume">Громкость (0 – 127)</param>
        /// <param name="Duration">Длительность в миллисекундах</param>
        /// <param name="WaitForNextNote">Время ожидания до начала следующей ноты в миллисекундах</param>
        /// <returns>Возвращает true в случае успеха</returns>
        public bool PlayBeat(MIDIBeatsInstruments BeatInstrument, uint Volume, uint Duration, uint WaitForNextNote)
        {
            // Контроль
            if (!isInited)
            {
                return(false);
            }

            if (Volume * Duration == 0)
            {
                return(true);
            }

            // Запуск
            HardWorkExecutor hwe = new HardWorkExecutor(PlayNoteStub, new uint[] { (uint)BeatInstrument,
                                                                                   Volume, Duration, beatsChannel });

            if (WaitForNextNote > 0)
            {
                Thread.Sleep((int)WaitForNextNote);
            }

            return(true);
        }
示例#4
0
        /// <summary>
        /// Метод воспроизводит указанную ноту
        /// </summary>
        /// <param name="Note">Нота</param>
        /// <param name="Octave">Октава</param>
        /// <param name="Volume">Громкость (0 – 127)</param>
        /// <param name="Duration">Длительность в миллисекундах</param>
        /// <param name="Channel">Канал воспроизведения (0 – 15)</param>
        /// <param name="WaitForNextNote">Время ожидания до начала следующей ноты в миллисекундах</param>
        /// <returns>Возвращает true в случае успеха</returns>
        public bool PlayNote(uint Channel, MIDINotes Note, MIDIOctaves Octave, uint Volume, uint Duration, uint WaitForNextNote)
        {
            // Контроль
            if (!isInited || ((Channel & 0xFu) == beatsChannel))
            {
                return(false);
            }

            if (Volume * Duration == 0)
            {
                return(true);
            }

            // Запуск
            HardWorkExecutor hwe = new HardWorkExecutor(PlayNoteStub, new uint[] { NoteAndOctaveToCommand(Note, Octave),
                                                                                   Volume, Duration, Channel });

            if (WaitForNextNote > 0)
            {
                Thread.Sleep((int)WaitForNextNote);
            }

            return(true);
        }