Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem_Warning_Fixed
Diff: SD_PlayerSkeleton.cpp
- 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 がタッチされるまで繰り返す
+ }
+}