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:
5:7c8f0fc9dfb6
Parent:
4:d730d024ac32
Child:
6:6fe2b62f259d
--- a/SD_PlayerSkeleton.cpp	Mon Nov 07 00:54:55 2016 +0000
+++ b/SD_PlayerSkeleton.cpp	Tue Nov 08 05:03:43 2016 +0000
@@ -1,14 +1,14 @@
 //--------------------------------------------------------------
 //  SD プレーヤー用抽象基底クラス
 //
-//  2016/11/07, Copyright (c) 2016 MIKAMI, Naoki
+//  2016/11/08, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "SD_PlayerSkeleton.hpp"
 
 namespace Mikami
 {
-    SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs, bool reset)
+    SD_PlayerSkeleton::SD_PlayerSkeleton(string str, int fs, bool resetButton)
         : FRAME_SIZE_(2048), sn_(FRAME_SIZE_),
           mySai_(SaiIO::OUTPUT, FRAME_SIZE_, fs),
           sdReader_(FRAME_SIZE_),
@@ -16,64 +16,62 @@
           selector_(0, 22, 256, 37, sdReader_),
           menu_(BG_LEFT_, 2, BG_WIDTH_, BG_HEIGHT_, 5,
                 (string[]){"OPEN", "PLAY", "PAUSE", "RESUME", "STOP"},
-                0, 2, 1),
-          resetActive_(reset)
+                0, 2, 1)
     {
         if (!selector_.CreateTable())
             BlinkLabel errLabel(240, 100, "SD CARD ERROR", Label::CENTER);
 
         menu_.InactivateAll();
         menu_.Activate(0);
-        if (resetActive_) reset_ = new ResetButton();
+        if (resetButton) reset_ = new ResetButton();
+        else             reset_ = NULL;
     }
 
     void SD_PlayerSkeleton::Execute()
     {
-        bool playOk = false;
+        bool playAfterPause = false;
+        int32_t loopCount;
+
+        while (!menu_.Touched(0))   // OPEN がタッチされるまで待つ
+            CheckCtrl();
+        SelectFile();
         bool whileFirst = true;
-        int32_t loopCount;
 
         while (true)
         {
-            if (!playOk)
+            if (!playAfterPause)    // PAUSE 後の PLAY ではない場合
             {
-                if (whileFirst)
+                if (!whileFirst)    // while ループで初回の処理ではない場合
                 {
-                    whileFirst = false;
-                    while (!menu_.Touched(0))   // OPEN がタッチされるまで待つ
-                        CheckCtrl();
-                    SelectFile();
-                }
-                else
-                {
-                    menu_.Activate(1);          // PLAY 有効
+                    menu_.Activate(1);      // PLAY ボタン有効
                     int touch10;
                     while (!menu_.GetTouchedNumber(touch10))
                         CheckCtrl();
                     if (touch10 == 0) SelectFile();
                 }
 
+                whileFirst = false;
                 loopCount = SD_Open();
-                while (!menu_.Touched(1))       // PLAY がタッチされるまで待つ
+                while (!menu_.Touched(1))   // PLAY がタッチされるまで待つ
                     CheckCtrl();
             }
-            else
+            else                    // PAUSE 後の PLAY の場合
                 loopCount = SD_Open();
 
             selector_.Erase(0, 0, BG_LEFT_-4, 272);
             title_.Draw();
 
-            Display();  // アプリ固有の表示処理
-            if (resetActive_) reset_->Draw();
+            Display();  // アプリ固有の表示処理(仮想関数)
+            if (reset_ != NULL) reset_->Draw();
 
-            menu_.Inactivate(0);    // OPEN 無効
-            menu_.Activate(2);      // PAUSE 有効
-            menu_.Activate(4);      // STOP 有効
+            menu_.Inactivate(0);    // OPEN ボタン無効
+            menu_.Activate(2);      // PAUSE ボタン有効
+            menu_.Activate(4);      // STOP ボタン有効
 
-            playOk = false;
+            playAfterPause = false;
             bool stopOk = false;
 
-            Clear();    // アプリ固有のクリア処理
+            Clear();    // アプリ固有のクリア処理(仮想関数)
 
             mySai_.PlayOut();       // Play 開始
 
@@ -82,10 +80,10 @@
                 int touch42 = -1;
                 menu_.GetTouchedNumber(touch42);
                 if (touch42 == 4) break;    // STOP
-                if (touch42 == 2)           // PAUSE
+                if (touch42 == 2)           // PAUSE ボタンがタッチされた場合の処理
                 {
-                    menu_.Inactivate(2);    // PAUSE 無効
-                    menu_.Activate(3);      // RESUME 有効
+                    menu_.Inactivate(2);    // PAUSE ボタン無効
+                    menu_.Activate(3);      // RESUME ボタン有効
                     mySai_.PauseOut();
 
                     // PLAY か RESUME か STOP がタッチされるまで待つ
@@ -94,28 +92,30 @@
                         CheckCtrl();
                     switch (touch134)
                     {
-                        case 1: playOk = true;      // 最初から PLAY
+                        case 1: playAfterPause = true;  // 最初から PLAY
                                 break;
-                        case 3: mySai_.ResumeOut(); // PAUSE したところから PLAY 再開
-                                menu_.Activate(2);
+                        case 3: mySai_.ResumeOut();     // PAUSE したところから
+                                menu_.Activate(2);      // PLAY 再開
                                 menu_.Inactivate(3);
                                 menu_.TouchedColor(1);
                                 break;
-                        case 4: stopOk = true;      // STOP
+                        case 4: stopOk = true;          // STOP
                                 break;
                     }
                 }
-                if (playOk || stopOk) break;
+                if (playAfterPause || stopOk) break;
 
                 CheckCtrl();
-                // 1フレーム分の信号処理の実行
+                // アプリ固有の1フレーム分の信号処理(純粋仮想関数)
                 SignalProcessing();
             }
             mySai_.StopOut();
-            menu_.Activate(0);                  // OPEN 有効
-            if (!playOk) menu_.Activate(1);     // PLAY 有効
-            for (int n=2; n<5; n++)             // その他は無効
+            menu_.Activate(0);         // OPEN ボタン有効
+            if (!playAfterPause)
+                menu_.Activate(1);     // PLAY ボタン有効
+            for (int n=2; n<5; n++)    // その他のボタンは無効
                 menu_.Inactivate(n);
+
             sdReader_.Close();   // SD のファイルのクローズ
         }
     }
@@ -143,21 +143,19 @@
     //      selectedName:   選択されたファイル名
     void SD_PlayerSkeleton::SelectFile()
     {
-        selector_.DisplayFileList();   
+        selector_.DisplayFileList();
         title_.Draw("Select file");
+        menu_.Inactivate(1);      // PLAY ボタン無効
         do
-        {
             if (selector_.Select(fileName_))
-                menu_.Activate(1);      // PLAY 有効
-            wait_ms(200);
-        } while (!menu_.Touched(1));    // PLAY がタッチされるまで繰り返す
+                menu_.Activate(1);    // PLAY ボタン有効
+        while (!menu_.Touched(1));    // PLAY ボタンがタッチされるまで繰り返す
     }
 
     // パネル操作のチェック
     void SD_PlayerSkeleton::CheckCtrl()
     {
-        if (resetActive_) reset_->Do();
-        Modefy();
+        if (reset_ != NULL) reset_->Do();
+        Modefy();   // アプリ固有のパラメータ変更(仮想関数)
     }
 }
-