Library for Skeleton of SD card player. SD カードプレーヤのための骨組みとして使うためのライブラリ.このライブラリを登録した際のプログラム:「F746_SD_Player_Demo」

Dependencies:   SDFileSystem_Warning_Fixed

Dependents:   F746_SD_Player_Demo F746_SD_VarableFilter F746_SD_GraphicEqualizer F746_MySoundMachine ... more

Revision:
0:d310bb78455d
Child:
1:c7968701f7b3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SD_PlayerSkeleton.cpp	Mon Aug 15 04:38:45 2016 +0000
@@ -0,0 +1,141 @@
+//--------------------------------------------------------------
+//  SD プレーヤー用抽象基底クラス
+//
+//  2016/07/17, Copyright (c) 2016 MIKAMI, Naoki
+//--------------------------------------------------------------
+
+#include "SD_PlayerSkeleton.hpp"
+
+namespace Mikami
+{
+    SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs)
+        : FRAME_SIZE_(2048), sn_(FRAME_SIZE_),
+          mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs),
+          sdReader_(FRAME_SIZE_),
+          title_(214, 4, str, Label::CENTER, Font16),
+          selector_(4, 22, 7, 37, sdReader_),
+          menu_(BG_LEFT_, 2, BG_WIDTH_, BG_HEIGHT_, 5,
+                (string[]){"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"},
+                0, 2, 1)
+    {
+        if (!selector_.CreateTable())
+            BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER);
+
+        menu_.InactivateAll();
+        menu_.Activate(0);
+    }
+
+    void SD_PlayerSkeleton::Execute()
+    {
+        bool playOk = false;
+        bool whileFirst = true;
+        int32_t loopCount;
+
+        while (true)
+        {
+            if (!playOk)
+            {
+                if (whileFirst)
+                {
+                    whileFirst = false;
+                    while (!menu_.Touched(0))   // OPEN がタッチされるまで待つ
+                        Modefy();
+                    SelectFile();
+                }
+                else
+                {
+                    menu_.Activate(1);          // PLAY 有効
+                    int touch10;
+                    while (!menu_.GetTouchedNumber(touch10))
+                        Modefy();
+                    if (touch10 == 0) SelectFile();
+                }
+
+                loopCount = SD_Open();
+                while (!menu_.Touched(1))       // PLAY がタッチされるまで待つ
+                    Modefy();
+            }
+            else
+                loopCount = SD_Open();
+
+            selector_.Erase(0, 0, BG_LEFT_-4, 272);
+            title_.Draw();
+
+            Display();  // アプリ固有の表示処理
+
+            menu_.Inactivate(0);    // OPEN 無効
+            menu_.Activate(2);      // PAUSE 有効
+            menu_.Activate(4);      // STOP 有効
+
+            playOk = false;
+            bool stopOk = false;
+
+            Clear();    // アプリ固有のクリア処理
+
+            mySai_.PlayOut();       // Play 開始
+
+            for (int k=0; k<loopCount; k++)
+            {
+                int touch42 = -1;
+                menu_.GetTouchedNumber(touch42);
+                if (touch42 == 4) break;    // STOP
+                if (touch42 == 2)           // PAUSE
+                {
+                    menu_.Inactivate(2);    // PAUSE 無効
+                    menu_.Activate(3);      // RESUME 有効
+                    mySai_.PauseOut();
+
+                    // PLAY か RESUME か STOP がタッチされるまで待つ
+                    int touch134 = -1;
+                    while (!menu_.GetTouchedNumber(touch134))
+                        Modefy();
+                    switch (touch134)
+                    {
+                        case 1: playOk = true;      // 最初から PLAY
+                                break;
+                        case 3: mySai_.ResumeOut(); // PAUSE したところから PLAY 再開
+                                menu_.Activate(2);
+                                menu_.Inactivate(3);
+                                menu_.TouchedColor(1);
+                                break;
+                        case 4: stopOk = true;      // STOP
+                                break;
+                    }
+                }
+                if (playOk || stopOk) break;
+
+                Modefy();
+                // 1フレーム分の信号処理の実行
+                SignalProcessing();
+            }
+            mySai_.StopOut();
+            menu_.Activate(0);                  // OPEN 有効
+            if (!playOk) menu_.Activate(1);     // PLAY 有効
+            for (int n=2; n<5; n++)             // その他は無効
+                menu_.Inactivate(n);
+            sdReader_.Close();   // SD のファイルのクローズ
+        }
+    }
+
+    // SD カードのファイルのオープン
+    int32_t SD_PlayerSkeleton::SD_Open()
+    {
+        sdReader_.Open(fileName_);
+        sdReader_.IsWavFile();
+        return sdReader_.GetSize()/FRAME_SIZE_;
+    }
+
+    // ファイルの選択
+    //      selectedName:   選択されたファイル名
+    void SD_PlayerSkeleton::SelectFile()
+    {
+        selector_.DisplayFileList();   
+        title_.Draw("Select file");
+        do
+        {
+            if (selector_.Select(fileName_))
+                menu_.Activate(1);      // PLAY 有効
+            wait_ms(200);
+        } while (!menu_.Touched(1));    // PLAY がタッチされるまで繰り返す
+    }
+}