/// <summary> /// 全曲が表示順に並んでいる再生リストap.PcmDataListForPlayを作成。 /// </summary> public void CreateAllTracksPlayList() { m_pcmDataListForPlay = new PcmDataList(); for (int i = 0; i < m_pcmDataListForDisp.Count(); ++i) { var pcmData = new PcmData(); pcmData.CopyFrom(m_pcmDataListForDisp.At(i)); m_pcmDataListForPlay.Add(pcmData); } }
/// <summary> /// 1曲再生のプレイリストをap.PcmDataListForPlayに作成。 /// </summary> public void CreateOneTrackPlayList(int wavDataId) { var pcmData = new PcmData(); pcmData.CopyFrom(m_pcmDataListForDisp.FindById(wavDataId)); pcmData.GroupId = 0; m_pcmDataListForPlay = new PcmDataList(); m_pcmDataListForPlay.Add(pcmData); }
/// <summary> /// シャッフルした再生リストap.PcmDataListForPlayを作成する /// </summary> public void CreateShuffledPlayList() { // 適当にシャッフルされた番号が入っている配列pcmDataIdxArrayを作成。 var pcmDataIdxArray = new int[PcmDataListForDisp.Count()]; for (int i = 0; i < pcmDataIdxArray.Length; ++i) { pcmDataIdxArray[i] = i; } var gen = new RNGCryptoServiceProvider(); int N = pcmDataIdxArray.Length; for (int i = 0; i < N * 100; ++i) { var a = GetRandomNumber(gen, N); var b = GetRandomNumber(gen, N); if (a == b) { // 入れ替え元と入れ替え先が同じ。あんまり意味ないのでスキップする。 continue; } // a番目とb番目を入れ替える var tmp = pcmDataIdxArray[a]; pcmDataIdxArray[a] = pcmDataIdxArray[b]; pcmDataIdxArray[b] = tmp; } // ap.PcmDataListForPlayを作成。 m_pcmDataListForPlay = new PcmDataList(); for (int i = 0; i < pcmDataIdxArray.Length; ++i) { var idx = pcmDataIdxArray[i]; // 再生順番号Ordinalを付け直す // GroupIdをバラバラの番号にする(1曲ずつ読み込む) var pcmData = new PcmData(); pcmData.CopyFrom(m_pcmDataListForDisp.At(idx)); pcmData.Ordinal = i; pcmData.GroupId = i; m_pcmDataListForPlay.Add(pcmData); } }