public MonoCaptureStream(WaveStream stream, MonoTransform strat = MonoTransform.Average) { this.stream = stream; if (stream.WaveFormat.BitsPerSample != 16) { throw new ArgumentException("Only works on 16 bit streams"); } if (stream.WaveFormat.Channels != 2) { throw new ArgumentException("Only works on 2 channel streams"); } this.MonoTransform = strat; this.WaveFormat = new WaveFormat(stream.WaveFormat.SampleRate, stream.WaveFormat.BitsPerSample, 1); }
static SystemXsltExecutable() { if (CLR.IsMono) { monoTransform = (MonoTransform)Delegate.CreateDelegate(typeof(MonoTransform), typeof(XslCompiledTransform).GetMethod("Transform", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(XPathNavigator), typeof(XsltArgumentList), typeof(XmlWriter), typeof(XmlResolver) }, null)); } else { commandField = typeof(XslCompiledTransform).GetField("command", BindingFlags.Instance | BindingFlags.NonPublic); ParameterExpression commandParam = Expression.Parameter(typeof(object), "instance"); ParameterExpression inputParam = Expression.Parameter(typeof(IXPathNavigable), "input"); ParameterExpression resolverParam = Expression.Parameter(typeof(XmlResolver), "resolver"); ParameterExpression argumentsParam = Expression.Parameter(typeof(XsltArgumentList), "arguments"); ParameterExpression writerParam = Expression.Parameter(typeof(XmlWriter), "writer"); MethodInfo executeMethod = commandField.FieldType.GetMethod("Execute", BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(IXPathNavigable), typeof(XmlResolver), typeof(XsltArgumentList), typeof(XmlWriter) }, null); MethodCallExpression executeMethodExpr = Expression.Call(Expression.Convert(commandParam, commandField.FieldType), executeMethod, inputParam, resolverParam, argumentsParam, writerParam); net20Transform = Expression.Lambda <Net20Transform>(executeMethodExpr, commandParam, inputParam, resolverParam, argumentsParam, writerParam).Compile(); } }
static SystemXsltExecutable() { if (CLR.IsMono) { monoTransform = (MonoTransform)Delegate.CreateDelegate(typeof(MonoTransform), typeof(XslCompiledTransform).GetMethod("Transform", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(XPathNavigator), typeof(XsltArgumentList), typeof(XmlWriter), typeof(XmlResolver) }, null)); } else { commandField = typeof(XslCompiledTransform).GetField("command", BindingFlags.Instance | BindingFlags.NonPublic); ParameterExpression commandParam = Expression.Parameter(typeof(object), "instance"); ParameterExpression inputParam = Expression.Parameter(typeof(IXPathNavigable), "input"); ParameterExpression resolverParam = Expression.Parameter(typeof(XmlResolver), "resolver"); ParameterExpression argumentsParam = Expression.Parameter(typeof(XsltArgumentList), "arguments"); ParameterExpression writerParam = Expression.Parameter(typeof(XmlWriter), "writer"); MethodInfo executeMethod = commandField.FieldType.GetMethod("Execute", BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(IXPathNavigable), typeof(XmlResolver), typeof(XsltArgumentList), typeof(XmlWriter) }, null); MethodCallExpression executeMethodExpr = Expression.Call(Expression.Convert(commandParam, commandField.FieldType), executeMethod, inputParam, resolverParam, argumentsParam, writerParam); net20Transform = Expression.Lambda<Net20Transform>(executeMethodExpr, commandParam, inputParam, resolverParam, argumentsParam, writerParam).Compile(); } }