アーケードゲーム用シンセサイザコントローラ

Adafruit Industries

image

Adafruit提供

ガイド:John Park

概要

ファイトスティック/ピアノキーボードのマッシュアップの形で、自分だけのアルペジエータシンセサイザ/MIDIコントローラを構築しましょう!チップチューンに最適です。LEDアーケード1x4ボード、MIDI FeatherWing、Feather M4 Express、そしてたくさんの光るボタンを使って、このレトロスタイルのシンセサイザを作りましょう。

光るアーケードボタンで基音を鳴らし、ジョイスティックでテンポとオクターブを調整し、フロントパネルのファンクションボタンでアープ(アルペジエータ)を開始/停止し、アープレンジの調整、さまざまなパターンを選択します。

ステレオヘッドフォンジャックから矩形波シンセサイザのサウンドを出力したり、USBやクラシックなDIN-5 MIDIケーブルを介してソフトウェアやハードウェアシンセサイザにMIDIを送信します。

このプロジェクトは、素晴らしいPianocadeに直接インスパイアされたものです。

オーディオライブラリを使用したオンボード合成


MIDIを介してゲームボーイをコントロールするアーケードシンセサイザコントローラ

パーツ

オプション

あなたが非常にハイな気分なら、ベースとなるアルミバンパーフィートを2セット、3セットと増やしていくことも可能です!

エンクロージャ材料

筐体を作るには、グレー、黒、白の3mm厚(約1/8インチ)のアクリル板が必要です。

  • ‎マットグレー 1/8インチx 12インチx 24インチ 2枚
  • ‎つや消しの黒 1/8インチx 12インチx 24インチ 1枚‎‎
  • ‎半透明の白 1/8インチx 12インチx 24インチ 1枚

M4ネジとナットでケースを固定します。また、同様にジョイスティックも固定します。

  • M4 x 0.7mm ナット
  • M4 x 80mm ソケットヘッドねじ
  • M4 x 14mm ソケットヘッドねじ

アーケードシンセサイザのコード

簡単なコードのアップロード

ドラッグ&ドロップで簡単にFeather M4 Expressにコードを書き込むことができます!Featherを正常なUSBデータケーブルでコンピュータに接続し(電源だけではありません!)、リセットボタンをダブルクリックするだけです。

ボードはFEATHERBOOTという名前のUSBドライブとしてコンピュータ上に表示されます。以下のリンクからArcade_Synth_Controller.UF2ファイルをダウンロードし、FEATHERBOOTドライブにドラッグします。

ボードは自動的にリセットされ、コードが実行されます。

ソースコードハッキング

もっと深く掘り下げたい場合は、こちらから ソースコードをダウンロードできます。これには、Arduino IDEの知識とボードにコードをアップロードする方法についてのある程度の知識が必要です。

‎‎プロジェクトバンドルのダウンロード‎

// SPDX-FileCopyrightText: 2022 John Park and Tod Kurt for Adafruit Industries
//
// SPDX-License-Identifier: MIT

// Arcade Synth Controller II: Son of Pianocade -- The Enriffening
// written by  John Park and Tod Kurt
// Synthesizer/MIDI arpeggiator for with multiple LED Arcade boards & joystick input

// Arpy library: https://github.com/todbot/mozzi_experiments/blob/main/eighties_arp/Arpy.h
// midi_to_freq and ADT patch: https://github.com/todbot/tal_experiments/tree/main/arpy_test

// - to do: when arp is off it acts as a normal keyboard.

#include <Arduino.h>
#include <Adafruit_TinyUSB.h>
#include <MIDI.h>
#include <Audio.h>
#include <Bounce2.h>
#include "Adafruit_seesaw.h"

#include "ADT.h"
#include "midi_to_freq.h"
#include "Arpy.h"

// ----- LED Arcade 1x4 STEMMA QT board pins-----
// pin definitions on each LED Arcade 1x4
#define  SWITCH1  18  // PA01
#define  SWITCH2  19 // PA02
#define  SWITCH3  20 // PA03
#define  SWITCH4  2 // PA04
#define  PWM1  12  // PC00
#define  PWM2  13 // PC01
#define  PWM3  0 // PA04
#define  PWM4  1 // PA05

