プログラミング・Webサービス

Arduinoで簡易的に和音を出す・その2

  • 閲覧数: 4016
  • 8

作品画像

  • C.120x80.86644aff797eb769b90dd914d6720b7c

作品説明

和音を鳴らすのを少しまじめに処理してみました。
PORTBを全部使います。

例のごとく
自身のサイトにも載せてます

レシピ

void play(double freq ,double freq2,double freq3 ,long length){
 noInterrupts();
 start=-1;
 lanmbda = 1000/freq*1000;
 lanmbda2 = 0; if(freq2!=0){ lanmbda2=1000/freq2*1000; }
 lanmbda3 = 0; if(freq3!=0){ lanmbda3=1000/freq3*1000; }
 lanmbdal = lanmbda/duty; lanmbda2l =lanmbda2/duty; lanmbda3l =lanmbda3/duty;
 //unsigned long start=millis();
 int sound=0,lsound=0; 
 unsigned long ccpm= clockCyclesPerMicrosecond();
 unsigned long m;
 length*=1000;
 for(;;){
  t= TCNT0 ;
  t2=t;
  clocks+=(lt>t)<<8;
  lt=t;
  nowmic=(clocks+t) * 64 / ccpm;//clockCyclesToMicroseconds(clocks*64);
  if(start==-1)start=nowmic;
  PORTB = (nowmic % lanmbda < lanmbdal) + ( freq2 && (nowmic % lanmbda2 < lanmbda2l) ) * 2 + ( freq3 && (nowmic % lanmbda3 < lanmbda3l) ) * 4;
  if((nowmic-start)>length) break;
 }
 interrupts();
}

出力部分はこんなかんじでDAC。


コメント (0件)

コメントはまだありません