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 不韋 呂

MyClasses_Functions/MyFunctions.cpp

Committer:
MikamiUitOpen
Date:
2016-04-27
Revision:
0:e953eb392151
Child:
1:a5837720e14a

File content as of revision 0:e953eb392151:

//--------------------------------------------------------------
//  グラフィックイコライザ付き SD オーディオプレーヤーで使う大域関数
//
//  2016/04/27, Copyright (c) 2016 MIKAMI, Naoki
//--------------------------------------------------------------

#include "MyFunctions.hpp"

// 1フレーム分の信号処理 (イコライザ) の実行
void ProcessSignal(SD_WavReader &sdReader, SaiIO_O &mySai,
                   int16_t sn[], BiquadGrEq hn[], int stages)
{
    // 1フレーム分のデータを SD から読み込む
    sdReader.ReadAndToMono(sn, mySai.GetLength());

    while (!mySai.IsXferred()) {}  // データの転送が終わるまで待つ
    //--------------------------------------------------------------
    // 1フレーム分のイコライザ処理を行い,その結果を出力する
    for (int n=0; n<mySai.GetLength(); n++)
    {
        // 縦続形の IIR フィルタ実行
        float yn = sn[n];
        for (int k=0; k<stages; k++) yn = hn[k].Execute(yn);
        int16_t value = (int16_t)yn;
        mySai.Output(value, value);    // 音響信号の出力
    }
    //--------------------------------------------------------------
    mySai.ResetXferred();   // 次のデータ転送に備える
}

// SD カードのファイルのオープン
int32_t SD_Open(SD_WavReader &sdReader,
                string fileName, int32_t frameSize)
{
    sdReader.Open(fileName);
    sdReader.IsWavFile();
    return sdReader.GetSize()/frameSize;
}

// ファイルの選択
//      selectedName:   選択されたファイル名
void SelectFile(ButtonGroup &menu, FileSelector &selector,
                Label &msg, string &selectedName)
{
    msg.Draw("Select file");
    selector.DisplayFileList();   
    do
    {
        if (selector.Select(selectedName))
            menu.Activate(1);   // PLAY 有効
        wait_ms(200);
    } while (!menu.Touched(1)); // PLAY がタッチされるまで繰り返す
}

// フィルタの周波数特性の変更
void ModifyFilter(DesignerDrawer &drawerObj,
                  SeekbarGroup &myBars, BiquadGrEq hn[],
                  Button &reset)
{
    if (reset.Touched())
    {
        drawerObj.DesignAndRedraw();
        for (int n=0; n<drawerObj.GetStages(); n++)
            hn[n] = BiquadGrEq(drawerObj.GetCoefficient(n));
        myBars.DrawAll(0);  // ツマミの位置を 0 dB に設定する
        reset.Draw();
        return;
    }
    static int num = 0;
    if (!myBars.GetSlidedNumber(num)) return;
    drawerObj.DesignAndRedraw(myBars.GetValue(num), num);
    hn[num] = BiquadGrEq(drawerObj.GetCoefficient(num));
}