#define  I2C_BASE_ADDR 0x3A //  boards are in order, 0x3A, 0x3B, 0x3C, 0x3D
#define  NUM_BOARDS 4

Adafruit_seesaw ledArcades[ NUM_BOARDS ];

//----- board variables
int boardNum = 0;  //used to read each board
int switchNum = 0; //used to read each switch
int boardSwitchNum = 0; //unique button ID accross all boards/buttons
int led_low = 10;  //min pwm brightness
int led_med = 60; 
int led_high = 220; // max brightness

bool lastButtonState[16] ;
bool currentButtonState[16] ;

//-----joystick pins-----
const int joyDownPin = 11;  //down
const int joyUpPin = 12; // up
const int joyLeftPin = 9; // left
const int joyRightPin = 10;  //right
const int joyGroundPin = 6; //"fake" ground pin

//-----joystick debouncer
Bounce joyDown = Bounce();
Bounce joyUp = Bounce();
Bounce joyLeft = Bounce();
Bounce joyRight = Bounce();


//-----MIDI instances-----
Adafruit_USBD_MIDI usb_midi;
MIDI_CREATE_INSTANCE(Adafruit_USBD_MIDI, usb_midi, MIDIusb); // USB MIDI
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDIclassic);  // classic midi over RX/TX

//-----Audio Library Syth parameters
#define NUM_VOICES 4

AudioSynthWaveform *waves[] = {
  &wave0, &wave1, &wave2, &wave3
};

int filterf_max = 6000;
int filterf = filterf_max;

uint32_t lastControlMillis=0;

uint8_t arp_octaves = 1;
uint8_t root_note = 0;

//----- create arpy arpeggiator
Arpy arp = Arpy();

int bpm = 160;
int octave_offset = 3;  // initially starts on MIDI note 36 with the offset of 3 octaves from zero
bool arp_on_off_state;

void setup() {
    Wire.setClock(400000);
    //----- MIDI and Serial setup-----
    //
    MIDIusb.begin(MIDI_CHANNEL_OMNI);
    MIDIclassic.begin(MIDI_CHANNEL_OMNI);
    Serial.begin(115200);
    MIDIusb.turnThruOff();
    delay(2000); // it's hard getting started in the morning
    Serial.println("[.::.:::.] Welcome to Arcade Synth Controller II: Son of Pianocade -- The Enriffening [.::.:::.]");
    Serial.println("MIDI USB/Classic and Serial have begun");
    //----- end MIDI and Serial setup-----
    
    //----- joystick pins setup-----
    //
    pinMode( joyDownPin, INPUT);
    pinMode( joyUpPin, INPUT);
    pinMode( joyLeftPin, INPUT);
    pinMode( joyRightPin, INPUT);
    pinMode( joyGroundPin, OUTPUT);

    joyDown.attach( joyDownPin, INPUT_PULLUP);
    joyUp.attach( joyUpPin, INPUT_PULLUP);
    joyLeft.attach( joyLeftPin, INPUT_PULLUP);
    joyRight.attach( joyRightPin, INPUT_PULLUP);
    digitalWrite(joyGroundPin, LOW);
    //----- end joystick pins setup-----

    //----- LED Arcade 1x4 setup-----
    //
    for ( int i = 0; i < NUM_BOARDS; i   ) {
      if ( !ledArcades[i].begin( I2C_BASE_ADDR   i ) ) {
      Serial.println(F("LED Arcade not found!"));
      while (1) delay(10);
      } 
    }
    Serial.println(F("LED Arcade boards started"));
  
    for ( int i = 0; i < NUM_BOARDS; i   ) {
      ledArcades[i].pinMode(SWITCH1, INPUT_PULLUP);
      ledArcades[i].pinMode(SWITCH2, INPUT_PULLUP);
      ledArcades[i].pinMode(SWITCH3, INPUT_PULLUP);
      ledArcades[i].pinMode(SWITCH4, INPUT_PULLUP);
      ledArcades[i].analogWrite(PWM1, led_low);
      ledArcades[i].analogWrite(PWM2, led_low);
      ledArcades[i].analogWrite(PWM3, led_low);
      ledArcades[i].analogWrite(PWM4, led_low);  
    }
    // brighten default root note
    ledArcades[0].analogWrite(PWM1, led_high);
    // turn down brightness of the function buttons
    ledArcades[3].analogWrite(PWM2, 0);
    ledArcades[3].analogWrite(PWM3, led_low);
    ledArcades[3].analogWrite(PWM4, led_low);
    //----- end LED Arcade 1x4 setup-----
    

    //-----Arpy setup-----
    //
    arp.setNoteOnHandler(noteOn);
    arp.setNoteOffHandler(noteOff);
    arp.setRootNote( root_note );
    arp.setOctaveOffset(octave_offset);
    arp.setBPM( bpm );
    arp.setGateTime( 0.75 ); // percentage of bpm
    arp.off();
    
    //----- Audio Library Synth setup-----
    // (patch is saved in ADT.h file)
    AudioMemory(120);

    filter0.frequency(filterf_max);
    filter0.resonance(0.5);
  
    env0.attack(10);
    env0.hold(2);
    env0.decay(100);
    env0.sustain(0.5);
    env0.release(100);

  // Initialize processor and memory measurements
  AudioProcessorUsageMaxReset();
  AudioMemoryUsageMaxReset();

  Serial.println("Arpy setup done");

} // end setup()


