2010-09-06 2 views

ответ

2

Я использую эти компоненты для ages:

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

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

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

1

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

4

Вы уверены, что вам действительно нужна сторонняя библиотека? Если ваши потребности носят базовый характер, API Windows - это все, что вам нужно (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; 
+0

+1 очень полезный пост. – 2011-06-15 10:05:33

+0

Привет. Я не знаю, как задать вопрос по этому вопросу .. Я тестирую код que .. и если я попытаюсь поместить его в buttonEvent .. он просто работает один раз .. как я могу его переустановить? делать звук в любое время, когда я хочу? благодаря – Pericles

1

очень простой MIDI вход/выход класс: www.midimountain.com/delphi_midi.html

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

1

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

2

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

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

0

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