Пользователь
Регистрация: 14.03.2010
Сообщений: 18
|
Занести Midi инструменты в ListBox
Здравствуйте. У меня возникла проблемка, при создании пианино на Delphi.
мне надо сделать так, чтобы все 128 инструментов Midi были занесены в ListBox. Вообщем я это сделал, но при выборе какого-нибудь инструмента, либо ничего не меняется, либо (я что-то накрутил) звук вообще исчезает.
Вот здесь мой код:
Код:
unit MainUnit;
interface
...
var
midi:integer;
Midimsg :integer; // миди сообщение
no :integer; // нота
inst :integer; // инструмент
Instruments:array [0..127] of String=( //создаём массив
'SimpePiano','BrightAcousticPiano','ElectricGrandPiano',
'HonkyTonkPiano','ElectricPiano1','ElectricPiano2','Harpsichord','Clavinet',
'Celesta','Glockenspiel','MusicBox','Vibraphone','Marimba','Xylophone',
'TubularBells','Dulcimer',
'DrawbarOrgan','PercussiveOrgan','RockOrgan','ChurchOrgan',
'ReedOrgan','Accordion','Harmonica','TangoAccordion',
'AcousticNylonGuitar','AcousticSteelGuitar','JazzElectricGuitar',
'CleanElectricGuitar','MutedElectricGuitar','OverdrivenGuitar',
'DistortionGuitar','GuitarHarmonics','AcousticBass',
'FingeredElectricBass','PickedElectricBass','FretlessBass',
'SlapBass1','SlapBass2','SynthBass1','SynthBass2',
'Violin','Viola','Cello','Contrabass',
'TremoloStrings','PizzicatoStrings','OrchestralHarp','Timpani',
'StringEnsemble1','StringEnsemble2','SynthStrings1',
'SynthStrings2','ChoirAahs','VoiceOohs','SynthVoice','OrchestraHit',
'Trumpet','Trombone','Tuba','MutedTrumpet','FrenchHorn',
'BrassSection','SynthBrass1','SynthBrass2',
'SopranoSax','AltoSax','TenorSax','BaritoneSax',
'Oboe','EnglishHorn','Bassoon','Clarinet',
'Piccolo','Flute','Recorder','PanFlute','BlownBottle',
'Shakuhachi','Whistle','Ocarina',
'SquareLead','SawtoothLead','CalliopeLead','ChiffLead',
'CharangLead','VoiceLead','FifthsLead','BassandLead',
'NewAgePad','WarmPad','PolySynthPad','ChoirPad',
'BowedPad','MetallicPad','HaloPad','SweepPad',
'SynthFXRain','SynthFXSoundtrack','SynthFXCrystal','SynthFXAtmosphere',
'SynthFXBrightness','SynthFXGoblins','SynthFXEchoes','SynthFXSciFi',
'Sitar','Banjo','Shamisen','Koto','Kalimba',
'Bagpipe','Fiddle','Shanai',
'TinkleBell','Agogo','SteelDrums','Woodblock',
'TaikoDrum','MelodicTom','SynthDrum','ReverseCymbal',
'GuitarFretNoise','BreathNoise','Seashore','BirdTweet',
'TelephoneSingle','Helicopter','Applause','GunShot);
....
procedure TMainForm.FormCreate(Sender: TObject);
begin
MidiOutOpen(@midi, 0,0,0,0); // подключаем миди
MainForm.KeyPreview:=True;
....
For inst:=0 to 127 do
begin
ListBox1.Items.Add(Instruments[inst]); // забиваем список в ListBox
end;
end;
....
//_______________сомневаюсь здесь!____________//
procedure TMainForm.ListBox1Click(Sender: TObject);
begin
inst:=sListBox1.Items.IndexOf(ListBox1.Items.Text); // не уверен в этом!
midimsg:=$C0+($100*inst); // отправляем изменённое звучание
midiOutShortMsg (midi, midimsg);
end;
....
Вообщем, вы поянли. Мне надо выбрать из списка допустим 'PercussiveOrgan' и играть им, но почему-то не работает. В чём моя ошибка, уверен, что в последней части. Заранее спасибо за помощь.)
|