int waveform = WAVEFORM_SQUARE;


void noteOn(uint8_t note) {
  waves[0]->begin( 0.9, tune_frequencies2_PGM[note], waveform);
  waves[1]->begin( 0.9, tune_frequencies2_PGM[note] * 1.01, waveform); // detune
  waves[2]->begin( 0.9, tune_frequencies2_PGM[note] * 1.005, waveform); // detune
  waves[3]->begin( 0.9, tune_frequencies2_PGM[note] * 1.025, waveform); // detune
  filterf = filterf_max;
  filter0.frequency(filterf);
  env0.noteOn();
  MIDIusb.sendNoteOn(note, 127, 1);
  MIDIclassic.sendNoteOn(note, 127, 1);
}


void noteOff(uint8_t note) {
  env0.noteOff();
  MIDIusb.sendNoteOn(note, 0, 1);
  MIDIclassic.sendNoteOn(note, 0, 1);
}

void midiPanic(){
  for( uint8_t m = 0; m < 128; m   ){
    MIDIusb.sendNoteOn(m, 0, 1) ;
    MIDIclassic.sendNoteOn(m, 0, 1) ;
    yield();  // keep usb midi from flooding
  }
}

void lightLED(uint8_t buttonLED) {
    uint8_t pwms[4] = {PWM1, PWM2, PWM3, PWM4};
    boardNum = map(buttonLED, 0, 12, 0, 3);
    // first dim all buttons on first three boards
    for( int b = 0; b < 3; b  ) {
      for( int p = 0; p < 4; p   ) {
        ledArcades[b].analogWrite(pwms[p], led_low);
      }
    }
    // dim first button on fourth board (the other two are function buttons)
    ledArcades[3].analogWrite(PWM1, led_low);
    // then brighten the selected one
    ledArcades[boardNum].analogWrite(pwms[buttonLED % 4], led_high);
}


#define SWITCHMASK ((1 << SWITCH1) | (1 << SWITCH2) | (1 << SWITCH3) | (1 << SWITCH4))

