/// <summary> /// WAVファイルのヘッダ部分を読み込む。 /// </summary> /// <returns>読めたらtrue</returns> private bool ReadWavFileHeader(string path) { bool result = false; var pd = new PcmData(); var wavR = new WavReader(); using (BinaryReader br = new BinaryReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))) { if (wavR.ReadHeader(br)) { // WAVヘッダ読み込み成功。PcmDataを作って再生リストに足す。 pd.SetFormat(wavR.NumChannels, wavR.BitsPerSample, wavR.ValidBitsPerSample, (int)wavR.SampleRate, wavR.SampleValueRepresentationType, wavR.NumFrames); if (wavR.SampleDataType == WavReader.DataType.DoP) { pd.SampleDataType = PcmData.DataType.DoP; } if ("RIFFINFO_INAM".Equals(wavR.Title) && "RIFFINFO_IART".Equals(wavR.ArtistName)) { // Issue 79 workaround } else { if (wavR.Title != null) { pd.DisplayName = wavR.Title; } if (wavR.AlbumName != null) { pd.AlbumTitle = wavR.AlbumName; } if (wavR.ArtistName != null) { pd.ArtistName = wavR.ArtistName; } if (wavR.ComposerName != null) { pd.ComposerName = wavR.ComposerName; } } pd.SetPicture(wavR.PictureBytes, wavR.PictureData); result = CheckAddPcmData(path, pd, true); } else { LoadErrorMessageAdd(string.Format(CultureInfo.InvariantCulture, Properties.Resources.ReadFileFailed + ": {1} : {2}{3}", "WAV", path, wavR.ErrorReason, Environment.NewLine)); } } return(result); }
public string ReadHeader(BinaryReader br, out PcmData pcmData) { pcmData = new PcmData(); ResultType result = ReadFormChunkHeader(br); if (result != ResultType.Success) { mSB.Append(string.Format("Error: Form Chunkチャンクの読み込み失敗。{0}\r\n", result)); return(mSB.ToString()); } if (mIsAIFC) { // AIFCの場合、FVERチャンクが来る(required) result = ReadFverChunk(br); if (ResultType.Success != result) { mSB.Append(string.Format("Error: AIFC FVERチャンクのエラー。{0}\r\n", result)); return(mSB.ToString()); } } result = ReadCommonChunk(br); if (ResultType.Success != result) { mSB.Append(string.Format("Error: COMMチャンクのエラー。{0}\r\n", result)); return(mSB.ToString()); } result = ReadSoundDataChunk(br); if (ResultType.Success != result) { mSB.Append(string.Format("Error: SSNDチャンクのエラー。{0}\r\n", result)); return(mSB.ToString()); } if (16 != BitsPerSample && 24 != BitsPerSample) { mSB.Append(string.Format("Info: 量子化ビット数がエキゾチックです。{0} bit\r\n", BitsPerSample)); return(mSB.ToString()); } pcmData.SetFormat( NumChannels, BitsPerSample, BitsPerSample, SampleRate, PcmData.ValueRepresentationType.SInt, NumFrames); result = ReadID3Chunk(br); switch (result) { case ResultType.NotFoundID3Header: // ID3ヘッダーが無い。 break; case ResultType.Success: // ID3読み込み成功 pcmData.DisplayName = TitleName; pcmData.AlbumTitle = AlbumName; pcmData.ArtistName = ArtistName; pcmData.ComposerName = Composer; if (0 < PictureBytes) { pcmData.SetPicture(PictureBytes, PictureData); } mSB.Append(string.Format(" TitleName={0}\r\n", TitleName)); mSB.Append(string.Format(" AlbumName={0}\r\n", AlbumName)); mSB.Append(string.Format(" ArtistName={0}\r\n", ArtistName)); mSB.Append(string.Format(" Composer={0}\r\n", Composer)); mSB.Append(string.Format(" ID3チャンク読み込み終了。\r\n")); break; default: mSB.Append(string.Format("Error: ID3チャンクのエラー。{0}\r\n", result)); return(mSB.ToString()); } mSB.Append("正常終了。\r\n"); return(mSB.ToString()); }