![]() |
Einfache MIDI Klasse - Welcher Ton ist welche Zahl? (MMSystem)
Hallo,
habe eine einfache MIDI Klasse aus dem Netz gefunden:
Delphi-Quellcode:
Etwas abspielen kann man ganz leicht, z.B. so:
unit MIDISound;
interface uses MMSystem; 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 MIDIInit; function MIDIEncodeMessage(Msg, Param1, Param2: integer): integer; procedure SetCurrentInstrument(CurrentInstrument: TMIDIInstrument); procedure NoteOn(NewNote, NewIntensity: byte); procedure NoteOff(NewNote, NewIntensity: byte); procedure SetPlaybackVolume(PlaybackVolume: cardinal); implementation 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; end.
Delphi-Quellcode:
50 ist die Tonhöhe und 127 die Lautstärke.
procedure TForm1.FormActivate(Sender: TObject);
begin MIDIInit; SetCurrentInstrument(midiPad7Halo); NoteOn(50,127); sleep(3000); NoteOff(50,127); end; Wie kann ich herausfinden welcher Ton welche Zahl ist? Es geht um eine einfache Klinger bei uns in der Firma die man selbst "komponieren" können sollte. Der Editor wird hier hochgeladen sobald ich fertig damit bin. :) MfG |
AW: Einfache MIDI Klasse - Welcher Ton ist welche Zahl? (MMSystem)
Meinen Gruß
Die Töne einer Oktave sind ja C, C#, D, D#, E, F, F#, G, G#, A, A#, H. (Deutsch) Also 12 Töne. Deine 50 mod 12 ergibt den Ton in der Oktave, 50 div 12 ergibt die Oktave selbst. Der Midi-Tonbereich geht von 0..127. Damit kann man die Tonnamen und ihre Lage bestimmen. |
AW: Einfache MIDI Klasse - Welcher Ton ist welche Zahl? (MMSystem)
Cool, danke genau das was ich brauchte :D
Ist es möglich diese
Delphi-Quellcode:
irgendwie in Strings umzuwandeln und von strings wieder in ein TMIDIInstrument?
TMIDIInstrument = (midiAcousticGrandPiano, midiBrightAcousticPiano,
midiElectricGrandPiano, midiHonkyTonkPiano, midiRhodesPiano, midiChorusedPiano, midiHarpsichord, midiClavinet, midiCelesta, midiGlockenspiel, ... wäre ziemlich blöd wenn ich jetz noch eine StringList dafür machen müsste :/ MfG |
AW: Einfache MIDI Klasse - Welcher Ton ist welche Zahl? (MMSystem)
GetEnumName(TypeInfo(tMIDIinstrument), Wert)
Dafür muss System.TypeInfo in die Uses. |
AW: Einfache MIDI Klasse - Welcher Ton ist welche Zahl? (MMSystem)
Vielen dank :D
Die Unit heisst jedoch TypInfo, nur als kleine Info :-D MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz