purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 4:20 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Синтез MIDI
СообщениеДобавлено: Ср июн 18, 2008 8:21 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср апр 04, 2007 6:21 pm
Сообщений: 126
Откуда: Челябинская обл.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
http://pbasic.spb.ru/phpBB2/viewtopic.php?t=434&start=15

Напомнили одну хорошую идею. Когда-то у меня стоял LibertyBasic, я даже пытался его изучать. Но вот только чтобы компилировать приложения, надо было его купить. И вот...
От него остался один пример, который можно перевести на PB.


Вложения:
midi.rar [2.9 KiB]
Скачиваний: 438

_________________
Loading... 99%
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 18, 2008 8:51 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
да, я тоже LibertyBasic когдато интересовался, но он слишком глючный был ...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 13, 2008 10:25 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср авг 15, 2007 1:23 pm
Сообщений: 138
Откуда: с почты
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Ну вот, нарыл спецификацию МИДИ и склепал такой примерчик:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
;Канальные сообщения:
;
;    * 8n nn vv - Note Off (выключение ноты)
;    * 9n nn vv - Note On (включение ноты)
;    * An nn pp - Key Pressure (Polyphonic Aftertouch, давление на клавишу)
;    * Bn cc vv - Control Change (смена значения контроллера)
;    * Cn pp - Program Change (смена программы (тембра, инструмента))
;    * Dn pp - Channel Pressure (Channel Aftertouch, давление в канале)
;    * En ll mm - Pitch Bend Change (смена значения Pitch Bend)
Global m_hMidiOut
midiOutOpen_(@m_hMidiOut,MIDIMAPPER,0,0,0)
;Select Instrument
Instr=1
midiOutShortMsg_(m_hMidiOut,$C0|Instr<<8)
;Play note
note=49
For i=0 To 12
midiOutShortMsg_(m_hMidiOut,$800090|note<<8); Note on
Delay(100)
midiOutShortMsg_(m_hMidiOut,$800080|note<<8); Note off
note+1
Next
;Stop playing


Проигрывает гамму.

_________________
Не грешите на погрешности перевода, если они сделаны, чего греха таить, дабы не погрешить против истины!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 13, 2008 10:40 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
В кодархиве есть подобное

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Global hMidiOut
#Acoustic_Steel_Guitar = 25
#Channel1 = 1
#Channel2 = 2
#Channel3 = 3
#Channel4 = 4
#Channel5 = 5
#Channel6 = 6
 
 
Procedure MidiOutMessage(hMidi,iStatus,iChannel,iData1,iData2)
  dwMessage = iStatus | iChannel | (iData1 << 8 ) | (iData2 << 16)
  ProcedureReturn midiOutShortMsg_(hMidi, dwMessage) ;
EndProcedure
 
Procedure SetInstrument(channel,instrument)
  MidiOutMessage(hMidiOut, $C0,  channel, instrument, 0)
EndProcedure
 
Procedure PlayNote(channel,Note,velocity)
  MidiOutMessage(hMidiOut, $90, channel, Note , velocity)
EndProcedure
 
 
Procedure StopNote(channel,Note)
  MidiOutMessage(hMidiOut, $90, channel, Note , 0)
EndProcedure
 
midi.MIDIOUTCAPS
devices = midiOutGetNumDevs_()
 
For devnum=-1 To devices-1
  If midiOutGetDevCaps_(devnum,@midi,SizeOf(MIDIOUTCAPS))=0
    If midi\wVoices >0
      midiport=devnum
    EndIf
  EndIf
Next
 
