SPKT

Dependencies:   F746_GUI SD_PlayerSkeleton F746_SAI_IO

Committer:
phungductung
Date:
Tue Jun 04 09:08:29 2019 +0000
Revision:
0:aa3fc5ad02f7
SPKT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phungductung 0:aa3fc5ad02f7 1 //--------------------------------------------------------------------
phungductung 0:aa3fc5ad02f7 2 // SD_PlayerSkeleton クラスの使用例(音量調節付き SD オーディオプレーヤー)
phungductung 0:aa3fc5ad02f7 3 // SD のファイル: *.wav
phungductung 0:aa3fc5ad02f7 4 // PCM,16 ビットステレオ,標本化周波数 44.1 kHz
phungductung 0:aa3fc5ad02f7 5 // 上記以外の形式は扱わない
phungductung 0:aa3fc5ad02f7 6 // 出力:モノラル(L+R,左右チャンネルに同じものを出力)
phungductung 0:aa3fc5ad02f7 7 //
phungductung 0:aa3fc5ad02f7 8 // 2017/04/09, Copyright (c) 2017 MIKAMI, Naoki
phungductung 0:aa3fc5ad02f7 9 //--------------------------------------------------------------------
phungductung 0:aa3fc5ad02f7 10
phungductung 0:aa3fc5ad02f7 11 #include "VolumeCtrl.hpp"
phungductung 0:aa3fc5ad02f7 12
phungductung 0:aa3fc5ad02f7 13 #include "SAI_InOut.hpp"
phungductung 0:aa3fc5ad02f7 14 #include "LcdPanelFrq.hpp"
phungductung 0:aa3fc5ad02f7 15 #include "GaussRand.hpp"
phungductung 0:aa3fc5ad02f7 16
phungductung 0:aa3fc5ad02f7 17
phungductung 0:aa3fc5ad02f7 18
phungductung 0:aa3fc5ad02f7 19
phungductung 0:aa3fc5ad02f7 20 using namespace Mikami;
phungductung 0:aa3fc5ad02f7 21
phungductung 0:aa3fc5ad02f7 22 int main()
phungductung 0:aa3fc5ad02f7 23 {
phungductung 0:aa3fc5ad02f7 24 VolumeCtrl myPlayer("SD Player with Volume Control");
phungductung 0:aa3fc5ad02f7 25 myPlayer.Execute();
phungductung 0:aa3fc5ad02f7 26
phungductung 0:aa3fc5ad02f7 27
phungductung 0:aa3fc5ad02f7 28 const int FS = I2S_AUDIOFREQ_48K; // 標本化周波数:48 kHz
phungductung 0:aa3fc5ad02f7 29 SaiIO mySai(SaiIO::OUTPUT, 2048, FS); // オーディオ信号出力用
phungductung 0:aa3fc5ad02f7 30 LcdPanel myPanel(1.0f/(float)FS); // LCD パネル表示用
phungductung 0:aa3fc5ad02f7 31 GaussRand rnd(0.5f, 0); // ガウス性ノイズ発生器
phungductung 0:aa3fc5ad02f7 32
phungductung 0:aa3fc5ad02f7 33 mySai.PlayOut(); // オーディオ信号出力開始
phungductung 0:aa3fc5ad02f7 34
phungductung 0:aa3fc5ad02f7 35 const float MAX_AMP = 8192.0f;
phungductung 0:aa3fc5ad02f7 36 while (true) // 無限ループ
phungductung 0:aa3fc5ad02f7 37 {
phungductung 0:aa3fc5ad02f7 38 // 出力バッファへの転送が完了したら以下の処理を行う
phungductung 0:aa3fc5ad02f7 39 if (mySai.IsXferred())
phungductung 0:aa3fc5ad02f7 40 {
phungductung 0:aa3fc5ad02f7 41 for (int n=0; n<mySai.GetLength(); n++)
phungductung 0:aa3fc5ad02f7 42 {
phungductung 0:aa3fc5ad02f7 43 // 入力信号の生成
phungductung 0:aa3fc5ad02f7 44 float phi = myPanel.GetPhi();
phungductung 0:aa3fc5ad02f7 45 float sn = sinf(phi); // 入力信号となる正弦波を発生
phungductung 0:aa3fc5ad02f7 46 float noize = myPanel.GetNoiseLevel()*rnd.Next();
phungductung 0:aa3fc5ad02f7 47
phungductung 0:aa3fc5ad02f7 48 int16_t xn = (int16_t)(MAX_AMP*sn);
phungductung 0:aa3fc5ad02f7 49 int16_t yn = (int16_t)(MAX_AMP*(sn + noize));
phungductung 0:aa3fc5ad02f7 50 mySai.Output(xn, yn); // xn:ノイズなし(左チャンネル)
phungductung 0:aa3fc5ad02f7 51 // yn:ノイズ付加(右チャンネル)
phungductung 0:aa3fc5ad02f7 52 myPanel.Store(yn, n); // 表示用として格納
phungductung 0:aa3fc5ad02f7 53 }
phungductung 0:aa3fc5ad02f7 54
phungductung 0:aa3fc5ad02f7 55 myPanel.Display(); // 入出力信号の波形表示
phungductung 0:aa3fc5ad02f7 56 }
phungductung 0:aa3fc5ad02f7 57 myPanel.Update(); // パネルの状態を読み取り必要なパラメータなどを更新する
phungductung 0:aa3fc5ad02f7 58 }
phungductung 0:aa3fc5ad02f7 59 }