Работаем с Midi

Предыдущая тема Следующая тема Перейти вниз

Работаем с Midi

Сообщение  electrik в Вс Окт 26, 2008 5:17 pm

вот как обычно, полезности с оф форума. воспроизведение Midi нот.
http://freebasic.net/forum/viewtopic.php?p=109236
программа воспроизводит две гаммы, до мажор, и до минор, с помощью стандартной windows мултимедия библиотеки "Mmsystem".
может кому сгодится для игрушек, маленькая подзвучка событий.
пара коментариев, отвечающих за команды нот и воспроизведение их, помечены по русски.

код:

#Include "windows.bi"
#INCLUDE ONCE "WIN\MMSYSTEM.BI"

' all bytes in message bit 7 unset except first one (status byte)
'
'midi messages length 1 (status) 2 3
' note off 3 &h80+channel pitch vel
' note on 3 &h90+channel pitch vel
' program change 2 &hC0+channel preset nr

'channel=voice 0 to 15
' pitch= key 0 to 127 middle C=60
'velocity 1 127 standard keyboard=64

#define mid_noteoff &h80 'выключает звук ноты
#define mid_noteon &h90 'dключает звучание ноты
#define mid_prchange &hC0

'команды мажор гаммы
'C D E F G A B C
Dim Shared majscale(7) As Integer={60,62,64,65,67,69,71,72}
'команды минор гаммы
'C D Eb F G A Bb C
Dim Shared minscale(7) As Integer={60,62,63,65,67,69,70,72}

Union midimsg
dw As Uinteger
b(3) As Ubyte
End Union

Type midisystem
hmidiout As hmidiout
As Integer herror,patch
mm As midimsg
Declare Constructor()
Declare Destructor()
Declare Sub playnote (note As Integer, duration As Integer)
Declare Sub setpatch(patch As Integer)
End Type

Constructor midisystem()
Dim As Integer n=midiOutGetNumDevs
If n=0 Then herror=-1
herror= midiOutOpen(@hMidiOut , -1, 0, 0, 0)
If hmidiout=0 Then herror=-2
setpatch 25
End Constructor

Destructor midisystem()
midiOutClose(hMidiOut)
midiOutReset(hMidiOut)
End Destructor

'процедура воспроизводящая ноту, параметры: midisystem.Playnote (нота, длина)
Sub midisystem.Playnote (note As Integer,duration As Integer)
Dim As Integer x
mm.b(0)=mid_noteon
mm.b(1)=note
mm.b(2)=64
X = midiOutShortMsg(hMidiOut,mm.dw )
Print x
Dim t As Single=Timer+duration/1000
Do:Loop Until Timer>t
mm.b(0)=mid_noteoff
x= midiOutShortMsg(hMidiOut,mm.dw)
End Sub

'процедура выбора звуков(инструментов от 0 до 127
Sub midisystem.setpatch(patch As Integer)

mm.b(0)=mid_prchange
mm.b(1)=patch
midiOutShortMsg(hMidiOut,mm.dw )
End Sub

'процедура для воспроизведения ряда нот
Sub playscale(m As midisystem Ptr,p As Integer Ptr, n As Integer)
For i As Integer=0 To 7
m->playnote(p[i],600)
Sleep 100
Next
End Sub

Dim As midisystem Ptr m =New midisystem
Print m->herror
If m->herror=0 Then
Dim As Integer Ptr p

'играем мажор гамму
?"Playing a major scale"
playscale(m,@majscale(0),Cool
Sleep 1000
'играем минор гамму
?"Playing a minor scale"
playscale(m,@minscale(0),Cool

End If
Delete m
Print "ended"
Sleep

electrik

Сообщения : 394
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Работаем с Midi

Сообщение  Eric-S в Вс Окт 26, 2008 7:06 pm

А теперь ещё кто бы объяснил, что значит "мажорная гамма" и "минорная гамма" я не помню. Слова знакомые, но и только.
А ещё лучше, если кто-нибудь напишет и выложит синтезатор, на манер импульс трекера.
Чтобы можно было потаптавшись по батонам с наслаждением послушать музыкальную фигню.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Работаем с Midi

Сообщение  justar в Вс Окт 26, 2008 8:56 pm

Ну это просто Wink Мажорная - построенная от основной ноты. Минорная - построенная от бемоля (пол тона ниже от основной ноты)

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 42
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Работаем с Midi

Сообщение  Eric-S в Вс Окт 26, 2008 10:26 pm

Спасибо! Будем считать, что я понял.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Работаем с Midi

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения