На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
Страницы: (4) 1 2 [3] 4  все  ( Перейти к последнему сообщению )  
> Синтез Midi инструментов
    Самое простое - это с применением WinAPI: mcisendstring (для WAV, MIDI).

    Какой звук ты хочешь издавать ?

    Добавлено
    Графика и мультимедиа->Работа со звуком

    Добавлено
    Windows.Beep(Freq,Duration); для w2k, XP
    Freq - частота
    Duration - длительность

    Добавлено
    Delphi: Multimedia

    Добавлено
    Всё, что можно в Дельфи, можно сделать и в FPC.
      А как можно сыграть определённую миди ноту, определённым инструментом?
        Цитата Ash @
        А как можно сыграть определённую миди ноту, определённым инструментом?
        Этот вопрос лучше задать в разделе Программирование звука
          Вот написал маленький пример для озвучивания MIDI:

          ExpandedWrap disabled
            uses CRT, Windows, MMSystem;
             
            var
                midimsg: DWORD;
                hmidi_out: HMIDIOUT;
                hmidi_in:  HMIDIIN;
                err_cd: integer;
                Down:boolean;
                ch : char;
             
            begin
                 //открытие миди выхода
                 err_cd:=midioutopen(@hmidi_out,1,0,0,0);
             
                 writeln ('Нажмите пробел для произведения звука или Esc для выхода.');
                 repeat
                      ch := readkey;
                      if ch = ' ' then
                      begin
                           midimsg:=$7f3a90; // поменять константу для других инструментов
                           midioutshortmsg(hmidi_out,midimsg);
                      end;
                 until ch = #27;
            end.


          Добавлено
          Программа написана на для Free Pascal и тестирована в версии 2.0.0
          Должна работать в любых 32-битных компиляторах Паскаля.
            FPC 2.0.0
            Пишет Error while linking
            Указатель на последнем end'е.
            Чё ему надо?
              Бывает такое. Пробуй перезапустить IDE.
                Перезапускаю, всё равно ошибка.

                Добавлено
                А, всё. В опциях\линкер другие установочки зделал, всё пошло
                  Ноту меняю, громкость тоже, однако как инструмент менять не погимаю.
                    Ну так поиск для чего создан?
                    Гугл тебе в помощь, MSDN, ...
                      Всё, разобрался.:P Спасибо за помощь. :rolleyes:

                      Если кому интересно:
                      http://www-camil.music.uiuc.edu/Classes/199E/MIDI/midimessages.html
                      Сообщение отредактировано: Ash -
                        Покажи пример, мне тоже интересно ;)
                          ExpandedWrap disabled
                            uses CRT, Windows, MMSystem;
                             
                            var
                                midimsg: DWORD;
                                hmidi_out: HMIDIOUT;
                                hmidi_in:  HMIDIIN;
                                err_cd: integer;
                                Down:boolean;
                                ch : char;
                             
                            begin
                                 //открытие миди выхода
                                 clrscr;
                                 err_cd:=midioutopen(@hmidi_out,0,0,0,0);
                             
                                 writeln ('Нажмите пробел для произведения звука или Esc для выхода.');
                                 repeat
                                      ch := readkey;
                                      if ch = ' ' then
                                      begin
                                           midimsg:=$0023c0; // $с - установка инструмента($23=35 - Fretless Bass) channel=0
                                           midioutshortmsg(hmidi_out,midimsg);
                                           midimsg:=$903090; // $9 - проигрывание ноты $30(пока точно не знаю какая нота) channel=0
                                           midioutshortmsg(hmidi_out,midimsg);
                                           delay(1000);
                                           midimsg:=$903080; // $8 - выключение ноты channel=0
                                           midioutshortmsg(hmidi_out,midimsg);
                                      end;
                                 until ch = #27;
                            end.

                          :no:
                          Сообщение отредактировано: Ash -
                            Ты наверно с константами плохо разобрался. Надо копать дальше. ;)
                              Да нее... Всё понятно, а чё не понятного?
                                У меня к примеру не издаёт звуков твой пример.

                                Добавлено
                                Задание:
                                Составить пример для проигрывания нот любой октавы.

                                Можешь написать?

                                Добавлено
                                Вот нашёл интересную функцию:
                                ExpandedWrap disabled
                                  function MidiOutMessage(hMidi:HMIDIOUT; iStatus, iChannel, iData1, iData2: integer): DWORD;
                                  var
                                    dwMessage:DWORD;
                                  begin
                                    dwMessage:= iStatus or iChannel or (iData1 shl 8) or (longint( iData2 shl 16)) ;
                                    result:= midiOutShortMsg (hMidi, dwMessage) ;
                                  end;
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 2 [3] 4  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0473 ]   [ 17 queries used ]   [ Generated: 19.03.24, 03:37 GMT ]