unit untSoundManager10;
interface
uses
untFileNameInfo,
{$IFDEF IOS}
FMX.Media,
{$else}
MMSYSTEM,
{$ENDIF}
IOUtils,
SysUtils,
Classes,
Types;
type
TSoundManager = class
private
{$IFDEF IOS}
FMediaPlayer: TMediaPlayer;
{$else}
FMemoryStreamArray: Array of TMemoryStream;
{$ENDIF}
FNameArray: Array of String;
FPathName: String;
procedure setPathName(const Value: String);
procedure Stop;
public
constructor Create(aPathFileName: String);
destructor Destroy; override;
procedure Play(aItemName: String);
procedure Init();
property PathName: String write setPathName;
end;
implementation
procedure fileListOfFolder(aFolderName: string; vFileList: TStringList);
var
SearchPattern: string;
Option: TSearchOption;
FileNames: TStringDynArray;
FileName: string;
begin
// ファイル名に一致する検索パターン
SearchPattern := '*.*';
// ディレクトリの列挙モード
Option := TSearchOption.soTopDirectoryOnly; // トップレベル列挙モード
// Option := TSearchOption.soAllDirectories; // 再帰列挙モード
//指定のディレクトリ内のファイルのリスト
FileNames := TDirectory.GetFiles(aFolderName, SearchPattern, Option);
vFileList.Clear;
for FileName in FileNames do
vFileList.Add(TPath.GetFileName(FileName));
end;
{$IFDEF IOS}
// ---------------------------------------------------------------------------
// For iOS
// ---------------------------------------------------------------------------
constructor TSoundManager.Create(aPathFileName: String);
begin
FMediaPlayer := TMediaPlayer.Create(nil);
PathName := aPathFileName;
end;
destructor TSoundManager.Destroy;
var
i: Integer;
begin
Init();
Stop();
FMediaPlayer.Free;
inherited;
end;
procedure TSoundManager.Init;
begin
SetLength(FNameArray, 0);
end;
procedure TSoundManager.Stop();
begin
FMediaPlayer.Stop;
end;
procedure TSoundManager.Play(aItemName: String);
var
i: Integer;
tmpPathFileName: String;
begin
Stop();
for i := Low(FNameArray) to High(FNameArray) do
if FNameArray[i] = Trim(aItemName) then
begin
tmpPathFileName := FPathName + FNameArray[i] + '.mp3';
FMediaPlayer.FileName := tmpPathFileName;
FMediaPlayer.CurrentTime := 0;
FMediaPlayer.Play;
end;
end;
procedure TSoundManager.setPathName(const Value: String);
var
// tmpPathName: String;
tmpFileList: TStringList;
i: Integer;
tmpPathFileName: String;
begin
Init();
FPathName := Value;
tmpFileList := TStringList.Create();
fileListOfFolder(FPathName, tmpFileList);
SetLength(FNameArray, 0);
for i := 0 to tmpFileList.Count - 1 do
if ((ExtractFileExt(tmpFileList[i]) = '.mp3') or
(ExtractFileExt(tmpFileList[i]) = '.mp3')) then
begin
SetLength(FNameArray, Length(FNameArray) + 1);
FNameArray[High(FNameArray)] := ChangeFileExt(ExtractFileName(tmpFileList[i]),'');
end;
tmpFileList.Free;
end;
{$else}
// ---------------------------------------------------------------------------
// - For Win
// ---------------------------------------------------------------------------
constructor TSoundManager.Create(aPathFileName: String);
begin
PathName := aPathFileName;
end;
destructor TSoundManager.Destroy;
var
i: Integer;
begin
Stop();
for i := 0 to Length(FMemoryStreamArray) - 1 do
FMemoryStreamArray[i].Free;
inherited;
end;
procedure TSoundManager.Stop();
begin
PlaySound(nil,0, SND_PURGE);
end;
procedure TSoundManager.Play(aItemName: String);
var
i: Integer;
begin
Stop();
for i := 0 to Length(FNameArray) - 1 do
if FNameArray[i] = Trim(aItemName) then
PlaySound(FMemoryStreamArray[i].Memory,
0,
SND_MEMORY or SND_ASYNC);
end;
procedure TSoundManager.setPathName(const Value: String);
var
// tmpPathName: String;
tmpFileList: TStringList;
i: Integer;
tmpIndex: Integer;
tmpPathFileName: String;
begin
FPathName := Value;
// tmpPathName := Value;
tmpFileList := TStringList.Create();
fileListOfFolder(FPathName, tmpFileList);
SetLength(FMemoryStreamArray, 0);
SetLength(FNameArray , 0);
for i := 0 to tmpFileList.Count - 1 do
if ((ExtractFileExt(tmpFileList[i]) = '.wav') or
(ExtractFileExt(tmpFileList[i]) = '.WAV')) then
begin
SetLength(FMemoryStreamArray, Length(FMemoryStreamArray) + 1);
SetLength(FNameArray , Length(FNameArray) + 1);
tmpIndex := Length(FMemoryStreamArray) - 1;
FMemoryStreamArray[tmpIndex] := TMemoryStream.Create();
tmpPathFileName := FPathName + tmpFileList[i];
FMemoryStreamArray[tmpIndex].LoadFromFile(tmpPathFileName);
FNameArray[tmpIndex] := ChangeFileExt(ExtractFileName(tmpFileList[i]),'');
end;
tmpFileList.Free;
end;
procedure TSoundManager.Init;
begin
SetLength(FMemoryStreamArray, 0);
end;
{$ENDIF}
end.
17日目 サウンドマネージャー
コメントをどうぞ