新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 計算機接口使19世紀(jì)管風(fēng)琴自行彈奏

計算機接口使19世紀(jì)管風(fēng)琴自行彈奏

作者: 時間:2013-04-07 來源:網(wǎng)絡(luò) 收藏


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},

};

我們成功演奏了一些非常復(fù)雜、快節(jié)奏的音樂,從古典到搖滾;電磁鐵和驅(qū)動器在速度方面并沒有表現(xiàn)出太大的局限性。

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},
};

在該結(jié)構(gòu)體中的第一個entry表示當(dāng)前狀態(tài);第二個entry表示事件到達;第三個entry表示處理該事件需要使用狀態(tài)轉(zhuǎn)換功能;第四個entry表示下一狀態(tài)。

狀態(tài)機業(yè)務(wù)端采用的代碼如下:

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();
}

事件循環(huán)提供的事件是對這種功能的論證,根據(jù)當(dāng)前的狀態(tài)和事件,采取某種措施和改變系統(tǒng)狀態(tài)。事件的類型包括字節(jié)到達MIDI接口,字符到達控制端口和按下重啟按鈕(panic button)。所有經(jīng)驗豐富的MIDI玩家都知道重啟按鈕是保護耳朵和電源必備的特性——它可無條件地關(guān)閉所有電磁鐵,使系統(tǒng)恢復(fù)到已知安全狀態(tài)。

演奏WaldflOe

安裝了這種應(yīng)用精致的控制器, 機器人手可演奏從狂想曲到搖滾的所有風(fēng)格音樂。隱藏在琴鍵底部的是電磁鐵木制背板——每塊板上安裝30個或更多的電磁鐵,同時還安裝了一些回收利用的罐狀電容器,為電磁鐵提供電能。我們將整個驅(qū)動器組件與連接。在圖的上方,您可看到Spartan-3E入門套件開發(fā)板和其右側(cè)的接口萬用板;我們利用回收利用的CAT5電纜將這些裝置與驅(qū)動器組件連接。

用文字很難說明的運行情況,因此,我建議您點擊本文結(jié)尾的互聯(lián)網(wǎng)鏈接地址,收看我們上傳的視頻。當(dāng)機器人管風(fēng)琴手演奏《月光奏鳴曲》或《Jump》時,您將會聽到電磁鐵發(fā)出的咔嗒聲——這是電磁鐵鐵芯降至線圈底部時發(fā)出的聲音,不是杠桿敲擊琴鍵的聲音。不過,您若是坐在大廳里,而不是站在講道臺上,電磁鐵發(fā)出的聲音就會小很多。您所能聽到的只是管風(fēng)琴流淌出的優(yōu)美音樂。

我們利用這套系統(tǒng)成功演奏了一些非常復(fù)雜、快節(jié)奏的音樂,從古典到搖滾;電磁鐵和驅(qū)動器在速度方面并沒有表現(xiàn)出太大的局限性。即使在彈奏要求最苛刻的曲目時,電磁鐵電源在15V電壓條件下通常電流不超過4A。即使我們稍微過度使用電磁鐵,電磁鐵線圈也沒有出現(xiàn)明顯升溫的情況??偠灾?,我們對這個系統(tǒng)非常滿意,同時為參與開發(fā)這套系統(tǒng)深感自豪。

WaldflOe下一步是什么?噢,我們已經(jīng)非正式地邀請了一些音樂家為這種新樂器創(chuàng)作曲目(尤其是對擁有53根手指、從不感到疲倦的演奏者感興趣的作曲家),我們還考慮舉辦一個獨奏會。另一種可能是實現(xiàn)管風(fēng)琴音栓運作的機械化,便于我們在電子演奏過程中改變音量和音色。我們還在考慮采取某些方法驅(qū)動管風(fēng)琴的低音踏板,使最長的低音管發(fā)音。最后也是最有可能完成的是,我們正打算在互聯(lián)網(wǎng)上推出一項服務(wù),使公眾能夠把他們的MIDI文件上傳至這個系統(tǒng),然后再聆聽管風(fēng)琴的實時演奏。

然后,我們會再次回到酒吧。

如欲觀看和收聽WaldflOe的演奏,敬請登錄:http://dorkbot.noodlefactory.co.uk/ wiki/WaldFlote。

上一頁 1 2 3 下一頁

評論


技術(shù)專區(qū)

關(guān)閉