Attiny85로 오디오 피치 쉬프터 만들기

하고 싶은 일



마이크로 녹음한 소리에 연동하여 우퍼를 움직이고 싶다.
중음역의 소리에서도, 우퍼를 진동시키기 위해서, 1옥타브 내린다.
우퍼에 입력되는 중고음역과 노이즈를 제거하기 위해 LPF를 통과시킨다.

필요한 것


  • 마이크
  • 스피커 (우퍼)

  • Digispark Attiny85 개발 보드
  • htps //w w. 아마존. 이. jp/dp/B0154PL3 쿠아/레 f=cm_sw_에m_r_mt_dp_우_cWLbDb1V2에8V8


  • 이것을 참고로 :
    htps : // bg. 아다 f 루이 t. 이 m / 2017/03/15 / 저쪽 ny85 - 라 l - 치메 - 아우 오피 tch - f r /

  • 설정


  • Arduino에서 'Preferences'-> Additional Boards Manager URL에 URL을 복사하십시오. Windows의 경우 파일 → 환경 설정
  • http://digistump.com/package_digistump_index.json
    

    Tools에서 다음과 같이 설정.

  • Mac의 경우에만? USB Hub 경유가 아니면 디바이스를 인식하지 않고 에러가 된다.
  • 업로드 버튼을 누른 후 60 초 이내에 ATtiny 삽입
  • 왠지 도중에 실패하지만, 장치를 연결한 채로 다시 업로드 버튼을 누르면 잘 갔다

  • 코드



    참조 코드 빌드


  • h tp // w w. ch의 bぉgy. 이 m/ㄴ st? 1L5V
  • 이것을 copipe하고 구워 성공

  • 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
    

    저역 통과 필터 만들기



    간단한 1차 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]);
    

    참고

    좋은 웹페이지 즐겨찾기