示例#1
0
 public Mono2StereoFilter(PullSoundStreamBase input)
     : base(input)
 {
     if (input.Chans != 1)
     {
         throw new ArgumentException("Input stream's channel num MUST be 1");
     }
 }
示例#2
0
 public override void Dispose()
 {
     if (Input != null)
     {
         Input.Dispose();
     }
     Input = null;
     GC.SuppressFinalize(this);
 }
示例#3
0
        /// <summary>
        /// CUEシートのTrack情報からストリームを生成
        /// </summary>
        /// <param name="track">CUEのTrack情報</param>
        /// <param name="preScan">preScanを行うかどうか</param>
        /// <returns></returns>
        private static PullSoundStreamBase CreateStreamCue(CD.Track track, bool preScan)
        {
            String streamFullPath = System.IO.Path.IsPathRooted(track.file_name_CUESheet)
                ? track.file_name_CUESheet
                : Path.GetDirectoryName(track.file_name) + Path.DirectorySeparatorChar + track.file_name_CUESheet;

            PullSoundStreamBase self = CreateFileStreamPrimitive(streamFullPath, preScan);

            self = ApplyTrackRange(self, track);
            return(self);
        }
示例#4
0
 public RangeFilter(PullSoundStreamBase input, ulong offset, ulong length)
     : base(input)
 {
     if (offset + length > Input.LengthSample)
     {
         throw new ArgumentOutOfRangeException("offset / length out of range");
     }
     Offset         = offset;
     ActualLength   = length;
     PositionSample = 0; // 先頭にシーク
 }
示例#5
0
        private static PullSoundStreamBase ApplyTrackRange(PullSoundStreamBase self, CD.Track track)
        {
            var RangeOffset = GetFrame2Sample(self, track.Start);
            var RangeLength = track.End > track.Start
                ? GetFrame2Sample(self, track.End - track.Start)
                : self.LengthSample - RangeOffset;

            var gain = track.getTagValue("ALBUM GAIN");

            if (gain != null)
            {
                self = new ReplayGainOverrideFilter(self, Util.Util.parseDouble(gain.ToString()));
            }
            self = new RangeFilter(self, RangeOffset, RangeLength);
            return(self);
        }
示例#6
0
 /// <summary>
 /// CDのフレームからサンプル数に変換する
 /// </summary>
 /// <param name="frames">フレーム数</param>
 /// <returns>サンプル数</returns>
 private static ulong GetFrame2Sample(PullSoundStreamBase llStream, int frames)
 {
     return((ulong)frames * (llStream.Freq / 75));
 }
示例#7
0
 public ReplayGainOverrideFilter(PullSoundStreamBase input, double gain)
     : base(input)
 {
     this.OverrideGain = gain;
 }
示例#8
0
 public AbstractFilter(PullSoundStreamBase input)
 {
     this.Input = input;
 }
示例#9
0
 public FreqConvertFilter(PullSoundStreamBase input)
     : base(input)
 {
 }