}//Read /// <summary> /// ファイルから Wave データを読み出し。 /// </summary> /// <param name="filename">ファイル名</param> /// <param name="length">読み込む長さ</param> /// <param name="skip">ファイルの先頭を読み飛ばす長さ</param> /// <param name="threshold">閾値。この値以下の音は無音とみなす</param> /// <param name="relative">閾値にピーク値からみた相対値を使う</param> /// <returns>読み出したデータ</returns> static WaveData Read( string filename, int skip, int length, double threshold ,bool relative) { WaveReader reader = null; FormatHeader header; double[] l; double[] r; using(reader = new WaveReader(filename)) { header = reader.Header; reader.Skip(0); reader.Read(reader.Length, out l, out r); } if(relative) threshold *= Math.Max(GetPeekValue(l), GetPeekValue(r)); skip += Math.Min(GetSilentLength(l, threshold), GetSilentLength(r, threshold)); if(skip < 0 || skip + length >= l.Length) skip = 0; return new WaveTime(header, CopyArray(l, skip, length), CopyArray(r, skip, length)); }//Read
}//Read /// <summary> /// ファイルから Wave データを読み出し。 /// </summary> /// <param name="filename">ファイル名</param> /// <param name="length">読み込む長さ</param> /// <param name="skip">ファイルの先頭を読み飛ばす長さ</param> /// <param name="threshold">閾値。この値以下の音は無音とみなす</param> /// <param name="relative">閾値にピーク値からみた相対値を使う</param> /// <param name="type">リファレンスのタイプ</param> /// <returns>読み出したデータ</returns> static WaveData Read( string filename, int skip, int length, double threshold ,bool relative, ReferenceType type) { WaveReader reader = null; FormatHeader header; double[] l; double[] r; using(reader = new WaveReader(filename)) { header = reader.Header; // R ch を使いたいのに wave ファイルがモノラルの場合 if(type != ReferenceType.Left && reader.Header.ch == 1) { return new WaveTime(); } reader.Skip(0); reader.Read(reader.Length, out l, out r); } if(type == ReferenceType.Left) { if(relative) threshold *= GetPeekValue(l); skip += GetSilentLength(l, threshold); } else if(type == ReferenceType.Right) { if(relative) threshold *= GetPeekValue(r); skip += GetSilentLength(r, threshold); } else { if(relative) threshold *= Math.Max(GetPeekValue(l), GetPeekValue(r)); skip += Math.Min(GetSilentLength(l, threshold), GetSilentLength(r, threshold)); } if(skip < 0 || skip + length >= l.Length) skip = 0; return new WaveTime(header, CopyArray(l, skip, length), CopyArray(r, skip, length)); }//Read
/// <summary> /// ファイルから Wave データを読み出し。 /// </summary> /// <param name="filename">ファイル名</param> /// <param name="length">読み込む長さ</param> /// <param name="skip">ファイルの先頭を読み飛ばす長さ</param> /// <returns>読み出したデータ</returns> static WaveData Read(string filename, int skip, int length) { WaveReader reader = null; FormatHeader header; double[] l; double[] r; using(reader = new WaveReader(filename)) { header = reader.Header; reader.Skip(skip); reader.Read((uint)length, out l, out r); } return new WaveTime(header, l, r); }//Read