PHung Tung / WAV2

Dependencies:   F746_GUI SD_PlayerSkeleton F746_SAI_IO

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //--------------------------------------------------------------------
00002 //  SD_PlayerSkeleton クラスの使用例(音量調節付き SD オーディオプレーヤー)
00003 //      SD のファイル: *.wav
00004 //                   PCM,16 ビットステレオ,標本化周波数 44.1 kHz
00005 //                   上記以外の形式は扱わない
00006 //      出力:モノラル(L+R,左右チャンネルに同じものを出力)
00007 //
00008 //  2017/04/09, Copyright (c) 2017 MIKAMI, Naoki
00009 //--------------------------------------------------------------------
00010 
00011 #include "VolumeCtrl.hpp"
00012 
00013 #include "SAI_InOut.hpp"
00014 #include "LcdPanelFrq.hpp"
00015 #include "GaussRand.hpp"
00016 
00017 
00018 
00019 
00020 using namespace Mikami;
00021 
00022 int main()
00023 {
00024     VolumeCtrl myPlayer("SD Player with Volume Control");
00025     myPlayer.Execute();
00026     
00027     
00028     const int FS = I2S_AUDIOFREQ_48K;       // 標本化周波数:48 kHz
00029     SaiIO mySai(SaiIO::OUTPUT, 2048, FS);   // オーディオ信号出力用
00030     LcdPanel myPanel(1.0f/(float)FS);       // LCD パネル表示用
00031     GaussRand rnd(0.5f, 0);                 // ガウス性ノイズ発生器
00032 
00033     mySai.PlayOut();    // オーディオ信号出力開始
00034 
00035     const float MAX_AMP = 8192.0f;
00036     while (true)        // 無限ループ
00037     {
00038         // 出力バッファへの転送が完了したら以下の処理を行う
00039         if (mySai.IsXferred())
00040         {
00041             for (int n=0; n<mySai.GetLength(); n++)
00042             {
00043                 // 入力信号の生成
00044                 float phi = myPanel.GetPhi();
00045                 float sn = sinf(phi); // 入力信号となる正弦波を発生
00046                 float noize = myPanel.GetNoiseLevel()*rnd.Next();
00047 
00048                 int16_t xn = (int16_t)(MAX_AMP*sn);
00049                 int16_t yn = (int16_t)(MAX_AMP*(sn + noize));
00050                 mySai.Output(xn, yn);       // xn:ノイズなし(左チャンネル)
00051                                             // yn:ノイズ付加(右チャンネル)
00052                 myPanel.Store(yn, n);       // 表示用として格納
00053             }
00054 
00055             myPanel.Display();  // 入出力信号の波形表示
00056         }
00057         myPanel.Update();   // パネルの状態を読み取り必要なパラメータなどを更新する
00058     }
00059 }