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
Dependents: DISCO-F746_WAV_PLAYER WAV
Revision 18:6631cd0fbbcd, committed 2019-06-04
- Comitter:
- phungductung
- Date:
- Tue Jun 04 21:35:59 2019 +0000
- Parent:
- 17:abfd6af9a236
- Child:
- 19:9f34d9b4a6a7
- Commit message:
- WAV
Changed in this revision
--- a/FileSelectorWav.cpp Thu Mar 23 02:58:48 2017 +0000
+++ b/FileSelectorWav.cpp Tue Jun 04 21:35:59 2019 +0000
@@ -1,8 +1,4 @@
-//--------------------------------------------------------------
-// FileSelector class
-// SD カード内のファイル名の一覧を表示し,ファイルを選択する
-//
-// 2017/03/23, Copyright (c) 2017 MIKAMI, Naoki
+
//--------------------------------------------------------------
#include "FileSelectorWav.hpp"
@@ -27,7 +23,7 @@
rect_->EraseAll();
next_.EraseAll();
- // Label を生成
+ // Tạo Label
for (int n=0; n<MAX_LIST_PAGE_; n++)
fileNameLabels_[n] = new Label(X_+30, Y_+5+V_L_*n, "",
Label::LEFT, Font16, BASE_COLOR_);
@@ -39,7 +35,7 @@
for (int n=0; n<MAX_LIST_PAGE_; n++) delete fileNameLabels_[n];
}
- // ファイルの一覧表を作る.WAV ファイルが存在しない場合は false を返す
+ // Lập danh sách các tập tin. Trả về false nếu tệp WAV không tồn tại
bool FileSelector::CreateTable()
{
DIR* dp = opendir("/sd");
@@ -56,9 +52,9 @@
if ( (strName.find(".wav") != string::npos) ||
(strName.find(".WAV") != string::npos) )
{
- sdReader_.Open(strName); // ファイルオープン
+ sdReader_.Open(strName); // mở tập tin
- // PCM,16 ビットステレオ,標本化周波数 44.1 kHz 以外のファイルは除外
+ // Loại trừ các tệp không phải PCM, âm thanh nổi 16 bit, tần số lấy mẫu 44,1 kHz
if (sdReader_.IsWavFile())
fileNames_[fileCount_++] = strName;
sdReader_.Close();
@@ -68,15 +64,15 @@
closedir(dp);
}
else
- return false; // SD カードが装着されていない場合
- if (fileCount_ == 0) return false; // 該当する WAV ファイルが存在しない場合
+ return false; // nếu thẻ SD không được cài đặt
+ if (fileCount_ == 0) return false; //Nếu tệp WAV tương ứng không tồn tại
div_t m = div(fileCount_, MAX_LIST_PAGE_);
maxPage_ = (m.rem == 0) ? m.quot : m.quot+1;
- return true; // 該当する WAV ファイルが存在する場合
+ return true; //Khi tệp WAV tương ứng tồn tại
}
- // ファイルを選択する
+ // chọn tập tin
bool FileSelector::Select(string &fileName)
{
int m;
@@ -96,11 +92,11 @@
fileNameLabels_[n]->Draw(GetFileNameNoExt(k),
TOUCHED_COLOR_);
fileName = fileNames_[k];
- // 同じページで以前に選択されているファイル名の色を戻す
+ // Trả về màu của tên tệp đã chọn trước đó trên cùng một trang
if (nOld_ != -1)
fileNameLabels_[nOld_]->Draw(GetFileNameNoExt(kOld_),
BASE_COLOR_);
- if (page_ == maxPage_) // 最後のページで余分な四角形を消去
+ if (page_ == maxPage_) // xóa hình chữ nhật phụ trên trang cuối
for (int j=fileCount_ % MAX_LIST_PAGE_ + 1;
j < MAX_LIST_PAGE_; j++) rect_->Erase(j);
nOld_ = n;
@@ -112,7 +108,7 @@
return false;
}
- // ファイルの一覧の表示
+ // Hiển thị danh sách các tập tin
void FileSelector::DisplayFileList(bool sortEnable)
{
if (sortEnable)
@@ -126,17 +122,16 @@
for (int n=0; n<count; n++) rect_->Draw(n);
for (int n=0; n<count; n++)
fileNameLabels_[n]->Draw(GetFileNameNoExt(n+(page_-1)*MAX_LIST_PAGE_));
-
- // 前のページ,次のページの選択ボタンなどを表示する
+// Hiển thị trang trước, nút chọn trang tiếp theo, v.v.
next_.InactivateAll();
- if (page_ > 1) next_.Activate(0); // "<" 有効
- if (page_ < maxPage_) next_.Activate(1); // ">" 有効
+ if (page_ > 1) next_.Activate(0); // "<" hợp lệ
+ if (page_ < maxPage_) next_.Activate(1); // ">" hợp lệ
char page[6];
sprintf(page, "%d/%d", page_, maxPage_);
pageLabel_.Draw(page);
}
- // ファイルの一覧の消去
+ // xóa danh sách các tập tin
void FileSelector::Erase(uint16_t x, uint16_t y, uint16_t width, uint16_t height,
uint32_t color)
{
@@ -144,7 +139,7 @@
lcd_.FillRect(x, y, width, height);
}
- // 拡張子を削除したファイル名を取得
+ // Lấy tên tệp với phần mở rộng bị xóa
string FileSelector::GetFileNameNoExt(int n)
{
string name = fileNames_[n];
--- a/FileSelectorWav.hpp Thu Mar 23 02:58:48 2017 +0000
+++ b/FileSelectorWav.hpp Tue Jun 04 21:35:59 2019 +0000
@@ -1,8 +1,4 @@
-//--------------------------------------------------------------
-// FileSelector class ---- Header ----
-// SD カード内のファイル名の一覧を表示し,ファイルを選択する
-//
-// 2017/03/23, Copyright (c) 2017 MIKAMI, Naoki
+
//--------------------------------------------------------------
#ifndef FILE_SELECTOR_HPP
@@ -10,7 +6,7 @@
#include "F746_GUI.hpp"
#include "SD_WavReader.hpp"
-#include <algorithm> // sort() で使用
+#include <algorithm> // Được sử dụng bởi sort()
#include <string>
namespace Mikami
@@ -23,21 +19,20 @@
virtual ~FileSelector();
- // ファイルの一覧表を作る.WAV ファイルが存在しない場合は false を返す
+ // Lập danh sách các tập tin. Trả về false nếu tệp WAV không tồn tại
bool CreateTable();
-
- // ファイルを選択する
+ // chọn tập tin
bool Select(string &fileName);
- // ファイルの一覧の表示
+ // Hiển thị danh sách các tập tin
void DisplayFileList(bool sortEnable = true);
- // ファイルの一覧の消去
+ // xóa danh sách các tập tin
void Erase(uint16_t x, uint16_t y, uint16_t width, uint16_t height,
uint32_t color = GuiBase::ENUM_BACK);
private:
- static const int MAX_LIST_PAGE_ = 6; // 1ページに表示するファイル数の最大値
+ static const int MAX_LIST_PAGE_ = 6; // Số lượng tệp tối đa được hiển thị trên một trang
static const uint8_t W_H_ = 24;
static const uint8_t V_L_ = 36;
static const uint32_t BASE_COLOR_ = 0xFF80FFA0;
@@ -53,16 +48,16 @@
Label pageLabel_;
LCD_DISCO_F746NG &lcd_;
SD_WavReader &sdReader_;
- int page_; // 現在のページ,最初のページは 1
- int nOld_; // ページ内で以前選択したファイルのインデックス
- int kOld_; // 以前選択したファイルのインデックス
+ int page_; // Trang hiện tại, trang đầu tiên là 1
+ int nOld_; // Chỉ mục của tệp đã chọn trước đó trong trang
+ int kOld_; // Chỉ mục của tệp đã chọn trước đó
int maxPage_;
int fileCount_;
- // 拡張子を削除したファイル名を取得
+ // Lấy tên tệp với phần mở rộng bị xóa
string GetFileNameNoExt(int n);
- // コピー・コンストラクタとオブジェクトの代入演算子は使用禁止
+ // Không sử dụng các hàm tạo sao chép và toán tử gán đối tượng
FileSelector(const FileSelector&);
FileSelector& operator=(const FileSelector&);
};
--- a/SD_PlayerSkeleton.cpp Thu Mar 23 02:58:48 2017 +0000
+++ b/SD_PlayerSkeleton.cpp Tue Jun 04 21:35:59 2019 +0000
@@ -1,7 +1,4 @@
-//--------------------------------------------------------------
-// SD プレーヤー用抽象基底クラス
-//
-// 2017/03/22, Copyright (c) 2017 MIKAMI, Naoki
+
//--------------------------------------------------------------
#include "SD_PlayerSkeleton.hpp"
@@ -29,7 +26,7 @@
else reset_ = NULL;
}
- // SD プレーヤーの処理の実行
+ // thực thi xử lý trình phát SD
void SD_PlayerSkeleton::Execute()
{
bool playOk = false;
@@ -37,47 +34,47 @@
while (true)
{
- if (playOk) // PAUSE 後の PLAY の場合
+ if (playOk) // Trong trường hợp PLAY sau PAUSE
loopCount = SD_Open();
- else // PAUSE 後の PLAY ではない場合
+ else // Nếu không PLAY sau PAUSE
{
if (0 == WaitTouched()) SelectFile();
loopCount = SD_Open();
- while (1 != WaitTouched()) {} // PLAY がタッチされるまで待つ
+ while (1 != WaitTouched()) {} // Đợi cho đến khi PLAY được chạm
}
- Display(); // アプリ固有の表示処理(仮想関数)
+ Display(); // Xử lý hiển thị dành riêng cho ứng dụng (chức năng ảo)
if (reset_ != NULL) reset_->Draw();
- menu_.Inactivate(0); // SELECT ボタン無効
- menu_.Activate(2); // PAUSE ボタン有効
- menu_.Activate(4); // STOP ボタン有効
+ menu_.Inactivate(0); // SELECT bị vô hiệu hóa
+ menu_.Activate(2); // PAUSE bị vô hiệu hóa
+ menu_.Activate(4); // STOP bị vô hiệu hóa
playOk = false;
bool stopOk = false;
- Clear(); // アプリ固有のクリア処理(仮想関数)
+ Clear(); // Quá trình xóa ứng dụng cụ thể (chức năng ảo)
- mySai_.PlayOut(); // Play 開始
+ mySai_.PlayOut(); // Play
- // ファイルのデータがなくなるまで繰り返す
+ // Lặp lại cho đến khi hết dữ liệu tệp
for (int k=0; k<loopCount; k++)
{
int touch42 = -1;
menu_.GetTouchedNumber(touch42);
if (touch42 == 4) break; // STOP
- if (touch42 == 2) // PAUSE ボタンがタッチされた場合の処理
+ if (touch42 == 2) // PAUSE Xử lý khi chạm vào nút
{
- menu_.Inactivate(2); // PAUSE ボタン無効
- menu_.Activate(3); // RESUME ボタン有効
+ menu_.Inactivate(2); // PAUSE Nút không hợp lệ
+ menu_.Activate(3); // RESUME Đã bật nút
mySai_.PauseOut();
- // PLAY か RESUME か STOP がタッチされるまで待つ
+ // PLAY Đợi cho đến khi 'RESUME' hoặc 'STOP' được chạm vào
switch (WaitTouched())
{
- case 1: playOk = true; // 最初から PLAY
+ case 1: playOk = true; // PLAY từ đầu
break;
- case 3: mySai_.ResumeOut(); // PAUSE 箇所から PLAY 再開
+ case 3: mySai_.ResumeOut(); // Tiếp tục PLAY từ điểm PAUSE
menu_.Activate(2);
menu_.Inactivate(3);
menu_.TouchedColor(1);
@@ -89,20 +86,20 @@
if (playOk || stopOk) break;
DoIfHandled();
- // アプリ固有の1ブロック分に対する信号処理(純粋仮想関数)
+ // Xử lý tín hiệu cho một khối dành riêng cho ứng dụng (hàm ảo thuần túy)
SignalProcessing();
}
mySai_.StopOut();
- if (!playOk) menu_.Activate(0); // SELECT ボタン有効
- menu_.Draw(1); // PLAY ボタンの色を初期状態にする
- for (int n=2; n<5; n++) // その他のボタンは無効
+ if (!playOk) menu_.Activate(0); // SELECT hợp lệ
+ menu_.Draw(1); // Khởi tạo màu của nút PLAY
+ for (int n=2; n<5; n++) // Các nút khác bị vô hiệu hóa
menu_.Inactivate(n);
- sdReader_.Close(); // SD のファイルのクローズ
+ sdReader_.Close(); // Đóng tệp SD
}
}
- // 選択されたファイル名から拡張子を除いたものを取得
+ // Lấy tên tệp đã chọn mà không cần phần mở rộng
string SD_PlayerSkeleton::GetFileNameNoExt()
{
string fName = fileName_;
@@ -113,7 +110,7 @@
return fName;
}
- // SD カードのファイルのオープン
+ // Mở tệp thẻ SD
int32_t SD_PlayerSkeleton::SD_Open()
{
if (fileName_.empty()) SelectFile();
@@ -122,30 +119,30 @@
return sdReader_.GetSize()/BUFF_SIZE_;
}
- // ファイルの選択
+ // Lựa chọn tập tin
void SD_PlayerSkeleton::SelectFile()
{
selector_.DisplayFileList();
title_.Draw("Select file");
- menu_.Inactivate(0); // SELECT ボタン無効
- menu_.Inactivate(1); // PLAY ボタン無効
+ menu_.Inactivate(0); // SELECT vô hiệu hóa
+ menu_.Inactivate(1); // PLAY vô hiệu hóa
do
if (selector_.Select(fileName_))
- menu_.Activate(1); // PLAY ボタン有効
- while (!menu_.Touched(1)); // PLAY ボタンがタッチされるまで繰り返す
+ menu_.Activate(1); // PLAY đã bật
+ while (!menu_.Touched(1)); // PLAY Lặp lại cho đến khi nút được chạm
selector_.Erase(0, 0, BG_LEFT_-4, 272);
title_.Draw();
}
- // パネルが操作された場合の処理
+ // Xử lý khi bảng điều khiển được vận hành
void SD_PlayerSkeleton::DoIfHandled()
{
if (reset_ != NULL) reset_->DoIfTouched();
- Modefy(); // アプリ固有のパラメータ変更(仮想関数)
+ Modefy(); // Ứng dụng thay đổi tham số cụ thể (chức năng ảo)
}
- // メニューのいずれかのボタンがタッチされるまで DoIfHandled() を実行しながら待つ
+ //Đợi trong khi thực hiện Do IfHandled () cho đến khi bất kỳ nút nào trên menu được chạm vào
int SD_PlayerSkeleton::WaitTouched()
{
int touchNum;
--- a/SD_PlayerSkeleton.hpp Thu Mar 23 02:58:48 2017 +0000
+++ b/SD_PlayerSkeleton.hpp Tue Jun 04 21:35:59 2019 +0000
@@ -1,7 +1,3 @@
-//--------------------------------------------------------------
-// SD プレーヤー用抽象基底クラス(ヘッダ)
-//
-// 2017/03/22, Copyright (c) 2016 MIKAMI, Naoki
//--------------------------------------------------------------
#ifndef F746_SD_PLAYER_SKELETON_HPP
@@ -19,60 +15,55 @@
class SD_PlayerSkeleton
{
public:
- // リセット・ボタンを使う場合は resetButton を true とする
+ // Đặt resetButton thành true nếu sử dụng nút reset
SD_PlayerSkeleton(string str, bool resetButton = false);
virtual ~SD_PlayerSkeleton() { if (reset_ != NULL) delete reset_; }
- // SD プレーヤーの処理の実行
+ // thực thi xử lý trình phát SD
void Execute();
protected:
- // ボタン用の定数
+
static const uint16_t BG_LEFT_ = 414;
static const uint16_t BG_WIDTH_ = 66;
static const uint16_t BG_HEIGHT_ = 36;
- const int32_t BUFF_SIZE_; // バッファのサイズ
- Array<int16_t> sn_; // バッファ
+ const int32_t BUFF_SIZE_; // Kích thước của bộ đệm
+ Array<int16_t> sn_; // bộ đệm
SaiIO mySai_;
- SD_WavReader sdReader_; // SD カード読み込み用オブジェクト
+ SD_WavReader sdReader_; // Đối tượng đọc thẻ SD
- // 選択されたファイル名を取得
+ // Lấy tên tệp đã chọn
string GetFileName() { return fileName_; }
- // 選択されたファイル名から拡張子を除いたものを取得
+ // Nhận tên tệp đã chọn mà không có phần mở rộng
string GetFileNameNoExt();
private:
- string fileName_; // 選択されたファイル名
- Label title_; // 上部に表示されるタイトル
+ string fileName_; // Tên tệp đã chọn
+ Label title_; // Tiêu đề hiển thị ở trên cùng
FileSelector selector_;
ButtonGroup menu_;
- ResetButton *reset_; // リセットボタン用オブジェクトのポインタ
+ ResetButton *reset_; // Con trỏ cho nut Reset
- // SD カードのファイルのオープン
+ // Mở tệp thẻ SD
int32_t SD_Open();
- // ファイルの選択
+ // Chọn tệp
void SelectFile();
- // パネルが操作された場合の処理
+ // Xử lý khi bảng điều khiển được vận hành
void DoIfHandled();
-
- // メニューのいずれかのボタンがタッチされるまで DoIfHandled() を実行しながら待つ
+// Đợi trong khi thực hiện Do IfHandled () cho đến khi một trong các nút menu được chạm
int WaitTouched();
- // コピー・コンストラクタとオブジェクトの代入演算子は使用禁止
+ // Không sử dụng hàm tạo sao chép và toán tử gán đối tượng
SD_PlayerSkeleton(const SD_PlayerSkeleton&);
SD_PlayerSkeleton& operator=(const SD_PlayerSkeleton&);
- //-------------------------------------
- // 以下は仮想関数
- //-------------------------------------
- // 1ブロック分の信号処理
virtual void SignalProcessing() = 0;
- // 信号処理のパラメータ変更など
+ // Thay đổi tham số xử lý tín hiệu, v.v.
virtual void Modefy() {}
- // 曲の再生時の表示
+ // Hiển thị khi phát một bài hát
virtual void Display() {}
- // 信号処理で必要になるクリア処理
+ // *Xóa quá trình cần thiết để xử lý tín hiệu*//
virtual void Clear() {}
};
}
--- a/SD_WavReader.cpp Thu Mar 23 02:58:48 2017 +0000
+++ b/SD_WavReader.cpp Tue Jun 04 21:35:59 2019 +0000
@@ -1,11 +1,3 @@
-//--------------------------------------------------------------
-// SD_WavReader class
-// SD カードの *.wav ファイルの内容を読み出す
-// 以下の型式のファイルのみ扱う
-// PCM,16 ビットステレオ,標本化周波数 44.1 kHz
-//
-// 2017/03/22, Copyright (c) 2017 MIKAMI, Naoki
-//--------------------------------------------------------------
#include "SD_WavReader.hpp"
@@ -29,29 +21,29 @@
{
string name = (string)"/" + STR_ + "/" + fileName;
fp_ = fopen(name.c_str(), "rb");
- if (fp_ == NULL) ErrorMsg("open error!!");
+ if (fp_ == NULL) ErrorMsg("Loi The SD!!!");
}
- // ファイルのヘッダ "RIFFxxxxWAVEfmt " の部分の読み込み
- // 戻り値:16 ビットステレオ,標本化周波数が 44.1 kHz の場合 true
+ // Đọc một phần của tiêu đề tệp "RIFFxxxxWAVEfmt"
+ // Giá trị trả về: true nếu âm thanh nổi 16 bit, tần số lấy mẫu là 44,1 kHz
bool SD_WavReader::IsWavFile()
{
char data[17];
- fread(data, 1, 16, fp_); // 16 バイト分を読み込む
+ fread(data, 1, 16, fp_); // Đọc 16 byte
string strRead = "";
for (int n=0; n<4; n++) strRead += data[n];
- // 間の 4 文字はチェックしない
+ // Không kiểm tra 4 ký tự giữa
for (int n=8; n<16; n++) strRead += data[n];
- // "RIFF", "WAVE", "fmt " が存在することを確認
+ // Kiểm tra xem "RIFF", "WAVE", "fmt" có tồn tại không
if (strRead != "RIFFWAVEfmt ") return false;
- // fmt chunck のサイズを取得
+ // có được kích thước của fmt chunck
uint32_t fmtChunkSize;
fread(&fmtChunkSize, sizeof(uint32_t), 1, fp_);
- // PCM, Stereo, 44.1 kHz, 16 bit であることを確認
+ // Xác nhận rằng đó là PCM, Stereo, 44.1 kHz, 16 bit
WaveFormatEx fmtData;
fread(&fmtData, fmtChunkSize, 1, fp_);
if ((fmtData.wFormatTag != 1) ||
@@ -60,7 +52,7 @@
(fmtData.wBitsPerSample != 16)
) return false;
- // data chunk を探す
+ // Tìm dữ liệu
char dataId[5];
dataId[4] = 0;
fread(dataId, 1, 4, fp_);
@@ -77,7 +69,7 @@
if (n == 99) return false;
}
- // データサイズ (byte) を取得
+ // Nhận kích thước dữ liệu (byte)
int32_t sizeByte;
fread(&sizeByte, sizeof(int32_t), 1, fp_);
size_ = sizeByte/4;
@@ -86,7 +78,7 @@
return true;
}
- // ファイルからステレオデータの取得
+ // Nhận dữ liệu âm thanh nổi từ tập tin
void SD_WavReader::ReadStereo(Array<int16_t>& dataL,
Array<int16_t>& dataR)
{
@@ -100,7 +92,7 @@
}
}
- // ファイルからデータをモノラルに変換しての取得
+ // Chuyển đổi dữ liệu từ tập tin sang đơn âm
void SD_WavReader::ReadAndToMono(Array<int16_t>& data)
{
if (!ok_) ErrorMsg("Get data FAILED");
@@ -110,7 +102,7 @@
data[n] = (buffer[2*n] + buffer[2*n+1])/2;
}
- // データサイズ(標本化点の数)の取得
+ // Thu thập kích thước dữ liệu (số điểm lấy mẫu)
int32_t SD_WavReader::GetSize()
{
if (!ok_) ErrorMsg("Get data size FAILED");
--- a/SD_WavReader.hpp Thu Mar 23 02:58:48 2017 +0000
+++ b/SD_WavReader.hpp Tue Jun 04 21:35:59 2019 +0000
@@ -1,10 +1,4 @@
-//--------------------------------------------------------------
-// SD_WavReader class ---- Header
-// SD カードの *.wav ファイルの内容を読み出す
-// 以下の型式のファイルのみ扱う
-// PCM,16 ビットステレオ,標本化周波数 44.1 kHz
-//
-// 2017/03/22, Copyright (c) 2017 MIKAMI, Naoki
+
//--------------------------------------------------------------
#ifndef SD_WAV_READER_HPP
@@ -28,16 +22,16 @@
void Close() { fclose(fp_); }
- // ファイルのヘッダ読み込み
+ // Đọc tiêu đề của tệp
bool IsWavFile();
- // ファイルからステレオデータの取得
+ // Nhận dữ liệu âm thanh nổi từ tệp
void ReadStereo(Array<int16_t>& dataL, Array<int16_t>& dataR);
- // ファイルからデータをモノラルに変換しての取得
+ // Chuyển đổi dữ liệu từ tệp thành đơn âm
void ReadAndToMono(Array<int16_t>& data);
- // データサイズ(標本化点の数)の取得
+ // Lấy kích thước dữ liệu (số điểm lấy mẫu)
int32_t GetSize();
private:
@@ -46,25 +40,24 @@
struct WaveFormatEx
{
uint16_t wFormatTag; // 1: PCM
- uint16_t nChannels; // 1:モノラル,2: ステレオ
- uint32_t nSamplesPerSec; // 標本化周波数 (Hz)
- uint32_t nAvgBytesPerSec; // 転送速度 (bytes/s)
- uint16_t nBlockAlign; // 4: 16ビットステレオの場合
- uint16_t wBitsPerSample; // データのビット数,8 または 16
- uint16_t cbSize; // PCM の場合使わない
+ uint16_t nChannels; // 1: 1: đơn âm, 2: âm thanh nổi
+ uint32_t nSamplesPerSec; // Tần số lấy mẫu (Hz)
+ uint32_t nAvgBytesPerSec; // Tốc độ truyền (byte / s)
+ uint16_t nBlockAlign; // 4: Trong trường hợp âm thanh nổi 16 bit
+ uint16_t wBitsPerSample; // Số bit dữ liệu, 8 hoặc 16
+ uint16_t cbSize; // Không được sử dụng cho PCM
};
SDFileSystem *sd_;
FILE *fp_;
bool ok_;
- int32_t size_; // データサイズ(標本化点の数)
- Array<int16_t> buffer; // 作業領域
+ int32_t size_; // Kích thước dữ liệu (số điểm lấy mẫu)
+ Array<int16_t> buffer; // Khu vực làm việc
void ErrorMsg(char msg[])
{ BlinkLabel errLabel(240, 100, msg, Label::CENTER); }
-
- // コピー・コンストラクタとオブジェクトの代入演算子は使用禁止
+// Không sử dụng hàm tạo sao chép và toán tử gán đối tượng
SD_WavReader(const SD_WavReader&);
SD_WavReader& operator=(const SD_WavReader&);
};