999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Arduino的多軌道Midi音序器的實現

2019-05-27 06:12:00陳業欣豐大軍
網絡安全與數據管理 2019年5期
關鍵詞:設置信號

陳業欣,豐大軍,張 蓓

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

0 引言

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

1 功能設計

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

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

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

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

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

2 硬件設計

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

2.1 硬件平臺搭建

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

圖1 系統硬件結構框圖

2.2 輸入模塊

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

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

2.3 輸出模塊

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

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

3 軟件設計

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

3.1 實時演奏主程序

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

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

圖2 主程序流程圖

3.2 音序播放子程序

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

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

3.3 音序錄制子程序

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

3.4 多軌道Midi設置子程序

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

3.5 外部中斷子程序

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

4 結論

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

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

猜你喜歡
設置信號
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
7招教你手動設置參數
孩子停止長個的信號
基于LabVIEW的力加載信號采集與PID控制
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
一種基于極大似然估計的信號盲抽取算法
艦船人員編制的設置與控制
主站蜘蛛池模板: 久草网视频在线| 最新精品国偷自产在线| 成年免费在线观看| 伊人中文网| 草草影院国产第一页| 一级做a爰片久久免费| 国产91精选在线观看| 激情视频综合网| 国产特级毛片| 丁香婷婷激情网| 久热re国产手机在线观看| 久久国产精品麻豆系列| 久久久久亚洲Av片无码观看| 久久综合丝袜日本网| 亚洲欧美日韩中文字幕在线一区| 亚洲欧美在线精品一区二区| 欧美不卡视频一区发布| 99在线免费播放| 久一在线视频| 欧美日韩免费| 高清国产va日韩亚洲免费午夜电影| 毛片手机在线看| 亚洲丝袜中文字幕| 女人爽到高潮免费视频大全| 久久国产亚洲偷自| 国产成人亚洲综合a∨婷婷| jizz国产视频| 她的性爱视频| 亚洲福利视频网址| 欧美精品v欧洲精品| 亚洲区视频在线观看| 国产成人啪视频一区二区三区| 亚洲成人高清无码| 视频二区亚洲精品| 精品在线免费播放| 亚洲精品国产成人7777| 午夜日本永久乱码免费播放片| 欧美色综合网站| 91小视频在线观看免费版高清| 日本不卡视频在线| 亚洲综合日韩精品| 中字无码精油按摩中出视频| 中文字幕天无码久久精品视频免费| 在线亚洲精品自拍| 日韩大片免费观看视频播放| 天天做天天爱夜夜爽毛片毛片| 国产浮力第一页永久地址| 嫩草在线视频| 亚洲有无码中文网| 色偷偷男人的天堂亚洲av| 亚洲天堂.com| 在线观看免费AV网| 啪啪啪亚洲无码| 欧美成人区| 99偷拍视频精品一区二区| 久久精品人妻中文视频| 国内精品久久人妻无码大片高| 久久久久免费精品国产| 99人体免费视频| 一级黄色欧美| 波多野结衣中文字幕一区二区 | 不卡国产视频第一页| 欧美国产成人在线| 日韩av无码精品专区| 72种姿势欧美久久久大黄蕉| 久久国产精品嫖妓| 亚洲高清在线播放| 一级毛片网| 九九九精品视频| 中美日韩在线网免费毛片视频 | 99精品免费欧美成人小视频| 91视频精品| 波多野结衣一区二区三区AV| 蜜臀AVWWW国产天堂| 国产精品漂亮美女在线观看| 在线观看国产精品第一区免费| 天天做天天爱夜夜爽毛片毛片| 四虎亚洲国产成人久久精品| 亚洲综合在线最大成人| 亚洲精品免费网站| 国产激爽爽爽大片在线观看| a毛片免费看|