首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Delphi中创建声音注释?

如何在Delphi中创建声音注释?
EN

Stack Overflow用户
提问于 2013-04-21 05:39:44
回答 1查看 9.1K关注 0票数 12

有没有一个命令可以让我们的Delphi应用程序来电动车的声音,我们可以选择数字音调和持续时间,就像在basic中一样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-21 07:01:25

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

代码语言:javascript
复制
Windows.Beep(400, 1000)

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

如果你想演奏真正的乐器(钢琴、吉他或125种乐器中的任何一种(?)其他选项),您可以使用MIDI。只需使用MMSystem单元并执行

代码语言:javascript
复制
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系统后,您可以尝试

代码语言:javascript
复制
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

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16125462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档