如何在Delphi中创建声音音符?

Ple*_*rds 12 delphi audio

是否有一个命令,我们可以使我们的Delphi应用程序emule声音,我们可以选择数字音调和持续时间就像在基本?

And*_*and 17

要产生纯正弦音,您可以使用

Windows.Beep(400, 1000)
Run Code Online (Sandbox Code Playgroud)

这将发出400 Hz纯正弦音,持续时间为1000毫秒.

如果您想演奏真正的乐器(钢琴,吉他或任何125(?)其他选项),您可以使用MIDI.只需使用该MMSystem单位即可

var
  mo: HMIDIOUT;

const
  MIDI_NOTE_ON = $90;
  MIDI_NOTE_OFF = $80;
  MIDI_CHANGE_INSTRUMENT = $C0;

function MIDIEncodeMessage(Msg, Param1, Param2: byte): integer;
begin
  result := Msg + (Param1 shl 8) + (Param2 shl 16);
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 SetInstrument(NewInstrument: byte);
begin
  midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_CHANGE_INSTRUMENT, NewInstrument, 0));
end;

procedure InitMIDI;
begin
  midiOutOpen(@mo, 0, 0, 0, CALLBACK_NULL);
  midiOutShortMsg(mo, MIDIEncodeMessage(MIDI_CHANGE_INSTRUMENT, 0, 0));
end;
Run Code Online (Sandbox Code Playgroud)

初始化MIDI系统后,您可以尝试

NoteOn(50, 127);
Sleep(500);
SetInstrument(60);
NoteOn(60, 127);
Sleep(500);
NoteOff(60, 127);
SetInstrument(80);
NoteOn(70, 127);
Sleep(500);
NoteOff(70, 127);
SetInstrument(90);
NoteOn(80, 127);
Sleep(500);
NoteOff(80, 127);
SetInstrument(100);
NoteOn(90, 127);
Sleep(500);
NoteOff(90, 127);
SetInstrument(12);
NoteOn(40, 127);
Sleep(1000);
NoteOff(40, 127);
Run Code Online (Sandbox Code Playgroud)

MIDI编程是如此不可低估!

编译演示EXE