[ デジタルエフェクターの制作 ]
デジタル・エフェクターのプログラム
- // coding : UTF-8
- /*
- 内部ADC及び外部DACを使ったエフェクター
- エフェクター
- 0:ディレイ
- 1:ショート・ディレイ
- 2:リバーブ
- 3:コーラス
- 4:ディメンションC 1
- 5:ディメンションC 2
- 6:フランジャー
- 7:ディメンションC + ディレイ
- 8:
- 9:リミッター
- A:オーバードライブ
- B:ディレイ付きオーバードライブ
- C:ディストーション
- D:ディレイ付きディストーション
- E:ノイズゲート
- F:いろいろ
- none:スルー
- */
-
- //This program runs on Rasberry Pi Pico
- //
- //ARDUINO IDE BOARD
- //Raspberry Pi Pico/RP2040 by Earle F. Philhower, III
- //Version 3.6.1
- //
- //ADDITIONAL BOARD MANAGER URL is
- //https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
- //
- //INFORMATION
- //https://github.com/earlephilhower/arduino-pico
- //
- //PROGRAM DEVELOPMENT HAS BEEN DONE USING
- //Arduino IDE 2.2.1
- //
-
- /*
- When I2S system runs on core0, the output waveform has pulse noise.
- Therefore, the I2S system must run on core 1.
- */
-
- /*
- 使用できるアナログピンは一本だけである。
- analogReadは当然に使えないしADCInputで二本目を使ってもトラブルが発生する。
- This program will not work properly if you use the second analog input pin.
- */
-
- #include <Arduino.h>
- #include <I2S.h>
- #include <ADCInput.h>
-
- //I2S OUTPUT
- #define PIN_I2S_OUTPUT_BCLK 20
- #define PIN_I2S_OUTPUT_LRCLK (PIN_I2S_OUTPUT_BCLK + 1)
- #define PIN_I2S_DOUT 22
-
- #define NUMBER_OF_BUFFERS_INPUT 10 //32
- #define NUMBER_OF_BUFFERS_OUTPUT 10 //32 //This number must be 3 or greater.
- #define SIZE_OF_BUFFER_INPUT 8
- #define SIZE_OF_BUFFER_OUTPUT 8 //This number must be 8 or greater.
-
- #define WARNING_VALUE 0x7000 //Amplitude alarm value for input signal
-
- #define P_I 3.141592653
-
- #define PIN_FOOT_SWITCH 0
- #define PIN_OVER_LOAD 1
- #define PIN_EFFECTOR_TYPE_1 2
- #define PIN_EFFECTOR_TYPE_2 3
- #define PIN_EFFECTOR_TYPE_4 4
- #define PIN_EFFECTOR_TYPE_8 5
- #define PIN_R_1_1 10
- #define PIN_R_1_2 11
- #define PIN_R_1_3 12
- #define PIN_R_1_4 13
- #define PIN_R_1_5 14
- #define PIN_R_2_1 15
- #define PIN_R_2_2 16
- #define PIN_R_2_3 17
- #define PIN_R_2_4 18
- #define PIN_R_2_5 19
-
- ADCInput adc_input(A0); //A0=GP26=31st pin
- I2S i2s_output(OUTPUT);
- //ADCInput adc_parameter(A1, A2);
-
- uint32_t const SAMPLE_RATE = 50000; //Setting the sample rate to 50kHz stabilizes this effector.
- //サンプリング周波数を50kHzにするとなぜか安定する。
- uint16_t const SAMPLE_RANGE = 1000;
- int16_t INPUT_VALUE;
- uint16_t EFFECTOR_TYPE = 0;
- boolean FLAG_SWITCH = true;
- boolean FLAG_SetUpHasBeenCompleted = false;
- float EFFECT_GAIN = 16.0;
-
- //delay : variable-parameters
- uint16_t DELAY_FEEDBACK = 2; //reciprocal number of feedback
- uint16_t DELAY_TIME = 20000; //time
- //reverb
- uint16_t DELAY_TIME1 = 5000; //time
- uint16_t DELAY_TIME2 = 12000; //time
- uint16_t DELAY_TIME3 = 22000; //time
- uint16_t DELAY_TIME4 = 25555; //time
- uint16_t DELAY_TIME5 = 31553; //time
- int16_t CENTRAL_DELAY_VALUE = 15 * SAMPLE_RATE / 1000; //15ms*SAMPLE_RATE/1000=750
- int16_t DELAY_WIDTH1 = 1 * (SAMPLE_RATE / 1000); //1ms*50=50
- int16_t DELAY_WIDTH2 = 2 * (SAMPLE_RATE / 1000); //2ms*50=100
- int16_t DELAY_WIDTH3 = 3 * (SAMPLE_RATE / 1000); //3ms*50=150
- int16_t DELAY_WIDTH4 = 4 * (SAMPLE_RATE / 1000); //4ms*50=200
- int16_t DELAY_WIDTH5 = 5 * (SAMPLE_RATE / 1000); //5ms*50=250
- uint16_t FEEDBACK_VALUE = 29;
- uint16_t VIBRATION_RATE_PARAMETER1 = 10; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/5=10, frequency=5Hz
- uint16_t VIBRATION_RATE_PARAMETER2 = 10;
- uint16_t VIBRATION_RATE_PARAMETER3 = 10;
- uint16_t VIBRATION_RATE_PARAMETER4 = 10;
- uint16_t DELAY_WIDTH_NUMBER1 = 3;
- uint16_t DELAY_WIDTH_NUMBER2 = 1;
- uint16_t DELAY_WIDTH_NUMBER3 = 2;
- uint16_t DELAY_WIDTH_NUMBER4 = 3;
- //over drive : variable-parameters
- uint16_t OVER_DRIVE_GAIN = 16;
- uint16_t OVER_DRIVE_LEVEL = 16;
- //limitter : variable-parameters
- int16_t LIMIT_TH = 0x5000; //limitter threshold
- int16_t LIMIT_RATE = 2; //limitter threshold
- //etc
- uint16_t ETC = 0;
- //noise gate
- uint16_t NOISE_GATE_OPEN_LEVEL = 50000;
- int32_t DECAYED_SOUND = 0;
- uint16_t NOISE_GATE_DECAY_SPEED = 1;
- uint16_t NOISE_GATE_THRESHOLD = 500;
-
- void TITLE(void) {
- Serial.println("< Digital effector >");
- Serial.println("Program : digital_effector01_000_01.ino");
- Serial.println("Version : 01.000.01");
- Serial.println("Copyright : Guy in Ogikubo");
- Serial.print("Sample rate : ");
- Serial.print(SAMPLE_RATE);
- Serial.println("Hz");
- Serial.println("DATE : 2023_10_16");
- Serial.println("VERSION UP DATE : 2023_12_2");
- Serial.println("This program runs on Raspberry Pi Pico.");
- Serial.flush();
- }
-
- void setup1() {
- Serial.begin(115200);
- uint16_t SERIAL_COUNT = 0;
- while (!Serial && (SERIAL_COUNT < 2500)) {
- delay(1);
- SERIAL_COUNT++;
- }
- if (Serial) {
- TITLE();
- }
- while (!FLAG_SetUpHasBeenCompleted) delay(1);
- if (Serial) {
- Serial.print("Effector type = ");
- Serial.println(EFFECTOR_TYPE, HEX);
- Serial.println(" ");
- Serial.println("Enjoy your music!");
- Serial.println("");
- Serial.flush();
- }
- setup_output();
- setup_input();
- }
-
- void loop1() {
- //delay or short delay
- if (EFFECTOR_TYPE == 0 || EFFECTOR_TYPE == 1) {
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- int32_t OUTPUT_VALUE;
- int32_t DELAY_BUFFER_VALUE;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME) & 0x7FFF];
- OUTPUT_VALUE = OUTPUT_VALUE * (1 << (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = 1; //If OUTPUT_VALUE is set to completely zero, pulse noise will occur when switching.
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
- OUTPUT_VALUE = OUTPUT_VALUE >> 16;
- DELAY_BUFFER_VALUE = 0;
- for (uint16_t i = 0; i < DELAY_FEEDBACK; i++) DELAY_BUFFER_VALUE += OUTPUT_VALUE;
- DELAY_BUFFER_VALUE = DELAY_BUFFER_VALUE / 8 + INPUT_VALUE / 2;
- DELAY_BUFFER[CNT_NOW] = (int16_t)DELAY_BUFFER_VALUE;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.0005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -0.0005;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.0005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //delay or short delay ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- //reverb
- if (EFFECTOR_TYPE == 2) {
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- int32_t OUTPUT_VALUE;
- int32_t DELAY_BUFFER_VALUE;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME1) & 0x7FFF] * (1 << 15);
- OUTPUT_VALUE -= (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME2) & 0x7FFF] * (1 << 14);
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME3) & 0x7FFF] * (1 << 13);
- OUTPUT_VALUE -= (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME4) & 0x7FFF] * (1 << 12);
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME5) & 0x7FFF] * (1 << 11);
- OUTPUT_VALUE = OUTPUT_VALUE * (1 >> (uint16_t)round(16.0 - EFFECT_GAIN));
- } else
- OUTPUT_VALUE = 1; //If OUTPUT_VALUE is set to completely zero, pulse noise will occur when switching.
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
-
- OUTPUT_VALUE = OUTPUT_VALUE >> 16;
- DELAY_BUFFER_VALUE = 0;
- for (uint16_t i = 0; i < DELAY_FEEDBACK; i++) DELAY_BUFFER_VALUE += OUTPUT_VALUE;
- DELAY_BUFFER_VALUE = DELAY_BUFFER_VALUE / 8 + INPUT_VALUE / 2;
- DELAY_BUFFER[CNT_NOW] = (int16_t)DELAY_BUFFER_VALUE;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.0005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -0.0005;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.0005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //reverb ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //space effect
- if (EFFECTOR_TYPE == 3 || EFFECTOR_TYPE == 4 || EFFECTOR_TYPE == 5 || EFFECTOR_TYPE == 6) {
- int16_t DELAY_SWING1[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING1[i] = DELAY_WIDTH1 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING2[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING2[i] = DELAY_WIDTH2 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING3[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING3[i] = DELAY_WIDTH3 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING4[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING4[i] = DELAY_WIDTH4 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING5[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING5[i] = DELAY_WIDTH5 * sin(2 * P_I * i / SAMPLE_RANGE);
-
- int16_t DELAY_VALUE1;
- int16_t DELAY_VALUE2; //dimention C
- int16_t DELAY_VALUE3; //dimention C
- int16_t DELAY_VALUE4; //dimention C
- int32_t DELAY_BUFFER_VALUE;
- int16_t DELAY_BUFFER[0x1000];
- for (uint16_t i = 0; i < 0x1000; i++) DELAY_BUFFER[i] = 0;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- int32_t OUTPUT_VALUE;
- uint16_t i_1 = 0;
- uint16_t j_1 = 0;
- uint16_t i_2 = 0;
- uint16_t j_2 = 0;
- uint16_t i_3 = 0;
- uint16_t j_3 = 0;
- uint16_t i_4 = 0;
- uint16_t j_4 = 0;
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read(); //INPUT_VALUE : int16_t
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE1) & 0xFFF]; //OUTPUT_VALUE : int32_t
- if (EFFECTOR_TYPE == 4) { //dimention C
- OUTPUT_VALUE = OUTPUT_VALUE / 2;
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE2) & 0xFFF] / 2;
- }
- if (EFFECTOR_TYPE == 5) { //dimention C+
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE2) & 0xFFF];
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE3) & 0xFFF];
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE4) & 0xFFF];
- OUTPUT_VALUE = OUTPUT_VALUE / 4;
- }
- OUTPUT_VALUE = OUTPUT_VALUE * (1 << (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = 1; //If OUTPUT_VALUE is set to completely zero, pulse noise will occur when switching.
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
- OUTPUT_VALUE = OUTPUT_VALUE >> 16;
- DELAY_BUFFER_VALUE = 0;
- if (EFFECTOR_TYPE == 6) { //flanger
- for (uint16_t i = 0; i < FEEDBACK_VALUE; i++) DELAY_BUFFER_VALUE += OUTPUT_VALUE;
- DELAY_BUFFER_VALUE = DELAY_BUFFER_VALUE / 32;
- DELAY_BUFFER_VALUE -= INPUT_VALUE / 8; //4=>8
- } else DELAY_BUFFER_VALUE += INPUT_VALUE; //chorus or dimention C
-
- DELAY_BUFFER[CNT_NOW] = (int16_t)DELAY_BUFFER_VALUE;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0xFFF;
- if (DELAY_WIDTH_NUMBER1 == 1) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING1[i_1];
- if (DELAY_WIDTH_NUMBER1 == 2) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING2[i_1];
- if (DELAY_WIDTH_NUMBER1 == 3) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING3[i_1];
- if (DELAY_WIDTH_NUMBER1 == 4) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING4[i_1];
- if (DELAY_WIDTH_NUMBER1 == 5) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING5[i_1];
-
- if (EFFECTOR_TYPE == 4) //dimention C
- {
- if (DELAY_WIDTH_NUMBER1 == 1) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING1[i_1];
- if (DELAY_WIDTH_NUMBER1 == 2) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING2[i_1];
- if (DELAY_WIDTH_NUMBER1 == 3) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING3[i_1];
- if (DELAY_WIDTH_NUMBER1 == 4) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING4[i_1];
- if (DELAY_WIDTH_NUMBER1 == 5) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING5[i_1];
- }
-
- if (EFFECTOR_TYPE == 5) //dimention C+
- {
- if (DELAY_WIDTH_NUMBER2 == 1) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING1[i_2];
- if (DELAY_WIDTH_NUMBER2 == 2) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING2[i_2];
- if (DELAY_WIDTH_NUMBER2 == 3) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING3[i_2];
- if (DELAY_WIDTH_NUMBER2 == 4) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING4[i_2];
- if (DELAY_WIDTH_NUMBER2 == 5) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING5[i_2];
-
- if (DELAY_WIDTH_NUMBER3 == 1) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING1[i_3];
- if (DELAY_WIDTH_NUMBER3 == 2) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING2[i_3];
- if (DELAY_WIDTH_NUMBER3 == 3) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING3[i_3];
- if (DELAY_WIDTH_NUMBER3 == 4) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING4[i_3];
- if (DELAY_WIDTH_NUMBER3 == 5) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING5[i_3];
-
- if (DELAY_WIDTH_NUMBER4 == 1) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING1[i_4];
- if (DELAY_WIDTH_NUMBER4 == 2) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING2[i_4];
- if (DELAY_WIDTH_NUMBER4 == 3) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING3[i_4];
- if (DELAY_WIDTH_NUMBER4 == 4) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING4[i_4];
- if (DELAY_WIDTH_NUMBER4 == 5) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING5[i_4];
- }
- //
- j_1++;
- if (j_1 >= VIBRATION_RATE_PARAMETER1) {
- j_1 = 0;
- i_1++;
- if (i_1 >= SAMPLE_RANGE) i_1 = 0;
- }
-
- if (EFFECTOR_TYPE == 5) {
- j_2++;
- if (j_2 >= VIBRATION_RATE_PARAMETER2) {
- j_2 = 0;
- i_2++;
- if (i_2 >= SAMPLE_RANGE) i_2 = 0;
- }
-
- j_3++;
- if (j_3 >= VIBRATION_RATE_PARAMETER3) {
- j_3 = 0;
- i_3++;
- if (i_3 >= SAMPLE_RANGE) i_3 = 0;
- }
-
- j_4++;
- if (j_4 >= VIBRATION_RATE_PARAMETER4) {
- j_4 = 0;
- i_4++;
- if (i_4 >= SAMPLE_RANGE) i_4 = 0;
- }
- }
-
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.0005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -0.0005;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.0005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //space effect ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //dimention C 2 + delay
- if (EFFECTOR_TYPE == 7) {
- int16_t DELAY_SWING1[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING1[i] = DELAY_WIDTH1 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING2[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING2[i] = DELAY_WIDTH2 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING3[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING3[i] = DELAY_WIDTH3 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING4[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING4[i] = DELAY_WIDTH4 * sin(2 * P_I * i / SAMPLE_RANGE);
- int16_t DELAY_SWING5[SAMPLE_RANGE];
- for (uint16_t i = 0; i < SAMPLE_RANGE; i++) DELAY_SWING5[i] = DELAY_WIDTH5 * sin(2 * P_I * i / SAMPLE_RANGE);
-
- int16_t DELAY_VALUE1, DELAY_VALUE2, DELAY_VALUE3, DELAY_VALUE4;
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- int32_t OUTPUT_VALUE;
- uint16_t i1 = 0;
- uint16_t j1 = 0;
- uint16_t i2 = 0;
- uint16_t j2 = 0;
- uint16_t i3 = 0;
- uint16_t j3 = 0;
- uint16_t i4 = 0;
- uint16_t j4 = 0;
-
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read(); //INPUT_VALUE : int16_t
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE1) & 0x7FFF];
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE2) & 0x7FFF];
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE3) & 0x7FFF];
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_VALUE4) & 0x7FFF];
- OUTPUT_VALUE -= (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME) & 0x7FFF];
- //OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - 0x7FFF) & 0x7FFF] / 2; //不要ではないか!!!!!!!!!!!
- OUTPUT_VALUE = (OUTPUT_VALUE / 8) * (1 << (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = 1; //If OUTPUT_VALUE is set to completely zero, pulse noise will occur when switching.
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
- DELAY_BUFFER[CNT_NOW] = INPUT_VALUE;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (DELAY_WIDTH_NUMBER1 == 1) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING1[i1];
- if (DELAY_WIDTH_NUMBER1 == 2) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING2[i1];
- if (DELAY_WIDTH_NUMBER1 == 3) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING3[i1];
- if (DELAY_WIDTH_NUMBER1 == 4) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING4[i1];
- if (DELAY_WIDTH_NUMBER1 == 5) DELAY_VALUE1 = CENTRAL_DELAY_VALUE + DELAY_SWING5[i1];
-
- if (DELAY_WIDTH_NUMBER2 == 1) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING1[i2];
- if (DELAY_WIDTH_NUMBER2 == 2) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING2[i2];
- if (DELAY_WIDTH_NUMBER2 == 3) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING3[i2];
- if (DELAY_WIDTH_NUMBER2 == 4) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING4[i2];
- if (DELAY_WIDTH_NUMBER2 == 5) DELAY_VALUE2 = CENTRAL_DELAY_VALUE - DELAY_SWING5[i2];
-
- if (DELAY_WIDTH_NUMBER3 == 1) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING1[i3];
- if (DELAY_WIDTH_NUMBER3 == 2) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING2[i3];
- if (DELAY_WIDTH_NUMBER3 == 3) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING3[i3];
- if (DELAY_WIDTH_NUMBER3 == 4) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING4[i3];
- if (DELAY_WIDTH_NUMBER3 == 5) DELAY_VALUE3 = CENTRAL_DELAY_VALUE + DELAY_SWING5[i3];
-
- if (DELAY_WIDTH_NUMBER4 == 1) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING1[i4];
- if (DELAY_WIDTH_NUMBER4 == 2) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING2[i4];
- if (DELAY_WIDTH_NUMBER4 == 3) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING3[i4];
- if (DELAY_WIDTH_NUMBER4 == 4) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING4[i4];
- if (DELAY_WIDTH_NUMBER4 == 5) DELAY_VALUE4 = CENTRAL_DELAY_VALUE - DELAY_SWING5[i4];
-
- //
- j1++;
- if (j1 >= VIBRATION_RATE_PARAMETER1) {
- j1 = 0;
- i1++;
- if (i1 >= SAMPLE_RANGE) i1 = 0;
- }
- j2++;
- if (j2 >= VIBRATION_RATE_PARAMETER2) {
- j2 = 0;
- i2++;
- if (i2 >= SAMPLE_RANGE) i2 = 0;
- }
-
- j3++;
- if (j3 >= VIBRATION_RATE_PARAMETER3) {
- j3 = 0;
- i3++;
- if (i3 >= SAMPLE_RANGE) i3 = 0;
- }
-
- j4++;
- if (j4 >= VIBRATION_RATE_PARAMETER4) {
- j4 = 0;
- i4++;
- if (i4 >= SAMPLE_RANGE) i4 = 0;
- }
-
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.0005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -0.0005;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.0005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //dimention C 2 +delay ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //EFFECTOR_TYPE 8 has no program, please make it yourself.
-
-
- //limitter with delay
- //right rotary switch : limitation threshold
- //left rotary switch : limitation rate
- if (EFFECTOR_TYPE == 9) {
-
-
- //If you want delay,
- //rewrite the variables as follows:
- //DELAY_FEEDBACK = 1,2,3, ... or 7;
- //boolean FLAG_LIMIT_DELAY = true;
- DELAY_TIME = 415 * 50; //415ms
- DELAY_FEEDBACK = 0;
- boolean FLAG_LIMIT_DELAY = false;
-
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- int32_t OUTPUT_VALUE;
- int32_t DELAY_BUFFER_VALUE;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- int16_t LIMIT_TH2, LIMIT_TH3;
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- OUTPUT_VALUE = (int32_t)INPUT_VALUE;
- if (OUTPUT_VALUE >= LIMIT_TH) OUTPUT_VALUE = (OUTPUT_VALUE - LIMIT_TH) / LIMIT_RATE + LIMIT_TH;
- if (OUTPUT_VALUE <= -LIMIT_TH) OUTPUT_VALUE = (OUTPUT_VALUE + LIMIT_TH) / LIMIT_RATE - LIMIT_TH;
-
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = (OUTPUT_VALUE + OUTPUT_VALUE + OUTPUT_VALUE) / 4;
- OUTPUT_VALUE = OUTPUT_VALUE * (1 << (uint16_t)round(EFFECT_GAIN));
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME) & 0x7FFF] * 0x10000;
- OUTPUT_VALUE += (int32_t)INPUT_VALUE * (0x10000 >> (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 0x10000;
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
- OUTPUT_VALUE = OUTPUT_VALUE >> 16;
- DELAY_BUFFER_VALUE = 0;
- for (uint16_t i = 0; i < DELAY_FEEDBACK; i++) DELAY_BUFFER_VALUE += OUTPUT_VALUE;
- DELAY_BUFFER_VALUE = DELAY_BUFFER_VALUE / 8;
- DELAY_BUFFER[CNT_NOW] = (int16_t)DELAY_BUFFER_VALUE;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -1;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //limitter with delay ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //over drive with delay or distortion with delay
- //right rotary switch : OVER_DRIVE_GAIN
- //left rotary switch : OVER_DRIVE_LEVEL
- if (EFFECTOR_TYPE == 0xA || EFFECTOR_TYPE == 0xB || EFFECTOR_TYPE == 0xC || EFFECTOR_TYPE == 0xD) {
- if (EFFECTOR_TYPE == 0xB || EFFECTOR_TYPE == 0xD) {
- DELAY_FEEDBACK = 2;
- DELAY_TIME = 430 * 50; //430ms
- }
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- int32_t OUTPUT_VALUE;
- int32_t OUTPUT_VALUE_spare;
- int32_t DELAY_BUFFER_VALUE;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- int32_t OVER_DRIVEN;
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- OVER_DRIVEN = INPUT_VALUE * OVER_DRIVE_GAIN;
- if (EFFECTOR_TYPE == 0xA || EFFECTOR_TYPE == 0xB) {
- if (OVER_DRIVEN >= 15260) OVER_DRIVEN = (OVER_DRIVEN - 15260) / 2 + 15260;
- if (OVER_DRIVEN <= -15260) OVER_DRIVEN = (OVER_DRIVEN + 15260) / 2 - 15260;
- if (OVER_DRIVEN >= 25260) OVER_DRIVEN = (OVER_DRIVEN - 25260) / 2 + 25260;
- if (OVER_DRIVEN <= -25260) OVER_DRIVEN = (OVER_DRIVEN + 25260) / 2 - 25260;
- if (OVER_DRIVEN >= 30260) OVER_DRIVEN = (OVER_DRIVEN - 30260) / 2 + 30260;
- if (OVER_DRIVEN <= -30260) OVER_DRIVEN = (OVER_DRIVEN + 30260) / 2 - 30260;
- if (OVER_DRIVEN >= 32760) OVER_DRIVEN = 32760;
- if (OVER_DRIVEN <= -32760) OVER_DRIVEN = 0 - 32760;
- }
- if (EFFECTOR_TYPE == 0xC || EFFECTOR_TYPE == 0xD) {
- if (OVER_DRIVEN >= 15260) OVER_DRIVEN = 15260;
- if (OVER_DRIVEN <= -15260) OVER_DRIVEN = -15260;
- }
-
- if (EFFECT_GAIN >= 0.0) {
- if (EFFECTOR_TYPE == 0xA || EFFECTOR_TYPE == 0xC) OUTPUT_VALUE = OVER_DRIVEN;
- if (EFFECTOR_TYPE == 0xB || EFFECTOR_TYPE == 0xD) {
- OUTPUT_VALUE = (OVER_DRIVEN + OVER_DRIVEN + OVER_DRIVEN) / 4;
- OUTPUT_VALUE += (int32_t)DELAY_BUFFER[(CNT_NOW - DELAY_TIME) & 0x7FFF];
- }
- OUTPUT_VALUE = OUTPUT_VALUE * (1 << (uint16_t)round(EFFECT_GAIN));
- OUTPUT_VALUE_spare = OUTPUT_VALUE;
- OUTPUT_VALUE = OUTPUT_VALUE / OVER_DRIVE_LEVEL;
- OUTPUT_VALUE += (int32_t)INPUT_VALUE * (0x10000 >> (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 0x10000;
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
- if (EFFECTOR_TYPE == 0xB || EFFECTOR_TYPE == 0xD) {
- OUTPUT_VALUE_spare = OUTPUT_VALUE_spare >> 16;
- DELAY_BUFFER_VALUE = 0;
- for (uint16_t i = 0; i < DELAY_FEEDBACK; i++) DELAY_BUFFER_VALUE += OUTPUT_VALUE_spare;
- DELAY_BUFFER_VALUE = DELAY_BUFFER_VALUE / 8;
- DELAY_BUFFER[CNT_NOW] = (int16_t)DELAY_BUFFER_VALUE;
- }
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -1;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //over drive with delay or distortion with delay^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //noise gate
- if (EFFECTOR_TYPE == 0xE) {
- int32_t OUTPUT_VALUE;
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
-
- if (abs(INPUT_VALUE) <= NOISE_GATE_THRESHOLD) NOISE_GATE_OPEN_LEVEL -= NOISE_GATE_DECAY_SPEED;
- else NOISE_GATE_OPEN_LEVEL += 2500;
- if (NOISE_GATE_OPEN_LEVEL > 50000) NOISE_GATE_OPEN_LEVEL = 50000;
- DECAYED_SOUND = (int32_t)INPUT_VALUE * 16;
- if (NOISE_GATE_OPEN_LEVEL < 35000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 32500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 30000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 27500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 25000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 22500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 20000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 17500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 15000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 12500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 10000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 7500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 5000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 2500) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 1250) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 600) DECAYED_SOUND = INPUT_VALUE / 2;
- if (NOISE_GATE_OPEN_LEVEL < 300) DECAYED_SOUND = DECAYED_SOUND / 2;
- if (NOISE_GATE_OPEN_LEVEL < 150) {
- DECAYED_SOUND = 0;
- NOISE_GATE_OPEN_LEVEL = 149;
- }
- OUTPUT_VALUE = DECAYED_SOUND / 16;
-
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = OUTPUT_VALUE * (1 << (uint16_t)round(EFFECT_GAIN));
- OUTPUT_VALUE += (int32_t)INPUT_VALUE * (0x10000 >> (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 0x10000;
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
-
- DELAY_BUFFER[CNT_NOW] = (int16_t)OUTPUT_VALUE / 0x10000;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -1;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //NOISE GATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //etc
- //right rotary switch : 1st digit
- //left rotary switch : 2nd digit
- if (EFFECTOR_TYPE == 0xF) {
- int32_t OUTPUT_VALUE;
- int16_t DELAY_BUFFER[0x8000];
- for (uint16_t i = 0; i < 0x8000; i++) DELAY_BUFFER[i] = 0;
- uint16_t CNT_NOW = 0; //This variable must be unsigned.
- int16_t SOFT_FUZZ_THRESHOLD = 0x1000;
- int16_t HARD_FUZZ_THRESHOLD = 0x800;
- int16_t ULTRA_HARD_FUZZ_THRESHOLD = 0x400;
- byte WAVE_PHASE = 3;
-
- //wave generator
- uint16_t MAX_VALUE_SIN440_11 = SAMPLE_RATE * 11 / 440; //clocks of 11 cycles under 440Hz
- int16_t SIN440_11[MAX_VALUE_SIN440_11];
- for (uint16_t j = 0; j < MAX_VALUE_SIN440_11; j++) SIN440_11[j] = 0x7FF0 * sin(2 * P_I * j * 440 / SAMPLE_RATE);
- uint16_t CLOCK_SIN440_11 = 0;
-
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
-
- if (ETC == 0) { OUTPUT_VALUE = abs(INPUT_VALUE); }
- if (ETC == 1) {
- if (INPUT_VALUE < 0) OUTPUT_VALUE = 0;
- else OUTPUT_VALUE = INPUT_VALUE;
- }
- if (ETC == 2) {
- if (INPUT_VALUE > 0) {
- if (INPUT_VALUE > 0x1000) OUTPUT_VALUE = 0x1000 - (INPUT_VALUE - 0x1000);
- else OUTPUT_VALUE = INPUT_VALUE;
- }
- if (INPUT_VALUE <= 0) {
- if (INPUT_VALUE < -0x1000) OUTPUT_VALUE = -0x1000 - (INPUT_VALUE + 0x1000);
- else OUTPUT_VALUE = INPUT_VALUE;
- }
- }
- if (ETC == 3) {
- OUTPUT_VALUE = INPUT_VALUE;
- if (OUTPUT_VALUE >= 0) OUTPUT_VALUE = OUTPUT_VALUE / 2;
- }
- if (ETC == 4) {
- if (INPUT_VALUE > 0) {
- OUTPUT_VALUE = INPUT_VALUE - 0x1000;
- if (OUTPUT_VALUE < 0) OUTPUT_VALUE = 0;
- }
- if (INPUT_VALUE <= 0) {
- OUTPUT_VALUE = INPUT_VALUE + 0x1000;
- if (OUTPUT_VALUE > 0) OUTPUT_VALUE = 0;
- }
- }
- if (ETC == 10) { //周波数特性にクセのあるLow-pass filter 1
- OUTPUT_VALUE = INPUT_VALUE;
- for (uint16_t j = 1; j < 16; j++) OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - j) & 0x7FFF];
- OUTPUT_VALUE = OUTPUT_VALUE / 16;
- }
-
- if (ETC == 11) { //周波数特性にクセのあるLow-pass filter 2
- OUTPUT_VALUE = INPUT_VALUE;
- for (uint16_t j = 1; j < 32; j++) OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - j) & 0x7FFF];
- OUTPUT_VALUE = OUTPUT_VALUE / 32;
- }
-
- if (ETC == 12) { //周波数特性にクセのあるLow-pass filter 3
- OUTPUT_VALUE = INPUT_VALUE * 4 + INPUT_VALUE;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 1) & 0x7FFF] * 2;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 2) & 0x7FFF];
- OUTPUT_VALUE = OUTPUT_VALUE / 8;
- }
-
- if (ETC == 13) { //周波数特性にクセのあるLow-pass filter 4
- OUTPUT_VALUE = INPUT_VALUE * 16 + INPUT_VALUE;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 1) & 0x7FFF] * 8;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 2) & 0x7FFF] * 4;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 3) & 0x7FFF] * 2;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 4) & 0x7FFF];
- OUTPUT_VALUE = OUTPUT_VALUE / 32;
- }
-
- if (ETC == 14) { //周波数特性にクセのあるLow-pass filter 5
- OUTPUT_VALUE = INPUT_VALUE * 64 + INPUT_VALUE;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 1) & 0x7FFF] * 32;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 2) & 0x7FFF] * 16;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 3) & 0x7FFF] * 8;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 4) & 0x7FFF] * 4;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 5) & 0x7FFF] * 2;
- OUTPUT_VALUE += DELAY_BUFFER[(CNT_NOW - 6) & 0x7FFF];
- OUTPUT_VALUE = OUTPUT_VALUE / 128;
- }
-
-
- if (ETC == 20) { //soft fuzz
- OUTPUT_VALUE = abs(INPUT_VALUE);
- if (OUTPUT_VALUE > SOFT_FUZZ_THRESHOLD) OUTPUT_VALUE = SOFT_FUZZ_THRESHOLD;
- OUTPUT_VALUE = OUTPUT_VALUE * 2;
- }
-
- if (ETC == 21) { //fuzz
- OUTPUT_VALUE = abs(INPUT_VALUE);
- if (OUTPUT_VALUE > HARD_FUZZ_THRESHOLD) OUTPUT_VALUE = HARD_FUZZ_THRESHOLD;
- OUTPUT_VALUE = OUTPUT_VALUE * 4;
- }
-
- if (ETC == 22) { //hard fuzz
- OUTPUT_VALUE = abs(INPUT_VALUE);
- if (OUTPUT_VALUE > HARD_FUZZ_THRESHOLD) OUTPUT_VALUE = HARD_FUZZ_THRESHOLD - OUTPUT_VALUE;
- if (OUTPUT_VALUE < 0) OUTPUT_VALUE = 0 - OUTPUT_VALUE;
- OUTPUT_VALUE = OUTPUT_VALUE * 4;
- }
-
- if (ETC == 23) { //ultra hard fuzz
- OUTPUT_VALUE = abs(INPUT_VALUE);
- if (OUTPUT_VALUE > ULTRA_HARD_FUZZ_THRESHOLD) OUTPUT_VALUE = ULTRA_HARD_FUZZ_THRESHOLD - OUTPUT_VALUE;
- OUTPUT_VALUE = OUTPUT_VALUE * 4;
- }
-
- if (ETC == 24) { //super ultra hard fuzz
- OUTPUT_VALUE = abs(INPUT_VALUE);
- if (OUTPUT_VALUE > ULTRA_HARD_FUZZ_THRESHOLD) OUTPUT_VALUE = ULTRA_HARD_FUZZ_THRESHOLD - OUTPUT_VALUE;
- if (OUTPUT_VALUE < 0) OUTPUT_VALUE = 0 - OUTPUT_VALUE;
- if (OUTPUT_VALUE > ULTRA_HARD_FUZZ_THRESHOLD) OUTPUT_VALUE = ULTRA_HARD_FUZZ_THRESHOLD - OUTPUT_VALUE;
- if (OUTPUT_VALUE < 0) OUTPUT_VALUE = 0 - OUTPUT_VALUE;
- OUTPUT_VALUE = OUTPUT_VALUE * 4;
- }
-
- if (ETC == 30) { //octaver A < 1 octave lower >
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 256;
- if (WAVE_PHASE >= 3 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 0; }
- if (WAVE_PHASE == 0 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 1; }
- if (WAVE_PHASE == 1 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 2; }
- if (WAVE_PHASE == 2 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 3; }
- if (WAVE_PHASE == 0) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 1) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 2) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 3) OUTPUT_VALUE = -0x1800;
- OUTPUT_VALUE = OUTPUT_VALUE / 2; // volume adjustment
- }
-
-
- if (ETC == 31) { //octaver B < 2 octave lower >
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 256;
- if (WAVE_PHASE >= 7 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 0; }
- if (WAVE_PHASE == 0 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 1; }
- if (WAVE_PHASE == 1 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 2; }
- if (WAVE_PHASE == 2 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 3; }
- if (WAVE_PHASE == 3 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 4; }
- if (WAVE_PHASE == 4 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 5; }
- if (WAVE_PHASE == 5 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 6; }
- if (WAVE_PHASE == 6 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 7; }
- if (WAVE_PHASE == 0) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 1) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 2) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 3) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 4) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 5) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 6) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 7) OUTPUT_VALUE = -0x1800;
- OUTPUT_VALUE = OUTPUT_VALUE / 2; // volume adjustment
- }
-
-
- if (ETC == 32) { //octaver C < 1 and 2 octaves lower >
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 256;
- if (WAVE_PHASE >= 7 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 0; }
- if (WAVE_PHASE == 0 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 1; }
- if (WAVE_PHASE == 1 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 2; }
- if (WAVE_PHASE == 2 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 3; }
- if (WAVE_PHASE == 3 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 4; }
- if (WAVE_PHASE == 4 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 5; }
- if (WAVE_PHASE == 5 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 6; }
- if (WAVE_PHASE == 6 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 7; }
- if (WAVE_PHASE == 0) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 1) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 2) OUTPUT_VALUE = 0;
- if (WAVE_PHASE == 3) OUTPUT_VALUE = 0;
- if (WAVE_PHASE == 4) OUTPUT_VALUE = 0;
- if (WAVE_PHASE == 5) OUTPUT_VALUE = 0;
- if (WAVE_PHASE == 6) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 7) OUTPUT_VALUE = -0x1800;
- OUTPUT_VALUE = OUTPUT_VALUE / 2; // volume adjustment
- }
-
- if (ETC == 33) { //octaver D < 0 and 1 and 2 octaves lower >
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 256;
- if (WAVE_PHASE >= 7 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 0; }
- if (WAVE_PHASE == 0 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 1; }
- if (WAVE_PHASE == 1 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 2; }
- if (WAVE_PHASE == 2 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 3; }
- if (WAVE_PHASE == 3 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 4; }
- if (WAVE_PHASE == 4 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 5; }
- if (WAVE_PHASE == 5 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 6; }
- if (WAVE_PHASE == 6 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 7; }
- if (WAVE_PHASE == 0) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 1) OUTPUT_VALUE = 0x800;
- if (WAVE_PHASE == 2) OUTPUT_VALUE = 0x800;
- if (WAVE_PHASE == 3) OUTPUT_VALUE = -0x800;
- if (WAVE_PHASE == 4) OUTPUT_VALUE = 0x800;
- if (WAVE_PHASE == 5) OUTPUT_VALUE = -0x800;
- if (WAVE_PHASE == 6) OUTPUT_VALUE = -0x800;
- if (WAVE_PHASE == 7) OUTPUT_VALUE = -0x1800;
- OUTPUT_VALUE = OUTPUT_VALUE / 2; // volume adjustment
- }
-
- if (ETC == 34) { //octaver E < 3 octave lower
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 256;
- if (WAVE_PHASE >= 15 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 0; }
- if (WAVE_PHASE == 0 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 1; }
- if (WAVE_PHASE == 1 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 2; }
- if (WAVE_PHASE == 2 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 3; }
- if (WAVE_PHASE == 3 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 4; }
- if (WAVE_PHASE == 4 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 5; }
- if (WAVE_PHASE == 5 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 6; }
- if (WAVE_PHASE == 6 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 7; }
- if (WAVE_PHASE == 7 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 8; }
- if (WAVE_PHASE == 8 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 9; }
- if (WAVE_PHASE == 9 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 10; }
- if (WAVE_PHASE == 10 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 11; }
- if (WAVE_PHASE == 11 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 12; }
- if (WAVE_PHASE == 12 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 13; }
- if (WAVE_PHASE == 13 && OUTPUT_VALUE >= 0x7EEE) { WAVE_PHASE = 14; }
- if (WAVE_PHASE == 14 && OUTPUT_VALUE <= -0x7EEE) { WAVE_PHASE = 15; }
-
- if (WAVE_PHASE == 0) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 1) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 2) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 3) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 4) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 5) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 6) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 7) OUTPUT_VALUE = 0x1800;
- if (WAVE_PHASE == 8) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 9) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 10) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 11) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 12) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 13) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 14) OUTPUT_VALUE = -0x1800;
- if (WAVE_PHASE == 15) OUTPUT_VALUE = -0x1800;
- OUTPUT_VALUE = OUTPUT_VALUE / 2; // volume adjustment
- }
-
-
- if (ETC == 40) { //differential
- OUTPUT_VALUE = (int32_t)(INPUT_VALUE - DELAY_BUFFER[(CNT_NOW - 1) & 0x7FFF]);
- if (OUTPUT_VALUE >= 0x7FFF) OUTPUT_VALUE = 0x7FFF;
- if (OUTPUT_VALUE <= -0x8000) OUTPUT_VALUE = -0x8000;
- }
-
-
- if (ETC == 41 || ETC == 42 || ETC == 43) { //noise gate
- if (abs(INPUT_VALUE) <= 700) NOISE_GATE_OPEN_LEVEL--; //Based on my experience, around 500 is the minimum threshold.
- else NOISE_GATE_OPEN_LEVEL += 2500;
- if (NOISE_GATE_OPEN_LEVEL > 50000) NOISE_GATE_OPEN_LEVEL = 50000;
- DECAYED_SOUND = (int32_t)INPUT_VALUE * 8;
- if (NOISE_GATE_OPEN_LEVEL < 35000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 30000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 25000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 20000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 15000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 10000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 5000) DECAYED_SOUND -= INPUT_VALUE;
- if (NOISE_GATE_OPEN_LEVEL < 2500) DECAYED_SOUND = INPUT_VALUE / 2;
- if (NOISE_GATE_OPEN_LEVEL < 1250) DECAYED_SOUND = DECAYED_SOUND / 2;
- if (NOISE_GATE_OPEN_LEVEL < 600) {
- DECAYED_SOUND = 0;
- NOISE_GATE_OPEN_LEVEL = 550;
- }
- INPUT_VALUE = DECAYED_SOUND / 8;
- OUTPUT_VALUE = INPUT_VALUE;
- }
-
- if (ETC == 42) { //kind of distortion
- if (INPUT_VALUE > 0) OUTPUT_VALUE = (int32_t)(INPUT_VALUE) + 0x500;
- if (INPUT_VALUE == 0) OUTPUT_VALUE = 0;
- if (INPUT_VALUE < 0) OUTPUT_VALUE = (int32_t)(INPUT_VALUE)-0x500;
- if (OUTPUT_VALUE >= 0x7FFF) OUTPUT_VALUE = 0x7FFF;
- if (OUTPUT_VALUE <= -0x8000) OUTPUT_VALUE = -0x8000;
- }
-
- if (ETC == 43) { //kind of distortion
- if (INPUT_VALUE > 0) OUTPUT_VALUE = -(int32_t)(INPUT_VALUE) + 0x500;
- if (INPUT_VALUE == 0) OUTPUT_VALUE = 0;
- if (INPUT_VALUE < 0) OUTPUT_VALUE = -(int32_t)(INPUT_VALUE)-0x500;
- }
-
- if (ETC == 44) { //440Hz sine wave generator
- OUTPUT_VALUE = SIN440_11[CLOCK_SIN440_11] / 32;
- CLOCK_SIN440_11++;
- if (CLOCK_SIN440_11 >= MAX_VALUE_SIN440_11) CLOCK_SIN440_11 = 0;
- }
-
- if (EFFECT_GAIN >= 0.0) {
- OUTPUT_VALUE = OUTPUT_VALUE * (1 << (uint16_t)round(EFFECT_GAIN));
- OUTPUT_VALUE += (int32_t)INPUT_VALUE * (0x10000 >> (uint16_t)round(EFFECT_GAIN));
- } else
- OUTPUT_VALUE = (int32_t)INPUT_VALUE * 0x10000;
- i2s_output.write(OUTPUT_VALUE); // L channel
- i2s_output.write(OUTPUT_VALUE); // R channel
-
- DELAY_BUFFER[CNT_NOW] = (int16_t)OUTPUT_VALUE / 0x10000;
- CNT_NOW++;
- CNT_NOW = CNT_NOW & 0x7FFF;
- if (!FLAG_SWITCH) {
- EFFECT_GAIN = EFFECT_GAIN - 0.005;
- if (EFFECT_GAIN < 0.0) EFFECT_GAIN = -1;
- } else {
- EFFECT_GAIN = EFFECT_GAIN + 0.005;
- if (EFFECT_GAIN > 16)
- EFFECT_GAIN = 16.0;
- }
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
- //etc^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- //In case the corresponding number is not found
- i2s_output.begin(SAMPLE_RATE);
- adc_input.begin(SAMPLE_RATE);
- while (true) {
- INPUT_VALUE = adc_input.read();
- INPUT_VALUE = (INPUT_VALUE << 4) + 0x8000;
- if (abs(INPUT_VALUE) > WARNING_VALUE) digitalWrite(PIN_OVER_LOAD, HIGH);
- i2s_output.write((int32_t)(INPUT_VALUE << 16)); // L channel
- i2s_output.write((int32_t)(INPUT_VALUE << 16)); // R channel
- digitalWrite(PIN_OVER_LOAD, LOW);
- }
- }
-
- void setup() {
- pinMode(PIN_FOOT_SWITCH, INPUT_PULLUP);
- pinMode(PIN_OVER_LOAD, OUTPUT);
- digitalWrite(PIN_OVER_LOAD, LOW);
- pinMode(PIN_EFFECTOR_TYPE_1, INPUT_PULLUP);
- pinMode(PIN_EFFECTOR_TYPE_2, INPUT_PULLUP);
- pinMode(PIN_EFFECTOR_TYPE_4, INPUT_PULLUP);
- pinMode(PIN_EFFECTOR_TYPE_8, INPUT_PULLUP);
- pinMode(PIN_R_1_1, INPUT_PULLUP);
- pinMode(PIN_R_1_2, INPUT_PULLUP);
- pinMode(PIN_R_1_3, INPUT_PULLUP);
- pinMode(PIN_R_1_4, INPUT_PULLUP);
- pinMode(PIN_R_1_5, INPUT_PULLUP);
- pinMode(PIN_R_2_1, INPUT_PULLUP);
- pinMode(PIN_R_2_2, INPUT_PULLUP);
- pinMode(PIN_R_2_3, INPUT_PULLUP);
- pinMode(PIN_R_2_4, INPUT_PULLUP);
- pinMode(PIN_R_2_5, INPUT_PULLUP);
- delay(100);
- if (!digitalRead(PIN_EFFECTOR_TYPE_1)) EFFECTOR_TYPE = 1;
- if (!digitalRead(PIN_EFFECTOR_TYPE_2)) EFFECTOR_TYPE = EFFECTOR_TYPE + 2;
- if (!digitalRead(PIN_EFFECTOR_TYPE_4)) EFFECTOR_TYPE = EFFECTOR_TYPE + 4;
- if (!digitalRead(PIN_EFFECTOR_TYPE_8)) EFFECTOR_TYPE = EFFECTOR_TYPE + 8;
-
- FLAG_SWITCH = digitalRead(PIN_FOOT_SWITCH);
- }
-
- void loop() { //Use delay() frequently to avoid continuous load on core.
- delay(1);
- if (digitalRead(PIN_FOOT_SWITCH)) {
- delay(1);
- FLAG_SWITCH = true;
- delay(1);
- } else {
- delay(1);
- FLAG_SWITCH = false;
- delay(1);
- }
- delay(1);
- if (EFFECTOR_TYPE == 0) { //delay
- delay(1);
- if (!digitalRead(PIN_R_1_5)) DELAY_FEEDBACK = 6;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) DELAY_FEEDBACK = 4;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) DELAY_FEEDBACK = 2;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) DELAY_FEEDBACK = 1;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) DELAY_FEEDBACK = 0;
- delay(1);
- if (!digitalRead(PIN_R_2_5)) DELAY_TIME = 0x7FFF; //655ms
- delay(1);
- if (!digitalRead(PIN_R_2_4)) DELAY_TIME = 25000; //500ms
- delay(1);
- if (!digitalRead(PIN_R_2_3)) DELAY_TIME = 20000; //400ms
- delay(1);
- if (!digitalRead(PIN_R_2_2)) DELAY_TIME = 15000; //300ms
- delay(1);
- if (!digitalRead(PIN_R_2_1)) DELAY_TIME = 10000; //200ms
- delay(1);
- }
- delay(1);
- if (EFFECTOR_TYPE == 1) { //short delay
- delay(1);
- if (!digitalRead(PIN_R_1_5)) DELAY_FEEDBACK = 6;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) DELAY_FEEDBACK = 4;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) DELAY_FEEDBACK = 2;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) DELAY_FEEDBACK = 1;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) DELAY_FEEDBACK = 0;
- delay(1);
- if (!digitalRead(PIN_R_2_5)) DELAY_TIME = 5000; //100ms
- delay(1);
- if (!digitalRead(PIN_R_2_4)) DELAY_TIME = 4000; //80ms
- delay(1);
- if (!digitalRead(PIN_R_2_3)) DELAY_TIME = 3000; //60ms
- delay(1);
- if (!digitalRead(PIN_R_2_2)) DELAY_TIME = 2000; //40ms
- delay(1);
- if (!digitalRead(PIN_R_2_1)) DELAY_TIME = 1000; //20ms
- delay(1);
- }
-
- delay(1);
- if (EFFECTOR_TYPE == 2) { //reverb
- delay(1);
- if (!digitalRead(PIN_R_1_5)) DELAY_FEEDBACK = 6;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) DELAY_FEEDBACK = 4;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) DELAY_FEEDBACK = 2;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) DELAY_FEEDBACK = 1;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) DELAY_FEEDBACK = 0;
- delay(1);
- if (!digitalRead(PIN_R_2_5)) { //large hall
- delay(1);
- DELAY_TIME1 = 21500; //430ms
- delay(1);
- DELAY_TIME2 = 22500; //450ms
- delay(1);
- DELAY_TIME3 = 23000; //460ms
- delay(1);
- DELAY_TIME4 = 23600; //472ms
- delay(1);
- DELAY_TIME5 = 32000; //640ms
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_2_4)) { //hall
- delay(1);
- DELAY_TIME1 = 10000; //200ms
- delay(1);
- DELAY_TIME2 = 11500; //230ms
- delay(1);
- DELAY_TIME3 = 15000; //300ms
- delay(1);
- DELAY_TIME4 = 21500; //430ms
- delay(1);
- DELAY_TIME5 = 31000; //620ms
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_2_3)) { //small hall
- delay(1);
- DELAY_TIME1 = 5000; //100ms
- delay(1);
- DELAY_TIME2 = 6500; //130ms
- delay(1);
- DELAY_TIME3 = 7150; //143ms
- delay(1);
- DELAY_TIME4 = 7500; //150ms
- delay(1);
- DELAY_TIME5 = 8100; //162ms
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_2_2)) { //room
- delay(1);
- DELAY_TIME1 = 1500; //30ms
- delay(1);
- DELAY_TIME2 = 2000; //40ms
- delay(1);
- DELAY_TIME3 = 4000; //80ms
- delay(1);
- DELAY_TIME4 = 8000; //160ms
- delay(1);
- DELAY_TIME5 = 16000; //320ms
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_2_1)) { //small room
- delay(1);
- DELAY_TIME1 = 750; //15ms
- delay(1);
- DELAY_TIME2 = 1500; //30ms
- delay(1);
- DELAY_TIME3 = 3000; //60ms
- delay(1);
- DELAY_TIME4 = 6000; //120ms
- delay(1);
- DELAY_TIME5 = 12000; //240ms
- delay(1);
- }
- delay(1);
- }
-
- if (EFFECTOR_TYPE == 3 || EFFECTOR_TYPE == 4) { //chorus or dimention C
- delay(1);
- //CENTRAL_DELAY_VALUE > DELAY_WIDTH
- CENTRAL_DELAY_VALUE = 500; //10(ms)*SAMPLE_RATE/1000=10*50000/1000=500
- delay(1);
- DELAY_WIDTH5 = 200; //=DELAY_WIDTH*SAMPLERATE/1000, 4(ms)*50000/1000
- delay(1);
- DELAY_WIDTH4 = 150; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH3 = 100; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH2 = 80; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH1 = 40; //=DELAY_WIDTH*SAMPLERATE/1000
-
- delay(1);
- FEEDBACK_VALUE = 0;
- delay(1);
- if (!digitalRead(PIN_R_1_5)) DELAY_WIDTH_NUMBER1 = 5;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) DELAY_WIDTH_NUMBER1 = 4;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) DELAY_WIDTH_NUMBER1 = 3;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) DELAY_WIDTH_NUMBER1 = 2;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
-
-
- if (!digitalRead(PIN_R_2_5)) VIBRATION_RATE_PARAMETER1 = 13; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/4=13
- delay(1);
- if (!digitalRead(PIN_R_2_4)) VIBRATION_RATE_PARAMETER1 = 17; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/3=17
- delay(1);
- if (!digitalRead(PIN_R_2_3)) VIBRATION_RATE_PARAMETER1 = 25; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/2=25
- delay(1);
- if (!digitalRead(PIN_R_2_2)) VIBRATION_RATE_PARAMETER1 = 50; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/1=50
- delay(1);
- if (!digitalRead(PIN_R_2_1)) VIBRATION_RATE_PARAMETER1 = 100; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/0.5=100
- delay(1);
- }
-
- delay(1);
- if (EFFECTOR_TYPE == 5) { //dimention C 2
- delay(1);
- //CENTRAL_DELAY_VALUE > DELAY_WIDTH
- CENTRAL_DELAY_VALUE = 500; //10(ms)*50000/1000=500
-
- delay(1);
- DELAY_WIDTH5 = 200; //=DELAY_WIDTH*SAMPLERATE/1000, 4(ms)*50000/1000
- delay(1);
- DELAY_WIDTH4 = 150; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH3 = 100; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH2 = 80; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH1 = 40; //=DELAY_WIDTH*SAMPLERATE/1000
-
- delay(1);
- if (!digitalRead(PIN_R_1_5)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 50; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/1=50
- delay(1);
- DELAY_WIDTH_NUMBER2 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 50; //1Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 100; //0.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 100; //0.5Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_4)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 50; //1Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 50; //1Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 50; //1Hz
-
- DELAY_WIDTH_NUMBER4 = 4;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 50; //1Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_3)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 100; //0.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 33; //1.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 156; //0.33Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 63; //0.8Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_2)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 100; //0.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 75; //0.666Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 139; //0.3597Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 5;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 43; //1.162Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_1)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 15; //3.333Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 5;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 200; //0.25Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 85; //0.5882Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 4;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 45; //1.111Hz
- delay(1);
- }
- delay(1);
- }
-
- delay(1);
- if (EFFECTOR_TYPE == 6) { //flanger
- delay(1);
- //CENTRAL_DELAY_VALUE > DELAY_WIDTH
- CENTRAL_DELAY_VALUE = 150; //3(ms)*SAMPLE_RATE/1000=150
- delay(1);
- DELAY_WIDTH1 = 100; //=DELAY_WIDTH*SAMPLERATE/1000, 2(ms)*50000/1000
- delay(1);
- DELAY_WIDTH2 = 100; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH3 = 100; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH4 = 100; //=DELAY_WIDTH*SAMPLERATE/1000
- delay(1);
- DELAY_WIDTH5 = 100; //=DELAY_WIDTH*SAMPLERATE/1000
-
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
-
- delay(1);
- if (!digitalRead(PIN_R_1_5)) FEEDBACK_VALUE = 31;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) FEEDBACK_VALUE = 30;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) FEEDBACK_VALUE = 29;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) FEEDBACK_VALUE = 28;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) FEEDBACK_VALUE = 27;
- delay(1);
-
-
- delay(1);
- if (!digitalRead(PIN_R_2_5)) VIBRATION_RATE_PARAMETER1 = 25; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/2=25
- delay(1);
- if (!digitalRead(PIN_R_2_4)) VIBRATION_RATE_PARAMETER1 = 50; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/1=50
- delay(1);
- if (!digitalRead(PIN_R_2_3)) VIBRATION_RATE_PARAMETER1 = 71; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/0.7=71
- delay(1);
- if (!digitalRead(PIN_R_2_2)) VIBRATION_RATE_PARAMETER1 = 100; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/0.5=100
- delay(1);
- if (!digitalRead(PIN_R_2_1)) VIBRATION_RATE_PARAMETER1 = 167; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/0.3=167
- delay(1);
- } //flanger ^^^^^^^^^^^^^^^^^^^^^^
-
-
-
-
- delay(1);
- if (EFFECTOR_TYPE == 7) { //dimention C 2 + delay
- delay(1);
- //CENTRAL_DELAY_VALUE > DELAY_WIDTH
- CENTRAL_DELAY_VALUE = 500; //10(ms)*50000/1000=500
-
- delay(1);
- DELAY_WIDTH5 = 200; //=DELAY_WIDTH*SAMPLERATE/1000, 4(ms)*50000/1000
- delay(1);
- DELAY_WIDTH4 = 150; //=DELAY_WIDTH*SAMPLERATE/1000, 3ms
- delay(1);
- DELAY_WIDTH3 = 100; //=DELAY_WIDTH*SAMPLERATE/1000, 2ms
- delay(1);
- DELAY_WIDTH2 = 80; //=DELAY_WIDTH*SAMPLERATE/1000, 1.6ms
- delay(1);
- DELAY_WIDTH1 = 40; //=DELAY_WIDTH*SAMPLERATE/1000, 0.8ms
-
- delay(1);
- if (!digitalRead(PIN_R_1_5)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 50; //SAMPLE_RATE/SAMPLE_RANGE/frequency=50000/1000/1=50
- delay(1);
- DELAY_WIDTH_NUMBER2 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 50; //1Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 100; //0.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 100; //0.5Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_4)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 50; //1Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 50;
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 50;
-
- DELAY_WIDTH_NUMBER4 = 4;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 50;
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_3)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 100; //0.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 33; //1.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 156; //0.33Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 63; //0.8Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_2)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 100; //0.5Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 2;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 75; //0.6666Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 139; //0.3597Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 5;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 43; //1.16Hz
- delay(1);
- }
- delay(1);
- if (!digitalRead(PIN_R_1_1)) {
- delay(1);
- DELAY_WIDTH_NUMBER1 = 1;
- delay(1);
- VIBRATION_RATE_PARAMETER1 = 15; //3.333Hz
- delay(1);
- DELAY_WIDTH_NUMBER2 = 5;
- delay(1);
- VIBRATION_RATE_PARAMETER2 = 200; //0.25Hz
- delay(1);
- DELAY_WIDTH_NUMBER3 = 3;
- delay(1);
- VIBRATION_RATE_PARAMETER3 = 85; //0.588Hz
- delay(1);
- DELAY_WIDTH_NUMBER4 = 4;
- delay(1);
- VIBRATION_RATE_PARAMETER4 = 45; //1.111Hz
- delay(1);
- }
- delay(1); //DELAY_TIMEは0x7FFFでも一発入るので
-
- if (!digitalRead(PIN_R_2_5)) DELAY_TIME = 25000; //500ms
- delay(1);
- if (!digitalRead(PIN_R_2_4)) DELAY_TIME = 22500; //450ms
- delay(1);
- if (!digitalRead(PIN_R_2_3)) DELAY_TIME = 20000; //400ms
- delay(1);
- if (!digitalRead(PIN_R_2_2)) DELAY_TIME = 15000; //300ms
- delay(1);
- if (!digitalRead(PIN_R_2_1)) DELAY_TIME = 10000; //200ms
- delay(1);
- }
-
-
-
- delay(1);
- if (EFFECTOR_TYPE == 9) { //limitter with delay
-
- //right rotary switch : limitation threshold
- //left rotary switch : limitation rate
- delay(1);
- if (!digitalRead(PIN_R_1_5)) LIMIT_RATE = 32;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) LIMIT_RATE = 16;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) LIMIT_RATE = 8;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) LIMIT_RATE = 4;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) LIMIT_RATE = 2;
- delay(1);
- if (!digitalRead(PIN_R_2_5)) LIMIT_TH = 0x3000;
- delay(1);
- if (!digitalRead(PIN_R_2_4)) LIMIT_TH = 0x4000;
- delay(1);
- if (!digitalRead(PIN_R_2_3)) LIMIT_TH = 0x5000;
- delay(1);
- if (!digitalRead(PIN_R_2_2)) LIMIT_TH = 0x6000;
- delay(1);
- if (!digitalRead(PIN_R_2_1)) LIMIT_TH = 0x7000;
- delay(1);
- }
-
- delay(1);
- if (EFFECTOR_TYPE == 0xA || EFFECTOR_TYPE == 0xB || EFFECTOR_TYPE == 0xC || EFFECTOR_TYPE == 0xD) { //over drive with delay or distortion with delay
- delay(1);
- //OVER_DRIVE_LEVEL=1, 2, 4, 8, 16, 32, 64,...,2^N N:natural number
- if (!digitalRead(PIN_R_1_5)) OVER_DRIVE_LEVEL = 4; // 1/4
- delay(1);
- if (!digitalRead(PIN_R_1_4)) OVER_DRIVE_LEVEL = 8; // 1/8
- delay(1);
- if (!digitalRead(PIN_R_1_3)) OVER_DRIVE_LEVEL = 16; // 1/16
- delay(1);
- if (!digitalRead(PIN_R_1_2)) OVER_DRIVE_LEVEL = 32; // 1/32
- delay(1);
- if (!digitalRead(PIN_R_1_1)) OVER_DRIVE_LEVEL = 64; // 1/64
- delay(1);
- //OVER_DRIVE_GAIN=1, 2, 4, 8, 16, 32, 64,...,2^N N:natural number
- if (!digitalRead(PIN_R_2_5)) OVER_DRIVE_GAIN = 256;
- delay(1);
- if (!digitalRead(PIN_R_2_4)) OVER_DRIVE_GAIN = 128;
- delay(1);
- if (!digitalRead(PIN_R_2_3)) OVER_DRIVE_GAIN = 64;
- delay(1);
- if (!digitalRead(PIN_R_2_2)) OVER_DRIVE_GAIN = 32;
- delay(1);
- if (!digitalRead(PIN_R_2_1)) OVER_DRIVE_GAIN = 16;
- delay(1);
- }
-
-
- delay(1);
- if (EFFECTOR_TYPE == 0xE) { //NOISE GATE
- delay(1);
- if (!digitalRead(PIN_R_1_5)) NOISE_GATE_DECAY_SPEED = 1;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) NOISE_GATE_DECAY_SPEED = 2;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) NOISE_GATE_DECAY_SPEED = 3;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) NOISE_GATE_DECAY_SPEED = 4;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) NOISE_GATE_DECAY_SPEED = 5;
- //
- delay(1);
- if (!digitalRead(PIN_R_2_5)) NOISE_GATE_THRESHOLD = 2000;
- delay(1);
- if (!digitalRead(PIN_R_2_4)) NOISE_GATE_THRESHOLD = 1500;
- delay(1);
- if (!digitalRead(PIN_R_2_3)) NOISE_GATE_THRESHOLD = 1000;
- delay(1);
- if (!digitalRead(PIN_R_2_2)) NOISE_GATE_THRESHOLD = 750;
- delay(1);
- if (!digitalRead(PIN_R_2_1)) NOISE_GATE_THRESHOLD = 500;
- }
-
-
-
- delay(1);
- if (EFFECTOR_TYPE == 0xF) { //ETC
- delay(1);
- uint16_t A = 0;
- delay(1);
- uint16_t B = 0;
- delay(1);
- if (!digitalRead(PIN_R_1_5)) A = 40;
- delay(1);
- if (!digitalRead(PIN_R_1_4)) A = 30;
- delay(1);
- if (!digitalRead(PIN_R_1_3)) A = 20;
- delay(1);
- if (!digitalRead(PIN_R_1_2)) A = 10;
- delay(1);
- if (!digitalRead(PIN_R_1_1)) A = 0;
- delay(1);
-
- if (!digitalRead(PIN_R_2_5)) B = 4;
- delay(1);
- if (!digitalRead(PIN_R_2_4)) B = 3;
- delay(1);
- if (!digitalRead(PIN_R_2_3)) B = 2;
- delay(1);
- if (!digitalRead(PIN_R_2_2)) B = 1;
- delay(1);
- if (!digitalRead(PIN_R_2_1)) B = 0;
- delay(1);
- ETC = A + B;
- delay(1);
- }
-
-
- delay(1);
- FLAG_SetUpHasBeenCompleted = true;
- delay(1);
- uint16_t EFFECTOR_TYPE2 = 0;
- delay(1);
- if (!digitalRead(PIN_EFFECTOR_TYPE_1)) EFFECTOR_TYPE2 = 1;
- delay(1);
- if (!digitalRead(PIN_EFFECTOR_TYPE_2)) EFFECTOR_TYPE2 += 2;
- delay(1);
- if (!digitalRead(PIN_EFFECTOR_TYPE_4)) EFFECTOR_TYPE2 += 4;
- delay(1);
- if (!digitalRead(PIN_EFFECTOR_TYPE_8)) EFFECTOR_TYPE2 += 8;
- delay(1);
- if (EFFECTOR_TYPE != EFFECTOR_TYPE2) { //Has effector type changed?
- delay(1);
- if (Serial) Serial.println("Reboot!");
- delay(1000);
- rp2040.reboot(); //reboot raspberry pi pico
- }
- delay(100);
- }
-
- void setup_output(void) {
- i2s_output.setBCLK(PIN_I2S_OUTPUT_BCLK);
- i2s_output.setDATA(PIN_I2S_DOUT);
- i2s_output.setBitsPerSample(32); //number of bits per channel
- i2s_output.setBuffers(NUMBER_OF_BUFFERS_OUTPUT, SIZE_OF_BUFFER_OUTPUT, 0);
- }
-
- void setup_input(void) {
- analogReadResolution(12); // ADCのフルスケールを12ビットに設定
- adc_input.setBuffers(NUMBER_OF_BUFFERS_INPUT, SIZE_OF_BUFFER_INPUT);
- }
- /*修正点
- VERSION 01.000.01(2023.12.02)
- line319
- DELAY_BUFFER_VALUE += (0 - INPUT_VALUE / 4);=>DELAY_BUFFER_VALUE -=INPUT_VALUE / 8;
- 入力信号が大きい場合に歪むことがあったので
- */