Rioran
Everything is possible and achievable.
- Сообщения
- 26
- Репутация
- 2
Всем привет и хорошего настроения!
В качестве пробы написал набор функций, который позволяет вставить в Ваш проект мелодию с помощью встроенного метода Beep(). Подробные комментарии внутри.
Можем поиграть в "Угадай мелодию" на примере вложенных в скрипт =) Или можете попробовать написать свои.
Оставлю себе на заметку на будущее:
- можно развить идею с помощью функции, на вход которой поступает текстовая строка с указанием нот и длительности.
- проверить, можно ли разделить воспроизведение звуков на два и более потока - позволит проигрывать полифонию.
- проверить, можно ли записывать несколько строк в одну через какой-нибудь разделитель. В VBA работает двоеточие, тут может быть что-то другое.
- можно сделать полноценный музыкальный редактор, который будет генерировать код Au3 для вставки в проекты. (Предварительно лень, будет нужна мотивация).
В качестве пробы написал набор функций, который позволяет вставить в Ваш проект мелодию с помощью встроенного метода Beep(). Подробные комментарии внутри.
Можем поиграть в "Угадай мелодию" на примере вложенных в скрипт =) Или можете попробовать написать свои.
Оставлю себе на заметку на будущее:
- можно развить идею с помощью функции, на вход которой поступает текстовая строка с указанием нот и длительности.
- проверить, можно ли разделить воспроизведение звуков на два и более потока - позволит проигрывать полифонию.
- проверить, можно ли записывать несколько строк в одну через какой-нибудь разделитель. В VBA работает двоеточие, тут может быть что-то другое.
- можно сделать полноценный музыкальный редактор, который будет генерировать код Au3 для вставки в проекты. (Предварительно лень, будет нужна мотивация).
Код:
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