Автор Тема: Beep() - Набор функций по написанию мелодий для проектов  (Прочитано 3830 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Rioran [?]

  • Новичок
  • *
  • Сообщений: 26
  • Репутация: 1
  • Пол: Мужской
  • Everything is possible and achievable.
    • Награды
  • Версия AutoIt: 3.3.12.0
Всем привет и хорошего настроения!

В качестве пробы написал набор функций, который позволяет вставить в Ваш проект мелодию с помощью встроенного метода Beep(). Подробные комментарии внутри.

Можем поиграть в "Угадай мелодию" на примере вложенных в скрипт =) Или можете попробовать написать свои.

Оставлю себе на заметку на будущее:

- можно развить идею с помощью функции, на вход которой поступает текстовая строка с указанием нот и длительности.
- проверить, можно ли разделить воспроизведение звуков на два и более потока - позволит проигрывать полифонию.
- проверить, можно ли записывать несколько строк в одну через какой-нибудь разделитель. В VBA работает двоеточие, тут может быть что-то другое.
- можно сделать полноценный музыкальный редактор, который будет генерировать код Au3 для вставки в проекты. (Предварительно лень, будет нужна мотивация).

Код: AutoIt [Выделить]
Global $Dur ;Средняя длительность для ноты. Желательно не менее 200.

;Набор функций для написания собственных мелодий с помощью встроенной функции Beep()
;Версия 1.00 от 24 марта 2015. Автор: Роман Rioran Воронов
;
;Функции позволяют писать мелодии (в соответствии с примерами ниже)
;в удобном для музыкантов формате: Нота(Октава, [Не обязательный] Время)
;
;s - означает sharp (он же диез), Время - множитель для переменной $Dur
;Этот множитель может быть дробным. Желательно, чтобы $Dur в результате
;не стал менее 200 мс, т.к. ввиду разницы в работе процессоров
;может вызвать сбои в воспроизведении Ваших мелодий
;
;Октава - номер соответствует общепринятому номеру октавы,
;а ноль - соответствует малой октаве.
;
;Функция P( Время ) от слова Pause - задает период тишины

Notes_Initiation() ;Объявление используемых далее констант
Play_Melody_04()   ;Проигрывание мелодии-примера

Func Play_Melody_00() ;Пустой шаблон для мелодий

   $Dur = 200

EndFunc

Func Play_Melody_01() ;Некоторая народная мелодия, угадаете? =)

   $Dur = 200

   h(2,2)
   a(2,2)
   fs(2)
   g(2)
   a(2,2)
   fs(2)
   g(2)
   a(2,2)
   g(2)
   fs(2)
   e(2,2)

   h(2,1)
   h(2,1)
   a(2,1.5)
   g(2,0.5)
   fs(2)
   g(2)
   a(2,2)
   fs(2)
   g(2)
   a(2,2)
   g(2)
   fs(2)
   e(2,2)

EndFunc

Func Play_Melody_02() ;Перебор, просто для теста

   $Dur = 200

   e(0)
   g(1)
   h(1)
   g(1)
   e(2)
   g(1)
   h(1)
   g(1)

   a(0)
   a(1)
   c(2)
   a(1)
   e(2)
   a(1)
   c(2)
   a(1)

   d(1)
   a(1)
   d(2)
   a(1)
   fs(2)
   a(1)
   d(2)
   a(1)

   g(0)
   g(1)
   h(1)
   g(1)
   g(2,4)

EndFunc

Func Play_Melody_03() ;Знаменитая зарубежная, ректро-рок

   $Dur = 200

   e(1)
   e(0)
   g(1)
   e(0)
   a(1)
   e(0)
   e(0)
   e(0)

   e(1)
   e(0)
   g(1)
   as(1)
   a(1)
   e(0)
   e(0)
   e(0)

   e(1)
   e(0)
   g(1)
   e(0)
   a(1)
   a(0)
   a(0)
   a(0)

   g(1)
   a(0)
   e(1,2)
   p(4)

EndFunc

Func Play_Melody_04() ;Немного ретро-панка

   $Dur = 200

   a(0)
   a(0)
   c(1)
   c(1)
   d(1)
   d(1)
   e(1)
   e(1)

   a(0)
   a(0)
   c(1)
   c(1)
   d(1)
   d(1)
   e(1)
   e(1)

   a(0)
   a(0)
   c(1)
   c(1)
   g(1)
   g(1)
   f(1)
   f(1)

   a(0)
   a(0)
   c(1)
   c(1)
   g(1)
   g(1)
   f(1)
   f(1)

   g(1)
   g(1)
   f(1)
   f(1)
   e(1)
   e(1)
   d(1)
   d(1)

   g(1)
   g(1)
   f(1)
   f(1)
   e(1)
   e(1)
   d(1)
   d(1)

   g(0)
   g(0)
   h(0)
   h(0)
   c(1)
   c(1)
   d(1)
   d(1)

   g(0)
   g(0)
   h(0)
   h(0)
   c(1)
   c(1)
   d(1)
   d(1)

