Библиотека Delphi для ввода / вывода MIDI? - PullRequest
3 голосов
/ 06 сентября 2010

Что такое хорошая библиотека Delphi для ввода / вывода MIDI?

Ответы [ 8 ]

4 голосов
/ 06 сентября 2010

Вы уверены, что вам действительно нужна сторонняя библиотека?Если ваши потребности просты, Windows API - это все, что вам нужно (using MMSystem).

var
  mo: HMIDIOUT;

const
  MIDI_NOTE_ON = $90;
  MIDI_NOTE_OFF = $80;
  MIDI_CHANGE_INSTRUMENT = $C0;
  MIDI_DEVICE = 0;
  MIDI_VEL = 108;

procedure MIDIInit;
begin
  midiOutOpen(@mo, MIDI_DEVICE, 0, 0, CALLBACK_NULL);
  SetPlaybackVolume($FFFFFFFF);
end;

function MIDIEncodeMessage(Msg, Param1, Param2: integer): integer;
begin
  result := Msg + (Param1 shl 8) + (Param2 shl 16);
end;

procedure SetCurrentInstrument(CurrentInstrument: TMIDIInstrument);
begin
  midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_CHANGE_INSTRUMENT, ord(CurrentInstrument), 0));
end;

procedure NoteOn(NewNote, NewIntensity: byte);
begin
  midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_NOTE_ON, NewNote, NewIntensity));
end;

procedure NoteOff(NewNote, NewIntensity: byte);
begin
  midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_NOTE_OFF, NewNote, NewIntensity));
end;

procedure SetPlaybackVolume(PlaybackVolume: cardinal);
begin
  midiOutSetVolume(mo, PlaybackVolume);
end;

, где инструменты

type
  TMIDIInstrument = (midiAcousticGrandPiano, midiBrightAcousticPiano,
                     midiElectricGrandPiano, midiHonkyTonkPiano,
                     midiRhodesPiano, midiChorusedPiano, midiHarpsichord,
                     midiClavinet, midiCelesta, midiGlockenspiel,
                     midiMusicBox, midiVibraphone, midiMarimba, midiXylophone,
                     midiTubularBells, midiDulcimer, midiHammondOrgan,
                     midiPercussiveOrgan, midiRockOrgan, midiChurchOrgan,
                     midiReedOrgan, midiAccordion, midiHarmonica,
                     midiTangoAccordion, midiAcousticGuitarNylon,
                     midiAcousticGuitarSteel, midiElectricGuitarJazz,
                     midiElectricGuitarClean, midiElectricGuitarMuted,
                     midiOverdrivenGuitar, midiDistortionGuitar,
                     midiGuitarHarmonics, midiAcousticBass, midiElectricBassFinger,
                     midiElectricBassPick, midiFretlessBass, midiSlapBass1,
                     midiSlapBass2, midiSynthBass1, midiSynthBass2, midiViolin,
                     midiViola, midiCello, midiContrabass, midiTremoloStrings,
                     midiPizzicatoStrings, midiOrchestralHarp, midiTimpani,
                     midiStringEnsemble1, midiStringEnsemble2, midiSynthStrings1,
                     midiSynthStrings2, midiChoirAahs, midiVoiceOohs,
                     midiSynthVoice, midiOrchestraHit, midiTrumpet, midiTrombone,
                     midiTuba, midiMutedTrumpet, midiFrenchHorn, midiBrassSection,
                     midiSynthBrass1, midiSynthBrass2, midiSopranoSax, midiAltoSax,
                     midiTenorSax, midiBaritoneSax, midiOboe, midiEnglishHorn,
                     midiBassoon, midiClarinet, midiPiccolo, midiFlute,
                     midiRecorder, midiPanFlute, midiBottleBlow, midiShakuhachi,
                     midiWhistle, midiOcarina, midiLead1Square,
                     midiLead2Sawtooth, midiLead3CalliopeLead, midiLead4ChiffLead,
                     midiLead5Charang, midiLead6Voice, midiLead7Fifths,
                     midiLead8BrassLead, midiPad1NewAge, midiPad2Warm,
                     midiPad3Polysynth, midiPad4Choir, midiPad5Bowed,
                     midiPad6Metallic, midiPad7Halo, midiPad8Sweep, midiEmpty0,
                     midiEmpty1, midiEmpty2, midiEmpty3, midiEmpty4, midiEmpty5,
                     midiEmpty6, midiEmpty7, midiEmpty8, midiEmpty9, midiEmpty10,
                     midiEmpty11, midiEmpty12, midiEmpty13, midiEmpty14,
                     midiEmpty15, midiEmpty16, midiEmpty17, midiEmpty18,
                     midiEmpty19, midiEmpty20, midiEmpty21, midiEmpty22,
                     midiEmpty23, midiGuitarFretNoise, midiBreathNoise,
                     midiSeashore, midiBirdTweet, midiTelephoneRing,
                     midiHelicopter, midiApplause, midiGunshot);

Попробуйте это:

procedure TForm1.FormCreate(Sender: TObject);
begin
  MIDIInit;
  SetCurrentInstrument(midiHarmonica);
  NoteOn(50, 127);
  sleep(200);
  NoteOn(60, 127);
  sleep(200);
  NoteOn(70, 127);
  sleep(200);
  NoteOff(70, 127);
  NoteOff(60, 127);
  NoteOff(50, 127);
  SetCurrentInstrument(midiAcousticGrandPiano);
  NoteOn(70, 127);
  NoteOn(80, 127);

  sleep(1000);
  SetCurrentInstrument(midiApplause);
  NoteOn(64, 127);
  sleep(2000);
  NoteOff(64, 127);
end;
2 голосов
/ 25 ноября 2012

Я использую эти компоненты уже более 6 месяцев с большим успехом.Они должны быть оценены со всеми остальными в последующих постах.

http://sourceforge.net/projects/midisequencer/

2 голосов
/ 06 сентября 2010

Я использовал эти компоненты для возрастов :

http://bitbucket.org/h4ndy/midiio-dev

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

Ничего особенного, но он простой в использовании, быстрый и надежный. Если вы планируете заниматься серьезными миди-вещами, вы в конечном итоге будете использовать это.

1 голос
/ 30 октября 2010

Просто небольшая дополнительная информация: проект SourceForge "dmidi" фактически совпадает с "midiio" в BitBucket (но разработка происходит здесь).

1 голос
/ 08 сентября 2010

Очень простой MIDI In / Out класс: www.midimountain.com / delphi_midi.html

Это выглядит как хорошая отправная точка, если вы хотите развернуть свой собственный и использовать Windows API.

1 голос
/ 06 сентября 2010

Я использовал BASS MIDI с использованием оболочки .NET с большим успехом, и для него также доступно Оболочки Delphi .

1 голос
/ 06 сентября 2010
0 голосов
/ 14 апреля 2014

Пн. 14.04.2014 9:49. Поскольку мне не разрешено комментировать, я попытаюсь ответить: я проголосовал за то, что жил в прошлом, за кандидата midimountain.com. Я получил demo_MidiDevices_D6.zip (получить его на странице http://www.midimountain.com/delphi_midi.html, , а не ссылку "скачать"), разархивировал его, и он скомпилирован без происшествий в моем античном Delphi 7 и run . На самом деле я не проверял, поддерживает ли он MIDI, но он показал мой зверинец подключенных MIDI-устройств ....

...