新聞中心

        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 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 温泉县| 辽中县| 余干县| 遂平县| 辽源市| 区。| 磴口县| 东山县| 始兴县| 宁德市| 抚远县| 柳林县| 阿尔山市| 准格尔旗| 于田县| 昭觉县| 诸暨市| 宜兰县| 胶南市| 夏河县| 庐江县| 博客| 钟山县| 吉林省| 武安市| 余干县| 商洛市| 怀来县| 上饶县| 个旧市| 定西市| 临夏县| 玛沁县| 宁晋县| 秦皇岛市| 离岛区| 阿拉尔市| 华蓥市| 荔波县| 湖南省| 来安县|