revised version of F746_SD_GraphicEqualizer

Dependencies:   BSP_DISCO_F746NG F746_GUI F746_SAI_IO FrequencyResponseDrawer LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed

Fork of F746_SD_GraphicEqualizer by 不韋 呂

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MyFunctions.cpp Source File

MyFunctions.cpp

00001 //--------------------------------------------------------------
00002 //  グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数
00003 //
00004 //  2016/05/09, Copyright (c) 2016 MIKAMI, Naoki
00005 //--------------------------------------------------------------
00006 
00007 #include "MyFunctions.hpp"
00008 
00009 // 1フレーム分の信号処理 (イコライザ) の実行
00010 void SignalProcessing(SD_WavReader &sdReader, SaiIO &mySai,
00011                       int16_t sn[], BiquadGrEq hn[],
00012                       int stages, bool on)
00013 {
00014     // 1フレーム分のデータを SD から読み込む
00015     sdReader.ReadAndToMono(sn, mySai.GetLength());
00016 
00017     while (!mySai.IsXferred()) {}   // データの転送が終わるまで待つ
00018     //--------------------------------------------------------------
00019     // 1フレーム分のイコライザ処理を行い,その結果を出力する
00020     for (int n=0; n<mySai.GetLength(); n++)
00021     {
00022         // 縦続形の IIR フィルタ実行
00023         float xn = 0.125f*sn[n];    // 0.125 の乗算はブースとしてもクリップ
00024                                     // されないようにするため
00025         float yn = xn;
00026         for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
00027         int16_t value = on ? (int16_t)yn : xn;
00028         mySai.Output(value, value); // 音響信号の出力
00029     }
00030     //--------------------------------------------------------------
00031     mySai.ResetXferred();   // 次のデータ転送に備える
00032 }
00033 
00034 // SD カードのファイルのオープン
00035 int32_t SD_Open(SD_WavReader &sdReader,
00036                 string fileName, int32_t frameSize)
00037 {
00038     sdReader.Open(fileName);
00039     sdReader.IsWavFile();
00040     return sdReader.GetSize()/frameSize;
00041 }
00042 
00043 // ファイルの選択
00044 //      selectedName:   選択されたファイル名
00045 void SelectFile(ButtonGroup &menu, FileSelector &selector,
00046                 Label &msg, string fileList[], int *selected)
00047 {
00048     selector.DisplayFileList(*selected);   
00049     msg.Draw("Select file");
00050     do
00051     {
00052         if (selector.Select(fileList, selected))
00053             menu.Activate(1);   // PLAY 有効
00054  // ren: change wait timer 200 to 60
00055         wait_ms(60);
00056     } while (!menu.Touched(1)); // PLAY がタッチされるまで繰り返す
00057 }
00058 
00059 // フィルタの周波数特性の変更
00060 void ModifyFilter(DesignerDrawer &drawerObj,
00061                   SeekbarGroup &myBars, BiquadGrEq hn[],
00062                   Button &flat, ButtonGroup &onOff, bool &on)
00063 {
00064 
00065     // 周波数特性を平坦化
00066     if (flat.Touched())
00067     {
00068         drawerObj.DrawFlat();
00069         for (int n=0; n<drawerObj.GetStages(); n++)
00070             hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n));
00071         myBars.DrawAll(0);  // ツマミの位置を 0 dB に設定する
00072         flat.Draw();
00073         return;
00074     }
00075 
00076     int sw = 0;
00077     if (onOff.GetTouchedNumber(sw))
00078         on = (sw == 0) ? true : false;
00079 
00080     static int num = 0;
00081     if (!myBars.GetSlidedNumber(num)) return;
00082     drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
00083     hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
00084 }