レベルメーター

入力振幅に応じてLEDを光らせるプログラムです。受信バッファからピーク値を抜き出して、それに応じてLEDを光らせます。音の大きさに応じてLEDが左右に動きます。

LEDの制御はPF出力を使おうを参考にしてください。

十分な数のLEDがあればピーク値を対数変換することでダイナミックな動きを楽しめます。しかし、今回はLEDが4つしかないため、ごく狭い範囲の音の大きさにだけ反応します。反応する音のレンジを変えるときには下のプログラムの「上位3ビットのみ抽出」の部分を変えるといいでしょう。

このプログラムもダウンロードできます。ボリューム制御プログラムを元にしているので、プッシュスイッチによる音量調節機能もついています。

void CTT_Volume::handleBuffer( struct mcm::sample * bufTx,  struct mcm::sample * bufRx )
{
        short lev=0;
        
        for ( int i=0; i< this->bufSize; i++ ){   // bufSizeは送受信バッファの長さ
                bufTx[i].l = bufRx[i].l;          // Lch受信データを送信バッファにコピー
                bufTx[i].r = bufRx[i].r;          // Rch受信データを送信バッファにコピー

                if ( lev < abs(bufRx[i].l ) )     // 絶対値がlevより大きければlevにコピー
                        lev = abs(bufRx[i].l );
                if ( lev < abs(bufRx[i].r ) )
                        lev = abs(bufRx[i].r );
        }
        lev >>= 12;                               // 上位3ビットのみ抽出
        lev = 1 << lev;                           // ピーク値をビット位置に変更
                                  // LED設定
    sysreg_write( sysreg_IOPG, General_Purpose_IO );
    io_space_write( FLAGS, 0xf & lev );           // LEDの値に値をセット
    io_space_write( FLAGC, 0xf & ~lev );          // 0の部分のLEDをクリア
        
}

⇒次はストレンジ・アトラクター

2191空挺団 | プログラム | EZ-KIT | こぼれ話 | アーキテクチャー | 命令 | レジスタ | DSP掲示板 | FAQ |