コード例 #1
0
ファイル: MetaFlac.cs プロジェクト: ayutet/FlacRename
        /// <summary>
        /// FLAC用コメントデータ取得
        /// </summary>
        /// <param name="Indata"></param>
        /// <returns>Boolean</returns>
        private bool GetFlacCommentData(BinaryReader InData)
        {
            //     4 : VORBIS_COMMENTのメタ内容
            //         ベンダコメントサイズ:4byte
            //         ベンダコメント:上記4byteで指定された全体サイズ
            //           コメントの個数:4byte (この個数分繰り返し)
            //           コメントサイズ:4byte
            //           コメント:上記4byteで指定されたサイズ
            //            META_Comment_ByteSize

            byte[] LE_DataSize;
            string CommentData, CommentDataUpper;
            int    LoopCnt;

            // コメント全体サイズは読み捨てる
            InData.ReadBytes(META_ByteSize);

            // この4バイトがリトルエンディアンでサイズ持ってるので反転して読み捨て
            LE_DataSize = InData.ReadBytes(META_Comment_ByteSize);
            Array.Reverse(LE_DataSize);
            InData.ReadBytes(Convert.ToInt32(BitConverter.ToString(LE_DataSize).Replace("-", ""), 16)); // 読み捨て

            // コメントの個数4バイト(リトルエンディアン)
            LE_DataSize = InData.ReadBytes(META_Comment_Count);
            Array.Reverse(LE_DataSize);
            LoopCnt = Convert.ToInt32(BitConverter.ToString(LE_DataSize).Replace("-", ""), 16);

            // コメントの個数分ループする。
            for (int i = 0; i < LoopCnt; i++)
            {
                // 次のコメントデータサイズ4バイト(リトルエンディアン)
                LE_DataSize = InData.ReadBytes(META_Comment_ByteSize);
                Array.Reverse(LE_DataSize);
                CommentData      = System.Text.Encoding.UTF8.GetString(InData.ReadBytes(Convert.ToInt32(BitConverter.ToString(LE_DataSize).Replace("-", ""), 16)));
                CommentDataUpper = CommentData.ToUpper();

                // 欲しい情報が格納されているか判断してデータを格納
                if (CommentDataUpper.IndexOf("ALBUM=") == 0)
                {
                    Music_Album_Title = CommentData.Substring(6);
                }
                if (CommentDataUpper.IndexOf("TITLE=") == 0)
                {
                    Music_Title = CommentData.Substring(6);
                }
                if (CommentDataUpper.IndexOf("ARTIST=") == 0)
                {
                    Music_Artist = CommentData.Substring(7);
                }
                if (CommentDataUpper.IndexOf("ALBUMARTIST=") == 0)
                {
                    Music_Album_Artist = CommentData.Substring(12);
                }
            }
            return(true);
        }