public override Stereo <float> this[float offset] { get { var ps = this.MakeInterpolationParameters(offset); var former = ps.Item1; var latter = ps.Item2; var offFrac = ps.Item3; return(Stereo.Create(this.Interpolate(former.Left, latter.Left, offFrac), this.Interpolate(former.Right, latter.Right, offFrac))); } }
private static IEnumerable <Stereo <float> > MakeStereo(IEnumerable <float> samples) { float?left = null; foreach (var sample in samples) { if (left.HasValue) { var right = sample; yield return(Stereo.Create(left.Value, right)); left = null; } else { left = sample; } } }
public Node <Stereo <float> > AsStereoFloat() { if (this.ValueType == typeof(Stereo <float>)) { return((Node <Stereo <float> >) this); } else if (this.ValueType == typeof(Stereo <int>)) { return(Node.Create(((Node <Stereo <int> >) this).UseAsStream().Select(v => Stereo.Create((float)v.Left, (float)v.Right)), false, this)); } else if (this.ValueType == typeof(float)) { return(((Node <float>) this).AsStereo()); } else if (this.ValueType == typeof(int)) { return(((Node <int>) this).AsStereo().AsStereoFloat()); } throw new InvalidCastException($"cannot convert node of type {this.ValueType} into node of float"); }