/// <summary> /// Wave ファイルを開く。 /// </summary> /// <param name="reader">Wave ファイルを格納したストリーム</param> public void Open(BinaryWriter writer, FormatHeader header) { if (this.writer != null) { this.writer.Close(); } this.writer = writer; this.header = header; WaveWriter.WriteHeader(writer, header, 0); // データ長は仮に0を入れておく。 } //Open
} //Open /// <summary> /// Wave ファイルを閉じる。 /// </summary> public void Close() { if (writer == null) { return; } WaveWriter.ModifyHeader(this.writer, (int)this.dataLength, this.header.blockSize); writer.Close(); writer = null; }
} //Write /// <summary> /// データの書き込み。 /// </summary> /// <param name="length">書き込むサンプル数。</param> /// <param name="l">左チャネルのデータ。</param> /// <param name="r">右チャネルのデータ。</param> /// <returns>実際に書き込んだサンプル数。</returns> public int Write(short[] l, short[] r) { if (this.writer == null) { return(0); } uint length = (uint)l.Length; int i = WaveWriter.Write(this.writer, this.header, l, r); this.dataLength += (uint)i; return(i); } //Write
/// <summary> /// Wave の生データをそのまま書き込む。 /// </summary> /// <param name="data">書き込むデータ</param> /// <param name="length">書き込む長さ(バイト数)</param> public void WriteRawData(byte[] data, int length) { WaveWriter.WriteRawData(this.writer, data, length); this.dataLength += (uint)(length / this.header.blockSize); }
/// <summary> /// データ wave の書き込み。 /// </summary> /// <param name="filename">ファイル名</param> public void WirteData(string filename) { using(WaveWriter writer = new WaveWriter(filename, this.data.Header)) { writer.Write(this.data.TimeL, this.data.TimeR); } }