/// <summary> /// Metadataを読み取って以前と同じ曲名であれば、新たなファイルを作成する. /// </summary> private bool readMetadata_CheckNewSong(byte b, string destPath) { if (_metadataLength > 0) { _metadataBytes.Add(b); _metadataLength--; return(false); } else { _phase = StreamState.WriteStream; var metadataHeader = Encoding.UTF8.GetString(_metadataBytes.ToArray()); if (string.IsNullOrEmpty(metadataHeader)) //(1)同じ曲で_metadataLengthが0(_metadataBytesがnull)の場合 { return(true); } if (metadataHeader.Equals(_oldMetadataHeader)) //(2)同じ曲名でも_metadataLength>0の場合もたまにある { _metadataBytes.Clear(); //次にメタデータがあった場合のため空にする return(true); } if (_byteOut != null)//(3)違う曲名の場合 { _byteOut.Flush(); _byteOut.Close(); } //(3)違う曲名の場合と(4)check1stmetadataの場合 string ext = getExt(_stationHeaders["Content-Type"]); _byteOut = createNewFile(destPath, getFileName(metadataHeader), ext); SongTitleEventArgs ex = new SongTitleEventArgs(); ex.SongTitle = getFileName(metadataHeader); songTitleEvent(this, ex); _oldMetadataHeader = metadataHeader; _metadataBytes.Clear(); return(true); } }
/// <summary> /// メタデータがある放送局か否かでファイルを曲名で分割するか否か対応を分ける。 /// </summary> private bool check1stMetadata(byte b, string destPath) { if (_noMeta) { if (_metadataLength > 0) { Exception e = new Exception("There is MetadataHeader."); throw e; } _phase = StreamState.WriteStream; string ext = getExt(_stationHeaders["Content-Type"]); _byteOut = createNewFile(destPath, _stationHeaders["icy-name"], ext); SongTitleEventArgs ex = new SongTitleEventArgs(); ex.SongTitle = _stationHeaders["icy-name"]; songTitleEvent(this, ex); return(true); } return(readMetadata_CheckNewSong(b, destPath)); }