*hMidiOut.l
If midiOutOpen_(@hMidiOut,midiport,0,0,0) = #MMSYSERR_NOERROR
  ; set acoustic steel guitar as instrument
  SetInstrument(#Channel1,#Acoustic_Steel_Guitar)
  SetInstrument(#Channel2,#Acoustic_Steel_Guitar)
  SetInstrument(#Channel3,#Acoustic_Steel_Guitar)
  SetInstrument(#Channel4,#Acoustic_Steel_Guitar)
 
 
  For  cnt = 1 To 5
    ; normal sound
    PlayNote(#Channel1,$2D,63)
    PlayNote(#Channel2,$39,63)
    PlayNote(#Channel3,$3C,63)
    PlayNote(#Channel4,$40,63)
   
   
    Delay (2000)
    StopNote(#Channel1,$2D)
    StopNote(#Channel2,$39)
    StopNote(#Channel3,$3C)
    StopNote(#Channel3,$40)
   
    ; this must be a staccato sound
    PlayNote(#Channel1,$39,100)
    PlayNote(#Channel2,$3C,100)
    PlayNote(#Channel3,$40,100)
   
    Delay (300)
    StopNote(#Channel1,$39)
    StopNote(#Channel2,$3C)
    StopNote(#Channel3,$40)
    Delay (200)
   
    ; this must be a muted sound
    PlayNote(#Channel1,$2D,80)
    PlayNote(#Channel2,$30,80)
    PlayNote(#Channel3,$34,80)
   
    Delay (300)
    StopNote(#Channel1,$2D)
    StopNote(#Channel2,$30)
    StopNote(#Channel3,$34 )
    Delay (285)
   
  Next
 
  ; end: reset instruments to 0 (default)
  SetInstrument(#Channel1,0)
  SetInstrument(#Channel2,0)
  SetInstrument(#Channel3,0)
  SetInstrument(#Channel4,0)
 
  ; end: close MIDI output
  midiOutClose_(hMidiOut)
EndIf
End
 



Там вообще довольно много про MIDI...

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 14, 2008 9:37 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс май 04, 2008 12:18 am
Сообщений: 434
Откуда: PointOfPresence.Ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Интересно, какое практическое применение может иметь кодирование воспроизведения МИДИ (если ты конечно не пишешь секвенсор типа Кубэйс)?

В играх МИДИ уже неактульно со времен считай второго Варкрафта :)

Открою очередную страшную тайну: в современных играх помимо нередактируемых (потоковых) mp3 и ogg используются трекерные форматы (почти все казуалки хранят музон в mo3). На демосцене и того хлеще - там даже трекерная музыка почти уже не используется - современные компы тянут и видеогенерацию звукогенерацию, в связи с чем активно используются различные софтсинты (из самых известных - V2, даже юзерлибу для пурика сделали).. А уж если так хочется проигрывать МИДИ - для этого есть куча библиотек как BASS.dll

_________________
Изображение Точка.Присутствия - каждому по потребностям!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 11, 2008 6:56 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср апр 04, 2007 6:21 pm
Сообщений: 126
Откуда: Челябинская обл.
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Хотел я нормальный (низкоуровневый) редактор MIDI написать, да необходимость отпала.

_________________
Loading... 99%


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 19, 2008 3:43 am 
Не в сети
eternal student
Аватар пользователя

Зарегистрирован: Ср ноя 05, 2008 1:35 am
Сообщений: 447
Откуда: Екатеринодар
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Первый код работает, второй не ошибается, но и не звучит.
Интересно, а где взять полное описание MIDI.

_________________
CQ DX...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 19, 2008 6:49 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
pentod65 писал(а):
Интересно, а где взять полное описание MIDI.


http://www.rsdn.ru/article/multimedia/midi.xml

или на http://www.websound.ru/

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 19, 2008 11:00 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11079
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
pentod65 писал(а):
Первый код работает, второй не ошибается, но и не звучит
А у меня звучит! :)

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 20, 2008 2:57 am 
Не в сети
eternal student
Аватар пользователя

Зарегистрирован: Ср ноя 05, 2008 1:35 am
Сообщений: 447
Откуда: Екатеринодар
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Замечательно, спасибо!

_________________
CQ DX...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 20, 2008 11:41 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср авг 15, 2007 1:23 pm
Сообщений: 138
Откуда: с почты
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Как говорится, все генитальное просто... Осталось только заставить звук появляться при нажатии на определенную клавишу и пропадать при ее отпускании. Пробовал разные варианты, но все равно, если нажать одновременно больше двух клавиш, прога начинает дуреть. Потом нарою исходники (сейчас под руками нету), может кто попробует помочь разобраться. Хотел просто сделать что-то наподобии этого http://olejka.pisem.net/soft/piano.exe , но под винду.

_________________
Не грешите на погрешности перевода, если они сделаны, чего греха таить, дабы не погрешить против истины!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Синтез MIDI
СообщениеДобавлено: Ср июл 29, 2015 7:39 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1576
Откуда: Алматы
Благодарил (а): 12 раз.
Поблагодарили: 39 раз.
Пункты репутации: 5
тут вопрос возник - а коим образом строку перевести в параметр для миди? поясняю: есть :? текстовой файл, а в нем в столбик:
$21
$22
$24
$27
$28

ReadString(0) возвращает строчку, вот как её в команду то всунуть? PlayNote(#Channel1,$2D,63) тут то она не как строка, а как... ээ... значение типа :)


вроде бы можно было бы через Case попробывать, однако это там такие длинные портянки этих Case будут...

Select ReadString(0)
Case "$21"
x = $21
Case "$22"
x = $22...

нет ли какого-то преобразователя в PB? я бы конечно спросил бы у гугла, только я черт знает что именно мне у него спрашивать :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Синтез MIDI
СообщениеДобавлено: Ср июл 29, 2015 8:14 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 80 раз.
Пункты репутации: 24
Чем Val() не подошла?
Код:
1
2
x = ReadString(0)
PlayNote(#Channel1,Val(x),63)


_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Синтез MIDI
СообщениеДобавлено: Ср июл 29, 2015 8:21 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1576
Откуда: Алматы
Благодарил (а): 12 раз.
Поблагодарили: 39 раз.
Пункты репутации: 5
о!... а так можно было? :))))) пойду тестить. спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Синтез MIDI
СообщениеДобавлено: Ср июл 29, 2015 10:52 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1576
Откуда: Алматы
Благодарил (а): 12 раз.
Поблагодарили: 39 раз.
Пункты репутации: 5
момент номер два: в одном проекте лежит два файла:
patch_20.ins и patch_20.raw - этот patch_20.raw видимо является инструментом для миди. можно ли его как-то подключить к миди и заставить играть через этот инструмент?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB