新闻中心

EEPW首页>嵌入式系统>设计应用> 计算机接口使19世纪管风琴自行弹奏

计算机接口使19世纪管风琴自行弹奏

作者: 时间:2013-04-07 来源:网络 收藏


const midi_state_table_entry_t MIDI_STATE_TABLE[] =

{

{INHIBITED,PANIC,

MidiSM_Panic,INHIBITED},

{ANY_STATE,PANIC,

MidiSM_Panic,INIT},

{ANY_STATE,INHIBIT,

MidiSM_DoNothing,INHIBITED},

{ANY_STATE,OTHER_STATUS_RECEIVED,MidiSM_ClearMessage,INIT},

{INIT,NOTE_ON_OR_OFF_RECEIVED,MidiSM_StoreStatusByte,NOTE_ON_OR_OFF},

{INIT,DATA_RECEIVED,

MidiSM_DoNothing,INIT},

{NOTE_ON_OR_OFF,NOTE_ON_OR_OFF_RECEIVED, MidiSM_StoreStatusByte,NOTE_ON_OR_OFF},

{NOTE_ON_OR_OFF,DATA_RECEIVED, MidiSM_StoreNoteNumber,NOTE_ON_OR_OFF_NUMBER},

{NOTE_ON_OR_OFF_NUMBER,NOTE_ON_OR_OFF_RECEIVED, MidiSM_StoreStatusByte, NOTE_ON_OR_OFF},

{NOTE_ON_OR_OFF_NUMBER,DATA_RECEIVED, MidiSM_NoteOnOrOffComplete,NOTE_ON_OR_OFF},

{INHIBITED,ENABLE,

MidiSM_DoNothing,INIT},

{LAST_STATE, LAST_EVENT, 0,LAST_STATE},

};

我们成功演奏了一些非常复杂、快节奏的音乐,从古典到摇滚;电磁铁和驱动器在速度方面并没有表现出太大的局限性。

StoreStatusByte,NOTE_ON_OR_OFF},
{NOTE_ON_OR_OFF,DATA_RECEIVED,
MidiSM_StoreNoteNumber,NOTE_ON_OR_OFF_NUMBER},
{NOTE_ON_OR_OFF_NUMBER,
NOTE_ON_OR_OFF_RECEIVED,MidiSM_StoreStatusByte, NOTE_ON_OR_OFF},
{NOTE_ON_OR_OFF_NUMBER,
DATA_RECEIVED,MidiSM
_NoteOnOrOffComplete,
NOTE_ON_OR_OFF},
{INHIBITED,ENABLE,
MidiSM_DoNothing,INIT},
{LAST_STATE, LAST_EVENT, 0,
LAST_STATE},
};

在该结构体中的第一个entry表示当前状态;第二个entry表示事件到达;第三个entry表示处理该事件需要使用状态转换功能;第四个entry表示下一状态。

状态机业务端采用的代码如下:

XStatus MidiSM_
DoStateTransition
(midi_state_machine_t *pInstance,
u8 event)
{
const midi_state_table_
entry_t *pTable = pInstance-
>pStateTable;
// Search for a match in the
state table
do {
if ((event == pTable-
>received_event)
((pInstance-
>current_state == pTable-
>state)
|| (pTable->state ==
ANY_STATE)))

{
(*pTable-
>transition_function)((v
oid *)pInstance);
pInstance->current_state
= pTable->next_state;
return XST_
SUCCESS;
}
pTable++;
} while (pTable->state !=
LAST_STATE);
// Aaargh, something bad happened - should never get here
XASSERT_NONVOID_ALWAYS();
}

事件循环提供的事件是对这种功能的论证,根据当前的状态和事件,采取某种措施和改变系统状态。事件的类型包括字节到达MIDI接口,字符到达控制端口和按下重启按钮(panic button)。所有经验丰富的MIDI玩家都知道重启按钮是保护耳朵和电源必备的特性——它可无条件地关闭所有电磁铁,使系统恢复到已知安全状态。

演奏WaldflOe

安装了这种应用精致的控制器, 机器人手可演奏从狂想曲到摇滚的所有风格音乐。隐藏在琴键底部的是电磁铁木制背板——每块板上安装30个或更多的电磁铁,同时还安装了一些回收利用的罐状电容器,为电磁铁提供电能。我们将整个驱动器组件与连接。在图的上方,您可看到Spartan-3E入门套件开发板和其右侧的接口万用板;我们利用回收利用的CAT5电缆将这些装置与驱动器组件连接。

用文字很难说明的运行情况,因此,我建议您点击本文结尾的互联网链接地址,收看我们上传的视频。当机器人管风琴手演奏《月光奏鸣曲》或《Jump》时,您将会听到电磁铁发出的咔嗒声——这是电磁铁铁芯降至线圈底部时发出的声音,不是杠杆敲击琴键的声音。不过,您若是坐在大厅里,而不是站在讲道台上,电磁铁发出的声音就会小很多。您所能听到的只是管风琴流淌出的优美音乐。

我们利用这套系统成功演奏了一些非常复杂、快节奏的音乐,从古典到摇滚;电磁铁和驱动器在速度方面并没有表现出太大的局限性。即使在弹奏要求最苛刻的曲目时,电磁铁电源在15V电压条件下通常电流不超过4A。即使我们稍微过度使用电磁铁,电磁铁线圈也没有出现明显升温的情况。总而言之,我们对这个系统非常满意,同时为参与开发这套系统深感自豪。

WaldflOe下一步是什么?噢,我们已经非正式地邀请了一些音乐家为这种新乐器创作曲目(尤其是对拥有53根手指、从不感到疲倦的演奏者感兴趣的作曲家),我们还考虑举办一个独奏会。另一种可能是实现管风琴音栓运作的机械化,便于我们在电子演奏过程中改变音量和音色。我们还在考虑采取某些方法驱动管风琴的低音踏板,使最长的低音管发音。最后也是最有可能完成的是,我们正打算在互联网上推出一项服务,使公众能够把他们的MIDI文件上传至这个系统,然后再聆听管风琴的实时演奏。

然后,我们会再次回到酒吧。

如欲观看和收听WaldflOe的演奏,敬请登录:http://dorkbot.noodlefactory.co.uk/ wiki/WaldFlote。

上一页 1 2 3 下一页

评论


技术专区

关闭