フォルダ内の音楽ファイルの連続再生について
Siv3Dはじめました  2017/12/13(Wed) 17:09
Siv3Dの入門者です.

https://qiita.com/Reputeless/items/112dbac6bafe837ea3c7
https://github.com/Siv3D/Reference-JP/wiki/%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0

上記二つのチュートリアルをもとに,フォルダをダイアログで選択し,フォルダ内のmp3を連続で再生するプレイヤーを作成したいと考えています.

フォルダ内のファイルへのパスは
const auto folder = Dialog::GetFolder()
Array<FilePath> contents = FileSystem::DirectoryContents(folder.value());
で取得出来たのですが,その音楽ファイルをロードする方法が分かりません.

サンプル内では,
m_sound = Dialog::OpenSound();
でダイアログから直接音楽ファイルをロードしていましたが,取得したパスから音楽ファイルをロードする方法はありますでしょうか?
Sound m_sound(contents[0]);
という形であればロードできるのですが,
Sound m_sound;
のように,既に宣言されたm_soundに音楽ファイルを改めてロードしたいのです.
m_sound(contents[0]);
で出来るのかと思いやってみましたが,エラーが出てしまいました.

煩雑な質問で申し訳ありませんが,よろしくお願いします.

-----追記(2017/12/14)-----
現状,メインループ前に以下のような形で楽曲をロードしています.
---------------------------------------------------------------------------------------
const auto folder = Dialog::GetFolder();
Array<FilePath> contents = FileSystem::DirectoryContents(folder.value());

Sound sound0(contents[0]);
Sound sound1(contents[1]);
Sound sound2(contents[2]);
Sound sound3(contents[3]);

Sound m_sound[4];

m_sound[0] = sound0;
m_sound[1] = sound1;
m_sound[2] = sound2;
m_sound[3] = sound3;
----------------------------------------------------------------------------------------
メインループ内でm_sound[i]を操作しながら再生/一時停止などをしている状態です.
あまりにも愚直な形なので,なんとか綺麗にしたいです.
上手い方法はありませんでしょうか?
よろしくお願いします.
記事編集
Reputeless  2017/12/15(Fri) 23:26
sound = Sound(path); で代入できます。

複数楽曲のループ再生はこのような感じでどうでしょう。

Array<Sound> sounds;
sounds.push_back(Sound(L"0.mp3"));
sounds.push_back(Sound(L"1.mp3"));
sounds.push_back(Sound(L"2.mp3"));
sounds.push_back(Sound(L"3.mp3"));

const size_t num_sounds = sounds.size();
size_t index = 0;

sounds[index].play();

while (System::Update())
{
if (!sounds[index].isPlaying())
{
++index %= num_sounds;
sounds[index].play();
}
}
編集
Siv3Dはじめました  2017/12/17(Sun) 15:12
回答ありがとうございます.
代入方法が分かったので,もう少し綺麗に書けそうです.

複数楽曲のループについて,もう一つ質問です.
sounds.push_back(Sound(L"0.mp3"));
は,sounds[]の頭(0番目の要素)から音楽データを積み上げていくように格納する処理と見て良いのでしょうか?
リファレンスを確認したのですが,見つかりませんでしたので….

たびたびの質問で申し訳ありませんが,よろしくお願いします.
編集
Reputeless  2017/12/17(Sun) 19:52
Array は C++ 標準ライブラリの std::vector と同じ動作です。
編集
件名
Re: フォルダ内の音楽ファイルの連続再生について
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -