在這個項目中,學習使用Arduino Nano或Arduino Uno創建數字控制振蕩器或基于DCO的音頻合成器。
我喜歡音樂,我也喜歡電子。 多年來,我一直在制造音樂電子設備,主要是為我的電吉他演奏服務。 在構建和修改了一些電子管放大器和效果踏板之后,我決定涉足音頻合成領域。 我經常夢想創建自己的Eurorack合成器,一次一個模塊,但對于我的第一個合成器項目,我決定從獨立鍵盤開始。
在這個項目中,我移除了現有的電子設備,并用基于數字控制振蕩器(DCO)的音頻合成器代替了它們,該音頻合成器具有 Arduino Nano
在它的核心。 雖然我使用了Arduino Nano,但 Arduino Uno 也可以使用。 讓我們深入了解如何制作基于 DCO
的合成器。 但是,在走得太遠之前,讓我們先談談振蕩器在合成器中的使用。
振蕩器:任何合成器的心臟
任何合成器的關鍵元素都是其 振蕩器電路。 模擬頻率合成器通常有兩個或多個獨立可控振蕩器。 然而,任何踏入模擬互聯網兔子洞的人 壓控振蕩器 (VCO)
原理圖知道它們通常是復雜和混亂的。 一些雜亂來自可以優雅處理的功能,例如多個控制電壓輸入。 然而,即使最簡單的振蕩器電路被隔離在原理圖中,剩下的仍然會因熱反饋技巧而變得復雜,以保持振蕩器在其組件預熱時保持調諧。
當我考慮創建自己的合成器時,VCO電路的復雜性和混亂一直是我的絆腳石,盡管我喜歡模擬合成,但我無法擺脫其混亂的電子軟肋。 當我對
羅蘭·朱諾系列合成器。
羅蘭的朱諾-6 1982
年上市,作為當時其他復調合成器的更實惠的替代品。 它也是第一個使用DCO而不是傳統VCO的合成器。 與其他產品相比,這大大提高了儀器的調諧穩定性,因為DCO使用數字電路來控制振蕩器模擬信號的頻率。 考慮到這一點,當然,使用DCO而不是VCO肯定需要權衡。 許多人喜歡兩個略微失諧的VCO齊聲演奏的“溫暖”聲音,這很難用基于DCO的合成器來模擬。 但是,調制效果可以應用于來自DCO的干輸出信號,以產生郁郁蔥蔥,優美的聲音。
總體而言,Arduino Uno和Nano開發板的普遍性和低成本,以及這些數字平臺預先配備了16 MHz的事實。 晶體振蕩器,使以便宜的價格創建 DCO
變得非常容易。
查看數據表以了解任何現代 微控制器,您將在其外圍設備中找到一個計時器模塊。 定時器模塊允許嵌入式設計人員在嵌入式系統的后臺設置一個獨立于
中央處理器(中央處理器)。 此外,定時器模塊可以在多種情況下中斷CPU,例如當它們溢出其計數寄存器或達到某個計數時。 嵌入式設計人員可以配置中斷條件,以滿足其特定應用的需求。
對于這個項目,計時器模塊 ATMega328PArduino
Nano和Uno的大腦充當合成器的DCO。 通過配置定時器模塊的時鐘源和最大計數值,可以在音頻頻率下觸發定時器模塊中斷。 DCO
輸出是通過在這些周期性中斷的中斷服務例程 (ISR) 期間操縱微控制器的 GPIO 引腳來實現的。
在以下部分中,我將討論該項目背后的硬件和軟件設計,然后展示來自這個自制合成器的一些音頻剪輯。
使用 Arduino Nano 的音頻合成器的硬件
在介紹此項目中涉及的不同硬件以及它們如何協同工作之前,表 1 顯示了 BOM(物料清單)。
數量 | 元件 |
---|---|
1 | Arduino Nano v3.x |
4 | 470 nF [電容器] |
1 | 2.1 毫米槍管插孔 |
1 | 1/4“ 單聲道開關插孔 |
2 | 4.7千米 [電阻器] |
3 | 47k 電阻器 |
7 | 100k 電阻 |
1 | 100k 電阻 |
2 | 100k [電位計] |
1 | 1 M 電位計 |
23 | 單刀雙擲微型瞬時開關 |
1 | 開關 [直流-直流轉換器] (5 V 輸出) |
1 | 微片 [MCP23017] I/O 擴展器 |
1 | [LF411] 運算放大器(運算放大器) |
接下來,讓我們看一下圖 2 的系統圖,它顯示了該合成器的各部分是如何組合在一起的。
***圖2. ** 合成器的硬件系統圖。 *
鍵盤部分由 23 個 SPDT 開關組成,每個鍵一個。 其中 16 個密鑰路由到 MCP23017 I/O 擴展器,其余 7 個密鑰直接路由到 Arduino Nano 上的 GPIO 輸入。 然后,MCP23017 通過 Arduino Nano 連接到 Arduino Nano。 I2C.
從這里,Arduino Nano 處理來自鍵盤的輸入,并根據這些按鍵在 D11、D12 和 D10 上生成三個獨立的振蕩器輸出。 Arduino Nano上這些數字引腳的輸出被路由到求和放大器電路中,其原理圖如圖3所示。
***圖3. ** 求和放大電路原理圖 [點擊圖片放大]。 *
求和放大器包含三個電位計。 它們獨立控制振蕩器 2 和 3 的音量以及儀器的主音量。 放大器電路的輸出直接路由到 1/4“ 單聲道音頻插孔,使其易于直接插入吉他放大器。
為了給這個樂器供電,我使用了一個標準的 2.1 毫米 9 V DC 吉他踏板桶插孔。 此外,來自該插孔的+9 V被路由到小型DC-DC開關電源轉換器,以產生5 V電源連接。 +5 V電源為MCP23017供電。 Arduino通過+9 V電源通過其Vin引腳供電。 運算放大器的V+和V-由桶形插孔的+9 V和接地連接提供,5 V電源用作浮動接地連接運算放大器.
圖4顯示了該系統所有部件的連接方式。
*圖4. 整個系統的原理圖[點擊圖片放大]。 *
創建音頻合成器的軟件方面
該項目軟件的主要任務是解釋來自鍵盤按鈕的輸入并相應地操作計時器模塊寄存器. 在草圖中的 setup() 函數之前,聲明了幾個全局變量,包括對應于音符的計時器模塊寄存器值的兩個大型 2D 數組。 setup() 函數的過程遵循圖 5 的流程圖,其中僅涉及:
- 設置 GPIO 輸入和輸出
- 啟動 I2C 通信
- 初始化三個計時器模塊
- 啟用中斷
- 選擇定時器B模塊的時鐘源作為定時器A的時鐘
- 啟用全局中斷
*圖5. 該儀器的 Arduino 草圖的 setup() 函數的流程圖。 *
表示 Arduino 草圖的 loop() 函數的流程圖如圖 6 所示。
*圖6. 該儀器的 Arduino 草圖的 loop() 函數的流程圖 [單擊圖像放大]。 *
循環函數執行三個主要任務:
- 檢測鍵盤上的按下鍵
- 根據該特定鍵的注釋設置定時器模塊參數
- 設置柵極變量以允許振蕩器信號轉發到其各自的GPIO引腳
循環功能一次評估一個連接到鍵盤的每個 I/O 端口,直到檢測到按下的按鈕。 端口的評估順序是從鍵盤上的最低音到最高音,這意味著較低的音符實際上具有更高的優先級。 雖然我考慮使用 GPIO 和 I2C 中斷來處理鍵盤按鈕按下,但我最終使用了連續輪詢方法,并且我沒有注意到任何不利的性能。
最后,圖 7 顯示了 ATMega328P 中三個定時器模塊中每個模塊的中斷服務例程。
***圖7. **Arduino Nano的ATMega328P定時器模塊的中斷服務例程流程圖。 *
如果設置了門變量,則每個 ISR 都會切換其輸出引腳值。 這種切換為每個振蕩器生成音頻輸出。
由此產生的聲音樣本和潛在的增強功能
您可以在下面找到該項目的兩個音頻樣本。 請務必單擊播放按鈕圖像進行播放 - 請注意,音頻將在單獨的窗口中打開和播放。
*聲音剪輯 1. 音頻合成器演示。 *
正如您從第一個音頻樣本中聽到的那樣,該合成器產生漂亮的斯巴達低保真聲音。 該示例首先演示了根音符振蕩器,然后演示了根音符和八度降振,最后演示了根音符、八度降頻程和 7 個半音上升振蕩器。
***聲音剪輯 2. **帶有效果和鼓的音頻合成器演示。 *
第二個樣本通過一些延遲和相位效果展示了合成器,并疊加了多個軌道。 所有的旋律聲音都來自Arduino合成器,但鼓聲來自Roland 808風格的鼓機vst插件。
總而言之,我對這個項目的結果感到興奮,但我確實認為這個基于 Arduino 的合成器可以實現許多潛在的改進。 例如,我想為這個Arduino合成器實現一個USB midi接口。 我還想使用這些方法創建一個可擴展的多邊形合成器。 然而,就目前而言,這個項目已經改造成的玩具外殼是一種有趣的、值得上臺的低保真樂器,具有非常沙礫的低音。
如果您選擇像這樣構建自己的基于 Arduino 的合成器, 在下面的評論中讓我知道 聽起來如何。 祝你好運,繼續制造噪音!
-
合成器
+關注
關注
0文章
280瀏覽量
26101 -
Arduino
+關注
關注
188文章
6489瀏覽量
190029
發布評論請先 登錄
合成器
什么是頻率合成器
基于Arduino Nano和Mozzi庫驅動的貓主題合成器
基于Arduino Nano構建一個合成器
頻率合成器,頻率合成器原理及作用是什么?
用Arduino Nano構建一個SN76489 USB MIDI合成器

基于Arduino的頻率合成器
如何制作一個音頻合成器?

帶有PAM8403音頻放大器的更好的Arduino合成器

評論