亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Arduino的多軌道Midi音序器的實現(xiàn)

        2019-05-27 06:12:00陳業(yè)欣豐大軍
        關(guān)鍵詞:音序主程序子程序

        陳業(yè)欣,豐大軍,張 蓓

        (華北計算機系統(tǒng)工程研究所,北京 100083)

        0 引言

        聲音是人類感知世界和溝通交流的重要途經(jīng),蘊含著豐富的藝術(shù)、情感與信息。音樂更是人們表達情感的重要手段,中國古代就將音樂上升至“和民聲,善民心”的層面,且禮樂并重。電聲學交叉涵蓋數(shù)學、物理、電器電子、電磁學、計算機科學、生理、藝術(shù)等眾多學科知識,且學科間跨度很大,它是對聲音信號進行創(chuàng)造、加工、處理的學科[1]。我國的電聲行業(yè)起步較晚,盡管在21世紀初期電聲元器件和消費類數(shù)碼產(chǎn)品蓬勃發(fā)展的帶動下取得了巨大的經(jīng)濟利益,但專業(yè)電聲產(chǎn)品領(lǐng)域的研究仍處在空白階段。中國的電聲企業(yè)幾乎沒有電子器樂產(chǎn)品,現(xiàn)階段國內(nèi)所使用的合成器均為歐美國家及日本的產(chǎn)品。本文針對合成器的演奏控制部分(即音序器)進行研究,設(shè)計并開發(fā)了一種基于Arduino的多軌道Midi音序器,介紹了音序器的系統(tǒng)功能及硬件設(shè)計,給出了音序播放、錄制及其他控制的復雜邏輯的軟件解決辦法,實現(xiàn)了真正可實際應(yīng)用在電子樂創(chuàng)作及現(xiàn)場表演的多軌道Midi音序器。

        1 功能設(shè)計

        合成器因其區(qū)別于常規(guī)管弦樂器的聲音,而且擁有豐富多變的音色,因此在電子音樂創(chuàng)作中被作為主要的器樂來使用。其組成可分為演奏控制部分和音色合成部分,分別對應(yīng)演奏樂句和調(diào)制音色的功能[2]。通常合成器的演奏控制部分均為帶有鍵盤的音序器,且與合成器集成于一體,而在某些種類電子音樂(如Techno、House等)的現(xiàn)場表演中,需要用到多臺合成器同時依靠音序器來演奏從而形成復雜的和聲、復調(diào)及音色結(jié)構(gòu)。而合成器自帶的音序器一般較為簡單且各品牌產(chǎn)品功能及規(guī)格不統(tǒng)一,在多臺合成器自帶音序器上進行音序的編輯及播放給準備工作及現(xiàn)場演出都帶來了一定的麻煩。因此需要實現(xiàn)一種具有標準Midi接口[3]、操作簡便、可同時驅(qū)動多軌道的獨立音序器。

        完整的音序器需要如下三個功能:實時演奏功能、音序播放功能、音序錄制功能。

        實時演奏功能需要在系統(tǒng)待機狀態(tài)下實時接收鍵盤的輸入信號(包含音高信息與力度信息等)并將其轉(zhuǎn)化為Midi信號輸出;可調(diào)節(jié)演奏的Midi通道并可更改當前音序器的步進長度(默認16步進,最長32步進)。

        當觸發(fā)音序播放功能時,系統(tǒng)將按照當前設(shè)置的拍速播放選定的已存儲音序工程(以下簡稱“工程”,包含三個最長32步進的音序),并分別將三個音序的音高、力度及Midi時鐘信息以預先設(shè)定的三個Midi通道輸出,同時在播放時可實時切換不同的工程、改變拍速。

        當使用音序錄制功能時,使用鍵盤輸入每一步進的音高信息及力度信息,并可將任意步進空拍,分別錄制當前選定工程的三個音序。

        2 硬件設(shè)計

        硬件平臺的搭建以Arduino Mega 2560開發(fā)板為系統(tǒng)邏輯控制及存儲的核心。該控制板擁有54路數(shù)字輸入輸出接口,其中15路可作為PWM輸出,16路模擬輸入,4路UART接口,且擁有256 KB的Flash,8 KB動態(tài)內(nèi)存及2 KB EEPROM存儲空間,可實現(xiàn)大量輸入輸出的復雜邏輯[4]。

        2.1 硬件平臺搭建

        本系統(tǒng)的外部硬件設(shè)備均采用簡單的數(shù)字、模擬按鍵或旋鈕輸入及數(shù)碼管、LED等簡單的顯示模塊,因5 V供電電壓且接口電流小,所以功耗較低。以Arduino Mega 2560為邏輯控制的核心,實現(xiàn)對復雜多變的輸入與輸出的控制[5]。系統(tǒng)硬件結(jié)構(gòu)框圖如圖1所示。

        圖1 系統(tǒng)硬件結(jié)構(gòu)框圖

        2.2 輸入模塊

        本系統(tǒng)輸入部分需完成模式控制、音符音高輸入、音符力度輸入、工程選擇、拍速設(shè)置、步進長度設(shè)置、Midi通道設(shè)置。

        模式控制使用4鍵模擬鍵盤分別實現(xiàn)播放及停止、步進錄制及停止、激活步進長度修改模式、激活實時演奏Midi通道修改模式,只需占用一個模擬輸入接口;音符音高輸入由4×4矩陣鍵盤實現(xiàn),占用8個數(shù)字接口,利用數(shù)字掃描實現(xiàn)信號的輸入,響應(yīng)速度快,鍵盤共16個按鍵,其中13個按鍵用于滿足一個八度音及下一八度C的音高輸入需要,兩個按鍵用于實現(xiàn)鍵盤八度的移掉控制(使得一個八度的鍵盤也可輸入C0至G10的完整音域),剩余一個按鍵用于在步進錄制模式下音符的靜音(即空拍);音符力度輸入采用旋轉(zhuǎn)電位器模擬接口輸入,占用一個模擬輸入接口,可輸入從0至Midi標準值127的完整力度信息,且力度輸入與鍵盤分離的設(shè)計凸顯了本系統(tǒng)簡單創(chuàng)新的設(shè)計理念;工程選擇不僅在待機模式下需要完成選定,在播放音序時更需要實時響應(yīng)工程選擇的變化,因此采用10擋位數(shù)字波段開關(guān)來實現(xiàn),占用10個數(shù)字接口,用于快速選擇播放及錄制的工程編號;拍速設(shè)置范圍設(shè)置在60~160 BPM(Beats Per Minute,單位時間內(nèi)的拍數(shù))之間,需要準確控制速度,拍速穩(wěn)定不漂移,并且在音序播放時要實時響應(yīng)拍速變化,因此選用無限旋轉(zhuǎn)數(shù)字脈沖電位器作為輸入控制,占用一個外部中斷接口及數(shù)字接口,以外部中斷進行更改拍速寄存數(shù)值的方式實時響應(yīng)速度控制;步進長度設(shè)置需要按下模式控制鍵盤對應(yīng)按鍵來激活此模式,并復用數(shù)字脈沖電位器更改步進長度從1至32的變化;Midi通道設(shè)置需要按下模式控制鍵盤對應(yīng)按鍵激活此模式,并復用矩陣鍵盤16個按鍵選擇所需的16個Midi通道之一。

        2.3 輸出模塊

        本系統(tǒng)輸出部分需完成Midi信號標準接口的輸出、拍速的顯示、步進錄制時工程中音序編號的顯示、Midi通道的顯示、音序播放時步進位置的顯示、步進錄制時步進位置的顯示、步進長度修改時長度的顯示、實時演奏時力度輸入的顯示。

        Midi接口采用標準5針Midi接口,占用一個串口輸出口;拍速、音序編號及Midi通道均為數(shù)字信息,因此選用TM1650芯片驅(qū)動4位數(shù)碼管實現(xiàn)相關(guān)信息的顯示,只需要占用兩路數(shù)字接口;步進位置、長度及力度輸入等信息的顯示采用16位RGB全彩內(nèi)置WS2811芯片的LED燈條分別對應(yīng)16步進(或32步進以顏色區(qū)分)或力度,且只需占用一個數(shù)字接口。

        3 軟件設(shè)計

        系統(tǒng)軟件設(shè)計基于Arduino IDE軟件開發(fā)環(huán)境,使用C/C++編程語言。Arduino有豐富的庫文件以供使用,利用庫文件適當?shù)睾喕顺绦蜷_發(fā)工作[6]。軟件設(shè)計時把整個系統(tǒng)程序分為三個模塊:實時演奏主程序、音序播放子程序、音序錄制子程序、多軌道Midi設(shè)置子程序及外部中斷子程序(拍速及步進長度設(shè)置),首先對主程序框架進行設(shè)計,并針對每個模塊進行獨立設(shè)計,最后將各模塊構(gòu)建一個完整的工程,并燒錄進Arduino Mega 2560開發(fā)板。

        3.1 實時演奏主程序

        由于在系統(tǒng)開機進入待機狀態(tài)后,需要實時響應(yīng)鍵盤的輸入并輸出Midi信號,因此以實時演奏作為系統(tǒng)的主程序,主程序流程圖如圖2所示。

        在正式進入主程序流程前,必須先進行初始化工作,包括完成串口、數(shù)碼管、LED的初始化設(shè)置,各數(shù)字、模擬引腳的初始化設(shè)置,開中斷,讀取Midi設(shè)置等流程。在初始化完成后判斷啟動模式,開始實時演奏或進入多軌道Midi設(shè)置子程序。拍速設(shè)置、步進長度設(shè)置、演奏Midi通道設(shè)置及選擇播放或錄制的音序均需要在判斷是否進入音序播放及音序錄制模式之前完成。若未進入音序播放及錄制模式,則讀取數(shù)字掃描鍵盤有無輸入,并將輸入按鍵映射為相應(yīng)音高的Midi信號,旋轉(zhuǎn)電位器輸入映射為力度的Midi信號,并通過串口發(fā)送至外部。

        圖2 主程序流程圖

        3.2 音序播放子程序

        進入音序播放子程序之前需要在主程序獲取拍速、步進長度、多軌道Midi設(shè)置及所要播放的工程編號。進入音序播放子程序后開始進入播放循環(huán),長度與步進長度一致,每個步進即占用一個循環(huán)節(jié),在4/4拍的音樂中,每一步進代表16分音符,4個步進占用4分音符的時值即為一拍,默認步進長度為16,即完整播放一次音序為4拍。在音樂演奏過程中,丟拍的代價遠比音符演奏錯誤要高,所以Midi協(xié)議采用異步串行的通信方式,并規(guī)定每16分音符需要包含6個Midi時鐘[7]。

        因此,每個循環(huán)節(jié)內(nèi)首先在LED燈條上顯示當前步進的位置(如第一個步進則點亮16個LED燈的第一個,如第17個步進則用不同顏色點亮第一個LED燈),向窗口發(fā)送6個時鐘信號(單字節(jié)數(shù)據(jù)0xF8),并分別從Arduino的EEPRom讀取及向串口發(fā)送由所存儲選定工程的三組音序的音高及力度信息組成的音符開始信號,通過拍速(定義為每分鐘包含的拍數(shù))計算出每步進的時值并延遲響應(yīng)時間后發(fā)送音符停止信號,從而保證每一步進的音符保持了當前拍速下16分音符的時值,而后判斷音序播放模式標志位,若為真則開始下一步進的循環(huán)節(jié),否則跳出音序播放子程序回到主程序。若在多軌道Midi設(shè)置子程序中走帶控制位為真,則在以上流程發(fā)送Midi時鐘信號前向串口發(fā)送走帶開始信號(單字節(jié)數(shù)據(jù)0xFA),并在跳出音序播放子程序后發(fā)送走帶停止信號(單字節(jié)數(shù)據(jù)0xFC)再進入主程序。

        3.3 音序錄制子程序

        與播放子程序一樣,進入錄制子程序之前需要在主程序獲取步進長度、多軌道Midi設(shè)置及所要播放的工程編號。進入音序錄制子程序后開始進入錄制循環(huán),長度與步進長度一致,每個步進即占用一個循環(huán)節(jié)。每個循環(huán)節(jié)開始時判斷所選擇當前工程下的音序編號(由波段開關(guān)進行選擇),并在LED燈條顯示當前步進位置,當數(shù)字掃描鍵盤按鍵觸發(fā)時同時讀取旋轉(zhuǎn)電位器獲取力度信息,向串口發(fā)送音符開始信息,當按鍵釋放時錄入當前音序的數(shù)組,而后判斷音序錄制模式標志位,若為真則開始下一步進的循環(huán)節(jié),否則將當前工程的三個音序數(shù)組寫入到EEPRom后跳出音序錄制子程序回到主程序。

        3.4 多軌道Midi設(shè)置子程序

        開機啟動時按下模擬鍵盤的Midi設(shè)置鍵進入多軌道Midi設(shè)置子程序,通過波段開關(guān)選擇默認三個音序的Midi通道設(shè)置及Midi走帶控制標志位設(shè)置,選中其中一個設(shè)置并通過數(shù)字掃描鍵盤的輸入完成對當前設(shè)置的修改。Midi通道可完成16個通道的設(shè)置分別對應(yīng)數(shù)字掃描鍵盤的16個按鍵。Midi協(xié)議中走帶控制信號用于控制對器樂演奏時各器樂自帶音序器的播放與停止,在本系統(tǒng)應(yīng)用場景下只需控制鼓機的走帶控制即可,若無需鼓組的音樂則無需走帶控制信號,只需要利用Midi時鐘信號進行同步。

        3.5 外部中斷子程序

        由于在音序播放模式下,演奏者可能會對當前演奏拍速進行調(diào)節(jié),故需要利用外部中斷接收數(shù)字脈沖電位器發(fā)出的正脈沖與負脈沖兩種信號來分別控制拍速寄存數(shù)值及步進長度寄存數(shù)值的增減。高頻脈沖速度使得中斷時間微乎其微(人耳可辨識時延范圍大概為20 ms,中斷程序只進行簡單的加減運算,故不會被人耳察覺),因此不會影響音序播放的速度。

        4 結(jié)論

        本文完成了基于Arduino的多軌道Midi音序器的設(shè)計與實現(xiàn),并闡述了系統(tǒng)的功能和硬件設(shè)計以及程序結(jié)構(gòu)的設(shè)計,編寫了完整的程序代碼。經(jīng)過實際演奏及準備工作的測試,系統(tǒng)運行穩(wěn)定。該系統(tǒng)實現(xiàn)了在一臺音序器上利用標準Midi接口驅(qū)動三臺合成器音源同時演奏的基本使用需求以及錄制工作的需求,解決了多臺合成器演奏及錄制工作復雜的問題。在硬件設(shè)計上采用簡單易于操作的顯示及輸入模塊,力度與音高輸入分離的設(shè)計提高了音序化合成器現(xiàn)場演奏的操作性,波段開關(guān)的設(shè)計替代了國外產(chǎn)品利用組合按鍵的設(shè)計使得歌曲工程的切換更快速準確,全彩LED燈條比同類產(chǎn)品單色LED燈條可顯示更復雜的步進位置信息。

        本系統(tǒng)具有功耗低、通用性好、體積小、操作簡單及運行穩(wěn)定的優(yōu)點,在國產(chǎn)電聲器樂產(chǎn)品中較為先進且市場前景較大,可突破國外企業(yè)對世界專業(yè)電聲器樂市場的壟斷。

        猜你喜歡
        音序主程序子程序
        淺談數(shù)控銑削技術(shù)代碼程序的嵌套方式研究
        公共關(guān)系功勛獎
        公共關(guān)系創(chuàng)新領(lǐng)軍人物獎
        公共關(guān)系創(chuàng)新領(lǐng)軍品牌獎
        最美藝術(shù)家獎
        電控冰箱軟件模塊化設(shè)計
        日用電器(2019年12期)2019-02-26 01:53:06
        時光倒流 換回PotPlayer老圖標
        淺談子程序在數(shù)控車編程中的應(yīng)用
        子程序在數(shù)控車加工槽中的應(yīng)用探索
        西門子840D系統(tǒng)JOG模式下PLC調(diào)用并執(zhí)行NC程序
        人妻秘书被社长浓厚接吻| japanesehd中国产在线看| 精品国产日韩亚洲一区在线| 麻豆资源在线观看视频| 中文人妻熟妇乱又伦精品| 亚洲av无码乱码国产麻豆穿越| 欧美在线观看www| 亚洲综合久久精品少妇av | 亚洲中文字幕精品久久久久久直播| 在线不卡精品免费视频| 亚洲av无码无线在线观看 | 免费人成小说在线观看网站| 久久久精品人妻一区二区三区蜜桃 | av无码精品一区二区乱子| 久久久一本精品久久久一本| 亚洲天堂丰满人妻av| 亚洲国产精品日韩av不卡在线| 亚洲国产一区在线二区三区| 一区二区三区在线免费av| 人妖av手机在线观看| 西西人体444www大胆无码视频 | 午夜精品一区二区三区的区别| 一本无码av一区二区三区| 国产一区二区三区特区| 九九综合va免费看| 国产欧美日韩一区二区三区在线| 免费国产一级片内射老| 日产国产亚洲精品系列| 先锋中文字幕在线资源| 国产普通话对白视频二区| 亚洲av乱码国产精品色| 国产乱码一区二区三区精品| 免费观看激色视频网站| 妞干网中文字幕| 日韩av在线手机免费观看| 中文字幕无线码免费人妻| 5级做人爱c视版免费视频| 亚洲视频不卡免费在线| 人妻诱惑中文字幕在线视频 | 国产欧美乱夫不卡无乱码| 青青青视频手机在线观看|