void arcadeButtonCheck() {
    for ( boardNum = 0; boardNum < NUM_BOARDS; boardNum  ) {  // check all boards, all switches
      int pos = boardNum*4;
      uint32_t switches = ledArcades[boardNum].digitalReadBulk(SWITCHMASK);
      currentButtonState[pos 0] = ! (switches & (1<<SWITCH1));
      currentButtonState[pos 1] = ! (switches & (1<<SWITCH2));
      currentButtonState[pos 2] = ! (switches & (1<<SWITCH3));
      currentButtonState[pos 3] = ! (switches & (1<<SWITCH4));
    }
    for( int i = 0;  i < 4*NUM_BOARDS;  i   ) {
      bool state = currentButtonState[i];
      if(state != lastButtonState[i]) {
        
        if( state == HIGH ) { //pressed
          // ---button functions---
          // --root notes--
          if (i < 13){  // these are the piano keys for picking root notes
            root_note = 0   i ; // MIDI note        
            lightLED(i);
          }
          
        
          //--  start/stop toggle button--
          if (i == 13) {  // arp pattern button on front panel
            if( !arp_on_off_state) {
              arp.on();
              ledArcades[3].analogWrite(PWM2, led_med);
              arp_on_off_state = true;
            }
            else {
              arp.off();
              midiPanic();  // just to be on the safe side...
              ledArcades[3].analogWrite(PWM2, 0);
              arp_on_off_state = false;
            }
          }
          //-- arp octave range button--
          if (i == 14) {  // arp range button on front panel
            ledArcades[3].analogWrite(PWM3, led_high);
            arp_octaves = arp_octaves   1; if( arp_octaves==4) { arp_octaves=1; }
            arp.setTransposeSteps( arp_octaves );
            //Serial.printf("arp steps:%d\n",arp_octaves);
            ledArcades[3].analogWrite(PWM3, led_low);
          }
          //-- pattern button--
          if (i == 15) {  // arp pattern button on front panel
            ledArcades[3].analogWrite(PWM4, led_high);
            arp.nextArpId();
            ledArcades[3].analogWrite(PWM4, led_low);
          }
        }
      }
    }
    for( int i=0; i<4*NUM_BOARDS; i   ) {
      lastButtonState[i] = currentButtonState[i];
    }
}
//----- end arcade button check


void loop(){
    arcadeButtonCheck();  // see if any buttons are pressed, send notes or adjust parameters
        
    joyDown.update();
    joyUp.update();
    joyLeft.update();
    joyRight.update();

    if ( joyUp.fell() ) {  // read a joystick single tap
      ledArcades[3].analogWrite(PWM3, led_high);  // feedback on front panel button
      octave_offset = octave_offset   1; if( octave_offset>7) { octave_offset=7; }
      arp.setOctaveOffset(octave_offset);
      ledArcades[3].analogWrite(PWM3, led_low);
    }
    
    if ( joyDown.fell() ) {
      ledArcades[3].analogWrite(PWM3, led_high);   // feedback on front panel button
      octave_offset = octave_offset - 1; if( octave_offset<0) { octave_offset=0; }
      arp.setOctaveOffset(octave_offset);
      ledArcades[3].analogWrite(PWM3, led_low);
    }

    int joyLeftVal = joyLeft.read();  // read a held joystick (autorepeat) instead of single tap
    if( joyLeftVal == LOW ) {
      bpm = bpm - 1; if(bpm < 100) { bpm = 100; }
      ledArcades[3].analogWrite(PWM4, led_high);
      arp.setBPM( bpm );
      ledArcades[3].analogWrite(PWM4, led_low);
    }

    int joyRightVal = joyRight.read();  // for a held joystick instead of single tap
    if( joyRightVal == LOW ) {
      bpm = bpm   1; if(bpm > 3000) { bpm = 3000; }
      ledArcades[3].analogWrite(PWM4, led_high);
      arp.setBPM( bpm );
      ledArcades[3].analogWrite(PWM4, led_low);
    }

    arp.update(root_note);  //
  
    if( millis() - lastControlMillis > 20 ) { 
      lastControlMillis = millis();
    }
} 
//end loop()

GitHubで表示

MIDI

Arcade_Synth_Controller.inoのコードは、Audio Libraryのシンセサイザで音を鳴らすとともに、USBとクラシックDIN-5接続を介してMIDIを送出します。どのチャンネルを使うかは、ここのMIDIusb.sendNoteOnまたはOffの行をチャンネル1から必要なチャンネルに変更します。

‎ファイルのダウンロード‎

