Attiny85 でオーディオピッチシフターを作る
やりたいこと
マイクで録った音に連動して、ウーファーを動かしたい。
中音域の音でも、ウーファーを振動させるようにするため、1オクターブ下げる。
ウーファーに入力される中高音域とノイズを除去するために、LPFを通す。
必要なもの
- マイク
- スピーカ(ウーファー)
-
Digispark Attiny85 開発ボード
など
これを参考に:
https://blog.adafruit.com/2017/03/15/attiny85-real-time-audio-pitch-shifter/
セットアップ
- Arduino上で、'Preferences'-> Additional Boards Manager URLs にURLをコピペする.Windowsの場合は、ファイル→環境設定
http://digistump.com/package_digistump_index.json
Digispark Attiny85 開発ボード
など
これを参考に:
https://blog.adafruit.com/2017/03/15/attiny85-real-time-audio-pitch-shifter/
- Arduino上で、'Preferences'-> Additional Boards Manager URLs にURLをコピペする.Windowsの場合は、ファイル→環境設定
http://digistump.com/package_digistump_index.json
- Macの場合のみ? USB Hub経由じゃないとデバイスを認識せずエラーとなる。
- uploadボタンを押下後60秒以内に、ATtiny を挿入
- なぜか途中で失敗するが、Deviceをつないだまま、再度Uploadボタンを押すとうまく行った
コード
リファレンスコードのビルド
- http://www.technoblogy.com/list?1L5V
- これをコピペして焼き込み成功
1オクターブ下げる
上記のコードと異なり、今回作りたいのは、ざっくり1オクターブ下げるものを作りたい。
てことで、OCR0Aを変更し、決め打ちに。
// OCR0A = 55; // 17.9kHz interrupt
OCR0A = 28; // 約1オクターブ下げる
また、ボタンの割り込みをコメントアウト
//// Pin change interrupt adjusts shift
//ISR (PCINT0_vect) {
// int Buttons = PINB;
// if ((Buttons & 0x01) == 0) OCR0A++;
// else if ((Buttons & 0x04) == 0) OCR0A--;
//}
//////////// 中略 //////
// Set up buttons on PB0 and PB2
// pinMode(0, INPUT_PULLUP);
// pinMode(2, INPUT_PULLUP);
// PCMSK = 1<<PINB0 | 1<<PINB2; // Pin change interrupts on PB0 and PB2
// GIMSK = GIMSK | 1<<PCIE; // Enable pin change interrupt
ローパスフィルタを作る
簡単な一次のLPFを作り、不要な音を除外
volatile uint16_t alpha = 10;
volatile uint16_t alpha_max = 255;
volatile uint8_t previous_output = 0;
uint8_t lpf (uint8_t input){
uint8_t output = alpha * input / alpha_max + (alpha_max - alpha) * previous_output / alpha_max;
previous_output = output;
return output;
}
そして、DACにわたす値をLPF通過後の値にする。
OCR1A = lpf(Buffer[ReadPtr]);
参考
Author And Source
この問題について(Attiny85 でオーディオピッチシフターを作る), 我々は、より多くの情報をここで見つけました https://qiita.com/tatsuhiroiida/items/e692e903a27065708174著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .