gpt4 book ai didi

delphi - 如何在Delphi中创建声音笔记?

转载 作者:行者123 更新时间:2023-12-03 14:38:33 25 4
gpt4 key购买 nike

是否有一个命令可以让我们的 Delphi 应用程序模拟声音,我们可以像 basic 一样选择数字音调和持续时间?

最佳答案

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

Windows.Beep(400, 1000)

将发出持续 1000 毫秒的 400 Hz 纯正弦音。

如果您想演奏真正的乐器(钢琴、吉他或任何 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;

初始化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);

MIDI 编程被低估了!

Compiled demo EXE

关于delphi - 如何在Delphi中创建声音笔记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16125462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com