void noteOn(uint8_t note) {
  waves[0]->begin( 0.9, tune_frequencies2_PGM[note], waveform);
  waves[1]->begin( 0.9, tune_frequencies2_PGM[note] * 1.01, waveform); // detune
  waves[2]->begin( 0.9, tune_frequencies2_PGM[note] * 1.005, waveform); // detune
  waves[3]->begin( 0.9, tune_frequencies2_PGM[note] * 1.025, waveform); // detune
  filterf = filterf_max;
  filter0.frequency(filterf);
  env0.noteOn();
  MIDIusb.sendNoteOn(note, 127, 1);
  MIDIclassic.sendNoteOn(note, 127, 1);
}


void noteOff(uint8_t note) {
  env0.noteOff();
  MIDIusb.sendNoteOn(note, 0, 1);
  MIDIclassic.sendNoteOn(note, 0, 1);
}

void midiPanic(){
  for( uint8_t m = 0; m < 128; m   ){
    MIDIusb.sendNoteOn(m, 0, 1) ;
    MIDIclassic.sendNoteOn(m, 0, 1) ;
    yield();  // keep usb midi from flooding
  }
}

アルペジオ

Arpy.h classは、あのすばらしいTod Kurtによって設計され、キーボードで演奏された基音に基づくアルペジオパターンの演奏を処理します。

既存のパターンを編集したり、独自のパターンを作成することができます。 Arpy.hのコードの中で、それらの変更を行う場所は次のとおりです。

‎ファイルのダウンロード

int8_t arps[arp_count][arp_len] = {
      {0, 4, 7, 12},    // major
      {0, 3, 7, 10},    // minor 7th
      {0, 3, 6, 3},     // Diminished
      {0, 5, 7, 12},    // Suspended 4th
      {0, 12, 0, -12},  // octaves
      {0, 12, 24, -12}, // octaves 2
      {0, -12, -12, 0}, // octaves 3 (bass)
      {0, 0, 0, 0},     // root
    };

シンセサイザ設計

Audio System Design Toolは、シンセのモジュールとパッチの接続を設計するために使用されます。ここで使用する例では、パッチはADT.hファイルに含まれています。

‎ファイルのダウンロード

AudioSynthWaveform       wave0;          //xy=502.74795150756836,82.7552137374878
AudioSynthWaveform       wave1;      //xy=504.28649139404297,117.86524295806885
AudioSynthWaveform       wave2;      //xy=503.2865982055664,153.0081024169922
AudioSynthWaveform       wave3;      //xy=502.8580284118653,188.86524295806885
AudioMixer4              mixer0;         //xy=633.7151184082031,100.00811004638672
AudioEffectEnvelope      env0;           //xy=758.612813949585,54.04482841491699
AudioFilterStateVariable filter0;        //xy=888.6010780334473,60.850419998168945
AudioMixer4              mixerA;         //xy=1010.7359161376953,171.30673599243164
AudioMixer4              mixerL;      //xy=1196.8192749023438,210.86235809326172
AudioMixer4              mixerR;     //xy=1198.2637329101562,277.8345947265625
AudioOutputAnalogStereo  audioOut;       //xy=1360.3193969726562,250.61236572265625
AudioConnection          patchCord1(wave0, 0, mixer0, 0);
AudioConnection          patchCord2(wave3, 0, mixer0, 3);
AudioConnection          patchCord3(wave2, 0, mixer0, 2);
AudioConnection          patchCord4(wave1, 0, mixer0, 1);
AudioConnection          patchCord5(mixer0, env0);
AudioConnection          patchCord6(env0, 0, filter0, 0);
AudioConnection          patchCord7(filter0, 0, mixerA, 0);
AudioConnection          patchCord8(mixerA, 0, mixerL, 0);
AudioConnection          patchCord9(mixerA, 0, mixerR, 0);
AudioConnection          patchCord10(mixerL, 0, audioOut, 0);
AudioConnection          patchCord11(mixerR, 0, audioOut, 1);

image

アーケードシンセサイザ回路を構築する

image

回路

プロトタイプ基板

FeatherWing Protoボードは、小型のオーディオ出力回路や、I2C経由のSTEMMA QTポートの接続、ジョイスティック配線、リセットスイッチとイネーブルスイッチを追加するのに適しています。

