/// <summary> /// Parse an E-AC-3 decoder to a renderer. /// </summary> public EnhancedAC3Renderer(EnhancedAC3Decoder stream) : base(stream) { // Object-based rendering if (HasObjects = stream.Extensions.HasObjects) { ObjectAudioMetadata oamd = stream.Extensions.OAMD; JointObjectCoding joc = stream.Extensions.JOC; DynamicObjects = joc.ObjectCount; finalResult = new float[joc.ObjectCount][]; applier = new JointObjectCodingApplier(joc.ObjectCount, stream.FrameSize); SetupObjects(oamd.ObjectCount); } // Channel-based rendering else { ReferenceChannel[] channels = stream.GetChannels(); for (int channel = 0; channel < channels.Length; ++channel) { Source source = new StreamMasterSource(reader, channel) { Position = channelPositions[(int)channels[channel]] * Listener.EnvironmentSize }; objects.Add(source); } finalResult = new float[channels.Length][]; FinishSetup(channels.Length); } }
/// <summary> /// Set up the renderer for a number of standard channels. /// </summary> protected void SetupChannels(int count) { ReferenceChannel[] matrix = ChannelPrototype.GetStandardMatrix(count); for (int channel = 0; channel < count; ++channel) { Source source = new StreamMasterSource(reader, channel) { Position = channelPositions[(int)matrix[channel]] * Listener.EnvironmentSize }; objects.Add(source); } FinishSetup(count); }