見出し画像

DIY Lofiサンプラー「OpnBeat」プロトタイプVer.3(解説編)

さて前回の概要編ではOpnBeatの仕様などについて書きましたが、このnoteでは具体的な仕組みなどについて解説したいと思います。

回路図

回路図はこちらにあります

サンプラー、オーディオ回路

音源の録音再生を行うためのコアパーツにはおもちゃやボイスレコーダー用の録音再生チップであるISD1700(プロトタイプではISD1720)を使っています。通常のボイスレコーダーなどのアプリケーションではスタンドアロンモードと呼ばれる外付けのスイッチによりプログラム無しで録音再生の操作ができるモードを使いますが、OpnBeatではSPIモードと呼ばれるマイコンからのコマンド送信でより複雑な録音再生の制御が可能なモードを使います。

サンプラー、オーディオ回路のブロック図

上記はサンプラー、オーディオ回路の簡単なブロック図です。ISD1700はモノラル音声のみを入出力するため、入力された音源のアナログ信号はLINE IN端子から入力されてからU1でモノラルにダウンミックスされます。ダウンミックスされた入力音声はすべてのISD1700チップに並列に入力されます。ArduinoはSS(スレーブセレクト信号)によって一度に1つのISD1700チップのみを選択するため、選択された一つのISD1700チップのみが録音、再生、音量変更などの処理を実行します。

ISD1700チップには入力されたアナログ音声信号をAD変換せずに直接記録するマルチレベルストレージアレイという不揮発性のメモリが内蔵されており、SPIモードでは開始アドレスと終了アドレスを指定するSET_PLAYやSET_RECというコマンドによって、録音された音源の指定した一部分のみを再生させることができます。ファイル形式やコーデック (.mp3、.wav) などの複雑な知識が無くても、ArduinoからSPI コマンド (PLAY/REC、開始アドレス、終了アドレス) を送信するだけで音が鳴らせるので非常に簡単です。

各ISD1700チップはSPIモードでのみ使用可能なAUD/AUX出力ピンからアナログ音声を出力します。それらの出力およびArduinoで生成したメトロノーム音はOPAMP(U1)によってミキシングされLINE OUTから出力されます。またミックスされた信号は音量調整されてヘッドフォン出力端子から出力されます。

録音領域のメモリマップ

下記はISD1700のデータシートから抜粋した音声記録領域のメモリマップです。たとえば再生したい開始アドレスと終了アドレスを指定してset_playコマンドを送信することで、サンプリングされた数秒間(ISD1720をサンプリング周波数12kHzで使用した場合は約12秒間)の音源の中からドラムの1ショットだけをトリミングして鳴らすこともできます。

ISD1700のメモリマップ

OpnBeatのサンプリング、トリミング機能については下記の動画(0:14あたりから)を参照ください。

コントロール、I/F回路

下記はArduinoへのコントロールとI/Fのブロック図です。ロータリーエンコーダーでメニューを選択して決定します。ClickEncoder.hライブラリを使用しています。12キーのステータス(Back、Play、REC、エンコーダーボタン、Sound1、Sound2、... Sound8)の読み取りにはAnalogMultiButton.hライブラリを使用して一つのADCで12キーの状態を読み込みます。LCDは4線(VDD、VSS、SCL、SDA)だけで済むI2C I/Fの16x2 LCDを使用しています。

コントロール、I/F回路のブロック図

電源回路

下記は電源回路のブロック図です。電源入力にはUSB Type Cコネクタを採用しています。以前の試作品ではUSB mini Bコネクタを使っていましたがUSB電源と本製品間の電圧降下が非常に大きく基板上のUSBコネクタで測定した入力5Vは実測4.3V程度になっていました。Type Cコネクタを使用したことでType Cケーブルの抵抗が低いためか実測でほぼほぼ5Vが得られました。

B0505​​S-1W(5V出力絶縁DCDC) は、5Vの正電源からオペアンプの両電源用の-5Vを生成するために使用しています。シリーズレギュレータLM317とLM337により±5Vから±3Vを生成してアナログ回路に供給します。(シリーズレギュレータLM317は録音再生状態を示すWS2812BフルカラーLEDの可聴域のノイズを除去する意味もあります。それを入れずArduinoやフルカラーLEDとアナログ回路の5Vを共有したところ、フルカラーLEDを点灯させた際にLEDとの通信またはPWM制御に由来すると思われるピーというノイズが聞こえてしまいました…)

電源回路のブロック図

録音時間と音質

録音時間と音質は下記のテーブルの通りRoscとよばれる外付け抵抗の値で設定できます。

外付け抵抗とサンプリング周波数、最大録音時間の関係

OpnBeat は56kΩのRoscでデータシートで保証されている範囲で最高の音質であるサンプリング周波数12kHzと録音時間12秒に設定しています。DIYやLo-fiサンプラーとしてならこの音質でも十分だと思いますが、OpnBeatではどうにかサンプリング周波数をもうちょっとだけ伸ばせないかと考えた結果、音質を改善するためにISD1700チップをハックして使っています。それについては長くなりますので別のnoteで書きます。

ソースコードについてはまだコメント等個人的に書き散らかしていて他の人に見せられる状態でないのとGitHubを初めて使うため、GitHubでシェアするまでもうしばらくお待ちいただければ幸いです…。なるべく早く公開させていただきます。

この記事が気に入ったらサポートをしてみませんか?