以下の回路図は、Featherボードに関連するこれらの接続を示していますが、Protoボード上でこれらを作成し、FeatherWing Triplerを使用してこれらのポイントをFeatherに接続します。

image

image

プロトタイプ基板

上記の回路図とこれらの写真に従って、次の場所にある部品をはんだ付けします。

  • オーディオ出力RC回路(オーディオからノイズを除去するための抵抗コンデンサ回路)
  • ジョイスティック配線(D6ピンをジョイスティックスイッチの共通グランドとして使用することに注意)
  • イネーブルスイッチとリセットスイッチのヘッダ
  • STEMMA QT/QwiicコネクタからSDA、SCL、3v3、およびGNDへ

image

image

Feather Tripler

ここに示すように、ヘッダとM2.5ナイロンスタンドオフをFeather Triplerに追加します。

MIDI FeatherWing(DIN-5またはTRSプラグのどちらかを選択)をTriplerに挿入し、次にProto FeatherWingとFeather M4 Expressを挿入します。

後でケーブルを挿入する際にぐらつかないように、基板をTriplerのスタンドオフに固定します。

LEDアーケードボタンSTEMMA QTボード

I2Cで4つのLEDアーケードボタンボードを使用するには、それぞれに固有のアドレスを設定する必要があります。

3枚の基板のトレースをカットしてセットします。

次のように設定します。

  • ‎0x3A(デフォルト、トレースをカットしないでください)
  • ‎0x3B – トレースA0をカット
  • ‎0x3C – トレースA1をカット
  • ‎0x3D – トレースA0とA1をカット‎‎

次に、100mmのSTEMMA QTケーブルを使って、左から右へ順番に配線していきます。

image

image

アーケードボタンの配線

各アーケードボタンに2組のクイックコネクトケーブルを差し込みます – 1組はスイッチ用、もう1組はLED用です。

スイッチタブ(グレーのプラスチック製スイッチベースから突き出ているもの)には極性は関係ありませんが、LEDが動作するためには-と+を正しく接続する必要があります。これらは、アーケードボタン基板のLEDポートと、スイッチベースのモールドとの両方に記されています。

この配線は、混乱を避けるために、私はあらかじめ熱収縮チューブで印を付けておきました。また、このように黄色の4つのボタンを熱収縮チューブで順番に並べています。このような整理準備は、適切な配線作業や後でトラブルシューティングの際に非常に役に立ちます!

image

image

image

image

リセットボタンとイネーブルボタンの配線

これらのスイッチのLEDは配線せず、スイッチだけを配線することにしました。極性は関係ありません。

黄色のモーメンタリスイッチはFeatherのリセットピンに、緑のトグルスイッチはイネーブルに接続されることを忘れないでください。

image

image

アーケード筐体を構築する

image

筐体

アーケードシンセサイザコントローラの筐体は、3mm厚のアクリルからレーザーカットされるように設計されています。下の.svgファイルは、レーザーカッターで使用するか、サービスプロバイダに送ってカットしてもらうことができます。

image

筐体の部品

3mm(約1/8インチ)のアクリルから、図のようにパーツを切り出します。材料の仕上がり面を上にしてカットします。

image

image

image

image

アーケードボードを貼り付ける

M2.5ナイロンスタンドオフ、ネジ、ナットを使って、アーケードボタン基板をベースプレートに貼り付けます。左側が1枚目の基板(アドレス0x3A)です。

基板の向きに注意して、後で他のすべてが揃うようにします。

image

image

image

image

image

Triplerの貼り付け

スタンドオフとナットを使用して、図のようにTriplerを取り付けます。STEMMA QTケーブルポートをアーケードボタン基板に接続します。

image

image

image

image

image

リアパネルのボタン

バックパネルの仕上げ面を表にして(MIDI出力ポートと穴の位置を正しく合わせ)、リセットボタンとイネーブルボタンを穴に入れ、保持リングを通します。

スイッチをFeather Protoボードのそれぞれのポートに差し込みます。