EndFunc

Func Notes_Initiation() ;Объявление нотных констант
   Global Const $C[5]  = [130.82, 261.63, 523.25, 1046.5, 2093]
   Global Const $Cs[5] = [138.59, 277.18, 554.36, 1108.7, 2217.4]
   Global Const $D[5]  = [147.83, 293.66, 587.32, 1174.6, 2349.2]
   Global Const $Ds[5] = [155.56, 311.13, 622.26, 1244.5, 2489]
   Global Const $E[5]  = [164.81, 329.63, 659.26, 1318.5, 2637]
   Global Const $F[5]  = [174.62, 349.23, 698.46, 1396.9, 2793.8]
   Global Const $Fs[5] = [185.00, 369.99, 739.98, 1480.0, 2960]
   Global Const $G[5]  = [196.00, 392.00, 784.00, 1568.0, 3136]
   Global Const $Gs[5] = [207.00, 415.30, 830.60, 1661.2, 3332.4]
   Global Const $A[5]  = [220.00, 440.00, 880.00, 1720.0, 3440]
   Global Const $As[5] = [233.08, 466.16, 932.32, 1864.6, 3727.2]
   Global Const $H[5]  = [246.96, 493.88, 987.75, 1975.5, 3951]
EndFunc

;Блок функций, задающих конкретные ноты.
Func C($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($C[$Octave], $dur * $NoteTime)
EndFunc
Func Cs($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($Cs[$Octave], $dur * $NoteTime)
EndFunc
Func D($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($D[$Octave], $dur * $NoteTime)
EndFunc
Func Ds($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($Ds[$Octave], $dur * $NoteTime)
EndFunc
Func E($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($E[$Octave], $dur * $NoteTime)
EndFunc
Func F($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($F[$Octave], $dur * $NoteTime)
EndFunc
Func Fs($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($Fs[$Octave], $dur * $NoteTime)
EndFunc
Func G($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($G[$Octave], $dur * $NoteTime)
EndFunc
Func Gs($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($Gs[$Octave], $dur * $NoteTime)
EndFunc
Func A($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($A[$Octave], $dur * $NoteTime)
EndFunc
Func As($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($As[$Octave], $dur * $NoteTime)
EndFunc
Func H($Octave, $NoteTime = 1)
   $Octave += 1
   Beep($H[$Octave], $dur * $NoteTime)
EndFunc
Func P($NoteTime = 1)
   Sleep($dur)
EndFunc

VBA, Tableau, SQL, Java.

Русское сообщество AutoIt


Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1419
  • Репутация: 177
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
Нормально получилось.
Я ещё вот на подобии видел: это и это.

Оффлайн Rioran [?]

  • Новичок
  • *
  • Сообщений: 26

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
  • Everything is possible and achievable.
    • Награды
  • Версия AutoIt: 3.3.12.0
Спасибо, alex33, приятно =)

Ссылки интересные. Если сравнивать, то у моих функций есть, пожалуй, только одно основное преимущество - музыкант (не программист) может сразу начать писать мелодии привычными для себя знаками.

Русское сообщество AutoIt

Re: Beep() - Набор функций по написанию мелодий для проектов
« Ответ #2 Отправлен: Март 24, 2015, 20:27:40 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
19 Ответов
15465 Просмотров
Последний ответ Май 26, 2012, 22:48:12
от Dimmak
5 Ответов
5377 Просмотров
Последний ответ Май 07, 2012, 14:49:26
от Yashied
15 Ответов
4904 Просмотров
Последний ответ Январь 10, 2015, 03:06:24
от CreatoR
10 Ответов
2288 Просмотров
Последний ответ Август 07, 2014, 16:43:47
от saraconor
4 Ответов
1750 Просмотров
Последний ответ Октябрь 25, 2015, 18:46:43
от armenxxx1
0 Ответов
1166 Просмотров
Последний ответ Сентябрь 03, 2015, 18:22:22
от uritalex
0 Ответов
721 Просмотров
Последний ответ Сентябрь 03, 2015, 18:44:52
от madmasles
0 Ответов
1266 Просмотров
Последний ответ Январь 16, 2016, 22:31:28
от shasoft
14 Ответов
1790 Просмотров
Последний ответ Июнь 06, 2017, 13:00:47
от Vovsla
1 Ответов
457 Просмотров
Последний ответ Август 18, 2017, 07:09:36
от pvnn