/// <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);
            }
        }