SPKT
Dependencies: F746_GUI SD_PlayerSkeleton F746_SAI_IO
main.cpp@0:aa3fc5ad02f7, 2019-06-04 (annotated)
- Committer:
- phungductung
- Date:
- Tue Jun 04 09:08:29 2019 +0000
- Revision:
- 0:aa3fc5ad02f7
SPKT
Who changed what in which revision?
User | Revision | Line number | New 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 | } |