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:
- 2:2a5c93bf729a
- Parent:
- 1:a5837720e14a
- Child:
- 4:14f401cb069a
diff -r a5837720e14a -r 2a5c93bf729a main.cpp --- a/main.cpp Wed Apr 27 14:24:45 2016 +0000 +++ b/main.cpp Sun May 01 02:44:30 2016 +0000 @@ -5,7 +5,7 @@ // 上記以外の形式は扱わない // 出力:モノラル // -// 2016/04/27, Copyright (c) 2016 MIKAMI, Naoki +// 2016/05/01, Copyright (c) 2016 MIKAMI, Naoki //-------------------------------------------------------------- #include "MyFunctions.hpp" @@ -15,20 +15,21 @@ int main() { - Label myLabel(80, 4, "SD Card Audio Player", Label::LEFT, Font16); + Label myLabel1(212, 2, "SD Card Audio Player", Label::CENTER, Font16); + Label myLabel2(212, 16, "---- Graphic equalizer ----", Label::CENTER, Font12); const int FS = AUDIO_FREQUENCY_44K; // 標本化周波数: 44.1 kHz SaiIO_O mySai(2048, FS); SD_WavReader sdReader(mySai.GetLength()); // SD カード読み込み用オブジェクト const int MAX_FILES = 7; - FileSelector selector(4, 28, MAX_FILES, 38, sdReader); + FileSelector selector(4, 26, MAX_FILES, 37, sdReader); if (!selector.CreateTable()) BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER); // ボタン用の定数 - const uint16_t BG_LEFT = 420; - const uint16_t BG_WIDTH = 60; + const uint16_t BG_LEFT = 414; + const uint16_t BG_WIDTH = 66; const uint16_t BG_HEIGHT = 40; // ButtonGroup: "OPEN", "PLAY", "PAUSE", "RESUME", "STOP" @@ -39,21 +40,23 @@ menu.Activate(0); for (int n=1; n<5; n++) menu.Inactivate(n); - Button flatButton(BG_LEFT, 230, BG_WIDTH, BG_HEIGHT, "FLAT"); + const string ON_OFF[2] = {"ON", "OFF"}; + ButtonGroup onOff(BG_LEFT, 230, BG_WIDTH/2, BG_HEIGHT, + 2, ON_OFF, 0, 0, 2, 0); // フィルタの設計と周波数特性描画用 const int STAGES = 9; // バンド数 DesignerDrawer drawerObj( - 30, // グラフの左端の位置 + 28, // グラフの左端の位置 130, // グラフの下端の位置 STAGES, // バンド数 62.5f, // 最低域バンドの中心周波数 FS, // 標本化周波数 - 4); // 1 dB 当たりのピクセル数 + 2.5f); // 1 dB 当たりのピクセル数 // 周波数特性変更用スライダ - SeekbarGroup myBars(drawerObj.GetX0(), 186, 66, STAGES, - drawerObj.GetSpaceX(), -8, 8, 0, + SeekbarGroup myBars(drawerObj.GetX0(), 178, 82, STAGES, + drawerObj.GetSpaceX(), -9.6f, 9.6f, 0, SeekBar::Vertical); // フィルタの準備 @@ -65,6 +68,7 @@ int32_t frameSize = mySai.GetLength(); int16_t *sn = new int16_t[frameSize+1]; // フレームバッファ bool playOk = false; + bool on = true; bool whileFirst = true; string fileName; int32_t loopCount; @@ -77,28 +81,28 @@ { whileFirst = false; while (!menu.Touched(0)) // OPEN がタッチされるまで待つ - ModifyFilter(drawerObj, myBars, hn, flatButton); - SelectFile(menu, selector, myLabel, fileName); + ModifyFilter(drawerObj, myBars, hn, onOff, on); + SelectFile(menu, selector, myLabel1, fileName); } else { menu.Activate(1); // PLAY 有効 int touch10; while (!menu.GetTouchedNumber(touch10)) - ModifyFilter(drawerObj, myBars, hn, flatButton); + ModifyFilter(drawerObj, myBars, hn, onOff, on); if (touch10 == 0) - SelectFile(menu, selector, myLabel, fileName); + SelectFile(menu, selector, myLabel1, fileName); } loopCount = SD_Open(sdReader, fileName, frameSize); while (!menu.Touched(1)) // PLAY がタッチされるまで待つ - ModifyFilter(drawerObj, myBars, hn, flatButton); + ModifyFilter(drawerObj, myBars, hn, onOff, on); } else loopCount = SD_Open(sdReader, fileName, frameSize); - selector.Erase(BG_LEFT-4, 288); - myLabel.Draw("9-band Graphic Equalizer"); + selector.Erase(0, 0, BG_LEFT-4, 288); + myLabel1.Draw("9-band Graphic Equalizer"); myBars.RedrawAll(); drawerObj.DrawResponse(); menu.Inactivate(0); // OPEN 無効 @@ -126,7 +130,7 @@ // PLAY か RESUME か STOP がタッチされるまで待つ int touch134 = -1; while (!menu.GetTouchedNumber(touch134)) - ModifyFilter(drawerObj, myBars, hn, flatButton); + ModifyFilter(drawerObj, myBars, hn, onOff, on); switch (touch134) { case 1: playOk = true; // 最初から PLAY @@ -142,9 +146,9 @@ } if (playOk || stopOk) break; - ModifyFilter(drawerObj, myBars, hn, flatButton); + ModifyFilter(drawerObj, myBars, hn, onOff, on); // 1フレーム分の信号処理 (イコライザ) の実行 - ProcessSignal(sdReader, mySai, sn, hn, STAGES); + ProcessSignal(sdReader, mySai, sn, hn, STAGES, on); } mySai.Stop(); menu.Activate(0); // OPEN 有効 @@ -154,4 +158,3 @@ sdReader.Close(); // SD のファイルのクローズ } } -