バックパネルの切込みをベースにセットします。

image

image

image

image

image

image

image

サイドパネル

サイドパネルの切込みをベースにセットします。

image

image

フロントパネルのボタン

仕上げ面を表にして、フロントパネルのアーケードボタン3個を図のように穴に通します。

保持リングを通し、4番目のLEDアーケードボタンブレークアウトボードに差し込みます。LEDケーブルとスイッチケーブルが、それぞれのポートに正しく差し込まれていることを再確認してください。

image

image

image

image

image

トップレイヤのボタン

天板を挟み込み(注:2枚のうち下側のみフィンガージョイントの切り欠きがあります)、黄色の順番に注意しながらボタンをはめ込みます。

保持リングを通します。

image

image

image

image

image

ジョイスティックの取付け

ジョイスティックトッパーのネジを外し、脇に置いておきます。永遠に減らないゴブストッパーに見えますが、口にいれても味はしませんし、決して消化できないので食べないでください。

インターフェースピンをコントローラの中央に向かって内側に向け(そうでなければ収まりません!)、ジョイスティックステムをトップパネルに通し、M4 × 40mmのネジとナット4組で所定の位置にネジ止めします。

ジョイスティックのワイヤハーネスを差し込みます。

image

image

image

image

ボタンを差し込む‎

‎プラグパーティです!

残りのすべてのアーケードボタンを、左から右の順番に、LEDアーケードボタンブレークアウトボードに差し込みます。

image

image

image

image

テスト: この機会に、すべてを終了する前に動作確認を行うことをお勧めします。‎

image

ケースを閉じる

フィンガージョイントのタブとスロットを合わせて、慎重にケーストップを閉じます。

M4 × 80mmのネジ6本を穴に通し、底面でナットで固定します。

image

image

image

image

ジョイスティックワッシャとボール

ジョイスティックのディスクとボールトッパーを交換します。‎

image

image

フィート

ネジが露出して机を傷つけないように、大きなゴム製のバンパーフットや、次に示すようにM4ネジのキーボードフィートを4つまたは6つ使うことも可能です。

image

image

アーケードシンセサイザコントローラでプレイ

image

FeatherにマイクロUSBケーブルを接続し、もう一方の端をコンピュータ(特にUSB MIDI使用時)またはUSB電源に接続します。

オーディオ出力は、ステレオ3.5mm TRSケーブルをProtoboardのジャックに差し込み、もう一方の端をアンプ、パワードスピーカ、またはオーディオインターフェースに差し込みます。

オプションとして、クラシックMIDI信号を送信する場合は、リセットボタンに最も近いMIDIポートであるMIDI出力にMIDIケーブルを接続してください。

アーケードシンセサイザコントローラの緑色のスイッチを押して電源を入れると、しばらくしてボタンが点灯し、プレイできる状態になります。

コントローラ前面の左側にある白いボタンを押すとアルペジエータが起動します。このボタンは、アープが停止しているときは消灯し、再生しているときは点灯します。

コントローラの最初のキーボードボタンがデフォルトで点灯しているので、シンセサイザがハ長調のアルペジオを演奏しているのが聞こえます。成功です!

その他、試してほしい操作をご紹介します。

  • 赤いキーボードのボタンを押すと、別の基音ノートが選択されます。その基音ノートは他のノートより明るく点灯します。
  • ジョイスティックを左右にしてテンポを速くしたり遅くしたりします。
  • ジョイスティックを上下にしてオクターブオフセットを増減します。
  • フロントパネルの白い中央ボタンで、アルペジオの範囲を1オクターブ、2オクターブ、3オクターブと広げることができます。
  • フロントパネルの白い右ボタンで内蔵の8種類の異なるアープパターンを循環で切り替えることができます。

主要部品とコンポーネント



すべてのDigi-Keyパーツをカートに追加する

  • 1528-2648-ND
  • 1528-5296-ND
  • 1528-4740-ND
  • 1528-2316-ND
  • 1528-2318-ND
  • 1528-1905-ND
  • 1528-1622-ND
  • 1528-4210-ND




オリジナル・ソース(English)