Output the audio signal with filtering by graphic equalizer in the *.wav file on the SD card using onboard CODEC. SD カードの *.wav ファイルのオーディオ信号をグラフィック・イコライザを通して,ボードに搭載されているCODEC で出力する.
Dependencies: F746_GUI F746_SAI_IO SD_PlayerSkeleton FrequencyResponseDrawer
Diff: main.cpp
- Revision:
- 11:f4929315bc9f
- Parent:
- 10:160fcbe4dee8
- Child:
- 13:728576fffe65
--- a/main.cpp Wed Jun 15 13:08:45 2016 +0000 +++ b/main.cpp Sun Jul 03 05:29:38 2016 +0000 @@ -3,9 +3,9 @@ // SD のファイル: *.wav // PCM,16 ビットステレオ,標本化周波数 44.1 kHz // 上記以外の形式は扱わない -// 出力:モノラル +// 出力:モノラル(L+R,左チャンネルのみ,右チャンネルには出力しない) // -// 2016/06/15, Copyright (c) 2016 MIKAMI, Naoki +// 2016/07/03, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------------- #include "MyFunctions.hpp" @@ -15,15 +15,16 @@ int main() { - Label myLabel1(212, 2, "SD Card Audio Player", Label::CENTER, Font16); - Label myLabel2(212, 16, "---- Graphic equalizer ----", Label::CENTER, Font12); + const uint16_t X_CENTER = 214; + Label myLabel1(X_CENTER, 4, "9-band Graphic Equalizer", Label::CENTER, Font16); + Label myLabel2(X_CENTER, 20, "---- Source: microSD card ----", Label::CENTER); const int FS = AUDIO_FREQUENCY_44K; // 標本化周波数: 44.1 kHz SaiIO mySai(SaiIO::OUTPUT, 2048, FS); SD_WavReader sdReader(mySai.GetLength()); // SD カード読み込み用オブジェクト const int MAX_FILES = 7; - FileSelector selector(4, 26, MAX_FILES, 37, sdReader); + FileSelector selector(4, 22, MAX_FILES, 37, sdReader); if (!selector.CreateTable()) BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER); @@ -31,15 +32,14 @@ const uint16_t BG_LEFT = 414; const uint16_t BG_WIDTH = 66; const uint16_t BG_HEIGHT = 36; - + // ButtonGroup: "OPEN", "PLAY", "PAUSE", "RESUME", "STOP" const string MENU[5] = {"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"}; ButtonGroup menu(BG_LEFT, 2, BG_WIDTH, BG_HEIGHT, 5, MENU, 0, 2, 1); - // OPEN のみアクティブ + menu.InactivateAll(); + menu.Activate(0); - for (int n=1; n<5; n++) menu.Inactivate(n); - Button flat(BG_LEFT, 197, BG_WIDTH, BG_HEIGHT, "FLAT"); const string ON_OFF[2] = {"ON", "OFF"}; @@ -47,28 +47,27 @@ 2, ON_OFF, 0, 0, 2, 0); // フィルタの設計と周波数特性描画用 - const int STAGES = 9; // バンド数 + const int BANDS = 9; // バンド数 DesignerDrawer drawerObj( 28, // グラフの左端の位置 130, // グラフの下端の位置 - STAGES, // バンド数 + BANDS, // バンド数 62.5f, // 最低域バンドの中心周波数 FS, // 標本化周波数 2.5f); // 1 dB 当たりのピクセル数 // 周波数特性変更用スライダ - SeekbarGroup myBars(drawerObj.GetX0(), 178, 82, STAGES, + SeekbarGroup myBars(drawerObj.GetX0(), 178, 82, BANDS, drawerObj.GetSpaceX(), -8.0f, 8.0f, 0, SeekBar::Vertical); // フィルタの準備 - BiquadGrEq::Coefs ck[STAGES]; + BiquadGrEq::Coefs ck[BANDS]; drawerObj.GetCoefficients(ck); - BiquadGrEq hn[STAGES]; - for (int k=0; k<STAGES; k++) hn[k] = BiquadGrEq(ck[k]); + BiquadGrEq hn[BANDS]; + for (int k=0; k<BANDS; k++) hn[k] = BiquadGrEq(ck[k]); int32_t frameSize = mySai.GetLength(); - int16_t *sn = new int16_t[frameSize+1]; // フレームバッファ bool playOk = false; bool on = true; bool whileFirst = true; @@ -104,7 +103,7 @@ loopCount = SD_Open(sdReader, fileName, frameSize); selector.Erase(0, 0, BG_LEFT-4, 288); - myLabel1.Draw("9-band Graphic Equalizer"); + myLabel1.Draw(); myBars.RedrawAll(); drawerObj.DrawResponse(); menu.Inactivate(0); // OPEN 無効 @@ -115,7 +114,7 @@ bool stopOk = false; // IIR フィルタの内部の遅延器のクリア - for (int k=0; k<STAGES; k++) hn[k].Clear(); + for (int k=0; k<BANDS; k++) hn[k].Clear(); mySai.PlayOut(); // Play 開始 for (int k=0; k<loopCount; k++) @@ -150,7 +149,7 @@ ModifyFilter(drawerObj, myBars, hn, flat, onOff, on); // 1フレーム分の信号処理 (イコライザ) の実行 - SignalProcessing(sdReader, mySai, sn, hn, STAGES, on); + SignalProcessing(sdReader, mySai, hn, BANDS, on); } mySai.StopOut(); menu.Activate(0); // OPEN 有効