<?xml version="1.0"?>
<doc>
    <assembly>
        <name>SoundFlow</name>
    </assembly>
    <members>
        <member name="T:SoundFlow.Abstracts.AudioAnalyzer">
            <summary>
            Base class for audio analyzer components that extract data for visualizers.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioAnalyzer.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.AudioAnalyzer.Format">
            <summary>
            Gets the audio format of the analyzer.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioAnalyzer.Name">
            <summary>
            Gets or sets the name of the analyzer.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioAnalyzer.Enabled">
            <summary>
            Whether the analyzer is enabled or not.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioAnalyzer.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Interfaces.IVisualizer)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> class.
            </summary>
            <param name="format">The audio format.</param>
            <param name="visualizer">The visualizer to send data to.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioAnalyzer.Process(System.ReadOnlySpan{System.Single},System.Int32)">
            <summary>
            Processes the audio data and sends it to the visualizer.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioAnalyzer.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <summary>
            Analyzes the audio data.
            </summary>
            <param name="buffer">The audio buffer.</param>
            <param name="channels">The number of channels in the buffer.</param>
        </member>
        <member name="T:SoundFlow.Abstracts.AudioProcessCallback">
            <summary>
            This event is raised when samples are processed by Input or Output components.
            </summary>
        </member>
        <member name="T:SoundFlow.Abstracts.AudioEngine">
            <summary>
            The base class for audio engines. An engine acts as a context manager for audio devices
            and provides facilities for decoding and encoding audio via a pluggable codec system.
            </summary>
        </member>
        <member name="T:SoundFlow.Abstracts.AudioEngine.CodecRegistration">
            <summary>
            Internal wrapper to store a factory along with its mutable priority and registration order.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CodecRegistration.#ctor(SoundFlow.Interfaces.ICodecFactory,System.Int64)">
            <summary>
            Internal wrapper to store a factory along with its mutable priority and registration order.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.AudioEngine"/> class.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioEngine.PlaybackDevices">
            <summary>
            Gets an array of available playback devices.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioEngine.CaptureDevices">
            <summary>
            Gets an array of available capture devices.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioEngine.MidiInputDevices">
            <summary>
            Gets an array of available MIDI input devices.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioEngine.MidiOutputDevices">
            <summary>
            Gets an array of available MIDI output devices.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioEngine.MidiManager">
            <summary>
            Gets the central manager for all MIDI devices and routing.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CleanupBackend">
            <summary>
            Cleans up the audio backend context.
            </summary>
        </member>
        <member name="E:SoundFlow.Abstracts.AudioEngine.DeviceStarted">
            <summary>
            Occurs when an audio device starts processing audio.
            This can be used by external components (like a MIDI backend) to send synchronization messages (e.g., MIDI Start).
            </summary>
        </member>
        <member name="E:SoundFlow.Abstracts.AudioEngine.DeviceStopped">
            <summary>
            Occurs when an audio device stops processing audio.
            This can be used by external components to send synchronization messages (e.g., MIDI Stop).
            </summary>
        </member>
        <member name="E:SoundFlow.Abstracts.AudioEngine.AudioFramesRendered">
            <summary>
            Occurs after a block of audio has been prepared for rendering by a playback device.
            This event provides a sample-accurate clock tick for driving master synchronization (e.g., MIDI Clock).
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.RaiseDeviceStarted(SoundFlow.Abstracts.Devices.AudioDevice)">
            <summary>
            For internal use by audio device implementations. Raises the <see cref="E:SoundFlow.Abstracts.AudioEngine.DeviceStarted"/> event.
            </summary>
            <param name="device">The device that has started.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.RaiseDeviceStopped(SoundFlow.Abstracts.Devices.AudioDevice)">
            <summary>
            For internal use by audio device implementations. Raises the <see cref="E:SoundFlow.Abstracts.AudioEngine.DeviceStopped"/> event.
            </summary>
            <param name="device">The device that has stopped.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.RaiseAudioFramesRendered(SoundFlow.Structs.Events.AudioFramesRenderedEventArgs)">
            <summary>
            For internal use by audio device implementations. Raises the <see cref="E:SoundFlow.Abstracts.AudioEngine.AudioFramesRendered"/> event
            using a reusable EventArgs object to avoid allocation overhead in the hot path.
            </summary>
            <param name="args">The cached event arguments object.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.UseMidiBackend(SoundFlow.Interfaces.IMidiBackend)">
            <summary>
            Configures the engine to use a specific MIDI backend implementation. This method must be called
            before any MIDI operations are performed.
            </summary>
            <param name="midiBackend">The MIDI backend instance to use.</param>
            <exception cref="T:System.InvalidOperationException">Thrown if a MIDI backend has already been configured.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.SoloComponent(SoundFlow.Abstracts.SoundComponent)">
            <summary>
            Solos the specified sound component, muting all other components within this engine's devices.
            </summary>
            <param name="component">The component to solo.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.UnsoloComponent(SoundFlow.Abstracts.SoundComponent)">
            <summary>
            Unsolos the specified sound component.
            </summary>
            <param name="component">The component to unsolo.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.GetSoloedComponent">
            <summary>
            Gets the currently soloed component, if any.
            </summary>
            <returns>The soloed SoundComponent or null.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.RegisterCodecFactory(SoundFlow.Interfaces.ICodecFactory)">
            <summary>
            Registers a codec factory with the audio engine using its default priority.
            </summary>
            <param name="factory">The codec factory to register.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.UnregisterCodecFactory(System.String)">
            <summary>
            Unregisters a codec factory from the engine using its unique ID.
            </summary>
            <param name="factoryId">The unique ID of the factory to unregister.</param>
            <returns><c>true</c> if the factory was found and removed; otherwise, <c>false</c>.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.SetCodecPriority(System.String,System.Int32)">
            <summary>
            Sets a new priority for a registered codec factory, overriding its default priority.
            This allows for runtime prioritization of codecs.
            </summary>
            <param name="factoryId">The unique ID of the factory to prioritize.</param>
            <param name="newPriority">The new priority value. Higher numbers are tried first.</param>
            <returns><c>true</c> if the factory was found and its priority was updated; otherwise, <c>false</c>.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.GetRegisteredCodecs(System.String)">
            <summary>
            Gets a read-only list of all registered codec factories for a specific format,
            ordered from highest to lowest priority.
            </summary>
            <param name="formatId">The format identifier (e.g., "flac").</param>
            <returns>A read-only list of factories, or an empty list if none are registered.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CreateEncoder(System.IO.Stream,System.String,SoundFlow.Structs.AudioFormat)">
            <summary>
            Constructs a sound encoder for the specified format. It queries registered codec factories
            based on priority to find a suitable implementation.
            </summary>
            <param name="stream">The stream to write encoded audio to.</param>
            <param name="formatId">The string identifier for the desired audio format (e.g., "wav", "flac").</param>
            <param name="format">The audio format of the source PCM data.</param>
            <returns>An instance of a sound encoder.</returns>
            <exception cref="T:System.NotSupportedException">Thrown if no registered and working codec factory is found for the specified format.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CreateDecoder(System.IO.Stream,System.String,SoundFlow.Structs.AudioFormat)">
            <summary>
            Constructs a sound decoder for the specified format. It queries registered codec factories
            based on priority to find a suitable implementation.
            </summary>
            <param name="stream">The stream containing the audio data.</param>
            <param name="formatId">The string identifier for the audio format (e.g., "mp3", "flac").</param>
            <param name="format">The audio format containing channels, sample rate, and sample format.</param>
            <returns>An instance of a sound decoder.</returns>
            <exception cref="T:System.NotSupportedException">Thrown if no registered and working codec factory is found for the specified format.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CreateDecoder(System.IO.Stream,SoundFlow.Structs.AudioFormat@,System.Nullable{SoundFlow.Structs.AudioFormat})">
            <summary>
            Constructs a sound decoder by probing the stream with all registered codec factories.
            This method is used when the audio format is not known beforehand. Factories are tried in order of priority.
            </summary>
            <param name="stream">The stream containing the audio data. Must be readable and seekable.</param>
            <param name="detectedFormat">When this method returns, contains the audio format detected by the successful decoder.</param>
            <param name="hintFormat">An optional hint for the desired output audio format. The factory should attempt to produce this format if possible.</param>
            <returns>An instance of a sound decoder.</returns>
            <exception cref="T:System.NotSupportedException">Thrown if no registered codec factory could decode the provided stream.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.InitializePlaybackDevice(System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes and returns a playback device.
            </summary>
            <param name="deviceInfo">The device to initialize. Must be a playback-capable device.</param>
            <param name="format">The desired audio format.</param>
            <param name="config">Optional detailed configuration for the device and its backend.</param>
            <returns>An initialized <see cref="T:SoundFlow.Abstracts.Devices.AudioPlaybackDevice"/>.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.InitializeCaptureDevice(System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes and returns a capture device.
            </summary>
            <param name="deviceInfo">The device to initialize. Must be a capture-capable device.</param>
            <param name="format">The desired audio format.</param>
            <param name="config">Optional detailed configuration for the device and its backend.</param>
            <returns>An initialized <see cref="T:SoundFlow.Abstracts.Devices.AudioCaptureDevice"/>.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.InitializeFullDuplexDevice(System.Nullable{SoundFlow.Structs.DeviceInfo},System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes a high-level full-duplex device for simultaneous input and output.
            This simplifies live effects processing by managing a paired capture and playback device.
            </summary>
            <param name="playbackDeviceInfo">The playback device to use. Use null for the system default.</param>
            <param name="captureDeviceInfo">The capture device to use. Use null for the system default.</param>
            <param name="format">The audio format to use for both devices.</param>
            <param name="config">Optional detailed configuration for the devices.</param>
            <returns>An initialized <see cref="T:SoundFlow.Abstracts.Devices.FullDuplexDevice"/> ready for use.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.InitializeLoopbackDevice(SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes a loopback capture device, allowing for the recording of system audio output.
            </summary>
            <param name="format">The desired audio format for the loopback capture.</param>
            <param name="config">Optional detailed configuration for the device.</param>
            <returns>An initialized <see cref="T:SoundFlow.Abstracts.Devices.AudioCaptureDevice"/> configured for loopback recording.</returns>
            <exception cref="T:System.NotSupportedException">Thrown if a default playback device (required for loopback) cannot be found.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.SwitchDevice(SoundFlow.Abstracts.Devices.AudioPlaybackDevice,SoundFlow.Structs.DeviceInfo,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Switches an active playback device to a new physical device, preserving its audio graph.
            The old device instance will be disposed.
            </summary>
            <param name="oldDevice">The playback device instance to replace.</param>
            <param name="newDeviceInfo">The info for the new physical device to use.</param>
            <param name="config">Optional configuration for the new device.</param>
            <returns>A new, active <see cref="T:SoundFlow.Abstracts.Devices.AudioPlaybackDevice"/> instance.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.SwitchDevice(SoundFlow.Abstracts.Devices.AudioCaptureDevice,SoundFlow.Structs.DeviceInfo,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Switches an active capture device to a new physical device, preserving its event subscribers.
            The old device instance will be disposed.
            </summary>
            <param name="oldDevice">The capture device instance to replace.</param>
            <param name="newDeviceInfo">The info for the new physical device to use.</param>
            <param name="config">Optional configuration for the new device.</param>
            <returns>A new, active <see cref="T:SoundFlow.Abstracts.Devices.AudioCaptureDevice"/> instance.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.SwitchDevice(SoundFlow.Abstracts.Devices.FullDuplexDevice,System.Nullable{SoundFlow.Structs.DeviceInfo},System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Switches the devices used by a full-duplex instance, preserving its state.
            The old duplex device instance will be disposed.
            </summary>
            <param name="oldDevice">The full-duplex device instance to replace.</param>
            <param name="newPlaybackInfo">Info for the new playback device. If null, the existing playback device is used.</param>
            <param name="newCaptureInfo">Info for the new capture device. If null, the existing capture device is used.</param>
            <param name="config">Optional configuration for the new device(s).</param>
            <returns>A new, active <see cref="T:SoundFlow.Abstracts.Devices.FullDuplexDevice"/> instance.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CreateMidiInputDevice(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            For backend implementers only. Creates and returns a MIDI input device.
            Application developers should use the <see cref="P:SoundFlow.Abstracts.AudioEngine.MidiManager"/> for all MIDI operations.
            </summary>
            <param name="deviceInfo">The MIDI device to create.</param>
            <returns>An initialized <see cref="T:SoundFlow.Midi.Devices.MidiInputDevice"/>.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.CreateMidiOutputDevice(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            For backend implementers only. Creates and returns a MIDI output device.
            Application developers should use the <see cref="P:SoundFlow.Abstracts.AudioEngine.MidiManager"/> for all MIDI operations.
            </summary>
            <param name="deviceInfo">The MIDI device to create.</param>
            <returns>An initialized <see cref="T:SoundFlow.Midi.Devices.MidiOutputDevice"/>.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.UpdateDevicesInfo">
            <summary>
            Retrieves the list of available playback and capture devices from the underlying audio backend.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.UpdateAudioDevicesInfo">
            <summary>
            Retrieves the list of available playback and capture devices from the underlying audio backend.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.UpdateMidiDevicesInfo">
            <summary>
            Retrieves the list of available MIDI input and output devices from the underlying MIDI backend.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.AudioEngine.IsDisposed">
            <summary>
            Gets a value indicating whether the audio engine has been disposed.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.Finalize">
            <summary>
            Cleans up resources before the object is garbage collected.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.Dispose(System.Boolean)">
            <summary>
            Disposes of managed and unmanaged resources.
            </summary>
            <param name="disposing">True if called from Dispose(), false if called from finalizer.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.AudioEngine.Dispose">
            <summary>
            Disposes of the audio engine and all associated devices.
            </summary>
        </member>
        <member name="T:SoundFlow.Abstracts.Devices.AudioCaptureDevice">
            <summary>
            Represents a capture (input) audio device.
            </summary>
        </member>
        <member name="E:SoundFlow.Abstracts.Devices.AudioCaptureDevice.OnAudioProcessed">
            <summary>
            Occurs when new audio samples are captured from this device.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioCaptureDevice.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.Devices.AudioCaptureDevice"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The desired audio format.</param>
            <param name="config">The device configuration.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioCaptureDevice.InvokeOnAudioProcessed(System.Span{System.Single})">
            <summary>
            Invokes the <see cref="E:SoundFlow.Abstracts.Devices.AudioCaptureDevice.OnAudioProcessed"/> event with the captured samples.
            This method is intended to be called by the backend implementation.
            </summary>
            <param name="samples">The captured audio samples.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioCaptureDevice.GetEventSubscribers">
            <summary>
            Gets the invocation list of the OnAudioProcessed event. For internal engine use only.
            </summary>
            <returns>An array of delegates subscribed to the event.</returns>
        </member>
        <member name="T:SoundFlow.Abstracts.Devices.AudioDevice">
            <summary>
            Represents an initialized audio device, managed by an <see cref="T:SoundFlow.Abstracts.AudioEngine"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.Engine">
            <summary>
            Gets the parent engine that manages this device.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.Info">
            <summary>
            Gets the informational struct for the physical device.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.Config">
            <summary>
            Gets the configuration struct for the physical device initialization process.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.Capability">
            <summary>
            Gets the capability of this device (e.g., Playback, Record).
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.Format">
            <summary>
            Gets the audio format information (sample rate, channels, etc.) for this device.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.IsRunning">
            <summary>
            Gets a value indicating whether the device is currently running.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioDevice.IsDisposed">
            <summary>
            Gets a value indicating whether this device has been disposed.
            </summary>
        </member>
        <member name="F:SoundFlow.Abstracts.Devices.AudioDevice.OnDisposed">
            <summary>
            Occurs when the audio device is disposed.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioDevice.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.Devices.AudioDevice"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The desired audio format.</param>
            <param name="config">The device configuration.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioDevice.Start">
            <summary>
            Starts the audio device.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioDevice.Stop">
            <summary>
            Stops the audio device.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioDevice.Dispose">
            <summary>
            Releases all resources used by the audio device.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioDevice.OnDisposedHandler">
            <summary>
            Called when the audio device is disposed.
            </summary>
        </member>
        <member name="T:SoundFlow.Abstracts.Devices.AudioPlaybackDevice">
            <summary>
            Represents a playback (output) audio device.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.AudioPlaybackDevice.MasterMixer">
            <summary>
            Gets the master mixer for this device. All audio to be played on this device
            must be routed to this mixer.
            </summary>
        </member>
        <member name="F:SoundFlow.Abstracts.Devices.AudioPlaybackDevice.CachedRenderEventArgs">
            <summary>
            Cached event args object to prevent GC allocations every frame.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.AudioPlaybackDevice.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.Devices.AudioPlaybackDevice"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The desired audio format.</param>
            <param name="config">The device configuration.</param>
        </member>
        <member name="T:SoundFlow.Abstracts.Devices.DeviceConfig">
            <summary>
            Represents configuration settings base for an audio device.
            </summary>
        </member>
        <member name="T:SoundFlow.Abstracts.Devices.FullDuplexDevice">
            <summary>
            A high-level abstraction that manages a paired playback and capture device for
            easy full-duplex (simultaneous input and output) operation.
            Ideal for live effects processing, VoIP, or instrument monitoring.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.FullDuplexDevice.PlaybackDevice">
            <summary>
            Gets the underlying playback device.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.FullDuplexDevice.CaptureDevice">
            <summary>
            Gets the underlying capture device.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.Devices.FullDuplexDevice.MasterMixer">
            <summary>
            Gets the master mixer for the playback device. You can add other components
            (e.g., music players, synthesizers) to this mixer to play them.
            </summary>
        </member>
        <member name="E:SoundFlow.Abstracts.Devices.FullDuplexDevice.OnAudioProcessed">
            <summary>
            Occurs when audio data is processed by the capture device.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.FullDuplexDevice.#ctor(SoundFlow.Abstracts.AudioEngine,System.Nullable{SoundFlow.Structs.DeviceInfo},System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.Devices.FullDuplexDevice"/> class.
            </summary>
            <param name="engine">The audio engine to use.</param>
            <param name="playbackDeviceInfo">The device information for the playback device.</param>
            <param name="captureDeviceInfo">The device information for the capture device.</param>
            <param name="format">The audio format to use.</param>
            <param name="config">The device configuration to use.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.FullDuplexDevice.Start">
            <summary>
            Starts both the capture and playback devices.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.FullDuplexDevice.Stop">
            <summary>
            Stops both the capture and playback devices.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.Devices.FullDuplexDevice.Dispose">
            <summary>
            Disposes of all resources, including the underlying capture and playback devices.
            </summary>
        </member>
        <member name="T:SoundFlow.Abstracts.SoundComponent">
            <summary>
                Base class for audio processing components.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.IsDisposed">
            <summary>
            Gets a value indicating whether this component has been disposed.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Engine">
            <summary>
            Gets the engine context this component belongs to.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Format">
            <summary>
            Gets the audio format of the component.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Name">
            <summary>
                Name of the component
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Parent">
            <summary>
                Parent mixer of the component
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Abstracts.SoundComponent" /> class.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.Finalize">
            <summary>
                Finalizes an instance of the <see cref="T:SoundFlow.Abstracts.SoundComponent"/> class.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Inputs">
            <summary>
                Input connections
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Outputs">
            <summary>
                Output connections
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Volume">
            <summary>
                Volume of the component
            </summary>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if the volume is negative.</exception>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Pan">
            <summary>
                Pan of the component
            </summary>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if the pan is outside the range [0, 1].</exception>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Enabled">
            <summary>
                Whether the component is enabled
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Solo">
            <summary>
                Whether the component is soloed
            </summary>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Mute">
            <summary>
                Whether the component is muted
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Modifiers">
            <summary>
                Modifiers applied to the component
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundComponent.Analyzers">
            <summary>
                Analyzers applied to the component
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.ConnectInput(SoundFlow.Abstracts.SoundComponent)">
            <summary>
                Connects this component to another component.
            </summary>
            <param name="input">The component to connect to.</param>
            <exception cref="T:System.InvalidOperationException">Thrown if the connection would create a cycle.</exception>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.DisconnectInput(SoundFlow.Abstracts.SoundComponent)">
            <summary>
                Disconnects this component from another component.
            </summary>
            <param name="input">The component to disconnect from.</param>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.AddModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
                Adds a modifier to the component.
            </summary>
            <param name="modifier">The modifier to add.</param>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.RemoveModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
                Removes a modifier from the component.
            </summary>
            <param name="modifier">The modifier to remove.</param>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.AddAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
                Adds an analyzer to the component.
            </summary>
            <param name="analyzer">The analyzer to add.</param>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.RemoveAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
                Removes an analyzer from the component.
            </summary>
            <param name="analyzer">The analyzer to remove.</param>
            <exception cref="T:System.ObjectDisposedException">Thrown if the component has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.GenerateAudio(System.Span{System.Single},System.Int32)">
            <summary>
                Generates audio data for the component.
            </summary>
            <param name="buffer">The buffer to write audio data to.</param>
            <param name="channels">The number of channels to generate for.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.Dispose">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundComponent.Dispose(System.Boolean)">
            <summary>
                Releases unmanaged and - optionally - managed resources.
            </summary>
            <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        </member>
        <member name="T:SoundFlow.Abstracts.SoundModifier">
            <summary>
            An abstract representation of a sound modifier.
            Implementations of this class alter audio data to apply various effects.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundModifier.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundModifier.Name">
            <summary>
            The name of the modifier.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundModifier.Enabled">
            <summary>
            Whether the modifier is enabled or not.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundModifier.Process(System.Span{System.Single},System.Int32)">
            <summary>
            Applies the modifier to a buffer of audio samples.
            </summary>
            <param name="buffer">The buffer containing the audio samples to modify.</param>
            <param name="channels">The number of channels in the buffer.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundModifier.ProcessSample(System.Single,System.Int32)">
            <summary>
            Processes a single audio sample.
            </summary>
            <param name="sample">The input audio sample.</param>
            <param name="channel">The channel the sample belongs to.</param>
            <returns>The modified audio sample.</returns>
        </member>
        <member name="T:SoundFlow.Abstracts.SoundPlayerBase">
            <summary>
            Abstract base class for sound players, providing common functionality.
            </summary>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.PlaybackSpeed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.TimeStretchConfig">
            <summary>
            Gets or sets the detailed configuration for the WSOLA time stretcher.
            Allows fine-tuning of window size, hop size, and search radius.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.SetTimeStretchQuality(SoundFlow.Components.WsolaPerformancePreset)">
            <summary>
            Sets the time stretcher configuration based on a performance preset.
            </summary>
            <param name="preset">The desired balance between quality and performance.</param>
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.State">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.DataProvider">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.IsLooping">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.Time">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.Duration">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.LoopStartSamples">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.LoopEndSamples">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.LoopStartSeconds">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Abstracts.SoundPlayerBase.LoopEndSeconds">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Interfaces.ISoundDataProvider)">
            <summary>
            Constructor for Base SoundPlayer.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="format">The audio device instance.</param>
            <param name="dataProvider">The sound data provider.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if dataProvider is null.</exception>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.FillResampleBuffer(System.Int32,System.Int32)">
            <summary>
            Fills the internal resample buffer using the time stretcher and data provider.
            </summary>
            <param name="minSamplesRequiredInOutputBuffer">Minimum samples needed in _resampleBuffer.</param>
            <param name="channels">The number of channels to process.</param>
            <returns>The total number of original source samples advanced by this fill operation.</returns>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.HandleEndOfStream(System.Span{System.Single},System.Int32)">
            <summary>
            Handles the end-of-stream condition, including looping and stopping.
            This is called when the data provider is fully exhausted (ReadBytes returns 0).
            </summary>
            <param name="remainingOutputBuffer">The buffer for remaining output.</param>
            <param name="channels">The number of channels.</param>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.OnPlaybackEnded">
            <summary>
            Invokes the PlaybackEnded event.
            </summary>
        </member>
        <member name="E:SoundFlow.Abstracts.SoundPlayerBase.PlaybackEnded">
            <summary>
            Occurs when playback ends.
            </summary>
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Play">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Pause">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Stop">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Seek(System.TimeSpan,System.IO.SeekOrigin)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Seek(System.Single)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.SetLoopPoints(System.Single,System.Nullable{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.SetLoopPoints(System.Int32,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.SetLoopPoints(System.TimeSpan,System.Nullable{System.TimeSpan})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Dispose(System.Boolean)">
            <inheritdoc cref="M:SoundFlow.Abstracts.SoundPlayerBase.Dispose" />
        </member>
        <member name="M:SoundFlow.Abstracts.SoundPlayerBase.Dispose">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.Devices.MiniAudioCaptureDevice.ProcessAudioCallback(System.IntPtr,System.IntPtr,System.UInt32,SoundFlow.Backends.MiniAudio.Devices.MiniAudioDevice)">
            <summary>
            The callback method invoked by the MiniAudio backend when captured audio data is available.
            This method converts the raw device data to the standard 32-bit float format and raises the event.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig">
            <summary>
            Represents detailed configuration for a MiniAudio device, allowing fine-grained control
            over general and backend-specific settings.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.PeriodSizeInFrames">
            <summary>
            Gets or sets the desired period size in frames per channel. Takes precedence over PeriodSizeInMilliseconds.
            Set to 0 to use the backend's default.
            </summary>
            <example>10ms * 48khz = 480 frames, If channels are set to 2, then It will automatically be 960 frames</example>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.PeriodSizeInMilliseconds">
            <summary>
            Gets or sets the desired period size in milliseconds per channel.
            Set to 0 to use the backend's default.
            </summary>
            <example>10ms, If channels are set to 2, then It will automatically be 20ms, asking the player for a larger buffer</example>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.Periods">
            <summary>
            Gets or sets the number of periods to use for the device's buffer.
            Set to 0 to use the backend's default.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.NoPreSilencedOutputBuffer">
            <summary>
            When set to true, the contents of the output buffer passed into the data callback
            will be left undefined rather than initialized to silence.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.NoClip">
            <summary>
            When set to true, the contents of the output buffer passed into the data callback will not be
            clipped after returning. Only applies when the playback sample format is F32.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.NoDisableDenormals">
            <summary>
            When set to true, the backend will not attempt to disable denormal floating point numbers,
            which can improve performance at the risk of precision loss.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.NoFixedSizedCallback">
            <summary>
            Disables strict fixed-sized data callbacks. Setting this to true will result in the period size
            being treated only as a hint to the backend. This is an optimization for those who don't need fixed sized callbacks.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.Playback">
            <summary>
            Gets or sets the configuration specific to playback.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.Capture">
            <summary>
            Gets or sets the configuration specific to capture.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.Wasapi">
            <summary>
            Gets or sets the configuration specific to the WASAPI backend. This is only used on Windows.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.CoreAudio">
            <summary>
            Gets or sets the configuration specific to the CoreAudio backend. This is only used on macOS/iOS.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.Alsa">
            <summary>
            Gets or sets the configuration specific to the ALSA backend. This is only used on Linux.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.Pulse">
            <summary>
            Gets or sets the configuration specific to the PulseAudio backend. This is only used on Linux.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.OpenSL">
            <summary>
            Gets or sets the configuration specific to the OpenSL ES backend. This is only used on Android.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.MiniAudioDeviceConfig.AAudio">
            <summary>
            Gets or sets the configuration specific to the AAudio backend. This is only used on Android.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.DeviceSubConfig">
            <summary>
            Contains settings for a specific direction (playback or capture).
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.DeviceSubConfig.ShareMode">
            <summary>
            The sharing mode for the device. Use Exclusive for lowest latency if available.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.DeviceSubConfig.IsLoopback">
            <summary>
            Gets or sets a value indicating whether the device is a loopback device (Applies only to capture devices config).
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.WasapiSettings">
            <summary>
            Contains settings specific to the WASAPI audio backend on Windows.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.WasapiSettings.Usage">
            <summary>
            Gets or sets the usage scenario for the audio stream.
            This hints to the operating system about the stream's purpose, potentially affecting
            system-level prioritization and processing.
            Maps to `ma_wasapi_usage` in MiniAudio's `ma_device_config.wasapi.usage`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.WasapiSettings.NoAutoConvertSRC">
            <summary>
            Gets or sets a value indicating whether to disable automatic sample rate conversion (SRC) by WASAPI.
            When true, MiniAudio will perform the SRC instead of the OS.
            Maps to `ma_device_config.wasapi.noAutoConvertSRC`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.WasapiSettings.NoDefaultQualitySRC">
            <summary>
            Gets or sets a value indicating whether to disable the use of `AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY`.
            When true, WASAPI will not use its default SRC quality.
            Maps to `ma_device_config.wasapi.noDefaultQualitySRC`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.WasapiSettings.NoAutoStreamRouting">
            <summary>
            Gets or sets a value indicating whether to disable automatic stream routing by WASAPI.
            Maps to `ma_device_config.wasapi.noAutoStreamRouting`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.WasapiSettings.NoHardwareOffloading">
            <summary>
            Gets or sets a value indicating whether to disable WASAPI's hardware offloading feature.
            Maps to `ma_device_config.wasapi.noHardwareOffloading`.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.CoreAudioSettings">
            <summary>
            Contains settings specific to the CoreAudio backend on macOS and iOS.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.CoreAudioSettings.AllowNominalSampleRateChange">
            <summary>
            Gets or sets a value indicating whether to allow CoreAudio to change the sample rate
            at the operating system level. This setting is typically for desktop macOS.
            Maps to `ma_device_config.coreaudio.allowNominalSampleRateChange`.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.AlsaSettings">
            <summary>
            Contains settings specific to the ALSA audio backend on Linux.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AlsaSettings.NoMMap">
            <summary>
            Gets or sets a value indicating whether to disable Memory Map (MMap) mode for ALSA.
            Maps to `ma_device_config.alsa.noMMap`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AlsaSettings.NoAutoFormat">
            <summary>
            Gets or sets a value indicating whether to open the ALSA device with `SND_PCM_NO_AUTO_FORMAT`.
            This disables automatic format conversion by ALSA.
            Maps to `ma_device_config.alsa.noAutoFormat`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AlsaSettings.NoAutoChannels">
            <summary>
            Gets or sets a value indicating whether to open the ALSA device with `SND_PCM_NO_AUTO_CHANNELS`.
            This disables automatic channel count conversion by ALSA.
            Maps to `ma_device_config.alsa.noAutoChannels`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AlsaSettings.NoAutoResample">
            <summary>
            Gets or sets a value indicating whether to open the ALSA device with `SND_PCM_NO_AUTO_RESAMPLE`.
            This disables automatic resampling by ALSA.
            Maps to `ma_device_config.alsa.noAutoResample`.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.PulseSettings">
            <summary>
            Contains settings specific to the PulseAudio backend on Linux.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.PulseSettings.StreamNamePlayback">
            <summary>
            Gets or sets the stream name for playback within PulseAudio.
            Maps to `ma_device_config.pulse.pStreamNamePlayback`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.PulseSettings.StreamNameCapture">
            <summary>
            Gets or sets the stream name for capture within PulseAudio.
            Maps to `ma_device_config.pulse.pStreamNameCapture`.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.OpenSlSettings">
            <summary>
            Contains settings specific to the OpenSL ES backend on Android.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.OpenSlSettings.StreamType">
            <summary>
            Gets or sets the stream type for OpenSL ES.
            Maps to `ma_opensl_stream_type` in MiniAudio's `ma_device_config.opensl.streamType`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.OpenSlSettings.RecordingPreset">
            <summary>
            Gets or sets the recording preset for OpenSL ES.
            Maps to `ma_opensl_recording_preset` in MiniAudio's `ma_device_config.opensl.recordingPreset`.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Devices.AAudioSettings">
            <summary>
            Contains settings specific to the AAudio backend on Android.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AAudioSettings.Usage">
            <summary>
            Gets or sets the usage scenario for AAudio.
            Maps to `ma_aaudio_usage` in MiniAudio's `ma_device_config.aaudio.usage`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AAudioSettings.ContentType">
            <summary>
            Gets or sets the content type for AAudio.
            Maps to `ma_aaudio_content_type` in MiniAudio's `ma_device_config.aaudio.contentType`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AAudioSettings.InputPreset">
            <summary>
            Gets or sets the input preset for AAudio.
            Maps to `ma_aaudio_input_preset` in MiniAudio's `ma_device_config.aaudio.inputPreset`.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.Devices.AAudioSettings.AllowedCapturePolicy">
            <summary>
            Gets or sets the allowed capture policy for AAudio.
            Maps to `ma_aaudio_allowed_capture_policy` in MiniAudio's `ma_device_config.aaudio.allowedCapturePolicy`.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.Devices.MiniAudioPlaybackDevice.ProcessAudioCallback(System.IntPtr,System.IntPtr,System.UInt32,SoundFlow.Backends.MiniAudio.Devices.MiniAudioDevice)">
            <summary>
            The callback method invoked by the MiniAudio backend to request audio data.
            This method is responsible for generating audio and converting it to the device's output format.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.Devices.MiniAudioPlaybackDevice.ProcessAndFillBuffer(System.Span{System.Single},System.Int32)">
            <summary>
            Fills the provided buffer with audio by processing the master mixer or a soloed component.
            </summary>
            <param name="buffer">The buffer to fill with audio data.</param>
            <param name="channels">The number of channels to process.</param>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.AAudioAllowedCapturePolicy">
            <summary>
            Defines the allowed capture policy for an AAudio output stream on Android,
            controlling whether other applications can capture its audio.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioAllowedCapturePolicy.Default">
            <summary>
            Default capture policy.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioAllowedCapturePolicy.All">
            <summary>
            Allows all applications to capture this stream.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioAllowedCapturePolicy.System">
            <summary>
            Only allows system applications to capture this stream.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioAllowedCapturePolicy.None">
            <summary>
            Prevents other applications from capturing this stream.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.AAudioContentType">
            <summary>
            Defines the content type of an AAudio stream on Android, informing the system about the audio's nature.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioContentType.Default">
            <summary>
            Default content type.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioContentType.Speech">
            <summary>
            For spoken audio.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioContentType.Music">
            <summary>
            For music.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioContentType.Movie">
            <summary>
            For movie audio.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioContentType.Sonification">
            <summary>
            For sonification (making data audible).
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset">
            <summary>
            Defines input presets for AAudio recording on Android, optimizing capture for specific microphone configurations or scenarios.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.Default">
            <summary>
            Default input preset.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.Generic">
            <summary>
            Generic input preset.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.Camcorder">
            <summary>
            For camcorder recording.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.VoiceRecognition">
            <summary>
            For voice recognition.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.VoiceCommunication">
            <summary>
            For voice communication.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.Unprocessed">
            <summary>
            For unprocessed audio from the microphone.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioInputPreset.VoicePerformance">
            <summary>
            For voice performance (e.g., singing).
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage">
            <summary>
            Defines usage scenarios for AAudio streams on Android, guiding the system's resource management and routing.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Default">
            <summary>
            Default usage scenario.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Media">
            <summary>
            For media playback (music, video).
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.VoiceCommunication">
            <summary>
            For voice communication (e.g., phone calls).
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.VoiceCommunicationSignalling">
            <summary>
            For communication signaling (e.g., ringtones for communication apps).
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Alarm">
            <summary>
            For alarms.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Notification">
            <summary>
            For notifications.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.NotificationRingtone">
            <summary>
            For notification ringtones.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.NotificationEvent">
            <summary>
            For notification events.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.AssistanceAccessibility">
            <summary>
            For accessibility features.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.AssistanceNavigationGuidance">
            <summary>
            For navigation guidance.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.AssistanceSonification">
            <summary>
            For sonification (making data audible).
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Game">
            <summary>
            For games.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Assistant">
            <summary>
            For assistant applications.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Emergency">
            <summary>
            For emergency sounds.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Safety">
            <summary>
            For safety-critical sounds.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.VehicleStatus">
            <summary>
            For vehicle status announcements.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.AAudioUsage.Announcement">
            <summary>
            For general announcements.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend">
            <summary>
            Represents the available low-level audio backends that MiniAudio can use.
            </summary>
            <remarks>
            The integer values of these enum members directly correspond to the native `ma_backend` enum in MiniAudio.
            </remarks>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Wasapi">
            <summary>
            The Windows Audio Session API, the modern standard for audio on Windows. (Windows Vista+)
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.DirectSound">
            <summary>
            The legacy DirectSound API. (Windows)
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.WinMm">
            <summary>
            The legacy Windows MultiMedia API (WaveOut). (Windows)
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.CoreAudio">
            <summary>
            The standard audio API for macOS and iOS.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Sndio">
            <summary>
            A common audio server on OpenBSD.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Audio4">
            <summary>
            An audio API for BeOS.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Oss">
            <summary>
            The Open Sound System, common on BSD and older Linux systems.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.PulseAudio">
            <summary>
            A common sound server on modern Linux desktops.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Alsa">
            <summary>
            The Advanced Linux Sound Architecture, the standard low-level audio API on Linux.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Jack">
            <summary>
            The JACK Audio Connection Kit, a professional low-latency audio server for Linux and macOS.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.AAudio">
            <summary>
            The modern low-latency audio API for Android. (Android 8.0+)
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.OpenSl">
            <summary>
            The legacy audio API for Android.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.WebAudio">
            <summary>
            The Web Audio API, for use in WebAssembly environments.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Custom">
            <summary>
            A placeholder for a custom user-defined backend. Not currently supported by this wrapper.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend.Null">
            <summary>
            A silent backend that consumes and discards audio data. Used as a fallback.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.MiniAudioResult">
            <summary>
            Describes the result of an operation.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset">
            <summary>
            Defines recording presets for OpenSL ES on Android, optimizing audio capture for specific scenarios.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset.Default">
            <summary>
            Default recording preset.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset.Generic">
            <summary>
            Generic recording preset.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset.Camcorder">
            <summary>
            For camcorder recording.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset.VoiceRecognition">
            <summary>
            For voice recognition.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset.VoiceCommunication">
            <summary>
            For voice communication.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlRecordingPreset.VoiceUnprocessed">
            <summary>
            For unprocessed voice, typically for further processing.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType">
            <summary>
            Defines the stream types for OpenSL ES on Android, categorizing audio output for system management.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.Default">
            <summary>
            Default stream type.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.Voice">
            <summary>
            For voice call audio.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.System">
            <summary>
            For system sounds.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.Ring">
            <summary>
            For ringtones.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.Media">
            <summary>
            For media playback.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.Alarm">
            <summary>
            For alarms.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.OpenSlStreamType.Notification">
            <summary>
            For notifications.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.SeekPoint.FromStart">
            <summary>
                Seek from the beginning of the stream.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.SeekPoint.FromCurrent">
            <summary>
                Seek from the current position in the stream.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.ShareMode">
            <summary>
            Defines how an audio device is to be opened by the backend, influencing sharing behavior and latency.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.ShareMode.Shared">
            <summary>
            The device can be shared by multiple audio applications simultaneously. This is generally the default.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.ShareMode.Exclusive">
            <summary>
            The device is opened for exclusive use by this application, providing the lowest possible latency
            but preventing other applications from using the device. Not all devices support exclusive mode.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.Enums.WasapiUsage">
            <summary>
            Defines usage scenarios for WASAPI devices on Windows, affecting system-level prioritization and processing.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.WasapiUsage.Default">
            <summary>
            Default usage scenario, balanced for general audio tasks.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.WasapiUsage.Games">
            <summary>
            Optimized for games, often balancing latency and background audio behavior.
            </summary>
        </member>
        <member name="F:SoundFlow.Backends.MiniAudio.Enums.WasapiUsage.ProAudio">
            <summary>
            Optimized for professional audio applications requiring low latency and high fidelity.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory">
            <summary>
            Implements the <see cref="T:SoundFlow.Interfaces.ICodecFactory"/> for the formats natively supported by MiniAudio.
            This factory is registered by the <see cref="T:SoundFlow.Backends.MiniAudio.MiniAudioEngine"/> at a low priority to act as a default/fallback.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory.FactoryId">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory.SupportedFormatIds">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory.Priority">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory.CreateDecoder(System.IO.Stream,System.String,SoundFlow.Structs.AudioFormat)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory.TryCreateDecoder(System.IO.Stream,SoundFlow.Structs.AudioFormat@,System.Nullable{SoundFlow.Structs.AudioFormat})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioCodecFactory.CreateEncoder(System.IO.Stream,System.String,SoundFlow.Structs.AudioFormat)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.MiniAudioDecoder">
            <summary>
                An object to assist with converting audio formats into raw PCM frames.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.#ctor(System.IO.Stream,SoundFlow.Enums.SampleFormat,System.Int32,System.Int32)">
            <summary>
                Constructs a new decoder from the given stream in one of the supported formats.
            </summary>
            <param name="stream">A stream to a file or streaming audio source in one of the supported formats.</param>
            <param name="sampleFormat">The format of the audio samples.</param>
            <param name="channels">The number of audio channels.</param>
            <param name="sampleRate">The sample rate of the audio.</param>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.Channels">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.SampleFormat">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.Decode(System.Span{System.Single})">
            <summary>
                Decodes the next several samples.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.Seek(System.Int32)">
            <summary>
                Seek to start decoding at the given offset.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioDecoder.Dispose">
            <summary>
            Disposes of the decoder resources.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.MiniAudioEncoder">
            <summary>
            An object to assist with encoding raw PCM frames into audio formats.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.#ctor(System.IO.Stream,SoundFlow.Enums.SampleFormat,System.Int32,System.Int32)">
            <summary>
            Constructs a new encoder to write to the given stream in the specified format.
            </summary>
            <param name="stream">The stream to write encoded audio to.</param>
            <param name="sampleFormat">The format of the input audio samples.</param>
            <param name="channels">The number of audio channels.</param>
            <param name="sampleRate">The sample rate of the input audio.</param>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.IsDisposed">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.Encode(System.Span{System.Single})">
            <summary>
            Encodes the given samples and writes them to the output stream.
            </summary>
            <param name="samples">The buffer containing the PCM samples to encode.</param>
            <returns>The number of samples successfully encoded.</returns>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.Dispose">
            <summary>
            Disposes of the encoder resources.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.Finalize">
            <summary>
            Finalizer for the <see cref="T:SoundFlow.Backends.MiniAudio.MiniAudioEncoder"/> class.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.WriteCallback(System.IntPtr,System.IntPtr,System.UInt64,System.UInt64@)">
            <summary>
            Callback method for MiniAudio to write encoded data to the stream.
            MiniAudio provides the encoded data in <paramref name="pBufferIn"/>,
            which is then written to the internal <see cref="F:SoundFlow.Backends.MiniAudio.MiniAudioEncoder._stream"/>.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEncoder.SeekCallback(System.IntPtr,System.Int64,SoundFlow.Backends.MiniAudio.Enums.SeekPoint)">
            <summary>
            Callback method for MiniAudio to seek the output stream.
            </summary>
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.MiniAudioEngine">
            <summary>
            An audio engine based on the MiniAudio library.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioEngine.AvailableBackends">
            <summary>
            Gets a list of audio backends that are available on the current operating system.
            </summary>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniAudioEngine.ActiveBackend">
            <summary>
            Gets the low-level audio backend that was successfully initialized and is currently active.
            </summary>
            <remarks>
            This property will be null if the user didn't pass the preferred backends array while creating the engine.
            In this case, MiniAudio will automatically select a backend and won't return it back.
            </remarks>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.#ctor(System.Collections.Generic.IEnumerable{SoundFlow.Backends.MiniAudio.Enums.MiniAudioBackend})">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Backends.MiniAudio.MiniAudioEngine"/> class.
            </summary>
            <param name="backendPriority">
            An optional, ordered list of backends to try for initialization. If provided, MiniAudio will
            attempt to use them in the specified order. If null or empty, MiniAudio's default probing
            mechanism will be used.
            </param>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.InitializeBackend">
            <summary>
            Initializes the audio backend context.
            </summary>
            <exception cref="T:System.InvalidOperationException"></exception>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.CleanupBackend">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.InitializePlaybackDevice(System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.InitializeCaptureDevice(System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.InitializeFullDuplexDevice(System.Nullable{SoundFlow.Structs.DeviceInfo},System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.InitializeLoopbackDevice(SoundFlow.Structs.AudioFormat,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.SwitchDevice(SoundFlow.Abstracts.Devices.AudioPlaybackDevice,SoundFlow.Structs.DeviceInfo,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.SwitchDevice(SoundFlow.Abstracts.Devices.AudioCaptureDevice,SoundFlow.Structs.DeviceInfo,SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.SwitchDevice(SoundFlow.Abstracts.Devices.FullDuplexDevice,System.Nullable{SoundFlow.Structs.DeviceInfo},System.Nullable{SoundFlow.Structs.DeviceInfo},SoundFlow.Abstracts.Devices.DeviceConfig)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniAudioEngine.UpdateAudioDevicesInfo">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Backends.MiniAudio.MiniaudioException">
            <summary>
                An exception thrown when an error occurs in a audio backend.
            </summary>
            <param name="backendName">The name of the audio backend that threw the exception.</param>
            <param name="result">The result returned by the audio backend.</param>
            <param name="message">The error message of the exception.</param>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniaudioException.#ctor(System.String,SoundFlow.Backends.MiniAudio.Enums.MiniAudioResult,System.String)">
            <summary>
                An exception thrown when an error occurs in a audio backend.
            </summary>
            <param name="backendName">The name of the audio backend that threw the exception.</param>
            <param name="result">The result returned by the audio backend.</param>
            <param name="message">The error message of the exception.</param>
        </member>
        <member name="P:SoundFlow.Backends.MiniAudio.MiniaudioException.Result">
            <summary>
                The result returned by the audio backend.
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.MiniaudioException.ToString">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.Native.NativeLibraryResolver.GetPlatformSpecificLibraryName(System.String)">
            <summary>
            Gets the platform-specific library name
            </summary>
        </member>
        <member name="M:SoundFlow.Backends.MiniAudio.Native.NativeLibraryResolver.GetLibraryPath(System.String)">
            <summary>
            Constructs the relative path to the native library within the 'runtimes' folder.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.EnvelopeGenerator">
            <summary>
            Generates an envelope signal, commonly used for controlling the amplitude of audio signals over time.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.EnvelopeGenerator.EnvelopeState">
            <summary>
            Defines the different stages of the envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.EnvelopeState.Idle">
            <summary>
            The envelope is inactive and outputting silence.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.EnvelopeState.Attack">
            <summary>
            The envelope is in the attack stage, rising from silence to full level.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.EnvelopeState.Decay">
            <summary>
            The envelope is in the decay stage, falling from full level to the sustain level.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.EnvelopeState.Sustain">
            <summary>
            The envelope is in the sustain stage, holding at a constant level.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.EnvelopeState.Release">
            <summary>
            The envelope is in the release stage, falling from the sustain level to silence.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.EnvelopeGenerator.TriggerMode">
            <summary>
            Defines how the envelope is triggered and how it transitions through its stages.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.TriggerMode.NoteOn">
            <summary>
            The envelope enters the release stage only when <see cref="M:SoundFlow.Components.EnvelopeGenerator.TriggerOff"/> is called after a <see cref="M:SoundFlow.Components.EnvelopeGenerator.TriggerOn"/>.
            Suitable for note-on/note-off style triggering.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.TriggerMode.Gate">
            <summary>
            The envelope enters the release stage immediately when <see cref="M:SoundFlow.Components.EnvelopeGenerator.TriggerOff"/> is called.
            Suitable for gate-style triggering where the envelope follows the gate signal.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.EnvelopeGenerator.TriggerMode.Trigger">
            <summary>
            The envelope performs an instant attack and decay upon <see cref="M:SoundFlow.Components.EnvelopeGenerator.TriggerOn"/>, bypassing the sustain stage.
            Useful for percussive sounds or short bursts.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.EnvelopeGenerator"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.State">
            <summary>
            Gets the current stage of the envelope.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.AttackTime">
            <summary>
            Gets or sets the attack time in seconds.
            This is the time it takes for the envelope to rise from 0 to 1.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.DecayTime">
            <summary>
            Gets or sets the decay time in seconds.
            This is the time it takes for the envelope to fall from 1 to the <see cref="P:SoundFlow.Components.EnvelopeGenerator.SustainLevel"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.SustainLevel">
            <summary>
            Gets or sets the sustain level, a value between 0 and 1.
            This is the level the envelope will hold at after the decay stage and before the release stage (in NoteOn mode).
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.ReleaseTime">
            <summary>
            Gets or sets the release time in seconds.
            This is the time it takes for the envelope to fall from the current level to 0.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.Trigger">
            <summary>
            Gets or sets the trigger mode, determining how the envelope reacts to trigger signals.
            See <see cref="T:SoundFlow.Components.EnvelopeGenerator.TriggerMode"/> for available modes.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.Retrigger">
            <summary>
            Gets or sets a value indicating whether the envelope should retrigger if <see cref="M:SoundFlow.Components.EnvelopeGenerator.TriggerOn"/> is called while it's already active.
            If true, calling <see cref="M:SoundFlow.Components.EnvelopeGenerator.TriggerOn"/> will restart the envelope from the attack stage even if it's currently in another stage.
            </summary>
        </member>
        <member name="E:SoundFlow.Components.EnvelopeGenerator.LevelChanged">
            <summary>
            Occurs when the envelope level changes during audio generation.
            Subscribers can use this event to react to envelope level changes, for example, to visualize the envelope shape.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.EnvelopeGenerator.Name">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.TriggerOn">
            <summary>
            Triggers the envelope to start the attack stage.
            This method is typically called when a note is pressed or a gate signal is activated.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.TriggerOff">
            <summary>
            Triggers the envelope to start the release stage.
            This method is typically called when a note is released or a gate signal is deactivated.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.CalculateRates">
            <summary>
            Calculates the rate of level change per sample for attack, decay, and release stages based on the current parameters and sample rate.
            This method is called internally when the envelope state changes to ensure correct rate calculations.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.ProcessSample">
            <summary>
            Processes and returns a single sample of the envelope's output.
            This is more efficient for per-sample modulation than filling a buffer.
            </summary>
            <returns>The current envelope level for a single sample.</returns>
        </member>
        <member name="M:SoundFlow.Components.EnvelopeGenerator.Update">
            <summary>
            Updates the envelope level based on the current state and calculated rates.
            This method is called per sample to advance the envelope through its stages.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.LowFrequencyOscillator">
            <summary>
            A Low Frequency Oscillator (LFO) component that generates periodic waveforms at a sub-audio rate.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.LowFrequencyOscillator.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.LowFrequencyOscillator"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.Name">
            <inheritdoc/>
        </member>
        <member name="T:SoundFlow.Components.LowFrequencyOscillator.WaveformType">
            <summary>
            Defines the different waveform shapes that the LFO can generate.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.Sine">
            <summary>
            A smooth, sinusoidal waveform.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.Square">
            <summary>
            A waveform that alternates abruptly between two levels, creating a pulse.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.Triangle">
            <summary>
            A waveform that linearly ramps up and down, creating a triangular shape.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.Sawtooth">
            <summary>
            A waveform that ramps upwards linearly and then abruptly resets to the starting level.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.ReverseSawtooth">
            <summary>
            A waveform that ramps downwards linearly and then abruptly resets to the starting level.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.Random">
            <summary>
            A waveform that generates random values at each sample.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.WaveformType.SampleAndHold">
            <summary>
            A waveform that holds a random value constant for a cycle and then changes to a new random value.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.LowFrequencyOscillator.TriggerMode">
            <summary>
            Defines how the LFO's phase is triggered or progresses.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.TriggerMode.FreeRunning">
            <summary>
            The LFO runs continuously without any external triggering.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.LowFrequencyOscillator.TriggerMode.NoteTrigger">
            <summary>
            The LFO's phase is reset to the <see cref="P:SoundFlow.Components.LowFrequencyOscillator.Phase"/> value each time the <see cref="M:SoundFlow.Components.LowFrequencyOscillator.Trigger"/> method is called.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.Rate">
            <summary>
            Gets or sets the rate of the LFO in Hertz (cycles per second).
            This determines how fast the waveform oscillates. Must be a non-negative value.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.Depth">
            <summary>
            Gets or sets the depth or amplitude of the LFO output, typically in the range of 0 to 1 or beyond for more pronounced effects.
            This scales the output waveform.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.Type">
            <summary>
            Gets or sets the type of waveform generated by the LFO.
            See <see cref="T:SoundFlow.Components.LowFrequencyOscillator.WaveformType"/> for available waveform shapes.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.Mode">
            <summary>
            Gets or sets the trigger mode of the LFO, determining how its phase is controlled.
            See <see cref="T:SoundFlow.Components.LowFrequencyOscillator.TriggerMode"/> for available trigger modes.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.Phase">
            <summary>
            Gets or sets the phase offset of the LFO in radians.
            This allows for shifting the starting point of the waveform.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.LowFrequencyOscillator.OnOutputChanged">
            <summary>
            An event that is invoked whenever the LFO's output value changes during audio generation.
            Subscribers can use this to react to changes in the LFO's output, for example, to drive visualisations or other components.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.LowFrequencyOscillator.Trigger">
            <summary>
            Triggers the LFO to reset its phase if in <see cref="F:SoundFlow.Components.LowFrequencyOscillator.TriggerMode.NoteTrigger"/> mode.
            For Sample and Hold waveform, it also updates the held random value.
            This method has no effect if the LFO is in <see cref="F:SoundFlow.Components.LowFrequencyOscillator.TriggerMode.FreeRunning"/> mode.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.LowFrequencyOscillator.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Components.LowFrequencyOscillator.GenerateSample">
            <summary>
            Generates a single sample of the LFO waveform based on the current parameters and internal state.
            </summary>
            <returns>The generated LFO sample value.</returns>
        </member>
        <member name="M:SoundFlow.Components.LowFrequencyOscillator.GetLastOutput">
            <summary>
            Gets the last generated output value of the LFO.
            </summary>
            <returns>The last output value.</returns>
        </member>
        <member name="T:SoundFlow.Components.Mixer">
            <summary>
                Represents an audio mixer that combines and processes audio from multiple SoundComponents.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Mixer.ParentDevice">
            <summary>
            Gets the playback device this mixer is the master for, if any.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Mixer.IsMasterMixer">
            <summary>
            Gets a value indicating whether this is a master mixer for a device.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Mixer.Components">
            <summary>
            Gets the list of sound components in the mixer.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.Mixer.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.Mixer"/> class.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
            <param name="isMasterMixer">Indicates if this is a master mixer for a device.</param>
        </member>
        <member name="P:SoundFlow.Components.Mixer.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Components.Mixer.AddComponent(SoundFlow.Abstracts.SoundComponent)">
            <summary>
                Adds a sound component to the mixer.
            </summary>
            <param name="component">The sound component to add.</param>
            <exception cref="T:System.ArgumentException">
                Thrown if the component is the mixer itself or if adding the component would create
                a cycle in the graph.
            </exception>
            <exception cref="T:System.ObjectDisposedException">Thrown if the mixer has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Components.Mixer.WouldCreateCycle(SoundFlow.Abstracts.SoundComponent)">
            <summary>
                Checks if adding a component to this mixer would create a cycle in the audio graph.
            </summary>
            <param name="component">The component to check.</param>
            <returns>True if adding the component would create a cycle, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Components.Mixer.RemoveComponent(SoundFlow.Abstracts.SoundComponent)">
            <summary>
                Removes a sound component from the mixer.
            </summary>
            <param name="component">The sound component to remove.</param>
        </member>
        <member name="M:SoundFlow.Components.Mixer.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Components.Mixer.Dispose">
            <summary>
                Disposes the mixer and all its components.
            </summary>
            <remarks>
                After disposal, the mixer cannot be used anymore.
                All components will be removed and disposable components will be disposed.
            </remarks>
        </member>
        <member name="T:SoundFlow.Components.Oscillator">
            <summary>
            Generates various types of high-quality, band-limited audio waveforms at a specified frequency and amplitude.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.Oscillator.WaveformType">
            <summary>
            Defines the different types of waveforms the oscillator can generate.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Oscillator.WaveformType.Sine">
            <summary>
            A pure sine wave, known for its smooth and fundamental tone.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Oscillator.WaveformType.Square">
            <summary>
            A band-limited square wave, rich in odd harmonics, producing a bright, clean sound without digital aliasing.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Oscillator.WaveformType.Sawtooth">
            <summary>
            A band-limited sawtooth wave, containing both even and odd harmonics, resulting in a bright, clean sound without digital aliasing.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Oscillator.WaveformType.Triangle">
            <summary>
            A triangle wave, containing only odd harmonics.
            Note: This implementation is not band-limited, but aliasing is less pronounced than with square or saw waves.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Oscillator.WaveformType.Noise">
            <summary>
            Generates random noise across all frequencies, useful for creating percussive sounds or textures.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Oscillator.WaveformType.Pulse">
            <summary>
            A band-limited pulse wave (also known as a rectangular wave), similar to a square wave but with adjustable pulse width for timbral variations.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.Oscillator.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.Oscillator"/> class, which generates audio waveforms at a specified frequency and amplitude.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
        </member>
        <member name="P:SoundFlow.Components.Oscillator.Frequency">
            <summary>
            Gets or sets the frequency of the oscillator in Hertz.
            This determines the pitch of the generated sound.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Oscillator.Amplitude">
            <summary>
            Gets or sets the amplitude of the oscillator, controlling the loudness of the generated sound.
            Typically ranges from 0 to 1, but can exceed 1 for overdrive effects if used in later processing stages.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Oscillator.Type">
            <summary>
            Gets or sets the type of waveform the oscillator will generate.
            See <see cref="T:SoundFlow.Components.Oscillator.WaveformType"/> for available waveform options.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Oscillator.PhaseOffset">
            <summary>
            Gets or sets the phase offset of the waveform in radians (from 0 to 2*PI).
            This can be used to synchronize multiple oscillators or create stereo effects.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Oscillator.PulseWidth">
            <summary>
            Gets or sets the pulse width for the <see cref="F:SoundFlow.Components.Oscillator.WaveformType.Pulse"/> waveform, as a fraction of the cycle (0 to 1).
            A value of 0.5 results in a square wave. This parameter is only effective when <see cref="P:SoundFlow.Components.Oscillator.Type"/> is set to <see cref="F:SoundFlow.Components.Oscillator.WaveformType.Pulse"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Oscillator.Name">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Components.Oscillator.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Components.Oscillator.GenerateSample">
            <summary>
            Generates a single audio sample based on the current waveform type, phase, and amplitude.
            This method updates the internal phase for the next sample.
            </summary>
            <returns>The generated audio sample value.</returns>
        </member>
        <member name="M:SoundFlow.Components.Oscillator.Polyblep(System.Single,System.Single)">
            <summary>
            Calculates the polynomial correction for a band-limited step function (PolyBLEP).
            This is used to remove aliasing from waveforms with sharp discontinuities.
            </summary>
            <param name="t">The normalized phase of the oscillator (0 to 1).</param>
            <param name="dt">The normalized phase increment per sample.</param>
            <returns>The correction value to be subtracted from the naive waveform.</returns>
        </member>
        <member name="T:SoundFlow.Components.Recorder">
            <summary>
            Component for recording audio data from a capture device, either to a stream or via a callback.
            Supports various sample and encoding formats and can integrate with <see cref="T:SoundFlow.Abstracts.SoundModifier"/> and <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> components for real-time processing and analysis during recording.
            Implements the <see cref="T:System.IDisposable"/> interface to ensure resources are released properly.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Recorder.State">
            <summary>
            Gets the current playback state of the recorder.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.SampleFormat">
            <summary>
            Gets the sample format used for recording.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.FormatId">
            <summary>
            Gets the format identifier (e.g., "wav", "flac") used for encoding.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.SampleRate">
            <summary>
            Gets the sample rate used for recording, in samples per second.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.Channels">
            <summary>
            Gets the number of channels being recorded (e.g., 1 for mono, 2 for stereo).
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.Stream">
            <summary>
            Gets the file path where audio will be recorded, if recording to a file.
            Will be an empty string if recording via a callback.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.FilePath">
            <summary>
            Gets the final destination file path where audio will be recorded.
            Will be null if recording via a callback or stream.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.Recorder.ProcessCallback">
            <summary>
            Gets or sets the callback function to be invoked when audio data is processed.
            This is used when recording directly to memory or for custom processing, instead of to a file.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Recorder.SigningConfiguration">
            <summary>
            Gets or sets the configuration for digitally signing the recorded file.
            If set, a detached signature file (.sig) will be generated upon stopping the recording.
            Only applies when recording to a file.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.Recorder.#ctor(SoundFlow.Abstracts.Devices.AudioCaptureDevice,System.String,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.Recorder"/> class to record audio to a file.
            </summary>
            <param name="captureDevice">The capture device to record from.</param>
            <param name="filePath">The final destination path for the recorded audio file.</param>
            <param name="formatId">The string identifier for the desired encoding format (e.g., "wav", "flac"). Defaults to "wav".</param>
        </member>
        <member name="M:SoundFlow.Components.Recorder.#ctor(SoundFlow.Abstracts.Devices.AudioCaptureDevice,System.IO.Stream,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.Recorder"/> class to record audio to a stream.
            </summary>
            <param name="captureDevice">The capture device to record from.</param>
            <param name="stream">The stream to write encoded recorded audio to, disposed when recording stops.</param>
            <param name="formatId">The string identifier for the desired encoding format (e.g., "wav", "flac"). Defaults to "wav".</param>
            <exception cref="T:System.ArgumentException">Thrown if the provided stream is not writable.</exception>
        </member>
        <member name="M:SoundFlow.Components.Recorder.#ctor(SoundFlow.Abstracts.Devices.AudioCaptureDevice,SoundFlow.Abstracts.AudioProcessCallback)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.Recorder"/> class to record audio and process it via a callback function.
            </summary>
            <param name="captureDevice">The capture device to record from.</param>
            <param name="callback">The callback function to be invoked when audio data is processed. This function should handle the recorded audio data.</param>
        </member>
        <member name="P:SoundFlow.Components.Recorder.Modifiers">
            <summary>
            Gets a read-only list of <see cref="T:SoundFlow.Abstracts.SoundModifier"/> components applied to the recorder.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.Recorder.Analyzers">
            <summary>
            Gets a read-only list of <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> components applied to the recorder.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.Recorder.StartRecording(SoundFlow.Metadata.Models.SoundTags)">
            <summary>
            Starts the audio recording process.
            If recording to a file or stream, it initializes an audio encoder.
            </summary>
            <param name="tags">Optional metadata tags to write to the file upon completion of the recording.</param>
            <returns>A <see cref="T:SoundFlow.Structs.Result"/> indicating success or failure.</returns>
        </member>
        <member name="M:SoundFlow.Components.Recorder.ResumeRecording">
            <summary>
            Resumes recording from a paused state.
            Has no effect if the recorder is not in the <see cref="F:SoundFlow.Enums.PlaybackState.Paused"/> state.
            </summary>
            <returns>A <see cref="T:SoundFlow.Structs.Result"/> indicating success.</returns>
        </member>
        <member name="M:SoundFlow.Components.Recorder.PauseRecording">
            <summary>
            Pauses the recording process.
            Audio data is no longer processed or encoded until recording is resumed.
            Has no effect if the recorder is not in the <see cref="F:SoundFlow.Enums.PlaybackState.Playing"/> state.
            </summary>
            <returns>A <see cref="T:SoundFlow.Structs.Result"/> indicating success.</returns>
        </member>
        <member name="M:SoundFlow.Components.Recorder.StopRecordingAsync">
            <summary>
            Stops the recording process and releases resources.
            If recording to a file, it finalizes the encoding process, writes metadata tags if provided,
            and generates a digital signature if configured.
            </summary>
            <returns>A <see cref="T:SoundFlow.Structs.Result"/> indicating success or failure.</returns>
        </member>
        <member name="M:SoundFlow.Components.Recorder.StopRecording">
            <summary>
            Synchronously stops the recording process.
            </summary>
            <returns>A <see cref="T:SoundFlow.Structs.Result"/> indicating success or failure.</returns>
        </member>
        <member name="M:SoundFlow.Components.Recorder.AddModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
            Adds a <see cref="T:SoundFlow.Abstracts.SoundModifier"/> to the recording pipeline.
            Modifiers are applied to the audio data before encoding or processing via callback.
            </summary>
            <param name="modifier">The modifier to add.</param>
        </member>
        <member name="M:SoundFlow.Components.Recorder.RemoveModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
            Removes a <see cref="T:SoundFlow.Abstracts.SoundModifier"/> from the recording pipeline.
            </summary>
            <param name="modifier">The modifier to remove.</param>
        </member>
        <member name="M:SoundFlow.Components.Recorder.AddAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
            Adds an <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> to the recording pipeline.
            Analyzers can be used to process and extract data from the audio during recording.
            </summary>
            <param name="analyzer">The analyzer to add.</param>
        </member>
        <member name="M:SoundFlow.Components.Recorder.RemoveAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
            Removes an <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> from the recording pipeline.
            </summary>
            <param name="analyzer">The analyzer to remove.</param>
        </member>
        <member name="M:SoundFlow.Components.Recorder.OnAudioProcessed(System.Span{System.Single},SoundFlow.Enums.Capability)">
            <summary>
            Handles the audio processed event from the audio engine.
            This method is invoked by the audio engine when new audio samples are available.
            It processes the samples through the added <see cref="T:SoundFlow.Abstracts.SoundModifier"/> and <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> components, checks the current state, invokes the <see cref="F:SoundFlow.Components.Recorder.ProcessCallback"/> (if set), and encodes the samples using the <see cref="F:SoundFlow.Components.Recorder._encoder"/> (if recording to a file).
            </summary>
            <param name="samples">A span containing the audio samples to process.</param>
            <param name="capability">The audio capability associated with the processed samples (e.g., input or output).</param>
        </member>
        <member name="M:SoundFlow.Components.Recorder.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Components.SoundPlayer">
            <summary>
            A sound player that plays audio from a data provider.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.SoundPlayer.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Interfaces.ISoundDataProvider)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.SoundPlayer"/> class.
            </summary>
            <param name="engine">The audio engine used for managing audio playback.</param>
            <param name="format">The format of the audio stream, including sample rate, sample format, and channel count.</param>
            <param name="dataProvider">The data provider that supplies audio data for playback.</param>
        </member>
        <member name="P:SoundFlow.Components.SoundPlayer.Name">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Components.SurroundPlayer">
            <summary>
            A sound player that plays audio in a surround sound configuration.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundPlayer.Name">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Components.SurroundPlayer.SpeakerConfiguration">
            <summary>
            The speaker configuration to use for surround sound.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.SpeakerConfiguration.Stereo">
            <summary>
            Standard stereo configuration with two speakers.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.SpeakerConfiguration.Quad">
            <summary>
            Quadraphonic configuration with four speakers.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.SpeakerConfiguration.Surround51">
            <summary>
            5.1 surround sound configuration with six speakers.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.SpeakerConfiguration.Surround71">
            <summary>
            7.1 surround sound configuration with eight speakers.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.SpeakerConfiguration.Custom">
            <summary>
            Custom configuration defined by the user.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundPlayer.SpeakerConfig">
            <summary>
            The speaker configuration to use for surround sound.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.SurroundPlayer.PanningMethod">
            <summary>
            The panning method to use for surround sound.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.PanningMethod.Linear">
            <summary>
            Simple linear panning based on speaker position.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.PanningMethod.EqualPower">
            <summary>
            Equal Power panning for smoother transitions.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.SurroundPlayer.PanningMethod.Vbap">
            <summary>
            Vector-Based Amplitude Panning (VBAP).
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundPlayer.Panning">
            <summary>
            The panning method to use for surround sound.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundPlayer.ListenerPosition">
            <summary>
            Listener position for VBAP panning.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundPlayer.VbapParameters">
            <summary>
            VBAP Parameters, used if Panning is set to Vbap.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundPlayer.SurroundConfig">
            <summary>
            Custom surround sound configuration.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.SurroundPlayer.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Interfaces.ISoundDataProvider)">
            <summary>
            A sound player that simulates surround sound with support for different speaker configurations.
            </summary>
            <param name="engine">The audio engine used for managing audio playback.</param>
            <param name="format">The format of the audio stream, including sample rate, sample format, and channel count.</param>
            <param name="dataProvider">The data provider that supplies audio data for playback.</param>
        </member>
        <member name="M:SoundFlow.Components.SurroundPlayer.SetSpeakerConfiguration(SoundFlow.Components.SurroundPlayer.SpeakerConfiguration)">
            <summary>
            Sets the speaker configuration for surround sound.
            </summary>
            <param name="config">The speaker configuration to use.</param>
        </member>
        <member name="M:SoundFlow.Components.SurroundPlayer.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Components.SurroundPlayer.MapChannels(System.ReadOnlySpan{System.Single},System.Span{System.Single},SoundFlow.Structs.ChannelLayout)">
            <summary>
            Maps input channels from a source layout to the output buffer based on the player's target speaker configuration.
            Handles upmixing from mono/stereo, downmixing from surround, and direct mapping scenarios.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.SurroundPlayer.HandleEndOfStream(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Components.SurroundPlayer.Seek(System.Int32)">
            <summary>
            Seeks to a specific sample offset in the audio playback.
            </summary>
            <param name="sampleOffset">The sample offset to seek to, relative to the beginning of the audio data.</param>
        </member>
        <member name="T:SoundFlow.Components.SurroundConfiguration">
            <summary>
                Configuration for a surround sound.
            </summary>
            <param name="name">The name of the configuration.</param>
            <param name="volumes">The volumes for each speaker.</param>
            <param name="delays">The delays for each speaker.</param>
            <param name="speakerPositions">The positions of each speaker.</param>
        </member>
        <member name="M:SoundFlow.Components.SurroundConfiguration.#ctor(System.String,System.Single[],System.Single[],System.Numerics.Vector2[])">
            <summary>
                Configuration for a surround sound.
            </summary>
            <param name="name">The name of the configuration.</param>
            <param name="volumes">The volumes for each speaker.</param>
            <param name="delays">The delays for each speaker.</param>
            <param name="speakerPositions">The positions of each speaker.</param>
        </member>
        <member name="P:SoundFlow.Components.SurroundConfiguration.Name">
            <summary>
                The name of the configuration.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundConfiguration.Volumes">
            <summary>
                The volumes for each speaker.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundConfiguration.Delays">
            <summary>
                The delays for each speaker.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundConfiguration.SpeakerPositions">
            <summary>
                The positions of each speaker.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.SurroundConfiguration.LfeChannelIndex">
            <summary>
            The index of the LFE (Low-Frequency Effects) channel in this configuration.
            Set to -1 if no LFE channel exists.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.SurroundConfiguration.IsValidConfiguration">
            <summary>
            Validate that all arrays have the same length to help ensure everything will run smoothly
            </summary>
            <returns>True if the configuration is valid</returns>
        </member>
        <member name="T:SoundFlow.Components.VbapParameters">
            <summary>
                Parameters for VBAP panning.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VbapParameters.RolloffFactor">
            <summary>
            Rolloff factor for VBAP panning.
            </summary>
            <remarks>Default value is 1.</remarks>
        </member>
        <member name="P:SoundFlow.Components.VbapParameters.MinDistance">
            <summary>
            Minimum distance for VBAP panning to avoid singularities.
            </summary>
            <remarks>Default value is 0.1.</remarks>
        </member>
        <member name="P:SoundFlow.Components.VbapParameters.Spread">
            <summary>
            Spread factor for VBAP panning.
            </summary>
            <remarks>Options: 1 (natural), more than 1 (wider), less than 1 (narrower).</remarks>
        </member>
        <member name="T:SoundFlow.Components.VoiceActivityDetector">
            <summary>
            Detects voice activity in audio streams using spectral analysis.
            This version includes hysteresis (hangover) to prevent rapid state changes.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VoiceActivityDetector.IsVoiceActive">
            <summary>
            Gets whether voice activity is currently detected.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VoiceActivityDetector.EnergyThreshold">
            <summary>
            Gets or sets the energy threshold for voice detection.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VoiceActivityDetector.ActivationTimeMs">
            <summary>
            Gets or sets the time in milliseconds the signal must be considered speech before activation.
            Helps prevent short noise bursts from triggering the VAD.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VoiceActivityDetector.HangoverTimeMs">
            <summary>
            Gets or sets the time in milliseconds to keep the VAD active after the last speech frame.
            Prevents the VAD from deactivating during short pauses.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VoiceActivityDetector.SpeechLowBand">
            <summary>
            Gets or sets the lower bound of the frequency range used for speech detection in Hz.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.VoiceActivityDetector.SpeechHighBand">
            <summary>
            Gets or sets the upper bound of the frequency range used for speech detection in Hz.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.VoiceActivityDetector.#ctor(SoundFlow.Structs.AudioFormat,System.Int32,System.Single,SoundFlow.Interfaces.IVisualizer)">
            <summary>
            Initializes a new voice activity detector.
            </summary>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
            <param name="fftSize">FFT window size (must be power of two). A common value is 1024 for 48kHz audio.</param>
            <param name="energyThreshold">Detection energy threshold. This is highly dependent on your input signal level.</param>
            <param name="visualizer">Optional visualizer for debugging</param>
            <remarks>
            Increase FFT size for better frequency resolution.
            Decrease threshold for higher sensitivity.
            Use larger FFT sizes in low-noise environments.
            Calibrate threshold based on input levels.
            </remarks>
        </member>
        <member name="M:SoundFlow.Components.VoiceActivityDetector.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <summary>
            Analyzes audio buffer for voice activity.
            </summary>
        </member>
        <member name="E:SoundFlow.Components.VoiceActivityDetector.SpeechDetected">
            <summary>
            Occurs when voice activity state changes.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.WsolaPerformancePreset">
            <summary>
            Defines performance presets for the WSOLA time stretcher.
            These presets balance between CPU usage, latency, and audio quality.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.WsolaPerformancePreset.Fast">
            <summary>
            Optimized for low latency and low CPU usage. 
            Suitable for speech or when performance is critical. 
            Window: 1024, Hop: 512, Search: 128.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.WsolaPerformancePreset.Balanced">
            <summary>
            The standard configuration offering a good trade-off between quality and performance.
            Suitable for general music playback.
            Window: 2048, Hop: 1024, Search: 256.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.WsolaPerformancePreset.HighQuality">
            <summary>
            Optimized for smoother audio stretching with fewer artifacts, at the cost of higher latency and CPU usage.
            Window: 4096, Hop: 2048, Search: 512.
            </summary>
        </member>
        <member name="F:SoundFlow.Components.WsolaPerformancePreset.Audiophile">
            <summary>
            Maximum quality configuration for complex polyphonic material.
            Window: 8192, Hop: 4096, Search: 1024.
            </summary>
        </member>
        <member name="T:SoundFlow.Components.WsolaConfig">
            <summary>
            Configuration container for WSOLA parameters.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.WsolaConfig.WindowSizeFrames">
            <summary>
            The length of the analysis window in frames.
            Should be even (typically power of 2).
            </summary>
        </member>
        <member name="P:SoundFlow.Components.WsolaConfig.AnalysisHopFrames">
            <summary>
            The hop size in frames used by the synthesis stage (output hop).
            This value remains fixed across speeds. The analysis hop is derived from this value and <see cref="M:SoundFlow.Components.WsolaTimeStretcher.SetSpeed(System.Single)"/>.
            Typically, 1/2 of <see cref="P:SoundFlow.Components.WsolaConfig.WindowSizeFrames"/> for stable overlap behavior.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.WsolaConfig.SearchRadiusFrames">
            <summary>
            The range of frames to search for the best overlap match.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.WsolaConfig.#ctor(System.Int32,System.Int32,System.Int32)">
            <summary>
            Creates a custom WSOLA configuration.
            </summary>
            <param name="windowSizeFrames">Length of the analysis window in frames. Should be even (typically power of 2).</param>
            <param name="analysisHopFrames">Synthesis hop size in frames (output hop). Must be positive and less than window size.</param>
            <param name="searchRadiusFrames">The range of frames to search for the best overlap match.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if values are invalid.</exception>
        </member>
        <member name="M:SoundFlow.Components.WsolaConfig.FromPreset(SoundFlow.Components.WsolaPerformancePreset)">
            <summary>
            Creates a configuration based on a predefined preset.
            </summary>
            <param name="preset">The performance preset.</param>
            <returns>A configured WsolaConfig instance.</returns>
        </member>
        <member name="T:SoundFlow.Components.WsolaTimeStretcher">
            <summary>
            Implements the WSOLA (Waveform Similarity Overlap-Add) algorithm for real-time time stretching
            and pitch preservation of audio. It allows changing playback speed without altering pitch.
            Optimized using unsafe pointer arithmetic and SIMD (Single Instruction, Multiple Data).
            </summary>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.#ctor(System.Int32,System.Single,SoundFlow.Components.WsolaConfig)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Components.WsolaTimeStretcher"/> class.
            </summary>
            <param name="initialChannels">The initial number of audio channels. Defaults to 2 if not positive.</param>
            <param name="initialSpeed">The initial playback speed. Defaults to 1.0f.</param>
            <param name="config">Optional configuration object. Defaults to Fast preset.</param>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.Configure(SoundFlow.Components.WsolaConfig)">
            <summary>
            Updates the internal configuration parameters.
            This is a heavy operation that will clear buffers and reset the processing state.
            </summary>
            <param name="config">The new configuration to apply.</param>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.Configure(SoundFlow.Components.WsolaPerformancePreset)">
            <summary>
            Updates the internal configuration parameters based on a preset.
            </summary>
            <param name="preset">The performance preset to apply.</param>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.SetChannels(System.Int32)">
            <summary>
            Sets the number of audio channels for the time stretcher. Reinitializes internal buffers if channels change.
            </summary>
            <param name="channels">The number of audio channels.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if channels is not positive.</exception>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.SetSpeed(System.Single)">
            <summary>
            Sets the playback speed for time stretching.
            </summary>
            <param name="speed">The desired playback speed (e.g., 0.5 for half speed, 2.0 for double speed).</param>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if speed is not positive.</exception>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.EnsureInternalInputBufferCapacity">
            <summary>
            Ensures the internal input buffer is large enough for the current configuration and speed.
            This accounts for analysis hop, search radius, and one full window of lookahead.
            </summary>
        </member>
        <member name="P:SoundFlow.Components.WsolaTimeStretcher.MinInputSamplesToProcess">
            <summary>
            Gets the minimum number of input samples required in the internal buffer to perform a processing step.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.ResetState">
            <summary>
            Resets the internal state of the time stretcher, clearing all buffers and flags.
            This should be called when seeking or stopping playback.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.Reset">
            <summary>
            Resets the internal state of the time stretcher, clearing all buffers and flags.
            </summary>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.GetTargetSpeed">
            <summary>
            Gets the current target playback speed set for the time stretcher.
            </summary>
            <returns>The current playback speed.</returns>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.Fade(System.Int32,System.Int32)">
            <summary>
            Calculates a raised-cosine fade value for crossfading.
            </summary>
            <param name="i">The current frame index.</param>
            <param name="n">The total number of frames in the fade.</param>
            <returns>A value between 0.0 and 1.0 (approximating an S-curve).</returns>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.Process(System.ReadOnlySpan{System.Single},System.Span{System.Single},System.Int32@,System.Int32@)">
            <summary>
            Processes a segment of audio data for time stretching.
            </summary>
            <param name="input">The input audio data to be processed.</param>
            <param name="output">The span to write the processed audio data to.</param>
            <param name="samplesConsumedFromInputBuffer">Output parameter: The number of samples consumed from the input span.</param>
            <param name="sourceSamplesRepresentedByOutput">Output parameter: The number of *original* source samples that the generated output represents.</param>
            <returns>The number of samples written to the output span.</returns>
        </member>
        <member name="M:SoundFlow.Components.WsolaTimeStretcher.Flush(System.Span{System.Single})">
            <summary>
            Flushes any remaining buffered audio data through the time stretcher.
            This is typically called at the end of a stream to ensure all data is processed.
            </summary>
            <param name="output">The span to write the flushed audio data to.</param>
            <returns>The total number of samples written to the output span during flushing.</returns>
        </member>
        <member name="T:SoundFlow.Editing.AudioSegment">
            <summary>
            Represents a single audio segment (clip) placed on a timeline within an audio track.
            It references a portion of an audio source and applies various playback settings and effects.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.Format">
            <summary>
            The audio format of the audio segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.Name">
            <summary>
            Gets or sets the name of the audio segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.SourceDataProvider">
            <summary>
            Gets the sound data provider that serves as the source for this audio segment.
            This property is set during construction and can be replaced via <see cref="M:SoundFlow.Editing.AudioSegment.ReplaceSource(SoundFlow.Interfaces.ISoundDataProvider,System.TimeSpan,System.TimeSpan)"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.SourceStartTime">
            <summary>
            Gets or sets the starting time offset within the <see cref="P:SoundFlow.Editing.AudioSegment.SourceDataProvider"/> from which this segment begins reading.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.SourceDuration">
            <summary>
            Gets or sets the duration of the audio to read from the <see cref="P:SoundFlow.Editing.AudioSegment.SourceDataProvider"/>, starting from <see cref="P:SoundFlow.Editing.AudioSegment.SourceStartTime"/>.
            This duration defines the base content of one playback instance before applying speed or loop settings.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.TimelineStartTime">
            <summary>
            Gets or sets the starting time of this segment on the overall composition timeline.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.Settings">
            <summary>
            Gets or sets the playback and effect settings for this audio segment,
            such as volume, pan, fades, looping, and speed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.TimeStretchConfig">
            <summary>
            Gets or sets the configuration for the time-stretching algorithm.
            Changing this resets the internal processing state.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.ParentTrack">
            <summary>
            Gets or sets the parent track to which this segment is added.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Interfaces.ISoundDataProvider,System.TimeSpan,System.TimeSpan,System.TimeSpan,System.String,SoundFlow.Editing.AudioSegmentSettings,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.AudioSegment"/> class.
            </summary>
            <param name="format">The audio format of the audio segment. Cannot be null.</param>
            <param name="sourceDataProvider">The provider of the raw audio data for this segment. Cannot be null.</param>
            <param name="sourceStartTime">The starting time offset within the source data to begin reading from.</param>
            <param name="sourceDuration">The duration of the audio to read from the source data.</param>
            <param name="timelineStartTime">The starting time of this segment on the composition timeline.</param>
            <param name="name">Optional name for the segment. Defaults to "Segment".</param>
            <param name="settings">Optional audio segment settings. If null, default settings are used.</param>
            <param name="ownsDataProvider">
            A flag indicating whether this segment is responsible for disposing the <paramref name="sourceDataProvider"/>.
            Set to true if this segment is the primary owner of the provider; otherwise, false.
            </param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="sourceDataProvider"/> is null.</exception>
            <exception cref="T:System.ArgumentOutOfRangeException">
            Thrown if <paramref name="sourceStartTime"/> or <paramref name="timelineStartTime"/> is negative,
            or if <paramref name="sourceDuration"/> is zero or negative.
            </exception>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.InitializeWsolaBuffers">
            <summary>
            Initializes the internal buffers used for WSOLA time stretching.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.FullResetState">
            <summary>
            Resets internal state variables used during ReadProcessedSamples.
            Crucially, this should be called if seeking occurs externally or if parameters change that affect reading.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.ResetForNewSourcePassForWsola">
            <summary>
            Resets the internal state for WSOLA when transitioning to a new source loop pass.
            This ensures WSOLA processes a fresh segment of the source audio.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.InvalidateReadState">
            <summary>
            Marks the internal read state as invalid, forcing the next read operation
            to perform a seek on the underlying data provider. This is called by the
            Composition after a user-initiated seek.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.StretchedSourceDuration">
            <summary>
            Gets the duration of the segment's core content after pitch-preserved time stretching has been applied.
            This does not yet account for SpeedFactor.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.EffectiveDurationOnTimeline">
            <summary>
            Gets the effective duration of a single instance of this segment on the timeline,
            considering the <see cref="P:SoundFlow.Editing.AudioSegmentSettings.SpeedFactor"/>.
            Loop settings are not directly included here as they determine repetitions,
            not the base duration of one instance.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegment.TimelineEndTime">
            <summary>
            Gets the end time of this segment on the overall composition timeline,
            considering its start time and total looped duration.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.GetTotalLoopedDurationOnTimeline">
            <summary>
            Calculates the total effective duration of this segment on the timeline,
            taking into account its <see cref="P:SoundFlow.Editing.AudioSegmentSettings.Loop"/> settings
            (<see cref="P:SoundFlow.Editing.LoopSettings.Repetitions"/> or <see cref="P:SoundFlow.Editing.LoopSettings.TargetDuration"/>).
            </summary>
            <returns>A <see cref="T:System.TimeSpan"/> representing the total duration on the timeline.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.Clone(System.Nullable{System.TimeSpan})">
            <summary>
            Creates a shallow clone of the current <see cref="T:SoundFlow.Editing.AudioSegment"/> instance.
            The cloned segment shares the same <see cref="P:SoundFlow.Editing.AudioSegment.SourceDataProvider"/> but has its own independent settings.
            </summary>
            <param name="newTimelineStartTime">Optional new timeline start time for the cloned segment. If null, uses the original segment's timeline start time.</param>
            <returns>A new <see cref="T:SoundFlow.Editing.AudioSegment"/> object with copied properties.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.ReplaceSource(SoundFlow.Interfaces.ISoundDataProvider,System.TimeSpan,System.TimeSpan)">
            <summary>
            Replaces the underlying sound data source for this segment.
            If the original <see cref="P:SoundFlow.Editing.AudioSegment.SourceDataProvider"/> was owned by this segment, it will be disposed.
            </summary>
            <param name="newSource">The new sound data provider to use. Cannot be null.</param>
            <param name="newSourceStartTime">The new starting time offset within the new source data.</param>
            <param name="newSourceDuration">The new duration of the audio to read from the new source data.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="newSource"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.ReadProcessedSamples(System.TimeSpan,System.TimeSpan,System.Span{System.Single},System.Int32,System.Int32,System.Int32)">
            <summary>
            Reads audio samples from this segment for a given time range within the segment.
            </summary>
            <param name="segmentTimelineOffset">The time offset *within this segment's effective timeline duration* to start reading from.</param>
            <param name="durationToRead">The duration of samples to read.</param>
            <param name="outputBuffer">The buffer to fill with samples.</param>
            <param name="outputBufferOffset">Offset in samples into the outputBuffer where writing should start.</param>
            <param name="targetSampleRate">The target sample rate for the output.</param>
            <param name="targetChannels">The target number of channels for the output.</param>
            <returns>Number of samples written to the output buffer.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.GetTimeStretchedSamples(System.TimeSpan,System.TimeSpan,System.Span{System.Single},System.Int32,System.Int32,System.Int32)">
            <summary>
            Gets samples that are either directly from the source (if no stretch) or
            processed through WSOLA for pitch-preserved time stretching.
            Handles looping of the source material before it's fed to WSOLA or returned.
            </summary>
            <param name="timeOffsetInCurrentStretchedPass">The time offset within the current stretched loop pass to start reading.</param>
            <param name="stretchedDurationToRead">The duration of stretched audio to read.</param>
            <param name="outputBuffer">The buffer to fill with stretched samples.</param>
            <param name="sampleRate">The sample rate of the stretched audio (same as source for WSOLA).</param>
            <param name="channels">The number of channels.</param>
            <param name="currentSegmentLoopPassContext">The current loop pass index for context, especially for non-WSOLA path.</param>
            <returns>The number of samples written to the output buffer.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.CompactWsolaOutputBuffer">
            <summary>
            Compacts the WSOLA output buffer by shifting valid data to the beginning
            and resetting the read offset.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.EnsureMoreWsolaOutputGenerated(System.Int32,System.Int32)">
            <summary>
            Ensures that the WSOLA output buffer has enough data by feeding more source samples
            into the WSOLA algorithm and processing them.
            Handles source looping for continuous feed to WSOLA.
            </summary>
            <param name="sampleRate">The sample rate of the source audio.</param>
            <param name="channels">The number of channels.</param>
            <returns>True if more output was generated, false otherwise (e.g., end of segment).</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.CompactWsolaFeedBuffer">
            <summary>
            Compacts the WSOLA feed buffer by shifting valid data to the beginning
            and resetting the read offset.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.ReadAndReverseSourceSamples(System.TimeSpan,System.TimeSpan,System.Span{System.Single},System.Int32,System.Int32,System.Int32,System.Boolean)">
            <summary>
            Reads and reverses source samples from the data provider starting from given time offset
            and writes them to the given output buffer.
            </summary>
            <param name="timeOffsetInCurrentSourcePass">Time offset in the current source pass.</param>
            <param name="durationToRead">Duration to read from the source pass.</param>
            <param name="outputBuffer">The output buffer to write to.</param>
            <param name="sampleRate">Sample rate of the source audio.</param>
            <param name="channels">Number of channels in the source audio.</param>
            <param name="currentSegmentLoopPassContext">Current pass number of the source loop. Used for caching reversed data.</param>
            <param name="isFeedingWsola">Whether the read samples are being fed to the WSOLA time stretcher. Affects loop pass tracking.</param>
            <returns>The number of samples written to the output buffer.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.IsSegmentLoopEffectivelyInfinite(System.Int32)">
            <summary>
            Determines if the segment is configured to loop indefinitely or for a specific number of repetitions/duration.
            </summary>
            <param name="currentSegmentLoopPassNumberBeingProcessed">The current loop iteration count (0-indexed).</param>
            <returns>True if the segment should continue looping for the given pass, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.MapStretchedOffsetToEffectiveTimelineOffset(System.TimeSpan,System.Single)">
            <summary>
            Maps a time offset within the stretched content to its corresponding time offset
            within the effective timeline instance by applying the speed factor.
            </summary>
            <param name="stretchedOffset">The time offset within the stretched content.</param>
            <param name="speedFactor">The speed factor applied to the segment.</param>
            <returns>The corresponding time offset on the effective timeline.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.ReverseBufferInterleaved(System.Span{System.Single},System.Int32)">
            <summary>
            Reverses the order of frames in an interleaved audio buffer.
            </summary>
            <param name="buffer">The buffer containing interleaved audio samples (e.g., LRLR...).</param>
            <param name="channels">The number of channels in the audio.</param>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.SimpleResample(System.ReadOnlySpan{System.Single},System.Span{System.Single},System.Int32)">
            <summary>
            Performs simple linear interpolation resampling of audio samples.
            </summary>
            <param name="input">The input buffer with samples to resample.</param>
            <param name="output">The output buffer to write resampled samples to.</param>
            <param name="channels">The number of channels.</param>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.GetFadeMultiplier(System.Double,SoundFlow.Editing.FadeCurveType,System.Boolean)">
            <summary>
            Calculates a fade multiplier based on progress through the fade duration and the specified curve type.
            </summary>
            <param name="progress">The normalized progress through the fade, from 0.0 to 1.0.</param>
            <param name="curve">The type of fade curve to apply (Linear, Logarithmic, S-Curve).</param>
            <param name="isFadingOutEffect">If true, the progress is inverted (1.0 - progress) to correctly apply fade-out curves.</param>
            <returns>A float multiplier (0.0 to 1.0) to apply to the audio sample.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.Dispose">
            <summary>
            Disposes of the <see cref="P:SoundFlow.Editing.AudioSegment.SourceDataProvider"/> if this segment is marked as owning it.
            This frees up resources held by the audio data provider.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegment.MarkDirty">
            <summary>
            Marks the parent track (and transitively the composition) as dirty (having unsaved changes).
            This should be called by any method that modifies the segment's state.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.AudioSegmentSettings">
            <summary>
            Represents the configurable settings for an <see cref="T:SoundFlow.Editing.AudioSegment"/>,
            controlling its playback characteristics such as volume, pan, fades, looping, and speed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.ParentSegment">
            <summary>
            Gets or sets the parent <see cref="T:SoundFlow.Editing.AudioSegment"/> that owns these settings.
            This is used internally to propagate dirty state.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.Modifiers">
            <summary>
            Gets the chain of sound modifiers (effects) to be applied to this segment.
            Modifiers are applied in the order they appear in this list.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.Analyzers">
            <summary>
            Gets the chain of audio analyzers to process this segment's audio.
            Analyzers process the audio after all segment modifiers have been applied.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.Volume">
            <summary>
            Gets or sets the volume level of the segment.
            A value of 1.0f is normal volume.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.Pan">
            <summary>
            Gets or sets the stereo pan position of the segment.
            A value of -1.0f means full left, 0.0f means center, and 1.0f means full right.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.FadeInDuration">
            <summary>
            Gets or sets the duration of the fade-in effect at the beginning of the segment.
            If set to TimeSpan.Zero, no fade-in is applied.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.FadeInCurve">
            <summary>
            Gets or sets the curve type used for the fade-in effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.FadeOutDuration">
            <summary>
            Gets or sets the duration of the fade-out effect at the end of the segment.
            If set to TimeSpan.Zero, no fade-out is applied.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.FadeOutCurve">
            <summary>
            Gets or sets the curve type used for the fade-out effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.IsReversed">
            <summary>
            Gets or sets a value indicating whether the segment's audio should be played in reverse.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.Loop">
            <summary>
            Gets or sets the looping settings for the segment, defining how it repeats.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.SpeedFactor">
            <summary>
            Playback speed factor (affects pitch and tempo). 1.0 is normal.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.TimeStretchFactor">
            <summary>
            Gets or sets the time stretch factor for pitch-preserved stretching.
            1.0 = no stretch, more than 1.0 = longer duration, less than 1.0 = shorter duration.
            If <see cref="P:SoundFlow.Editing.AudioSegmentSettings.TargetStretchDuration"/> is set, this factor is derived from it.
            </summary>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if the value is less than or equal to zero.</exception>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.TargetStretchDuration">
            <summary>
            Gets or sets the target duration for pitch-preserved time stretching.
            If set, this overrides <see cref="P:SoundFlow.Editing.AudioSegmentSettings.TimeStretchFactor"/>.
            Set to null to use <see cref="P:SoundFlow.Editing.AudioSegmentSettings.TimeStretchFactor"/> instead.
            </summary>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if a non-null value is set to TimeSpan.Zero or negative.</exception>
        </member>
        <member name="P:SoundFlow.Editing.AudioSegmentSettings.IsEnabled">
            <summary>
            Gets or sets a value indicating whether the segment is enabled for playback.
            If false, the segment will produce silence, regardless of other settings.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.Clone">
            <summary>
            Creates a shallow clone of the current <see cref="T:SoundFlow.Editing.AudioSegmentSettings"/> instance.
            The cloned instance will have the same property values but will not have a <see cref="P:SoundFlow.Editing.AudioSegmentSettings.ParentSegment"/> assigned.
            </summary>
            <returns>A new <see cref="T:SoundFlow.Editing.AudioSegmentSettings"/> object with the same property values.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.MarkDirty">
            <summary>
            Marks the parent segment as dirty, propagating the change up the hierarchy.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.AddModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
            Adds a <see cref="T:SoundFlow.Abstracts.SoundModifier"/> to the end of the segment's modifier chain.
            </summary>
            <param name="modifier">The modifier to add. Cannot be null.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="modifier"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.RemoveModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
            Removes a specific <see cref="T:SoundFlow.Abstracts.SoundModifier"/> from the segment's modifier chain.
            </summary>
            <param name="modifier">The modifier to remove.</param>
            <returns>True if the modifier was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.ReorderModifier(SoundFlow.Abstracts.SoundModifier,System.Int32)">
            <summary>
            Reorders a <see cref="T:SoundFlow.Abstracts.SoundModifier"/> within the segment's modifier chain to a new index.
            </summary>
            <param name="modifier">The modifier to reorder.</param>
            <param name="newIndex">The zero-based index where the modifier should be moved to.</param>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.AddAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
            Adds an <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> to the end of the segment's analyzer chain.
            </summary>
            <param name="analyzer">The analyzer to add. Cannot be null.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="analyzer"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.AudioSegmentSettings.RemoveAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
            Removes a specific <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> from the segment's analyzer chain.
            </summary>
            <param name="analyzer">The analyzer to remove.</param>
            <returns>True if the analyzer was found and removed, false otherwise.</returns>
        </member>
        <member name="T:SoundFlow.Editing.Composition">
            <summary>
            Represents a complete audio composition, acting as the top-level container for multiple tracks.
            It serves as a façade, providing access to its data model and specialized services for rendering, editing, and recording.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.Composition.SoundFlow#Synthesis#Interfaces#ISequencerContext#TempoTrack">
            <summary>
            Explicitly implements the ISequencerContext's read-only TempoTrack property.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Renderer">
            <summary>
            Gets the rendering service for this composition, which can generate audio output
            and acts as an <see cref="T:SoundFlow.Interfaces.ISoundDataProvider"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Editor">
            <summary>
            Gets the editing service for this composition, providing methods to manipulate
            tracks, segments, and other structural elements.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Recorder">
            <summary>
            Gets the recording service for this composition, which manages the MIDI recording workflow.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.MappingManager">
            <summary>
            Gets the MIDI mapping service for this composition, which manages real-time control mappings.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Format">
            <summary>
            Gets the audio format of the composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Name">
            <summary>
            Gets or sets the name of the composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Modifiers">
            <summary>
            Gets the chain of sound modifiers (effects) to be applied to the master output of this composition.
            These are applied after all tracks are mixed together.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Analyzers">
            <summary>
            Gets the chain of audio analyzers to process the master output of this composition.
            Analyzers process the audio after all master modifiers have been applied.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.MidiTargets">
            <summary>
            Gets the list of internal instrument/effect components (e.g., Synthesizers) that can be targeted by MIDI tracks.
            These are wrapped in <see cref="T:SoundFlow.Midi.Routing.Nodes.MidiTargetNode"/> to conform to the MIDI routing graph.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.Tracks">
            <summary>
            Gets the list of <see cref="T:SoundFlow.Editing.Track"/>s contained within this composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.MidiTracks">
            <summary>
            Gets the list of <see cref="T:SoundFlow.Editing.MidiTrack"/>s contained within this composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.TempoTrack">
            <summary>
            Gets the master tempo track for the composition, defining tempo changes over time.
            The track is guaranteed to have at least one tempo marker at time zero.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.MasterVolume">
            <summary>
            Gets or sets the master volume level for the entire composition.
            A value of 1.0f is normal volume. Values greater than 1.0f can lead to clipping.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.IsDirty">
            <summary>
            Gets a value indicating whether the composition has unsaved changes.
            This flag is set to true when modifications are made and reset after saving.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.SampleRate">
            <summary>
            Gets or sets the target sample rate for rendering this composition.
            This defines the output sample rate when the composition is rendered or read as an <see cref="T:SoundFlow.Interfaces.ISoundDataProvider"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.TicksPerQuarterNote">
            <summary>
            Gets or sets the time division for all MIDI tracks in this composition, in ticks per quarter note.
            Default is 480.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.IsDisposed">
            <summary>
            Gets a value indicating whether the composition has been disposed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Composition.TargetChannels">
            <summary>
            Gets or sets the target number of channels for rendering this composition.
            This defines the output channel count when the composition is rendered or read as an <see cref="T:SoundFlow.Interfaces.ISoundDataProvider"/>.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Composition.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.String,System.Nullable{System.Int32})">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.Composition"/> class.
            </summary>
            <param name="engine">The audio engine instance, required for services like recording and file loading.</param>
            <param name="format">The audio format of the composition. Cannot be null.</param>
            <param name="name">The name of the composition. Defaults to "Composition".</param>
            <param name="targetChannels">Optional target number of channels for the composition's output. If null, uses the format's channel count.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if <paramref name="targetChannels"/> is less than or equal to 0.</exception>
        </member>
        <member name="M:SoundFlow.Editing.Composition.RegisterMappableObject(SoundFlow.Interfaces.IMidiMappable)">
            <summary>
            Registers a mappable object with the composition's central registry.
            </summary>
            <param name="obj">The object to register.</param>
        </member>
        <member name="M:SoundFlow.Editing.Composition.UnregisterMappableObject(SoundFlow.Interfaces.IMidiMappable)">
            <summary>
            Unregisters a mappable object from the composition's central registry.
            </summary>
            <param name="obj">The object to unregister.</param>
        </member>
        <member name="M:SoundFlow.Editing.Composition.TryGetMappableObject(System.Guid,SoundFlow.Interfaces.IMidiMappable@)">
            <summary>
            Attempts to retrieve a registered mappable object by its unique ID.
            </summary>
            <param name="id">The unique ID of the object.</param>
            <param name="obj">When this method returns, contains the object if found; otherwise, null.</param>
            <returns>True if the object was found; otherwise, false.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Composition.MarkDirty">
            <summary>
            Marks the composition as dirty (having unsaved changes).
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Composition.ClearDirtyFlag">
            <summary>
            Clears the dirty flag, typically after a successful save operation.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Composition.Dispose">
            <summary>
            Disposes of all disposable resources owned by the composition and its services.
            This includes MIDI recorders and any segments that own their data providers.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.CompositionEditor">
            <summary>
            Provides high-level editing logic that modifies a <see cref="T:SoundFlow.Editing.Composition"/> object.
            This class encapsulates the actions that can be performed on a composition's structure.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.#ctor(SoundFlow.Editing.Composition,SoundFlow.Abstracts.AudioEngine)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.CompositionEditor"/> class.
            </summary>
            <param name="composition">The composition instance to be edited.</param>
            <param name="engine">The audio engine context required for operations like file loading.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.CreateAndAddSegmentFromFile(SoundFlow.Editing.Track,System.String,System.TimeSpan,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
            Asynchronously creates a new <see cref="T:SoundFlow.Editing.AudioSegment"/> from a file path and adds it to the specified track.
            This helper method automatically reads the file's metadata to determine its format and duration.
            </summary>
            <param name="track">The track to add the new segment to.</param>
            <param name="filePath">The full path to the audio file.</param>
            <param name="timelineStartTime">The time on the track's timeline where the segment should start.</param>
            <param name="options">Optional configuration for reading metadata.</param>
            <returns>The newly created and added <see cref="T:SoundFlow.Editing.AudioSegment"/>.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.CreateSegmentFromFile(System.String,System.TimeSpan,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
            Asynchronously creates a new <see cref="T:SoundFlow.Editing.AudioSegment"/> from a file path.
            This factory method automatically reads metadata to configure the segment.
            The returned segment is not yet added to any track.
            </summary>
            <param name="filePath">The full path to the audio file.</param>
            <param name="timelineStartTime">The time on the timeline where the segment will be placed.</param>
            <param name="options">Optional configuration for reading metadata.</param>
            <returns>A new, configured <see cref="T:SoundFlow.Editing.AudioSegment"/>.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.AddTrack(SoundFlow.Editing.Track)">
            <summary>
            Adds a <see cref="T:SoundFlow.Editing.Track"/> to the composition.
            </summary>
            <param name="track">The track to add.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.AddMidiTrack(SoundFlow.Editing.MidiTrack)">
            <summary>
            Adds a <see cref="T:SoundFlow.Editing.MidiTrack"/> to the composition.
            </summary>
            <param name="midiTrack">The MIDI track to add.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveTrack(SoundFlow.Editing.Track)">
            <summary>
            Removes a <see cref="T:SoundFlow.Editing.Track"/> from the composition.
            </summary>
            <param name="track">The track to remove.</param>
            <returns>True if the track was successfully removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveMidiTrack(SoundFlow.Editing.MidiTrack)">
            <summary>
            Removes a <see cref="T:SoundFlow.Editing.MidiTrack"/> from the composition.
            </summary>
            <param name="midiTrack">The MIDI track to remove.</param>
            <returns>True if the track was successfully removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.GetTempoAtTime(System.TimeSpan)">
            <summary>
            Gets the tempo at a specific time in the composition.
            </summary>
            <param name="time">The timeline position to query.</param>
            <returns>The active TempoMarker at the given time.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.SetTempo(System.TimeSpan,System.Double)">
            <summary>
            Sets or updates the tempo of the composition at a specific time.
            </summary>
            <param name="time">The timeline position for the tempo change.</param>
            <param name="newBpm">The new tempo in beats per minute.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveTempoChange(System.TimeSpan)">
            <summary>
            Removes a tempo change marker from the composition's tempo track.
            The marker at time zero cannot be removed.
            </summary>
            <param name="time">The exact time of the tempo marker to remove.</param>
            <returns>True if a marker was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.SetTicksPerQuarterNote(System.Int32)">
            <summary>
            Sets the MIDI resolution for the composition. This should typically be set
            on a new or empty project, as changing it later does not automatically scale existing MIDI data.
            </summary>
            <param name="ticksPerQuarterNote">The new time division in ticks per quarter note.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.ExportMidiAsync(System.String)">
            <summary>
            Asynchronously exports the composition's MIDI data to a Standard MIDI File.
            </summary>
            <param name="filePath">The full path of the file to save.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.CalculateTotalDuration">
            <summary>
            Calculates the total duration of the composition, determined by the end time of the longest audio or MIDI track.
            </summary>
            <returns>A <see cref="T:System.TimeSpan"/> representing the total duration of the composition.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.Dispose">
            <summary>
            Disposes of all <see cref="T:SoundFlow.Editing.AudioSegment"/>s across all tracks that own their sound data providers.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.ReplaceSegment(SoundFlow.Editing.Track,System.TimeSpan,System.TimeSpan,SoundFlow.Interfaces.ISoundDataProvider,System.TimeSpan,System.TimeSpan)">
            <summary>
            Replaces the source audio content of an existing <see cref="T:SoundFlow.Editing.AudioSegment"/> on a track.
            The original segment's source data provider will be disposed if it was owned by the segment.
            </summary>
            <param name="track">The track containing the segment to replace.</param>
            <param name="originalStartTime">The exact timeline start time of the segment to find and replace.</param>
            <param name="originalEndTime">The exact timeline end time of the segment to find and replace.</param>
            <param name="replacementSource">The new sound data provider for the segment. Cannot be null.</param>
            <param name="replacementSourceStartTime">The new starting time offset within the <paramref name="replacementSource"/>.</param>
            <param name="replacementSourceDuration">The new duration of the audio to read from the <paramref name="replacementSource"/>.</param>
            <returns>True if the segment was found and its source replaced, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveSegment(SoundFlow.Editing.Track,SoundFlow.Editing.AudioSegment,System.Boolean)">
            <summary>
            Removes a specific <see cref="T:SoundFlow.Editing.AudioSegment"/> from a track.
            </summary>
            <param name="track">The track from which to remove the segment.</param>
            <param name="segmentToRemove">The audio segment instance to remove.</param>
            <param name="shiftFollowing">
            If true, subsequent segments on the track will be shifted earlier to close the gap.
            </param>
            <returns>True if the segment was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveSegment(SoundFlow.Editing.Track,System.TimeSpan,System.TimeSpan,System.Boolean)">
            <summary>
            Removes an <see cref="T:SoundFlow.Editing.AudioSegment"/> from a track identified by its timeline start and end times.
            </summary>
            <param name="track">The track from which to remove the segment.</param>
            <param name="startTime">The exact timeline start time of the segment to remove.</param>
            <param name="endTime">The exact timeline end time of the segment to remove.</param>
            <param name="shiftFollowing">
            If true, subsequent segments on the track will be shifted earlier to close the gap.
            </param>
            <returns>True if the segment was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.SilenceSegment(SoundFlow.Editing.Track,System.TimeSpan,System.TimeSpan)">
            <summary>
            Silences a specified time range on a given track by manipulating existing segments
            and inserting a new silent segment.
            This operation is non-destructive to original sources. It may:
            <list type="bullet">
                <item><description>Remove segments fully contained within the silence range.</description></item>
                <item><description>Trim segments that partially overlap the start or end of the silence range.</description></item>
                <item><description>Split segments that span across the entire silence range into two, before and after the silenced part.</description></item>
            </list>
            An explicit silent audio segment is then inserted to cover the specified range.
            The overall timing of other audio on the track (outside the silenced range) remains unchanged.
            </summary>
            <param name="track">The track to apply the silence to.</param>
            <param name="rangeStartTime">The start time of the range to silence on the track.</param>
            <param name="rangeDuration">The duration of the silence.</param>
            <returns>The newly created silent <see cref="T:SoundFlow.Editing.AudioSegment"/> that fills the silenced range, or null if <paramref name="rangeDuration"/> is zero or negative.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="track"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.InsertSegment(SoundFlow.Editing.Track,System.TimeSpan,SoundFlow.Editing.AudioSegment,System.Boolean)">
            <summary>
            Inserts an <see cref="T:SoundFlow.Editing.AudioSegment"/> into a specified track at a given insertion point.
            </summary>
            <param name="track">The track into which the segment should be inserted.</param>
            <param name="insertionPoint">The timeline point at which to insert the segment.</param>
            <param name="segmentToInsert">The audio segment to insert.</param>
            <param name="shiftFollowing">
            If true, all segments on the track that start at or after the insertion point
            will be shifted later by the duration of the inserted segment.
            </param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.GetNotes(SoundFlow.Editing.MidiSegment)">
            <summary>
            Gets a read-only collection of all notes contained within a MIDI segment.
            </summary>
            <param name="segment">The MIDI segment to query.</param>
            <returns>A read-only collection of <see cref="T:SoundFlow.Editing.MidiNote"/> objects.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.AddNoteToSegment(SoundFlow.Editing.MidiSegment,System.Int64,System.Int64,System.Int32,System.Int32)">
            <summary>
            Adds a new note to a MIDI segment.
            </summary>
            <param name="segment">The segment to add the note to.</param>
            <param name="startTick">The start time of the note in ticks, relative to the start of the segment.</param>
            <param name="durationTicks">The duration of the note in ticks.</param>
            <param name="noteNumber">The MIDI note number (0-127).</param>
            <param name="velocity">The note-on velocity (1-127).</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.ModifyNotesInSegment(SoundFlow.Editing.MidiSegment,System.Collections.Generic.IEnumerable{SoundFlow.Editing.NoteModification})">
            <summary>
            Applies a collection of modifications to notes within a MIDI segment.
            This is the primary method for moving, resizing, or changing the properties of multiple notes at once.
            </summary>
            <param name="segment">The segment containing the notes to modify.</param>
            <param name="modifications">A collection of <see cref="T:SoundFlow.Editing.NoteModification"/> objects describing the changes.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveNotesFromSegment(SoundFlow.Editing.MidiSegment,System.Collections.Generic.IEnumerable{System.Guid})">
            <summary>
            Removes a collection of notes from a MIDI segment, identified by their unique IDs.
            </summary>
            <param name="segment">The segment to remove notes from.</param>
            <param name="noteIds">A collection of unique IDs of the notes to be removed.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.GetControlPoints(SoundFlow.Editing.MidiSegment,System.Int32)">
            <summary>
            Gets a read-only collection of automation control points for a specific controller from a MIDI segment.
            </summary>
            <param name="segment">The MIDI segment to query.</param>
            <param name="controllerNumber">The controller number (e.g., 7 for Volume, 64 for Sustain). Use -1 for Pitch Bend.</param>
            <returns>A read-only collection of <see cref="T:SoundFlow.Editing.ControlPoint"/> objects, or an empty collection if none exist.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.AddControlPointToSegment(SoundFlow.Editing.MidiSegment,System.Int32,System.Int64,System.Int32)">
            <summary>
            Adds a new automation control point to a MIDI segment.
            </summary>
            <param name="segment">The segment to add the control point to.</param>
            <param name="controllerNumber">The CC number (0-127), or -1 for Pitch Bend.</param>
            <param name="tick">The absolute time in ticks from the start of the segment.</param>
            <param name="value">The event value (0-127 for CC, 0-16383 for Pitch Bend).</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.ModifyControlPointsInSegment(SoundFlow.Editing.MidiSegment,System.Int32,System.Collections.Generic.IEnumerable{SoundFlow.Editing.ControlPointModification})">
            <summary>
            Applies a collection of modifications to control points within a MIDI segment.
            </summary>
            <param name="segment">The segment containing the control points to modify.</param>
            <param name="controllerNumber">The CC number (0-127), or -1 for Pitch Bend.</param>
            <param name="modifications">A collection of <see cref="T:SoundFlow.Editing.ControlPointModification"/> objects describing the changes.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.RemoveControlPointsFromSegment(SoundFlow.Editing.MidiSegment,System.Int32,System.Collections.Generic.IEnumerable{System.Guid})">
            <summary>
            Removes a collection of control points from a MIDI segment.
            </summary>
            <param name="segment">The segment to remove control points from.</param>
            <param name="controllerNumber">The CC number (0-127), or -1 for Pitch Bend.</param>
            <param name="pointIds">A collection of unique IDs of the control points to be removed.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.QuantizeSegment(SoundFlow.Editing.MidiSegment,SoundFlow.Editing.QuantizationSettings)">
            <summary>
            Quantizes the notes within a MIDI segment according to the specified settings.
            </summary>
            <param name="segment">The MIDI segment to quantize.</param>
            <param name="settings">The quantization settings to apply.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.SplitMidiSegment(SoundFlow.Editing.MidiTrack,SoundFlow.Editing.MidiSegment,System.TimeSpan)">
            <summary>
            Splits a MIDI segment into two at a specified timeline position.
            </summary>
            <param name="track">The track containing the segment to split.</param>
            <param name="segmentToSplit">The segment to split.</param>
            <param name="splitTimeOnTimeline">The absolute timeline time at which to split the segment.</param>
            <returns>A tuple containing the two new segments created by the split, or null if the split was not possible.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionEditor.JoinMidiSegments(SoundFlow.Editing.MidiTrack,System.Collections.Generic.IEnumerable{SoundFlow.Editing.MidiSegment})">
            <summary>
            Joins a collection of MIDI segments on a track into a single new segment.
            The segments must be on the same track. They will be sorted by time before joining.
            </summary>
            <param name="track">The track containing the segments.</param>
            <param name="segmentsToJoin">Enumerable of segments to join.</param>
            <returns>The new, merged MIDI segment, or null if the operation failed.</returns>
        </member>
        <member name="T:SoundFlow.Editing.RecordingMode">
            <summary>
            Defines the behavior of the MIDI recorder when recording starts.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.RecordingMode.Normal">
            <summary>
            Always creates a new MIDI segment for the recording.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.RecordingMode.OverdubMerge">
            <summary>
            Merges the newly recorded notes into an existing MIDI segment. If no segment is at the start time, creates a new one.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.CompositionRecorder">
            <summary>
            Manages the MIDI recording workflow for a <see cref="T:SoundFlow.Editing.Composition"/>.
            This class handles arming tracks, starting/stopping recording, and updating the sample clock.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRecorder.PunchInTime">
            <summary>
            Gets or sets the time at which recording should automatically start. If null, recording starts immediately when <see cref="M:SoundFlow.Editing.CompositionRecorder.StartRecording(System.TimeSpan,SoundFlow.Editing.RecordingMode,SoundFlow.Editing.MidiSegment)"/> is called.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRecorder.PunchOutTime">
            <summary>
            Gets or sets the time at which recording should automatically stop. If null, recording continues until manually stopped.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRecorder.IsRecording">
            <summary>
            Gets a value indicating whether any armed tracks are currently recording.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRecorder.IsWaitingForPunchIn">
            <summary>
            Gets a value indicating whether the recorder is armed and waiting for the punch-in time to be reached.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.#ctor(SoundFlow.Editing.Composition)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.CompositionRecorder"/> class.
            </summary>
            <param name="composition">The composition instance that will be recorded into.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.ArmTrackForRecording(SoundFlow.Editing.MidiTrack,SoundFlow.Midi.Devices.MidiInputDevice)">
            <summary>
            Arms a MIDI track for recording from a specific input device.
            </summary>
            <param name="track">The MIDI track to arm.</param>
            <param name="inputDevice">The MIDI input device to record from.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.DisarmTrack(SoundFlow.Editing.MidiTrack)">
            <summary>
            Disarms a MIDI track, stopping any active recording on it.
            </summary>
            <param name="track">The MIDI track to disarm.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.StartRecording(System.TimeSpan,SoundFlow.Editing.RecordingMode,SoundFlow.Editing.MidiSegment)">
            <summary>
            Pre-arms the recorder. If a <see cref="P:SoundFlow.Editing.CompositionRecorder.PunchInTime"/> is set, it will wait until that time to start. Otherwise, it starts immediately.
            </summary>
            <param name="startTime">The time on the composition timeline where recording begins if not using punch-in.</param>
            <param name="mode">The recording mode to use (e.g., create new segment or overdub).</param>
            <param name="targetSegment">For overdub/merge mode, the segment to record into. Ignored for normal mode.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.StartInternalRecorders(System.TimeSpan)">
            <summary>
            Immediately starts all armed recorders. For internal use by the transport.
            </summary>
            <param name="startTime">The exact start time.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.StopRecording">
            <summary>
            Stops recording on all currently active MIDI recorders.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.UpdateSampleClock(System.Int32)">
            <summary>
            Updates the internal sample clock for all active recorders. This method must be called
            from a synchronized audio context, such as the composition's render loop.
            </summary>
            <param name="samplesInBlock">The number of samples processed in the last audio block.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.OnTransportLoop(System.Int64)">
            <summary>
            Notifies active recorders that a transport loop has occurred.
            This is used to correctly timestamp notes in loop recording sessions.
            </summary>
            <param name="loopDurationSamples">The duration of the loop in audio samples.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRecorder.Dispose">
            <summary>
            Disposes all active MIDI recorders, effectively disarming all tracks.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.CompositionRenderer">
            <summary>
            Renders a <see cref="T:SoundFlow.Editing.Composition"/> into an audio stream.
            This class implements <see cref="T:SoundFlow.Interfaces.ISoundDataProvider"/>, allowing a whole composition
            to be treated as a single audio source for playback or further processing.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.IsSyncDriven">
            <summary>
            Gets or sets a value indicating whether the renderer's transport is driven by an external sync source.
            When true, the internal clock is bypassed, and playback is advanced via `AdvanceBySyncTicks`.
            </summary>
            <remarks>
            This property shouldn't be set manually. It is managed by the audio engine.
            It's exposed as public to be used in external backend implementations.
            </remarks>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.LoopStartTime">
            <summary>
            Gets or sets the start time of the playback loop. If null, looping is disabled.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.LoopEndTime">
            <summary>
            Gets or sets the end time of the playback loop. If null, looping is disabled.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.#ctor(SoundFlow.Editing.Composition)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.CompositionRenderer"/> class.
            </summary>
            <param name="composition">The composition instance to be rendered.</param>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.SyncPlay">
            <summary>
            Starts playback from the beginning.
            </summary>
            <remarks>
            This method is intended for use by external audio backend implementations to control a sync-driven transport and should not be called directly by the user.
            </remarks>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.SyncStop">
            <summary>
            Stops playback and resets the position to the beginning.
            </summary>
            <remarks>
            This method is intended for use by external audio backend implementations to control a sync-driven transport and should not be called directly by the user.
            </remarks>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.SyncContinue">
            <summary>
            Resumes playback from the current position.
            </summary>
            <remarks>
            This method is intended for use by external audio backend implementations to control a sync-driven transport and should not be called directly by the user.
            </remarks>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.SyncSeek(System.TimeSpan)">
            <summary>
            Seeks the playback position to a specific time.
            </summary>
            <param name="time">The time to seek to.</param>
            <remarks>
            This method is intended for use by external audio backend implementations to control a sync-driven transport and should not be called directly by the user.
            </remarks>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.AdvanceBySyncTicks(System.Int32)">
            <summary>
            Advances the playback position by a specified number of sync ticks.
            This is used when <see cref="P:SoundFlow.Editing.CompositionRenderer.IsSyncDriven"/> is true.
            </summary>
            <param name="tickCount">The number of ticks to advance.</param>
            <remarks>
            This method is intended for use by external audio backend implementations to control a sync-driven transport and should not be called directly by the user.
            </remarks>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.GetTempoAtCurrentPosition">
            <summary>
            Gets the tempo marker active at the current playback position.
            </summary>
            <returns>The active <see cref="T:SoundFlow.Editing.TempoMarker"/>.</returns>
            <remarks>
            This method is intended for use by external audio backend implementations to control a sync-driven transport and should not be called directly by the user.
            </remarks>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.Render">
            <summary>
            Renders the full composition into a new float array.
            </summary>
            <returns>A float array containing the rendered audio samples. An empty array is returned if no samples are rendered.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.Render(System.TimeSpan,System.TimeSpan)">
            <summary>
            Renders a specific time portion of the composition into a new float array.
            </summary>
            <param name="startTime">The global timeline start time of the portion to render.</param>
            <param name="duration">The duration of the audio to render.</param>
            <returns>A float array containing the rendered audio samples. An empty array is returned if no samples are rendered.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.Render(System.TimeSpan,System.TimeSpan,System.Span{System.Single})">
            <summary>
            Renders a specific time portion of the composition into a provided buffer.
            This method mixes audio from all active tracks, applies master volume, and performs clipping.
            </summary>
            <param name="startTime">The global timeline start time of the portion to render.</param>
            <param name="duration">The duration of the audio to render.</param>
            <param name="outputBuffer">The span to fill with rendered audio samples. This buffer will be cleared before rendering.</param>
            <returns>The number of samples actually written to the output buffer.</returns>
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.GetActiveTracksForRendering">
            <summary>
            Determines which tracks are active for rendering based on their mute, solo, and enabled states.
            If any track is soloed, only soloed tracks are returned. Otherwise, all non-muted, enabled tracks are returned.
            </summary>
            <returns>A list of <see cref="T:SoundFlow.Editing.Track"/> objects that should be included in the rendering process.</returns>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.CurrentTime">
            <summary>
            Gets the current playback time in <see cref="T:System.TimeSpan"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.CompositionRenderer.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Editing.CompositionRenderer.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Editing.CompositionRenderer.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Editing.CompositionRenderer.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Editing.ControlPoint">
            <summary>
            Represents a single, editable automation point for a MIDI parameter like Pitch Bend or a Control Change (CC) message.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.ControlPoint.Id">
            <summary>
            Gets a unique identifier for this control point instance.
            This is used to reliably track the point during editing operations.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.ControlPoint.Tick">
            <summary>
            Gets or sets the absolute time of the control point in MIDI ticks from the beginning of the sequence.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.ControlPoint.Value">
            <summary>
            Gets or sets the value of the control point.
            For CC messages, this is 0-127.
            For Pitch Bend, this is a 14-bit value from 0-16383 (centered at 8192).
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.ControlPoint.#ctor(System.Int64,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.ControlPoint"/> class.
            </summary>
            <param name="tick">The absolute time in ticks.</param>
            <param name="value">The MIDI value for the control point.</param>
        </member>
        <member name="T:SoundFlow.Editing.ControlPointModification">
            <summary>
            A data structure describing a modification to be applied to a <see cref="T:SoundFlow.Editing.ControlPoint"/>.
            Null properties indicate no change for that attribute.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.ControlPointModification.PointId">
            <summary>
            The unique identifier of the control point to modify.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.ControlPointModification.NewTick">
            <summary>
            The new absolute time in ticks, if it is to be changed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.ControlPointModification.NewValue">
            <summary>
            The new value, if it is to be changed.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.FadeCurveType">
            <summary>
            Defines the types of curves that can be used for fade-in and fade-out effects on audio segments.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.FadeCurveType.Linear">
            <summary>
            A linear fade, where the volume changes at a constant rate.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.FadeCurveType.Logarithmic">
            <summary>
            A logarithmic fade, where the volume changes more rapidly at the beginning/end of the fade
            and more slowly in the middle, to better match human perception of loudness.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.FadeCurveType.SCurve">
            <summary>
            An S-shaped fade curve, providing a smooth transition in and out of the fade.
            Also known as EaseInOutSine or Smoothstep.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.LoopSettings">
            <summary>
            Defines the looping behavior for an <see cref="T:SoundFlow.Editing.AudioSegment"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.LoopSettings.Repetitions">
            <summary>
            Number of times the segment should repeat after its initial play.
            0 means play once, 1 means play twice total, etc.
            MaxValue for infinite looping until target duration is met.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.LoopSettings.TargetDuration">
            <summary>
            If specified, the segment will loop to fill this total duration,
            potentially cutting off the last loop partway.
            If null, Repetitions will be used.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.LoopSettings.#ctor(System.Int32,System.Nullable{System.TimeSpan})">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.LoopSettings"/> struct.
            </summary>
            <param name="repetitions">The number of times the segment should repeat after its initial play.
            Clamped to be non-negative.</param>
            <param name="targetDuration">The total duration the segment should loop to fill.
            If null, <paramref name="repetitions"/> will be used.</param>
        </member>
        <member name="P:SoundFlow.Editing.LoopSettings.PlayOnce">
            <summary>
            Gets a <see cref="T:SoundFlow.Editing.LoopSettings"/> instance configured for playing the segment once (no repetitions).
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingSourceType">
            <summary>
            Defines the type of MIDI message that can be used as a mapping source.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingSourceType.ControlChange">
            <summary>
            A standard MIDI Control Change message (CC 0-127).
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingSourceType.NoteOn">
            <summary>
            A MIDI Note On message, typically used for triggers or velocity-sensitive controls.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingSourceType.NoteOff">
            <summary>
            A MIDI Note Off message, typically used to detect the release of a key/pad.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingSourceType.PitchBend">
            <summary>
            A 14-bit Pitch Bend message.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingSourceType.HighResolutionControlChange">
            <summary>
            A high-resolution 14-bit Control Change message, typically implemented using NRPN or RPN.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingBehavior">
            <summary>
            Defines the behavior of the MIDI mapping when triggered.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingBehavior.Absolute">
            <summary>
            The transformed MIDI value directly sets the property value.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingBehavior.Toggle">
            <summary>
            Each trigger flips the current value of a boolean property.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingBehavior.Trigger">
            <summary>
            The mapping triggers a method call.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingBehavior.Relative">
            <summary>
            The incoming MIDI value increments or decrements the current property value.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingTargetType">
            <summary>
            Defines the target type for a MIDI mapping.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingTargetType.Property">
            <summary>
            The mapping targets a public property on the object.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingTargetType.Method">
            <summary>
            The mapping targets a public method on the object.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingArgumentSource">
            <summary>
            Defines the source of a value for a method argument in a Trigger mapping.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingArgumentSource.MidiValue">
            <summary>
            Use the incoming MIDI value (e.g., velocity, CC value).
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingArgumentSource.Constant">
            <summary>
            Use a fixed, constant value defined in the mapping.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingCurveType">
            <summary>
            Defines the transformation curve for mapping a MIDI value to a parameter value.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingCurveType.Linear">
            <summary>
            A straight, 1:1 scaling between the source and target ranges.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingCurveType.Exponential">
            <summary>
            A curve where small changes in the source result in larger changes in the target at the higher end of the range.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.Mapping.MidiMappingCurveType.Logarithmic">
            <summary>
            A curve where small changes in the source result in larger changes in the target at the lower end of the range.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiInputSource">
            <summary>
            Defines the source of a MIDI mapping, specifying which message will trigger it.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiInputSource.DeviceName">
            <summary>
            The unique name of the MIDI input device.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiInputSource.Channel">
            <summary>
            The MIDI channel (1-16). A value of 0 represents Omni (any channel).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiInputSource.MessageType">
            <summary>
            The type of MIDI message to listen for.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiInputSource.MessageParameter">
            <summary>
            The specific parameter of the message.
            For CC, this is the controller number (0-127).
            For Notes, this is the note number (0-127).
            For High-Resolution CC, this is the 14-bit NRPN/RPN number.
            For Pitch Bend, this value is ignored.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MethodArgument">
            <summary>
            Defines a single argument for a method call in a Trigger mapping.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MethodArgument.Source">
            <summary>
            The source of the value for this argument.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MethodArgument.ConstantValue">
            <summary>
            The constant value to use if the Source is Constant.
            This should be a JSON-serializable type (string, number, bool).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MethodArgument.Transformer">
            <summary>
            An optional transformer to apply if the Source is MidiValue.
            If null, the raw MIDI value is used.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingTarget">
            <summary>
            Defines the target of a MIDI mapping, specifying which property or method will be controlled.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMappingTarget.TargetObjectId">
            <summary>
            The unique identifier of the target object instance (e.g., a specific Filter).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMappingTarget.TargetType">
            <summary>
            The type of member being targeted (Property or Method).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMappingTarget.TargetMemberName">
            <summary>
            The name of the public property or method on the target object to be modified or invoked.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMappingTarget.MethodArguments">
            <summary>
            A list of arguments to be passed if the target is a method. Ignored for properties.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.ValueTransformer">
            <summary>
            Defines the transformation logic for converting an incoming MIDI value
            to the range expected by the target property.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.ValueTransformer.SourceMin">
            <summary>
            The minimum value of the MIDI input range (e.g., 0 for CC).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.ValueTransformer.SourceMax">
            <summary>
            The maximum value of the MIDI input range (e.g., 127 for CC, 16383 for 14-bit).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.ValueTransformer.TargetMin">
            <summary>
            The minimum value of the target property's range.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.ValueTransformer.TargetMax">
            <summary>
            The maximum value of the target property's range.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.ValueTransformer.CurveType">
            <summary>
            The response curve for the value transformation.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMapping">
            <summary>
            Represents a complete, configurable link between a specific MIDI message
            and a controllable parameter within the composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.Id">
            <summary>
            Gets the unique identifier for this mapping instance.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.Source">
            <summary>
            Gets or sets the MIDI message source that triggers this mapping.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.Target">
            <summary>
            Gets or sets the parameter that this mapping controls.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.Transformer">
            <summary>
            Gets or sets the value transformer that defines how the input value is scaled.
            This is primarily used for Absolute and Relative behaviors.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.Behavior">
            <summary>
            Gets or sets the behavior of the mapping (e.g., Absolute, Toggle).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.ActivationThreshold">
            <summary>
            Gets an optional activation threshold. For Toggle or Trigger behaviors,
            the action only occurs if the incoming MIDI value is at or above this threshold.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMapping.IsResolved">
            <summary>
            Gets a value indicating whether this mapping is currently resolved to a valid, live target.
            Mappings can become unresolved if a project is loaded and the target object or member is no longer found.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMapping.#ctor(SoundFlow.Editing.Mapping.MidiInputSource,SoundFlow.Editing.Mapping.MidiMappingTarget,SoundFlow.Editing.Mapping.ValueTransformer,SoundFlow.Editing.Mapping.MidiMappingBehavior)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.Mapping.MidiMapping"/> class.
            </summary>
            <param name="source">The MIDI message source.</param>
            <param name="target">The target parameter.</param>
            <param name="transformer">The value transformation logic.</param>
            <param name="behavior">The behavior of the mapping.</param>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingManager">
            <summary>
            Manages and executes a collection of MIDI mappings in real-time for a composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Mapping.MidiMappingManager.Mappings">
            <summary>
            Gets a read-only list of all active MIDI mappings.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.#ctor(SoundFlow.Editing.Composition)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.Mapping.MidiMappingManager"/> class.
            </summary>
            <param name="composition">The parent composition.</param>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.AddInputDevice(SoundFlow.Midi.Devices.MidiInputDevice)">
            <summary>
            Subscribes this manager to receive messages from a specific MIDI input device.
            This method should be called by the application for each device that should be used for mapping.
            </summary>
            <param name="device">The initialized MIDI input device to listen to.</param>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.RemoveInputDevice(SoundFlow.Midi.Devices.MidiInputDevice)">
            <summary>
            Unsubscribes this manager from a specific MIDI input device.
            </summary>
            <param name="device">The MIDI input device to stop listening to.</param>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.AddMapping(SoundFlow.Editing.Mapping.MidiMapping)">
            <summary>
            Adds a new MIDI mapping to the manager.
            </summary>
            <param name="mapping">The mapping to add.</param>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.RemoveMapping(System.Guid)">
            <summary>
            Removes a MIDI mapping from the manager by its ID.
            </summary>
            <param name="mappingId">The unique ID of the mapping to remove.</param>
            <returns>True if the mapping was found and removed; otherwise, false.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.Dispose">
            <inheritdoc/>
        </member>
        <member name="T:SoundFlow.Editing.Mapping.MidiMappingManager.HighResCcParser">
            <summary>
            A stateful parser for 14-bit RPN/NRPN messages.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Mapping.MidiMappingManager.HighResCcParser.#ctor(SoundFlow.Editing.Mapping.MidiMappingManager)">
            <summary>
            A stateful parser for 14-bit RPN/NRPN messages.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.MidiExporter">
            <summary>
            Provides functionality to export a <see cref="T:SoundFlow.Editing.Composition"/> to a Standard MIDI File.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiExporter.ExportAsync(SoundFlow.Editing.Composition,System.String)">
            <summary>
            Asynchronously exports the entire composition to a Format 1 Standard MIDI File.
            </summary>
            <param name="composition">The composition to export.</param>
            <param name="filePath">The path where the MIDI file will be saved.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiExporter.FinalizeTrack(SoundFlow.Metadata.Midi.MidiTrack)">
            <summary>
            Converts a track with absolute-timed events into one with delta-timed events
            and ensures it is properly terminated.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.MidiNote">
            <summary>
            Represents a single, editable MIDI note, providing a more intuitive object for manipulation
            than raw Note On/Note Off events.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiNote.Id">
            <summary>
            Gets a unique identifier for this note instance.
            This is used to reliably track the note during editing operations.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiNote.StartTick">
            <summary>
            Gets or sets the absolute start time of the note in MIDI ticks from the beginning of the sequence.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiNote.DurationTicks">
            <summary>
            Gets or sets the duration of the note in MIDI ticks.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiNote.NoteNumber">
            <summary>
            Gets or sets the MIDI note number of the note, where 60 is Middle C.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiNote.Velocity">
            <summary>
            Gets or sets the velocity of the Note On event (1-127).
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiNote.#ctor(System.Int64,System.Int64,System.Int32,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.MidiNote"/> class.
            </summary>
            <param name="startTick">The absolute start time in ticks.</param>
            <param name="durationTicks">The duration in ticks.</param>
            <param name="noteNumber">The MIDI note number.</param>
            <param name="velocity">The note-on velocity.</param>
        </member>
        <member name="T:SoundFlow.Editing.NoteModification">
            <summary>
            A data structure describing a modification to be applied to a <see cref="T:SoundFlow.Editing.MidiNote"/>.
            Null properties indicate no change for that attribute.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.NoteModification.NoteId">
            <summary>
            The unique identifier of the note to modify.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.NoteModification.NewStartTick">
            <summary>
            The new absolute start time in ticks, if it is to be changed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.NoteModification.NewDurationTicks">
            <summary>
            The new duration in ticks, if it is to be changed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.NoteModification.NewNoteNumber">
            <summary>
            The new note number (MIDI note number), if it is to be changed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.NoteModification.NewVelocity">
            <summary>
            The new velocity, if it is to be changed.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.QuantizationSettings">
            <summary>
            Defines the settings for a MIDI quantization operation.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.QuantizationSettings.GridInterval">
            <summary>
            Represents the musical grid interval for quantization.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.WholeNote">
            <summary>
            Quantize to the nearest whole note.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.HalfNote">
            <summary>
            Quantize to the nearest half note.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.QuarterNote">
            <summary>
            Quantize to the nearest quarter note.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.EighthNote">
            <summary>
            Quantize to the nearest eighth note.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.SixteenthNote">
            <summary>
            Quantize to the nearest sixteenth note.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.ThirtySecondNote">
            <summary>
            Quantize to the nearest thirty-second note.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.HalfTriplet">
            <summary>
            Quantize to the nearest half-note triplet.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.QuarterTriplet">
            <summary>
            Quantize to the nearest quarter-note triplet.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.EighthTriplet">
            <summary>
            Quantize to the nearest eighth-note triplet.
            </summary>
        </member>
        <member name="F:SoundFlow.Editing.QuantizationSettings.GridInterval.SixteenthTriplet">
            <summary>
            Quantize to the nearest sixteenth-note triplet.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.QuantizationSettings.Grid">
            <summary>
            Gets the grid interval to quantize to.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.QuantizationSettings.Strength">
            <summary>
            Gets the strength of the quantization (0.0 to 1.0).
            0.0 means no change, 1.0 means notes are moved exactly to the grid.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.QuantizationSettings.QuantizeNoteEnd">
            <summary>
            Gets a value indicating whether to quantize the end of the note as well.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.QuantizationSettings.Swing">
            <summary>
            Gets the swing amount (0.0 to 1.0).
            A value of 0.5 is no swing. Greater than 0.5 delays off-beats.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.MidiQuantizer">
            <summary>
            A stateless utility class that provides logic for MIDI quantization.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiQuantizer.CalculateQuantization(System.Collections.Generic.IEnumerable{SoundFlow.Editing.MidiNote},SoundFlow.Editing.QuantizationSettings,System.Int32)">
            <summary>
            Calculates the modifications needed to quantize a collection of MIDI notes.
            This is a pure function that does not alter the input notes.
            </summary>
            <param name="notes">The collection of notes to be quantized.</param>
            <param name="settings">The quantization settings to apply.</param>
            <param name="ticksPerQuarterNote">The time division of the sequence.</param>
            <returns>A list of <see cref="T:SoundFlow.Editing.NoteModification"/> objects describing the required changes.</returns>
        </member>
        <member name="T:SoundFlow.Editing.MidiSegment">
            <summary>
            Represents a single MIDI segment (clip) placed on a timeline within a MIDI track.
            It references a MidiDataProvider and applies playback settings.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.Name">
            <summary>
            Gets or sets the name of the MIDI segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.Sequence">
            <summary>
            Gets the mutable sequence of MIDI data for this segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.DataProvider">
            <summary>
            Gets a read-only <see cref="T:SoundFlow.Providers.MidiDataProvider"/> for the playback engine.
            This provider is cached and regenerated in a thread-safe manner only when the underlying sequence changes.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.TimelineStartTime">
            <summary>
            Gets or sets the starting time of this segment on the overall composition timeline.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.SourceDuration">
            <summary>
            Gets the duration of the MIDI data within this segment, calculated based on the parent composition's tempo map.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.TimelineEndTime">
            <summary>
            Gets the end time of this segment on the overall composition timeline.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSegment.ParentTrack">
            <summary>
            Gets or sets the parent track to which this segment is added.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiSegment.#ctor(SoundFlow.Editing.MidiSequence,System.TimeSpan,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.MidiSegment"/> class using a mutable <see cref="T:SoundFlow.Editing.MidiSequence"/>.
            </summary>
            <param name="sequence">The mutable MIDI sequence. Cannot be null.</param>
            <param name="timelineStartTime">The starting time on the composition timeline.</param>
            <param name="name">Optional name for the segment.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiSegment.MarkDirty">
            <summary>
            Marks the segment's data as having been changed.
            This will trigger regeneration of the playback data provider on its next access and mark the composition as dirty.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiSegment.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Editing.MidiSequence">
            <summary>
            A mutable container for all MIDI data within a segment, designed for editing.
            It synchronizes a high-level list of <see cref="T:SoundFlow.Editing.MidiNote"/> objects with a low-level,
            time-sorted list of raw <see cref="T:SoundFlow.Metadata.Midi.MidiEvent"/>s.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSequence.TicksPerQuarterNote">
            <summary>
            Gets the time division for this sequence, in ticks per quarter note.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.#ctor(SoundFlow.Metadata.Midi.MidiFile)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.MidiSequence"/> class from a <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/>.
            </summary>
            <param name="midiFile">The MIDI file to load data from.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.#ctor(System.Int32,System.Collections.Generic.IEnumerable{SoundFlow.Editing.MidiNote},System.Collections.Generic.IEnumerable{System.ValueTuple{System.Int32,SoundFlow.Editing.ControlPoint}},System.Collections.Generic.IEnumerable{SoundFlow.Editing.ControlPoint},System.Collections.Generic.IEnumerable{SoundFlow.Metadata.Midi.MidiEvent})">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.MidiSequence"/> class from collections of editable MIDI objects.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSequence.Notes">
            <summary>
            Gets a read-only collection of all notes in the sequence.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSequence.Events">
            <summary>
            Gets a read-only list of all raw MIDI events, sorted by time.
            The `DeltaTimeTicks` property in this context stores the absolute tick position.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSequence.LengthTicks">
            <summary>
            Gets the total length of the sequence in ticks, determined by the last event.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSequence.PitchBendEvents">
            <summary>
            Gets a read-only collection of pitch bend events.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiSequence.ControlChangeEvents">
            <summary>
            Gets a read-only dictionary of Control Change events, keyed by CC number.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.ToMidiFile">
            <summary>
            Converts the current state of the sequence into a playable <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/> object with correct delta-times.
            </summary>
            <returns>A new <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/> instance.</returns>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.AddNote(System.Int64,System.Int64,System.Int32,System.Int32)">
            <summary>
            Adds a new note to the sequence.
            </summary>
            <param name="startTick">The absolute start time of the note in ticks.</param>
            <param name="durationTicks">The duration of the note in ticks.</param>
            <param name="noteNumber">The MIDI note number (0-127).</param>
            <param name="velocity">The note-on velocity (1-127).</param>
            <returns>The newly created <see cref="T:SoundFlow.Editing.MidiNote"/> object.</returns>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.RemoveNotes(System.Collections.Generic.IEnumerable{System.Guid})">
            <summary>
            Removes one or more notes from the sequence, identified by their unique IDs.
            </summary>
            <param name="noteIds">An enumerable collection of note IDs to remove.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.ModifyNotes(System.Collections.Generic.IEnumerable{SoundFlow.Editing.NoteModification})">
            <summary>
            Applies a batch of modifications to notes in the sequence. This is the primary method for note editing.
            </summary>
            <param name="modifications">An enumerable collection of <see cref="T:SoundFlow.Editing.NoteModification"/> objects.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.AddControlPoint(System.Int32,System.Int64,System.Int32)">
            <summary>
            Adds a Control Change or Pitch Bend event to the sequence.
            </summary>
            <param name="controllerNumber">The CC number (0-127), or -1 for Pitch Bend.</param>
            <param name="tick">The absolute time in ticks.</param>
            <param name="value">The event value (0-127 for CC, 0-16383 for Pitch Bend).</param>
            <returns>The newly created <see cref="T:SoundFlow.Editing.ControlPoint"/>.</returns>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.RemoveControlPoints(System.Int32,System.Collections.Generic.IEnumerable{System.Guid})">
            <summary>
            Removes one or more control points from the sequence.
            </summary>
            <param name="controllerNumber">The CC number (0-127), or -1 for Pitch Bend.</param>
            <param name="pointIds">An enumerable collection of control point IDs to remove.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.ModifyControlPoints(System.Int32,System.Collections.Generic.IEnumerable{SoundFlow.Editing.ControlPointModification})">
            <summary>
            Applies a batch of modifications to control points in the sequence.
            </summary>
            <param name="controllerNumber">The CC number (0-127), or -1 for Pitch Bend.</param>
            <param name="modifications">An enumerable collection of <see cref="T:SoundFlow.Editing.ControlPointModification"/> objects.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.RebuildEventCache">
            <summary>
            Rebuilds the internal, time-sorted cache of all MIDI events from the high-level editable collections.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.BuildFromMidiFile(SoundFlow.Metadata.Midi.MidiFile)">
            <summary>
            Populates the sequence from a MidiFile, converting all delta-times to absolute ticks
            and building the high-level editable data structures.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.Split(System.Int64)">
            <summary>
            Splits this sequence into two new sequences at a specific tick.
            Notes and events that cross the split point are handled appropriately.
            </summary>
            <param name="splitTick">The absolute tick at which to split the sequence.</param>
            <returns>A tuple containing the two new <see cref="T:SoundFlow.Editing.MidiSequence"/> objects.</returns>
        </member>
        <member name="M:SoundFlow.Editing.MidiSequence.Join(System.Collections.Generic.IEnumerable{System.ValueTuple{System.Int64,SoundFlow.Editing.MidiSequence}})">
            <summary>
            Creates a new MidiSequence by joining multiple sequences together, offsetting their timings.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.MidiTrack">
            <summary>
            Represents a MIDI track within a composition, containing a collection of MIDI segments
            and routing their output to a specific MIDI-controllable target.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiTrack.Name">
            <summary>
            Gets or sets the name of the track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiTrack.Segments">
            <summary>
            Gets the list of <see cref="T:SoundFlow.Editing.MidiSegment"/>s contained within this track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiTrack.Target">
            <summary>
            Gets or sets the target node (e.g., a Synthesizer or a physical MIDI output) that will receive MIDI events from this track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiTrack.Settings">
            <summary>
            Gets or sets the settings applied to this track. While not all settings (like Volume/Pan) directly
            apply to MIDI data, Mute/Solo/IsEnabled and MIDI modifiers are relevant.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.MidiTrack.ParentComposition">
            <summary>
            Gets or sets the parent composition to which this track belongs.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.MidiTrack.#ctor(System.String,SoundFlow.Midi.Interfaces.IMidiDestinationNode,SoundFlow.Editing.TrackSettings)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.MidiTrack"/> class.
            </summary>
            <param name="name">The name of the track.</param>
            <param name="target">The initial target for MIDI events.</param>
            <param name="settings">Optional track settings.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiTrack.Render(System.TimeSpan,System.TimeSpan,System.Span{System.Single})">
            <summary>
            Renders the MIDI output for this track for a given time range by driving its target
            synthesizer to produce audio in a sample-accurate manner.
            </summary>
            <param name="startTime">The global timeline start time for rendering.</param>
            <param name="duration">The duration of audio to render.</param>
            <param name="outputBuffer">The buffer to fill with rendered audio. This method mixes its output into the buffer.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiTrack.AddSegment(SoundFlow.Editing.MidiSegment)">
            <summary>
            Adds a <see cref="T:SoundFlow.Editing.MidiSegment"/> to the track and re-sorts the segments by time.
            </summary>
            <param name="segment">The MIDI segment to add.</param>
        </member>
        <member name="M:SoundFlow.Editing.MidiTrack.RemoveSegment(SoundFlow.Editing.MidiSegment)">
            <summary>
            Removes a <see cref="T:SoundFlow.Editing.MidiSegment"/> from the track.
            </summary>
            <param name="segment">The MIDI segment to remove.</param>
            <returns>True if the segment was successfully removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.MidiTrack.CalculateDuration">
            <summary>
            Calculates the total duration of the track based on the latest ending MIDI segment.
            </summary>
            <returns>A <see cref="T:System.TimeSpan"/> representing the total duration of the track.</returns>
        </member>
        <member name="M:SoundFlow.Editing.MidiTrack.MarkDirty">
            <summary>
            Marks the parent composition as dirty (having unsaved changes).
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.CompositionProjectManager">
            <summary>
            Manages the saving and loading of audio composition projects.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.CompositionProjectManager.SaveProjectAsync(SoundFlow.Abstracts.AudioEngine,SoundFlow.Editing.Composition,System.String,SoundFlow.Editing.Persistence.ProjectSaveOptions,System.Text.Json.Serialization.Metadata.IJsonTypeInfoResolver)">
            <summary>
            Saves the given composition to the specified project file path using the specified options.
            </summary>
            <param name="engine">The audio engine instance of the composition.</param>
            <param name="composition">The composition to save.</param>
            <param name="projectFilePath">The full path where the project file will be saved.</param>
            <param name="options">Configuration options for the save operation. If null, default options will be used.</param>
            <param name="customTypeResolver">
            An optional JSON type resolver for user-defined types. 
            Required if your project contains custom Modifiers or Analyzers in a NativeAOT environment.
            </param>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.CompositionProjectManager.VerifyProjectAsync(System.String,System.String,SoundFlow.Security.Configuration.SignatureConfiguration)">
            <summary>
            Verifies the integrity and authenticity of a project file using a detached digital signature.
            This method checks if the project file has been modified since it was signed.
            </summary>
            <param name="projectFilePath">The path to the project file (.sfproj).</param>
            <param name="signatureFilePath">The path to the signature file (.sig). If null, defaults to projectFilePath + ".sig".</param>
            <param name="config">The signature configuration containing the Public Key.</param>
            <returns>A result containing true if the project is valid and authentic; otherwise, false or an error.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.CompositionProjectManager.LoadProjectAsync(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.String,System.Text.Json.Serialization.Metadata.IJsonTypeInfoResolver)">
            <summary>
            Loads a composition from the specified project file path.
            </summary>
            <param name="engine">The audio engine instance for context.</param>
            <param name="format">The audio format of the composition. Cannot be null.</param>
            <param name="projectFilePath">The full path of the project file to load.</param>
            <param name="customTypeResolver">
            An optional JSON type resolver for user-defined types. 
            Required if your project contains custom Modifiers or Analyzers in a NativeAOT environment.
            </param>
            <returns>A tuple containing the loaded Composition and a list of missing/unresolved source references.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.CompositionProjectManager.RelinkMissingMedia(SoundFlow.Abstracts.AudioEngine,SoundFlow.Editing.Persistence.ProjectSourceReference,System.String,System.String)">
            <summary>
            Attempts to relink a missing audio source reference by providing a new file path.
            If successful, the reference is updated, and a new ISoundDataProvider is resolved.
            The caller is responsible for updating any AudioSegments in the composition that use this source reference.
            </summary>
            <param name="engine">The audio engine instance for context.</param>
            <param name="missingSourceReference">The ProjectSourceReference that is currently marked as missing.</param>
            <param name="newFilePath">The new absolute file path to the audio source.</param>
            <param name="projectDirectory">The base directory of the current project (used for resolving paths).</param>
            <returns>
            True if relinking was successful and a new ISoundDataProvider was resolved for the reference;
            otherwise, false. The updated ISoundDataProvider is set on missingSourceReference.ResolvedDataProvider.
            </returns>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings">
            <summary>
            Represents the serializable settings for an audio segment within a project file.
            This Data Transfer Object (DTO) mirrors the runtime <see cref="T:SoundFlow.Editing.AudioSegmentSettings"/>
            to facilitate persistence, excluding references to live runtime objects and including
            serializable representations of modifiers and analyzers.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.Volume">
            <summary>
            Gets or sets the volume level of the segment. A value of 1.0f is normal volume.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.Pan">
            <summary>
            Gets or sets the stereo pan position for the segment.
            A value of -1.0f means full left, 0.0f means center, and 1.0f means full right.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.FadeInDuration">
            <summary>
            Gets or sets the duration of the fade-in effect at the beginning of the segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.FadeInCurve">
            <summary>
            Gets or sets the curve type used for the fade-in effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.FadeOutDuration">
            <summary>
            Gets or sets the duration of the fade-out effect at the end of the segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.FadeOutCurve">
            <summary>
            Gets or sets the curve type used for the fade-out effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.IsReversed">
            <summary>
            Gets or sets a value indicating whether the segment's audio should be played in reverse.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.Loop">
            <summary>
            Gets or sets the looping settings for the segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.SpeedFactor">
            <summary>
            Gets or sets the playback speed factor for the segment (affects both pitch and tempo). 1.0 is normal.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.IsEnabled">
            <summary>
            Gets or sets a value indicating whether the segment is enabled for playback.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.TimeStretchFactor">
            <summary>
            Gets or sets the time stretch factor for pitch-preserved stretching.
            1.0 means no stretch, more than 1.0 means longer duration, less than 1.0 means shorter duration.
            This value is overridden if <see cref="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.TargetStretchDuration"/> is specified.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.TargetStretchDuration">
            <summary>
            Gets or sets the target duration for pitch-preserved time stretching.
            If this value is set, it takes precedence over <see cref="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.TimeStretchFactor"/>.
            Set to null to use <see cref="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.TimeStretchFactor"/> instead.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.Modifiers">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectEffectData"/> instances representing
            sound modifiers applied to this audio segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.Analyzers">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectEffectData"/> instances representing
            audio analyzers applied to this audio segment.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings.FromRuntime(SoundFlow.Editing.AudioSegmentSettings)">
            <summary>
            Creates a new <see cref="T:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings"/> instance from a runtime <see cref="T:SoundFlow.Editing.AudioSegmentSettings"/> object.
            Note: This method maps scalar properties. Modifiers and Analyzers are typically mapped externally (e.g., in <see cref="T:SoundFlow.Editing.Persistence.ProjectSegment"/>).
            </summary>
            <param name="settings">The runtime <see cref="T:SoundFlow.Editing.AudioSegmentSettings"/> to convert.</param>
            <returns>A new <see cref="T:SoundFlow.Editing.Persistence.ProjectAudioSegmentSettings"/> DTO populated with data from the runtime settings.</returns>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectData">
            <summary>
            Represents the root data structure for serializing an entire <see cref="T:SoundFlow.Editing.Composition"/> project.
            This object encapsulates all necessary information to save and load a project,
            including composition-wide settings, references to audio sources, and the arrangement of tracks.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.ProjectFileVersion">
            <summary>
            Gets or sets the version of the project file format.
            This is used for backward and forward compatibility checks during loading.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.Name">
            <summary>
            Gets or sets the name of the composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.MasterVolume">
            <summary>
            Gets or sets the master volume level for the entire composition.
            A value of 1.0f is normal volume.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.TargetSampleRate">
            <summary>
            Gets or sets the target sample rate for rendering this composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.TargetChannels">
            <summary>
            Gets or sets the target number of channels for rendering this composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.TicksPerQuarterNote">
            <summary>
            Gets or sets the time division in ticks per quarter note for MIDI data in the project.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.TempoTrack">
            <summary>
            Gets or sets the list of tempo markers defining the composition's tempo track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.SourceReferences">
            <summary>
            Gets or sets the list of audio source references used in the composition.
            This list allows for sharing of audio source data between multiple segments
            and enables media management features such as consolidation and relinking.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.Tracks">
            <summary>
            Gets or sets the list of tracks included in the composition.
            Each track contains a sequence of audio segments that contribute to the final mix.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.MidiTracks">
            <summary>
            Gets or sets the list of MIDI tracks included in the composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.MidiTargets">
            <summary>
            Gets or sets the list of MIDI-controllable instrument components in the composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.Modifiers">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectEffectData"/> instances representing
            sound modifiers <see cref="T:SoundFlow.Abstracts.SoundModifier"/> applied to the master composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.Analyzers">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectEffectData"/> instances representing
            sound analyzers <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> applied to the master composition.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectData.MidiMappings">
            <summary>
            Gets or sets the list of serialized MIDI mappings for the composition.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectEffectData">
            <summary>
            Represents the serializable data for a single SoundModifier or AudioAnalyzer instance,
            including its type and parameter values.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectEffectData.TypeName">
            <summary>
            Gets or sets the fully qualified assembly name of the SoundModifier or AudioAnalyzer type.
            Example: "SoundFlow.Modifiers.ParametricEqualizer, SoundFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectEffectData.IsEnabled">
            <summary>
            Gets or sets a value indicating whether this effect/analyzer is currently enabled.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectEffectData.Parameters">
            <summary>
            Gets or sets the JSON representation of the effect's/analyzer's parameters.
            This allows storing arbitrary parameter sets for different effect types.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectMidiMapping">
            <summary>
            Represents the serializable data for a single MIDI mapping, suitable for project files.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.DeviceName">
            <summary>
            Gets or sets the unique name of the source MIDI input device.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.Channel">
            <summary>
            Gets or sets the MIDI channel (0 for Omni).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.MessageType">
            <summary>
            Gets or sets the type of MIDI message.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.MessageParameter">
            <summary>
            Gets or sets the message-specific parameter (e.g., CC number).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.TargetObjectId">
            <summary>
            Gets or sets the unique ID of the target object instance.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.TargetType">
            <summary>
            Gets or sets the type of member being targeted (Property or Method).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.TargetMemberName">
            <summary>
            Gets or sets the name of the property or method to be controlled.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.Behavior">
            <summary>
            Gets or sets the behavior of the mapping (e.g., Absolute, Toggle).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.ActivationThreshold">
            <summary>
            Gets or sets the activation threshold for Toggle or Trigger behaviors.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.MethodArguments">
            <summary>
            Gets or sets the list of arguments for a method call. Only used if TargetType is Method.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiMapping.Transformer">
            <summary>
            Gets or sets the primary value transformer for the mapping.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectMidiSegment">
            <summary>
            Serializable representation of a <see cref="T:SoundFlow.Editing.MidiSegment"/> for project files.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiSegment.Name">
            <summary>
            Gets or sets the name of the MIDI segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiSegment.SourceReferenceId">
            <summary>
            Gets or sets the unique identifier linking this segment to its
            corresponding MIDI data source defined in a <see cref="T:SoundFlow.Editing.Persistence.ProjectSourceReference"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiSegment.TimelineStartTime">
            <summary>
            Gets or sets the starting time of this segment on the overall composition timeline.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectMidiTrack">
            <summary>
            Serializable representation of a <see cref="T:SoundFlow.Editing.MidiTrack"/> for project files.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiTrack.Name">
            <summary>
            Gets or sets the name of the track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiTrack.Segments">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectMidiSegment"/>s contained within this track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiTrack.TargetComponentName">
            <summary>
            Gets or sets the name of the target component for this track's MIDI output.
            This name is used to resolve the reference to the actual component instance during project loading.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectMidiTrack.Settings">
            <summary>
            Gets or sets the configurable settings for this track.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectSaveOptions">
            <summary>
            Provides a set of configurable options for saving a composition project.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSaveOptions.ProjectFileVersion">
            <summary>
            The project file version to write into the saved file. 
            It is recommended to use the library's default version unless you have a specific need for version management.
            The current default is "1.4.0".
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSaveOptions.ConsolidatedMediaFolderName">
            <summary>
            The name of the subfolder where consolidated media files will be stored, relative to the project file.
            Default is "Assets".
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSaveOptions.MaxEmbedSizeBytes">
            <summary>
            The maximum size in bytes for a media source to be embedded directly into the project file as Base64 data.
            Sources larger than this will be consolidated to a file instead (if consolidation is enabled).
            Default is 1MB (1 * 1024 * 1024 bytes).
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSaveOptions.ConsolidateMedia">
            <summary>
            If true, external and in-memory/stream audio sources will be copied into the 'ConsolidatedMediaFolderName'
            to make the project self-contained.
            Default is true.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSaveOptions.EmbedSmallMedia">
            <summary>
            If true, small audio sources (below 'MaxEmbedSizeBytes') will be embedded directly into the project file,
            ignoring the 'ConsolidateMedia' setting for those specific sources.
            Default is true.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSaveOptions.SigningConfiguration">
            <summary>
            Gets or sets the configuration for digitally signing the project file.
            If set, a detached signature file (.sig) will be generated alongside the project file.
            This ensures the integrity and authenticity of the project structure and settings.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectSegment">
            <summary>
            Serializable representation of an <see cref="T:SoundFlow.Editing.AudioSegment"/> for project files.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.Name">
            <summary>
            Gets or sets the name of the audio segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.SourceReferenceId">
            <summary>
            Gets or sets the unique identifier linking this segment to its
            corresponding audio source defined in a <see cref="T:SoundFlow.Editing.Persistence.ProjectSourceReference"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.SourceStartTime">
            <summary>
            Gets or sets the starting time offset within the raw audio source data
            from which this segment begins reading.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.SourceDuration">
            <summary>
            Gets or sets the duration of audio to read from the raw source data,
            starting from <see cref="P:SoundFlow.Editing.Persistence.ProjectSegment.SourceStartTime"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.TimelineStartTime">
            <summary>
            Gets or sets the starting time of this segment on the overall composition timeline.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.Settings">
            <summary>
            Gets or sets the configurable playback and effect settings for this audio segment.
            These settings control aspects like volume, pan, fades, looping, and speed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.Modifiers">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectEffectData"/> instances representing
            sound modifiers <see cref="T:SoundFlow.Abstracts.SoundModifier"/> applied to this segment.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSegment.Analyzers">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectEffectData"/> instances representing
            sound analyzers <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> applied to this segment.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectSourceReference">
            <summary>
            Represents how an audio source is referenced within a saved project.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.Id">
            <summary>
            A unique identifier for this source within the project.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.OriginalAbsolutePath">
            <summary>
            The original absolute file path of the audio source.
            This is stored for reference and potential relinking.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.ConsolidatedRelativePath">
            <summary>
            The relative path to the audio file if it's consolidated within the project folder.
            Null if not consolidated or if embedded.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.IsEmbedded">
            <summary>
            If true, the audio data for this source is embedded directly in the project file.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.EmbeddedDataB64">
            <summary>
            The raw audio data, if IsEmbedded is true. Stored as base64 string for JSON compatibility.
            This will be null if the data is not embedded.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.IsMidiData">
            <summary>
            If true, this reference points to MIDI data instead of audio data.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.OriginalSampleFormat">
            <summary>
            The original sample format of the source if known, especially important for embedded data.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.OriginalSampleRate">
            <summary>
            The original sample rate of the source if known.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.OriginalChannelLayout">
            <summary>
            The original channel layout of the source audio.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.IsMissing">
            <summary>
            For internal use during loading: flag indicating if the media is currently missing.
            Not serialized.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.ResolvedDataProvider">
            <summary>
            For internal use during loading: the resolved ISoundDataProvider instance.
            Not serialized.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectSourceReference.ResolvedMidiDataProvider">
            <summary>
            For internal use during loading: the resolved MidiDataProvider instance.
            Not serialized.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectTempoMarker">
            <summary>
            Represents a serializable tempo marker for saving and loading composition projects.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTempoMarker.Time">
            <summary>
            Gets or sets the time of the tempo marker.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTempoMarker.BeatsPerMinute">
            <summary>
            Gets or sets the tempo in beats per minute.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectTrack">
            <summary>
            Serializable representation of a <see cref="T:SoundFlow.Editing.Track"/> for project files.
            This DTO captures the essential properties of an audio track for persistence,
            including its segments and track-level settings.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrack.Name">
            <summary>
            Gets or sets the name of the track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrack.Segments">
            <summary>
            Gets or sets the list of <see cref="T:SoundFlow.Editing.Persistence.ProjectSegment"/>s contained within this track.
            These segments define the audio content and arrangement on the track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrack.Settings">
            <summary>
            Gets or sets the configurable settings for this track,
            such as master volume, pan, and mute/solo states.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.ProjectTrackSettings">
            <summary>
            Represents the configurable settings for a Track,
            suitable for data transfer and serialization.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.Volume">
            <summary>
            Gets or sets the master volume level for the track.
            A value of 1.0f is normal volume.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.Pan">
            <summary>
            Gets or sets the stereo pan position for the entire track.
            A value of -1.0f means full left, 0.0f means center, and 1.0f means full right.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.IsMuted">
            <summary>
            Gets or sets a value indicating whether the track is muted.
            If true, the track will produce no audio output.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.IsSoloed">
            <summary>
            Gets or sets a value indicating whether the track is soloed.
            If true, only this track (and other soloed tracks) will produce audio output
            in the composition. Non-soloed tracks will be muted.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.IsEnabled">
            <summary>
            Gets or sets a value indicating whether the track is enabled for playback.
            If false, the track will produce silence, regardless of mute/solo settings.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.Modifiers">
            <summary>
            Gets the chain of sound modifiers (effects) to be applied to this track.
            These are represented as DTOs to carry their serializable data.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.Analyzers">
            <summary>
            Gets the chain of audio analyzers to process this track's mixed audio.
            These are represented as DTOs to carry their serializable data.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.ProjectTrackSettings.MidiModifiers">
            <summary>
            Gets the chain of MIDI modifiers (effects) to be applied to this track.
            These are represented as DTOs to carry their serializable data.
            </summary>
        </member>
        <member name="T:SoundFlow.Editing.Persistence.SoundFlowJsonContext">
            <summary>
            Source-generated JSON context for SoundFlow project persistence.
            Includes all DTOs, Primitives, and Built-in Effect types to ensure AOT compatibility.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ValueTupleSingleSingleSingleArray">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ValueTupleSingleSingleSingle">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Boolean">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Byte">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ByteArray">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Char">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Decimal">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Double">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Single">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.SingleArray">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.VoiceActivityDetector">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.FadeCurveType">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.LoopSettings">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MethodArgument">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiInputSource">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiMappingArgumentSource">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiMappingBehavior">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiMappingCurveType">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiMappingSourceType">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiMappingTarget">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MidiMappingTargetType">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ValueTransformer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectAudioSegmentSettings">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectData">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectEffectData">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectMidiMapping">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectMidiSegment">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectMidiTrack">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectSegment">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectSourceReference">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectTempoMarker">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectTrack">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ProjectTrackSettings">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.FilterType">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.SampleFormat">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.IVisualizer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ArpeggiatorModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ArpMode">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ChannelFilterModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.HarmonizerModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.RandomizerModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.TransposeModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.VelocityModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.AlgorithmicReverbModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.BassBoosterModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ChorusModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.CompressorModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.DelayModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.EqualizerBand">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Filter">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.FrequencyBandModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.HighPassModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.LowPassModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.MultiChannelChorusModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ParametricEqualizer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ResamplerModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.TrebleBoosterModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.VocalExtractorModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ContentFingerprintAnalyzer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.IntegrityWatermarkVerifyAnalyzer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.OwnershipWatermarkExtractAnalyzer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.EncryptionConfiguration">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.FingerprintConfiguration">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.SignatureConfiguration">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.WatermarkConfiguration">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.AudioFingerprint">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.FingerprintHash">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.IntegrityWatermarkEmbedModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.OwnershipWatermarkEmbedModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.StreamEncryptionModifier">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.IWatermarkPayload">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.TextPayload">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.AudioFormat">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ChannelLayout">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.LevelMeterAnalyzer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.SpectrumAnalyzer">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListMethodArgument">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectEffectData">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectMidiMapping">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectMidiSegment">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectMidiTrack">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectSegment">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectSourceReference">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectTempoMarker">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListProjectTrack">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListEqualizerBand">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.ListFingerprintHash">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.DateTime">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.DateTimeOffset">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Guid">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.JsonDocument">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.TimeSpan">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.NullableTimeSpan">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Int32">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.NullableInt32">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Int32Array">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Int64">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.IntPtr">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.UIntPtr">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Object">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.SByte">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Int16">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.UInt32">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.UInt64">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.UInt16">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Persistence.SoundFlowJsonContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.SoundFlowJsonContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.SoundFlowJsonContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Editing.Persistence.SoundFlowJsonContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="T:SoundFlow.Editing.TempoMarker">
            <summary>
            Represents a tempo change at a specific point in the composition's timeline.
            </summary>
            <param name="Time">The absolute time on the composition timeline where the tempo change occurs.</param>
            <param name="BeatsPerMinute">The new tempo in beats per minute.</param>
        </member>
        <member name="M:SoundFlow.Editing.TempoMarker.#ctor(System.TimeSpan,System.Double)">
            <summary>
            Represents a tempo change at a specific point in the composition's timeline.
            </summary>
            <param name="Time">The absolute time on the composition timeline where the tempo change occurs.</param>
            <param name="BeatsPerMinute">The new tempo in beats per minute.</param>
        </member>
        <member name="P:SoundFlow.Editing.TempoMarker.Time">
            <summary>The absolute time on the composition timeline where the tempo change occurs.</summary>
        </member>
        <member name="P:SoundFlow.Editing.TempoMarker.BeatsPerMinute">
            <summary>The new tempo in beats per minute.</summary>
        </member>
        <member name="T:SoundFlow.Editing.Track">
            <summary>
            Represents a single audio track within a composition, containing a collection of audio segments
            and applying track-level settings like volume, pan, mute, and solo.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Track.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.Track.Name">
            <summary>
            Gets or sets the name of the track.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Track.Segments">
            <summary>
            Gets the list of <see cref="T:SoundFlow.Editing.AudioSegment"/>s contained within this track.
            Segments are automatically sorted by their timeline start time.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Track.Settings">
            <summary>
            Gets or sets the settings applied to this track, such as volume, pan, mute, and solo.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.Track.ParentComposition">
            <summary>
            Gets or sets the parent composition to which this track belongs.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Track.#ctor(System.String,SoundFlow.Editing.TrackSettings)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Editing.Track"/> class.
            </summary>
            <param name="name">The name of the track. Defaults to "Track".</param>
            <param name="settings">Optional initial settings for the track. If null, default settings are used.</param>
        </member>
        <member name="M:SoundFlow.Editing.Track.MarkDirty">
            <summary>
            Marks the parent composition as dirty (having unsaved changes).
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Track.AddSegment(SoundFlow.Editing.AudioSegment)">
            <summary>
            Adds an <see cref="T:SoundFlow.Editing.AudioSegment"/> to the track.
            The track's segments are re-sorted after adding.
            </summary>
            <param name="segment">The audio segment to add.</param>
        </member>
        <member name="M:SoundFlow.Editing.Track.RemoveSegment(SoundFlow.Editing.AudioSegment,System.Boolean)">
            <summary>
            Removes an <see cref="T:SoundFlow.Editing.AudioSegment"/> from the track.
            </summary>
            <param name="segment">The audio segment to remove.</param>
            <param name="shiftSubsequent">
            If true, all segments on the track that start at or after the removed segment's original start time
            will be shifted earlier by the duration of the removed segment. This closes the gap created by removal.
            </param>
            <returns>True if the segment was successfully removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Track.InsertSegmentAt(SoundFlow.Editing.AudioSegment,System.TimeSpan,System.Boolean)">
            <summary>
            Inserts an <see cref="T:SoundFlow.Editing.AudioSegment"/> into the track at a specified time.
            </summary>
            <param name="segmentToInsert">The audio segment to insert.</param>
            <param name="insertionTime">The timeline point at which to insert the segment.</param>
            <param name="shiftSubsequent">
            If true, all segments on the track that start at or after the insertion point
            will be shifted later by the duration of the inserted segment. This makes space for the new segment.
            </param>
        </member>
        <member name="M:SoundFlow.Editing.Track.SortSegments">
            <summary>
            Sorts the internal list of segments by their <see cref="P:SoundFlow.Editing.AudioSegment.TimelineStartTime"/>.
            This method is called automatically after adding segments.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.Track.CalculateDuration">
            <summary>
            Calculates the total duration of the track based on the latest ending segment.
            </summary>
            <returns>A <see cref="T:System.TimeSpan"/> representing the total duration of the track.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Track.Render(System.TimeSpan,System.TimeSpan,System.Span{System.Single},System.Int32,System.Int32)">
            <summary>
            Renders this track's audio output for a given time range into a provided buffer.
            Segments are processed, and their output is mixed together, then track-level volume and pan are applied.
            </summary>
            <param name="overallStartTime">The global timeline start time for the rendering operation.</param>
            <param name="durationToRender">The duration of audio to render from the track.</param>
            <param name="outputBuffer">The span to fill with the rendered audio samples. This buffer will be cleared before rendering.</param>
            <param name="targetSampleRate">The desired sample rate for the output audio.</param>
            <param name="targetChannels">The desired number of channels for the output audio.</param>
            <returns>The number of samples actually written to the output buffer.</returns>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if an invalid channel value is encountered during pan calculation.</exception>
        </member>
        <member name="M:SoundFlow.Editing.Track.Max(System.TimeSpan,System.TimeSpan)">
            <summary>
            Compares two <see cref="T:System.TimeSpan"/> values and returns the greater one.
            </summary>
            <param name="t1">The first TimeSpan to compare.</param>
            <param name="t2">The second TimeSpan to compare.</param>
            <returns>The larger of the two TimeSpans.</returns>
        </member>
        <member name="M:SoundFlow.Editing.Track.Min(System.TimeSpan,System.TimeSpan)">
            <summary>
            Compares two <see cref="T:System.TimeSpan"/> values and returns the smaller one.
            </summary>
            <param name="t1">The first TimeSpan to compare.</param>
            <param name="t2">The second TimeSpan to compare.</param>
            <returns>The smaller of the two TimeSpans.</returns>
        </member>
        <member name="T:SoundFlow.Editing.TrackSettings">
            <summary>
            Represents the configurable settings for a <see cref="T:SoundFlow.Editing.Track"/> or <see cref="T:SoundFlow.Editing.MidiTrack"/>,
            controlling its overall playback characteristics such as volume, pan, and mute/solo states.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.ParentTrack">
            <summary>
            Gets or sets the parent <see cref="T:SoundFlow.Editing.Track"/> that owns these settings.
            This is used internally to propagate dirty state for audio tracks.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.Modifiers">
            <summary>
            Gets the chain of sound modifiers (effects) to be applied to this track.
            These are applied after all segments on the track are mixed.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.Analyzers">
            <summary>
            Gets the chain of audio analyzers to process this track's mixed audio.
            Analyzers process the audio after all track modifiers have been applied.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.MidiModifiers">
            <summary>
            Gets the chain of MIDI modifiers (effects) to be applied to this track in real-time.
            This is only applicable for <see cref="T:SoundFlow.Editing.MidiTrack"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.Volume">
            <summary>
            Gets or sets the master volume level for the track.
            A value of 1.0f is normal volume.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.Pan">
            <summary>
            Gets or sets the stereo pan position for the entire track.
            A value of -1.0f means full left, 0.0f means center, and 1.0f means full right.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.IsMuted">
            <summary>
            Gets or sets a value indicating whether the track is muted.
            If true, the track will produce no audio output.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.IsSoloed">
            <summary>
            Gets or sets a value indicating whether the track is soloed.
            If true, only this track (and other soloed tracks) will produce audio output
            in the composition. Non-soloed tracks will be muted.
            </summary>
        </member>
        <member name="P:SoundFlow.Editing.TrackSettings.IsEnabled">
            <summary>
            Gets or sets a value indicating whether the track is enabled for playback.
            If false, the track will produce silence, regardless of mute/solo settings.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.Clone">
            <summary>
            Creates a shallow clone of the current <see cref="T:SoundFlow.Editing.TrackSettings"/> instance.
            The cloned instance will have the same scalar property values and copies of the Modifiers and Analyzers lists,
            but its <see cref="P:SoundFlow.Editing.TrackSettings.ParentTrack"/> will be null.
            </summary>
            <returns>A new <see cref="T:SoundFlow.Editing.TrackSettings"/> object with the same property values.</returns>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.MarkDirty">
            <summary>
            Marks the parent track as dirty, propagating the change up the hierarchy to the composition.
            </summary>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.AddModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
            Adds a <see cref="T:SoundFlow.Abstracts.SoundModifier"/> to the end of the track's modifier chain.
            </summary>
            <param name="modifier">The modifier to add. Cannot be null.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="modifier"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.RemoveModifier(SoundFlow.Abstracts.SoundModifier)">
            <summary>
            Removes a specific <see cref="T:SoundFlow.Abstracts.SoundModifier"/> from the track's modifier chain.
            </summary>
            <param name="modifier">The modifier to remove.</param>
            <returns>True if the modifier was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.ReorderModifier(SoundFlow.Abstracts.SoundModifier,System.Int32)">
            <summary>
            Reorders a <see cref="T:SoundFlow.Abstracts.SoundModifier"/> within the track's modifier chain to a new index.
            </summary>
            <param name="modifier">The modifier to reorder.</param>
            <param name="newIndex">The zero-based index where the modifier should be moved to.</param>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.AddAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
            Adds an <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> to the end of the track's analyzer chain.
            </summary>
            <param name="analyzer">The analyzer to add. Cannot be null.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="analyzer"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.RemoveAnalyzer(SoundFlow.Abstracts.AudioAnalyzer)">
            <summary>
            Removes a specific <see cref="T:SoundFlow.Abstracts.AudioAnalyzer"/> from the track's analyzer chain.
            </summary>
            <param name="analyzer">The analyzer to remove.</param>
            <returns>True if the analyzer was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.AddMidiModifier(SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Adds a <see cref="T:SoundFlow.Midi.Abstracts.MidiModifier"/> to the end of the track's MIDI modifier chain.
            </summary>
            <param name="modifier">The MIDI modifier to add. Cannot be null.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="modifier"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.RemoveMidiModifier(SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Removes a specific <see cref="T:SoundFlow.Midi.Abstracts.MidiModifier"/> from the track's MIDI modifier chain.
            </summary>
            <param name="modifier">The MIDI modifier to remove.</param>
            <returns>True if the modifier was found and removed, false otherwise.</returns>
        </member>
        <member name="M:SoundFlow.Editing.TrackSettings.ReorderMidiModifier(SoundFlow.Midi.Abstracts.MidiModifier,System.Int32)">
            <summary>
            Reorders a <see cref="T:SoundFlow.Midi.Abstracts.MidiModifier"/> within the track's modifier chain to a new index.
            </summary>
            <param name="modifier">The MIDI modifier to reorder.</param>
            <param name="newIndex">The zero-based index where the modifier should be moved to.</param>
        </member>
        <member name="T:SoundFlow.Enums.Capability">
            <summary>
                Describes the capabilities of a sound device.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.Capability.Playback">
            <summary>
                The device is used for audio playback.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.Capability.Record">
            <summary>
                The device is used for audio capture.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.Capability.Mixed">
            <summary>
                The device is used for both playback and capture.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.Capability.Loopback">
            <summary>
                The device is used for loopback recording (capturing the output).
            </summary>
        </member>
        <member name="T:SoundFlow.Enums.DeviceType">
            <summary>
            Represents the type of audio device.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.DeviceType.Playback">
            <summary>
            Device used for audio playback.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.DeviceType.Capture">
            <summary>
            Device used for audio capture.
            </summary>
        </member>
        <member name="T:SoundFlow.Enums.FilterType">
            <summary>
            Types of filters supported by the Parametric Equalizer.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.Peaking">
            <summary>
            A peaking equalizer boosts or cuts a specific frequency range.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.LowShelf">
            <summary>
            A low-shelf equalizer boosts or cuts all frequencies below a specific frequency.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.HighShelf">
            <summary>
            A high-shelf equalizer boosts or cuts all frequencies above a specific frequency.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.LowPass">
            <summary>
            A low-pass filter removes high frequencies from the audio signal.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.HighPass">
            <summary>
            A high-pass filter removes low frequencies from the audio signal.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.BandPass">
            <summary>
            A band-pass filter removes all frequencies outside a specific frequency range.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.Notch">
            <summary>
            A notch filter removes a specific frequency range from the audio signal.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.FilterType.AllPass">
            <summary>
            An all-pass filter changes the phase of the audio signal without affecting its frequency response.
            </summary>
        </member>
        <member name="T:SoundFlow.Enums.PlaybackState">
            <summary>
            Describes the current state of a player or recorder.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.PlaybackState.Stopped">
            <summary>
            The player or recorder is stopped.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.PlaybackState.Playing">
            <summary>
            The player or recorder is playing.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.PlaybackState.Paused">
            <summary>
            The player or recorder is paused.
            </summary>
        </member>
        <member name="T:SoundFlow.Enums.SampleFormat">
            <summary>
            Enum for sample formats.
            </summary>
            <remarks>
            Currently only contains standard formats.
            </remarks>
        </member>
        <member name="F:SoundFlow.Enums.SampleFormat.Unknown">
            <summary>
            Unknown sample format.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.SampleFormat.U8">
            <summary>
            Unsigned 8-bit format.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.SampleFormat.S16">
            <summary>
            Signed 16-bit format.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.SampleFormat.S24">
            <summary>
            Signed 24-bit format.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.SampleFormat.S32">
            <summary>
            Signed 32-bit format.
            </summary>
        </member>
        <member name="F:SoundFlow.Enums.SampleFormat.F32">
            <summary>
            32-bit floating point format.
            </summary>
        </member>
        <member name="T:SoundFlow.Exceptions.BackendException">
            <summary>
                An exception thrown when an error occurs in a audio backend.
            </summary>
            <param name="backendName">The name of the audio backend that threw the exception.</param>
            <param name="resultCode">The result returned by the audio backend.</param>
            <param name="message">The error message of the exception.</param>
        </member>
        <member name="M:SoundFlow.Exceptions.BackendException.#ctor(System.String,System.Int32,System.String)">
            <summary>
                An exception thrown when an error occurs in a audio backend.
            </summary>
            <param name="backendName">The name of the audio backend that threw the exception.</param>
            <param name="resultCode">The result returned by the audio backend.</param>
            <param name="message">The error message of the exception.</param>
        </member>
        <member name="P:SoundFlow.Exceptions.BackendException.Backend">
            <summary>
                The name of the audio backend that threw the exception.
            </summary>
        </member>
        <member name="P:SoundFlow.Exceptions.BackendException.ResultCode">
            <summary>
                The result returned by the audio backend.
            </summary>
        </member>
        <member name="M:SoundFlow.Exceptions.BackendException.ToString">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Interfaces.MappingScale">
            <summary>
            Defines the scaling behavior for a controllable parameter when mapped to a normalized input (e.g., 0.0 to 1.0).
            </summary>
        </member>
        <member name="F:SoundFlow.Interfaces.MappingScale.Linear">
            <summary>
            The parameter responds linearly to the input. Suitable for parameters like volume, pan, or wet/dry mix.
            </summary>
        </member>
        <member name="F:SoundFlow.Interfaces.MappingScale.Logarithmic">
            <summary>
            The parameter responds logarithmically to the input. This provides finer control at the lower end of the range
            and is ideal for frequency-based parameters like filter cutoff to match human perception.
            </summary>
        </member>
        <member name="T:SoundFlow.Interfaces.ControllableParameterAttribute">
            <summary>
            An attribute used to decorate properties on `IMidiMappable` objects, exposing them for real-time control
            and providing metadata for user interfaces and the mapping system.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ControllableParameterAttribute.DisplayName">
            <summary>
            Gets the user-friendly display name for the parameter.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ControllableParameterAttribute.MinValue">
            <summary>
            Gets the minimum valid value for the parameter.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ControllableParameterAttribute.MaxValue">
            <summary>
            Gets the maximum valid value for the parameter.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ControllableParameterAttribute.Scale">
            <summary>
            Gets the scaling curve that should be used when mapping a normalized value (0.0 to 1.0) to this parameter.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ControllableParameterAttribute.#ctor(System.String,System.Double,System.Double,SoundFlow.Interfaces.MappingScale)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Interfaces.ControllableParameterAttribute"/> class.
            </summary>
            <param name="displayName">The user-friendly display name for the parameter.</param>
            <param name="minValue">The minimum valid value for the parameter.</param>
            <param name="maxValue">The maximum valid value for the parameter.</param>
            <param name="scale">The scaling curve to use for mapping. Defaults to Linear.</param>
        </member>
        <member name="T:SoundFlow.Interfaces.ICodecFactory">
            <summary>
            Defines a factory for creating custom <see cref="T:SoundFlow.Interfaces.ISoundDecoder"/> and <see cref="T:SoundFlow.Interfaces.ISoundEncoder"/> instances.
            Implement this interface to add support for new audio formats or to provide alternative implementations
            for existing formats.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ICodecFactory.FactoryId">
            <summary>
            Gets a unique, lowercase string identifier for this factory implementation. It is recommended to use
            a namespace-qualified name to avoid collisions, e.g., "mycompany.customflacfactory".
            This ID is used for unregistering and re-prioritizing codecs.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ICodecFactory.SupportedFormatIds">
            <summary>
            Gets a collection of unique, lowercase string identifiers for the audio formats this factory supports.
            For example, a factory for FFmpeg might return ["mp3", "aac", "ogg", "opus"].
            A factory for a specific library would return a single format, like ["flac"].
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ICodecFactory.Priority">
            <summary>
            Gets the default priority of this factory. This priority is used upon initial registration but can be
            overridden at runtime using <see cref="M:SoundFlow.Abstracts.AudioEngine.SetCodecPriority(System.String,System.Int32)"/>. When multiple factories are
            registered for the same format, the one with the highest priority number will be tried first.
            Built-in engine codecs use a low priority (e.g., 0).
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ICodecFactory.CreateDecoder(System.IO.Stream,System.String,SoundFlow.Structs.AudioFormat)">
            <summary>
            Creates a new decoder instance for one of the supported formats.
            </summary>
            <param name="stream">The input stream containing the audio data.</param>
            <param name="formatId">The specific format identifier being requested (e.g., "mp3", "flac"). This allows a multi-format factory to know which decoder to create.</param>
            <param name="format">The audio format parameters discovered by the engine.</param>
            <returns>A valid <see cref="T:SoundFlow.Interfaces.ISoundDecoder"/> instance on success, or <c>null</c> if this factory fails to create a decoder for the given stream.</returns>
        </member>
        <member name="M:SoundFlow.Interfaces.ICodecFactory.TryCreateDecoder(System.IO.Stream,SoundFlow.Structs.AudioFormat@,System.Nullable{SoundFlow.Structs.AudioFormat})">
            <summary>
            Attempts to create a decoder by probing the given stream directly.
            This method is called by the engine when the audio format is unknown.
            </summary>
            <param name="stream">The input stream containing audio data. The stream must be seekable.</param>
            <param name="detectedFormat">When this method returns, contains the audio format detected by the decoder if successful.</param>
            <param name="hintFormat">An optional hint for the desired output audio format. The factory should attempt to produce this format if possible.</param>
            <returns>A valid <see cref="T:SoundFlow.Interfaces.ISoundDecoder"/> instance on success, or <c>null</c> if the factory cannot handle the stream.</returns>
        </member>
        <member name="M:SoundFlow.Interfaces.ICodecFactory.CreateEncoder(System.IO.Stream,System.String,SoundFlow.Structs.AudioFormat)">
            <summary>
            Creates a new encoder instance for one of the supported formats.
            </summary>
            <param name="stream">The output stream to write encoded audio to.</param>
            <param name="formatId">The specific format identifier being requested (e.g., "wav").</param>
            <param name="format">The audio format parameters for the raw audio to be encoded.</param>
            <returns>A valid <see cref="T:SoundFlow.Interfaces.ISoundEncoder"/> instance on success, or <c>null</c> if encoding is not supported or fails.</returns>
        </member>
        <member name="T:SoundFlow.Interfaces.IMidiBackend">
            <summary>
            Defines the contract for a pluggable MIDI backend, responsible for creating and managing MIDI devices.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.IMidiBackend.Initialize(SoundFlow.Abstracts.AudioEngine)">
            <summary>
            Initializes the backend and provides it with a reference to the parent audio engine.
            This allows the backend to subscribe to engine lifecycle events for features like synchronization.
            </summary>
            <param name="engine">The parent audio engine instance.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.IMidiBackend.CreateMidiInputDevice(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Creates a MIDI input device instance for the specified device.
            </summary>
            <param name="deviceInfo">The informational struct for the device to create.</param>
            <returns>An initialized <see cref="T:SoundFlow.Midi.Devices.MidiInputDevice"/>.</returns>
        </member>
        <member name="M:SoundFlow.Interfaces.IMidiBackend.CreateMidiOutputDevice(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Creates a MIDI output device instance for the specified device.
            </summary>
            <param name="deviceInfo">The informational struct for the device to create.</param>
            <returns>An initialized <see cref="T:SoundFlow.Midi.Devices.MidiOutputDevice"/>.</returns>
        </member>
        <member name="M:SoundFlow.Interfaces.IMidiBackend.UpdateMidiDevicesInfo(SoundFlow.Midi.Structs.MidiDeviceInfo[]@,SoundFlow.Midi.Structs.MidiDeviceInfo[]@)">
            <summary>
            Retrieves the list of available MIDI input and output devices from the backend.
            </summary>
            <param name="inputs">An output parameter that will be populated with the list of available MIDI input devices.</param>
            <param name="outputs">An output parameter that will be populated with the list of available MIDI output devices.</param>
        </member>
        <member name="T:SoundFlow.Interfaces.IMidiMappable">
            <summary>
            Defines an interface for objects that can be a target for MIDI mapping.
            It ensures that any mappable object has a stable, unique identifier.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.IMidiMappable.Id">
            <summary>
            Gets the unique identifier for this mappable instance.
            This ID is used to persist and restore MIDI mappings.
            </summary>
        </member>
        <member name="T:SoundFlow.Interfaces.ISoundDataProvider">
            <summary>
                Interface for a sound data provider.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.Position">
            <summary>
                Gets the current playback position in samples.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.Length">
            <summary>
                Gets the total length of the audio data in samples.
                May be 0 or -1 if the length is unknown (e.g., for streaming audio).
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.CanSeek">
            <summary>
                Gets a value indicating whether the data source supports seeking.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.SampleFormat">
            <summary>
                Gets the format of the audio samples.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.SampleRate">
            <summary>
                Gets or sets the target sample rate of the audio data.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.IsDisposed">
            <summary>
                Gets a value indicating whether the data source has been disposed.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDataProvider.FormatInfo">
            <summary>
            Gets the detailed format and tag information read from the source file.
            This will be null if the provider is not sourced from a file with metadata (e.g., raw data, microphone).
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundDataProvider.ReadBytes(System.Span{System.Single})">
            <summary>
                Reads the specified number of audio bytes into the given buffer asynchronously.
            </summary>
            <param name="buffer">The buffer to write the bytes to.</param>
            <returns>
                A task representing the asynchronous read operation. The task result contains the number of bytes actually
                read. May be less than the requested number if the end of the data is reached.
            </returns>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundDataProvider.Seek(System.Int32)">
            <summary>
                Sets the playback position to the specified sample offset.
            </summary>
            <param name="offset">The sample offset to seek to.</param>
        </member>
        <member name="E:SoundFlow.Interfaces.ISoundDataProvider.EndOfStreamReached">
            <summary>
                Raised when the end of the audio stream is reached.
            </summary>
        </member>
        <member name="E:SoundFlow.Interfaces.ISoundDataProvider.PositionChanged">
            <summary>
                Raised when the playback position changes.
            </summary>
        </member>
        <member name="T:SoundFlow.Interfaces.PositionChangedEventArgs">
            <summary>
                Event arguments for the PositionChanged event.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.PositionChangedEventArgs.#ctor(System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Interfaces.PositionChangedEventArgs" /> class.
            </summary>
            <param name="newPosition">The new playback position in samples.</param>
        </member>
        <member name="P:SoundFlow.Interfaces.PositionChangedEventArgs.NewPosition">
            <summary>
                Gets the new playback position in samples.
            </summary>
        </member>
        <member name="T:SoundFlow.Interfaces.ISoundDecoder">
            <summary>
                An interface representing a sound decoder.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDecoder.IsDisposed">
            <summary>
                Gets the value that determines if this decoder has been disposed.
                Once disposed, this instance is useless.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDecoder.Length">
            <summary>
                Gets the length of the PCM frames known to the decoder.
                May be zero if audio is a stream or simply unknown to the audio format.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDecoder.SampleFormat">
            <summary>
                Gets the format of the audio samples.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDecoder.Channels">
            <summary>
            Gets the number of channels in the decoded audio.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundDecoder.SampleRate">
            <summary>
            Gets the sample rate of the decoded audio.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundDecoder.Seek(System.Int32)">
            <summary>
                Seeks the decoder to a desired sample position from the beginning of the audio data.
            </summary>
            <param name="offset">Some offset in samples.</param>
            <returns>True, if seeking is possible and was successful.</returns>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundDecoder.Decode(System.Span{System.Single})">
            <summary>
                Decodes the next block of samples, writing samples into <paramref name="samples" />.
            </summary>
            <param name="samples">The buffer to write decoded samples into.</param>
            <returns>The actual number of samples decoded, will be less than or equal to the length of <paramref name="samples" />.</returns>
        </member>
        <member name="E:SoundFlow.Interfaces.ISoundDecoder.EndOfStreamReached">
            <summary>
                Raised when the end of the audio stream is reached.
            </summary>
        </member>
        <member name="T:SoundFlow.Interfaces.ISoundEncoder">
            <summary>
            An interface representing a sound encoder.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundEncoder.IsDisposed">
            <summary>
            Gets the value that determines if this encoder has been disposed.
            Once disposed, this instance is useless.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundEncoder.Encode(System.Span{System.Single})">
            <summary>
            Encodes the given samples and writes them to the output.
            </summary>
            <param name="samples">The buffer containing the PCM samples to encode.</param>
            <returns>The number of samples successfully encoded.</returns>
        </member>
        <member name="T:SoundFlow.Interfaces.ISoundPlayer">
            <summary>
            Defines the interface for a sound player component.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.State">
            <summary>
            Gets the current playback state of the sound player.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.DataProvider">
            <summary>
            Gets the data provider that supplies audio for playback.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.IsLooping">
            <summary>
            Gets a value indicating whether the sound player is currently looping the audio.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.PlaybackSpeed">
            <summary>
            Gets or sets the playback speed of the sound player.
            A value of 1.0 represents normal speed. Values greater than 1.0 increase the speed, and values less than 1.0 decrease it.
            </summary>
            <remarks>The current implementation uses linear interpolation which may affect the pitch.</remarks>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.Volume">
            <summary>
            Gets or sets the volume of the sound player
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.Time">
            <summary>
            Gets the current playback time in seconds, relative to the beginning of the audio.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.Duration">
            <summary>
            Gets the total duration of the audio in seconds.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.LoopStartSamples">
            <summary>
            Gets the loop start point in samples.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.LoopEndSamples">
            <summary>
            Gets the loop end point in samples. -1 indicates loop to the natural end of the audio.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.LoopStartSeconds">
            <summary>
            Gets the loop start point in seconds.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.ISoundPlayer.LoopEndSeconds">
            <summary>
            Gets the loop end point in seconds. -1 indicates loop to the natural end of the audio.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.Play">
            <summary>
            Starts or resumes playback of the audio from the current position.
            If the player is already playing, calling this method may have no effect.
            If the player is stopped, playback starts from the beginning.
            If the player is paused, playback resumes from the paused position.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.Pause">
            <summary>
            Pauses playback of the audio at the current position.
            If the player is already paused or stopped, calling this method may have no effect.
            Playback can be resumed from the paused position by calling <see cref="M:SoundFlow.Interfaces.ISoundPlayer.Play"/>.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.Stop">
            <summary>
            Stops playback of the audio and resets the playback position to the beginning.
            If the player is already stopped, calling this method has no effect.
            After stopping, playback can be restarted from the beginning by calling <see cref="M:SoundFlow.Interfaces.ISoundPlayer.Play"/>.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.Seek(System.TimeSpan,System.IO.SeekOrigin)">
            <summary>
            Seeks to a specific time in the audio playback using TimeSpan.
            </summary>
            <param name="time">The time to seek to as a TimeSpan, relative to the beginning of the audio.</param>
            <param name="seekOrigin">
            SeekOrigin - specifies how to calculate the offset
            <ul>
            <li><b>SeekOrigin.Begin</b>: Beginning of the audio stream</li>
            <li><b>SeekOrigin.Current</b>: Current position of the audio stream</li>
            <li><b>SeekOrigin.End:</b> Duration of the audio stream (offset has to be negative)</li>
            </ul>
            </param>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.Seek(System.Single)">
            <summary>
            Seeks to a specific time in the audio playback.
            </summary>
            <param name="time">The time in seconds to seek to, relative to the beginning of the audio.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.Seek(System.Int32)">
            <summary>
            Seeks to a specific sample offset in the audio playback.
            </summary>
            <param name="sampleOffset">The sample offset to seek to, relative to the beginning of the audio data.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.SetLoopPoints(System.Single,System.Nullable{System.Single})">
            <summary>
            Sets the loop points for the sound player in seconds.
            </summary>
            <param name="startTime">The loop start time in seconds. Must be non-negative.</param>
            <param name="endTime">The loop end time in seconds, optional. Use -1 or null to loop to the natural end of the audio. Must be greater than or equal to startTime, or -1.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.SetLoopPoints(System.Int32,System.Int32)">
            <summary>
            Sets the loop points for the sound player in samples.
            </summary>
            <param name="startSample">The loop start sample. Must be non-negative.</param>
            <param name="endSample">The loop end sample, optional. Use -1 or null to loop to the natural end of the audio. Must be greater than or equal to startSample, or -1.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.ISoundPlayer.SetLoopPoints(System.TimeSpan,System.Nullable{System.TimeSpan})">
            <summary>
            Sets the loop points for the sound player using TimeSpan.
            </summary>
            <param name="startTime">The loop start time as a TimeSpan. Must be non-negative.</param>
            <param name="endTime">The loop end time as a TimeSpan, optional. Use null to loop to the natural end of the audio. Must be greater than or equal to startTime, or null.</param>
        </member>
        <member name="T:SoundFlow.Interfaces.IVisualizationContext">
            <summary>
            Provides methods for drawing visualization elements.
            This interface abstracts the underlying graphics system.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.IVisualizationContext.Clear">
            <summary>
            Clears the drawing area.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.IVisualizationContext.DrawLine(System.Single,System.Single,System.Single,System.Single,SoundFlow.Interfaces.Color,System.Single)">
            <summary>
            Draws a line.
            </summary>
            <param name="x1">The x-coordinate of the starting point.</param>
            <param name="y1">The y-coordinate of the starting point.</param>
            <param name="x2">The x-coordinate of the ending point.</param>
            <param name="y2">The y-coordinate of the ending point.</param>
            <param name="color">The color of the line.</param>
            <param name="thickness">The thickness of the line.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.IVisualizationContext.DrawRectangle(System.Single,System.Single,System.Single,System.Single,SoundFlow.Interfaces.Color)">
            <summary>
            Draws a rectangle.
            </summary>
            <param name="x">The x-coordinate of the top-left corner.</param>
            <param name="y">The y-coordinate of the top-left corner.</param>
            <param name="width">The width of the rectangle.</param>
            <param name="height">The height of the rectangle.</param>
            <param name="color">The color of the rectangle.</param>
        </member>
        <member name="T:SoundFlow.Interfaces.IVisualizer">
            <summary>
            Represents a visualizer that can process audio data and generate visualization data.
            </summary>
        </member>
        <member name="P:SoundFlow.Interfaces.IVisualizer.Name">
            <summary>
            Gets the name of the visualizer.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.IVisualizer.ProcessOnAudioData(System.ReadOnlySpan{System.Single})">
            <summary>
            Processes the audio data. This method is called by an analyzer component.
            </summary>
            <param name="audioData">The audio data to process.</param>
        </member>
        <member name="M:SoundFlow.Interfaces.IVisualizer.Render(SoundFlow.Interfaces.IVisualizationContext)">
            <summary>
            Updates the visualization. This method should be called periodically to render the visualization.
            </summary>
            <param name="context">An object providing methods to draw the visualization (defined later).</param>
        </member>
        <member name="E:SoundFlow.Interfaces.IVisualizer.VisualizationUpdated">
            <summary>
            Raised when the visualization data needs to be redrawn.
            </summary>
        </member>
        <member name="T:SoundFlow.Interfaces.Color">
            <summary>
            Represents a color.
            </summary>
        </member>
        <member name="M:SoundFlow.Interfaces.Color.#ctor(System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Represents a color.
            </summary>
        </member>
        <member name="F:SoundFlow.Interfaces.Color.R">
            <summary>
            The red component (0-1).
            </summary>
        </member>
        <member name="F:SoundFlow.Interfaces.Color.G">
            <summary>
            The green component (0-1).
            </summary>
        </member>
        <member name="F:SoundFlow.Interfaces.Color.B">
            <summary>
            The blue component (0-1).
            </summary>
        </member>
        <member name="F:SoundFlow.Interfaces.Color.A">
            <summary>
            The alpha component (0-1).
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Abstracts.BaseSoundFormatReader">
            <summary>
                Base class for format readers to reduce sync/async code duplication.
                The synchronous Read method simply calls the asynchronous one and waits.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Abstracts.ISoundFormatReader">
            <summary>
                Internal interface for format-specific parsers.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Abstracts.ISoundFormatWriter">
            <summary>
            Internal interface for format-specific tag writers.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Abstracts.ISoundFormatWriter.RemoveTagsAsync(System.String,System.String)">
            <summary>
            Removes existing tags from a source file and writes the result to a destination file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Abstracts.ISoundFormatWriter.WriteTagsAsync(System.String,System.String,SoundFlow.Metadata.Models.SoundTags)">
            <summary>
            Writes the provided tags to a new destination file, using the audio data from the source file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.Enums.MetaEventType">
            <summary>
            Defines the types for Standard MIDI File meta-events.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.SequenceNumber">
            <summary>
            Sequence Number event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.Text">
            <summary>
            Text event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.CopyrightNotice">
            <summary>
            Copyright Notice event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.TrackName">
            <summary>
            Sequence/Track Name event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.InstrumentName">
            <summary>
            Instrument Name event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.Lyric">
            <summary>
            Lyric event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.Marker">
            <summary>
            Marker event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.CuePoint">
            <summary>
            Cue Point event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.MidiChannelPrefix">
            <summary>
            MIDI Channel Prefix event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.EndOfTrack">
            <summary>
            End of Track event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.SetTempo">
            <summary>
            Set Tempo event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.SmpteOffset">
            <summary>
            SMPTE Offset event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.TimeSignature">
            <summary>
            Time Signature event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.KeySignature">
            <summary>
            Key Signature event.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Midi.Enums.MetaEventType.SequencerSpecific">
            <summary>
            Sequencer-Specific Meta-Event.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.MidiEvent">
            <summary>
            Base record for any event found within a MIDI file track.
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event on the same track, in MIDI ticks.</param>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.MidiEvent.#ctor(System.Int64)">
            <summary>
            Base record for any event found within a MIDI file track.
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event on the same track, in MIDI ticks.</param>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiEvent.DeltaTimeTicks">
            <summary>The time elapsed since the previous event on the same track, in MIDI ticks.</summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.ChannelEvent">
            <summary>
            Represents a MIDI channel message event (e.g., Note On, Control Change).
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event.</param>
            <param name="Message">The underlying MIDI channel message.</param>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.ChannelEvent.#ctor(System.Int64,SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Represents a MIDI channel message event (e.g., Note On, Control Change).
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event.</param>
            <param name="Message">The underlying MIDI channel message.</param>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.ChannelEvent.Message">
            <summary>The underlying MIDI channel message.</summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.SysExEvent">
            <summary>
            Represents a System Exclusive (SysEx) message event.
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event.</param>
            <param name="Data">The raw SysEx data bytes.</param>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.SysExEvent.#ctor(System.Int64,System.Byte[])">
            <summary>
            Represents a System Exclusive (SysEx) message event.
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event.</param>
            <param name="Data">The raw SysEx data bytes.</param>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.SysExEvent.Data">
            <summary>The raw SysEx data bytes.</summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.MetaEvent">
            <summary>
            Represents a meta-event within a MIDI file, containing non-MIDI data like tempo, lyrics, or track name.
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event.</param>
            <param name="Type">The type of the meta-event.</param>
            <param name="Data">The raw data associated with the meta-event.</param>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.MetaEvent.#ctor(System.Int64,SoundFlow.Metadata.Midi.Enums.MetaEventType,System.Byte[])">
            <summary>
            Represents a meta-event within a MIDI file, containing non-MIDI data like tempo, lyrics, or track name.
            </summary>
            <param name="DeltaTimeTicks">The time elapsed since the previous event.</param>
            <param name="Type">The type of the meta-event.</param>
            <param name="Data">The raw data associated with the meta-event.</param>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MetaEvent.Type">
            <summary>The type of the meta-event.</summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MetaEvent.Data">
            <summary>The raw data associated with the meta-event.</summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.MidiFile">
            <summary>
            Represents a parsed Standard MIDI File (SMF), containing header information and all tracks.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.Format">
            <summary>
            Gets the MIDI file format type (0, 1, or 2).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.TicksPerQuarterNote">
            <summary>
            Gets the time division, specifying the number of ticks per quarter note.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.Tracks">
            <summary>
            Gets the list of tracks contained in the MIDI file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.NumberOfNotes">
            <summary>
            Calculates the total number of notes in the file.
            This counts all Note On events with a velocity greater than 0.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.NoteRange">
            <summary>
            Calculates the lowest and highest note numbers (pitch) present in the file.
            Returns null if there are no notes in the file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.InitialTimeSignature">
            <summary>
            Gets the initial time signature of the file.
            Returns null if no time signature event is found.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.InitialBeatsPerMinute">
            <summary>
            Gets the initial tempo in Beats Per Minute (BPM).
            Returns null if no tempo event is found.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiFile.NoteRangeName">
            <summary>
            Gets the note range as a formatted string (e.g., "A2-C6").
            Returns null if there are no notes in the file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.MidiFile.ToNoteName(System.Int32)">
            <summary>
            Converts a MIDI note number into its scientific pitch notation string (e.g., 60 -> "C4").
            </summary>
            <param name="noteNumber">The MIDI note number (0-127).</param>
            <returns>The note name string.</returns>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.MidiTrack">
            <summary>
            Represents a single track within a MIDI file, containing a sequence of MIDI events.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Midi.MidiTrack.Events">
            <summary>
            Gets the list of MIDI events in this track.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.MidiFileParser">
            <summary>
            A parser for Standard MIDI Files (.mid), capable of reading header and track chunks,
            handling various event types, and supporting running status.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.MidiFileParser.Parse(System.IO.Stream)">
            <summary>
            Parses a MIDI file from the given stream.
            </summary>
            <param name="stream">The stream containing the MIDI file data. Must be readable.</param>
            <returns>A <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/> object representing the parsed data.</returns>
            <exception cref="T:System.IO.InvalidDataException">Thrown if the file is not a valid MIDI file.</exception>
        </member>
        <member name="T:SoundFlow.Metadata.Midi.MidiFileWriter">
            <summary>
            A utility to write a <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/> object to a stream in the Standard MIDI File format.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Midi.MidiFileWriter.Write(SoundFlow.Metadata.Midi.MidiFile,System.IO.Stream)">
            <summary>
            Writes a MidiFile object to the specified stream.
            </summary>
            <param name="midiFile">The MidiFile object to write.</param>
            <param name="stream">The output stream.</param>
        </member>
        <member name="T:SoundFlow.Metadata.Models.CuePoint">
            <summary>
                Represents a single track or point within a Cue Sheet.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.CuePoint.Id">
            <summary>
            Gets the unique identifier for the cue point or track number (e.g., in a CD context).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.CuePoint.PositionSamples">
            <summary>
            Gets the position of the cue point in audio samples from the beginning of the file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.CuePoint.Label">
            <summary>
            Gets the label or title associated with the cue point.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.CuePoint.StartTime">
            <summary>
            Gets the time offset of the cue point, usually calculated from the <see cref="P:SoundFlow.Metadata.Models.CuePoint.PositionSamples"/>.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Models.CueSheet">
            <summary>
                Represents an embedded Cue Sheet with a collection of cue points.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.CueSheet.CuePoints">
            <summary>
            Gets a read-only list of the cue points contained in this sheet.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.CueSheet.ToString">
            <summary>
            Returns a string representation of the Cue Sheet, listing its points.
            </summary>
            <returns>A formatted string detailing the cue points.</returns>
        </member>
        <member name="T:SoundFlow.Metadata.Models.M4aAtom">
            <summary>
            Represents a generic M4A/MP4 atom (or "box") for parsing and rebuilding.
            This version is designed to work with an in-memory stream of a single parent atom (e.g., 'moov').
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.M4aAtom.#ctor(System.String)">
            <summary>
            Represents a generic M4A/MP4 atom (or "box") for parsing and rebuilding.
            This version is designed to work with an in-memory stream of a single parent atom (e.g., 'moov').
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.M4aAtom.ParseAtoms(SoundFlow.Metadata.Utilities.BigEndianBinaryReader,System.Int64,SoundFlow.Metadata.Models.M4aAtom)">
            <summary>
            Recursively parses a sequence of sibling atoms from a stream until the end position is reached.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.M4aAtom.ParseChildren(SoundFlow.Metadata.Utilities.BigEndianBinaryReader,System.Int64)">
            <summary>
            Parses the children for this parent atom.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.M4aAtom.FindDescendant(System.String)">
            <summary>
            Recursively searches through the children of this atom to find a descendant with the specified type.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.M4aAtom.ToByteArray">
            <summary>
            Recursively serializes this atom and its children into a byte array.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Models.DurationAccuracy">
            <summary>
                Specifies the desired accuracy vs. speed for duration calculation.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Models.DurationAccuracy.FastEstimate">
            <summary>
                Use the bitrate of the first frame to estimate the duration.
                This method is faster but may not be accurate for VBR files.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Models.DurationAccuracy.AccurateScan">
            <summary>
                Scan the entire file to accurately calculate the duration.
                This method is slower but provides more accurate results for VBR files.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Models.ReadOptions">
            <summary>
                Configuration options to control the parsing behavior of the AudioReader.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.ReadOptions.ReadTags">
            <summary>
                Gets or sets a value indicating whether to parse metadata tags (artist, title, etc.).
                Default is true.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.ReadOptions.ReadAlbumArt">
            <summary>
                Gets or sets a value indicating whether to parse embedded album art.
                This setting is ignored if ReadTags is false. Default is false.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.ReadOptions.ReadCueSheet">
            <summary>
                Gets or sets a value indicating whether to parse embedded CUE sheets.
                Default is false.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.ReadOptions.DurationAccuracy">
            <summary>
                Gets or sets the desired accuracy for duration calculation, especially for VBR files.
                Default is AccurateScan.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Models.BitrateMode">
            <summary>
                The mode of the audio bitrate (Constant, Variable, etc.).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Models.BitrateMode.CBR">
            <summary>
            Constant bitrate (CBR) mode. Indicates that the audio bitrate is constant.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Models.BitrateMode.VBR">
            <summary>
            Variable bitrate (VBR) mode. Indicates that the audio bitrate varies.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Models.BitrateMode.ABR">
            <summary>
            Average bitrate (ABR) mode. Indicates that the audio bitrate is averaged.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.Models.BitrateMode.Unknown">
            <summary>
            Unknown bitrate mode. Indicates that the bitrate mode is unknown.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Models.SoundFormatInfo">
            <summary>
                Holds the format, tag, and cue information for an audio file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.FormatName">
            <summary>
                The common name of the audio format (e.g., "WAV", "MP3").
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.FormatIdentifier">
            <summary>
                The unique, lowercase string identifier for the audio format (e.g., "wav", "mp3", "flac").
                This is used by the engine to resolve the correct codec factory.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.CodecName">
            <summary>
                The name of the specific audio codec used (e.g., "PCM", "MPEG Layer III").
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.ContainerVersion">
            <summary>
                The version of the container or format (e.g., "MPEG 1", "AIFF-C").
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.Duration">
            <summary>
                The duration of the audio.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.ChannelCount">
            <summary>
                The number of audio channels (1 for mono, 2 for stereo).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.SampleRate">
            <summary>
                The sample rate, in Hertz (e.g., 44100).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.BitsPerSample">
            <summary>
                The number of bits per sample (e.g., 16, 24). Not applicable for lossy formats (0).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.Bitrate">
            <summary>
                The average bitrate in bits per second (bps).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.BitrateMode">
            <summary>
                The bitrate mode (CBR, VBR, etc.).
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.IsLossless">
            <summary>
                Indicates if the audio codec is lossless.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.Tags">
            <summary>
                The metadata tags (artist, title, etc.) read from the file. Null if not read or not present.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundFormatInfo.Cues">
            <summary>
                The embedded cue sheet defining tracks within the file. Null if not read or not present.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.SoundFormatInfo.ToString">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Metadata.Models.SoundTags">
            <summary>
            Holds the metadata tags (artist, title, album art, etc.) for an audio file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.Title">
            <summary>
            Gets or sets the title of the audio file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.Artist">
            <summary>
            Gets or sets the artist of the audio file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.Album">
            <summary>
            Gets or sets the album of the audio file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.Genre">
            <summary>
            Gets or sets the genre of the audio file.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.Year">
            <summary>
            Gets or sets the year of the audio file, if available.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.TrackNumber">
            <summary>
            Gets or sets the track number of the audio file, if available.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.AlbumArt">
            <summary>
            Gets or sets the embedded album art of the audio file, if available.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.Models.SoundTags.Lyrics">
            <summary>
            Gets the embedded, unsynchronized lyrics. Null if not present.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Models.SoundTags.ToString">
            <summary>
            Converts the SoundTags instance to a human-readable string.
            The string will contain the title, artist, album, genre, year, track number, album art size, and lyrics size.
            </summary>
            <returns>A human-readable string representation of the SoundTags instance.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.Readers.Format.AacReader.CountAllFramesAsync(System.IO.Stream,System.Int64)">
            <summary>
            Scans the stream to count every valid ADTS frame, starting from a specific offset.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Readers.Tags.Id3V2Reader.TryGetHeaderInfoAsync(System.IO.Stream)">
            <summary>
            A non-destructive utility method to quickly check for an ID3v2 tag and get its total size.
            </summary>
            <param name="stream">The stream to check. Must be seekable.</param>
            <returns>A tuple containing a boolean indicating if a tag was found, and the total size of the tag in bytes.</returns>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.PresetChunk">
            <summary>
            A container for parsed preset records from an SF2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.PresetChunk.#ctor(SoundFlow.Metadata.SoundFont.PresetRecord[])">
            <summary>
            A container for parsed preset records from an SF2 file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.InstrumentChunk">
            <summary>
            A container for parsed instrument records from an SF2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.InstrumentChunk.#ctor(SoundFlow.Metadata.SoundFont.InstrumentRecord[])">
            <summary>
            A container for parsed instrument records from an SF2 file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.BagChunk">
            <summary>
            A container for parsed bag (zone) records from an SF2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.BagChunk.#ctor(SoundFlow.Metadata.SoundFont.BagRecord[])">
            <summary>
            A container for parsed bag (zone) records from an SF2 file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.GeneratorChunk">
            <summary>
            A container for parsed generator records from an SF2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.GeneratorChunk.#ctor(SoundFlow.Metadata.SoundFont.GeneratorRecord[])">
            <summary>
            A container for parsed generator records from an SF2 file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.SampleHeaderChunk">
            <summary>
            A container for parsed sample header records from an SF2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.SampleHeaderChunk.#ctor(SoundFlow.Metadata.SoundFont.SampleHeaderRecord[])">
            <summary>
            A container for parsed sample header records from an SF2 file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.ParsedSoundFont">
            <summary>
            A high-level container for all parsed metadata chunks from an SF2 file.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.GeneratorType">
            <summary>
            Defines the standard SF2 generator types as an enumeration.
            These operators control various aspects of a voice's behavior.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.StartAddrsOffset">
            <summary>
            Sample start address offset (fine adjustment in sample points).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.EndAddrsOffset">
            <summary>
            Sample end address offset (fine adjustment in sample points).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.StartLoopAddrsOffset">
            <summary>
            Sample loop start address offset (fine adjustment in sample points).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.EndLoopAddrsOffset">
            <summary>
            Sample loop end address offset (fine adjustment in sample points).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.StartAddrsCoarseOffset">
            <summary>
            Sample start address coarse offset (coarse adjustment in blocks of 32768 samples).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ModLfoToPitch">
            <summary>
            Modulation LFO to Pitch depth.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.VibLfoToPitch">
            <summary>
            Vibrato LFO to Pitch depth.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ModEnvToPitch">
            <summary>
            Modulation Envelope to Pitch depth.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.InitialFilterFc">
            <summary>
            Initial value for Low Pass Filter Cutoff Frequency (in cents).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.InitialFilterQ">
            <summary>
            Initial value for Low Pass Filter Q (resonance).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ModLfoToFilterFc">
            <summary>
            Modulation LFO to Filter Cutoff depth.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ModEnvToFilterFc">
            <summary>
            Modulation Envelope to Filter Cutoff depth.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.EndAddrsCoarseOffset">
            <summary>
            Sample end address coarse offset (coarse adjustment in blocks of 32768 samples).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ModLfoToVolume">
            <summary>
            Modulation LFO to Volume depth.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Unused1">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ChorusEffectsSend">
            <summary>
            Chorus effects send amount.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ReverbEffectsSend">
            <summary>
            Reverb effects send amount.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Pan">
            <summary>
            Stereo panning (center is 0).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Unused2">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Unused3">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Unused4">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.DelayModLFO">
            <summary>
            Delay time for the Modulation LFO.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.FreqModLFO">
            <summary>
            Frequency (rate) of the Modulation LFO.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.DelayVibLFO">
            <summary>
            Delay time for the Vibrato LFO.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.FreqVibLFO">
            <summary>
            Frequency (rate) of the Vibrato LFO.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.DelayModEnv">
            <summary>
            Delay time for the Modulation Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.AttackModEnv">
            <summary>
            Attack time for the Modulation Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.HoldModEnv">
            <summary>
            Hold time for the Modulation Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.DecayModEnv">
            <summary>
            Decay time for the Modulation Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.SustainModEnv">
            <summary>
            Sustain level for the Modulation Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ReleaseModEnv">
            <summary>
            Release time for the Modulation Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.KeyNumToModEnvHold">
            <summary>
            Keyboard key number to Modulation Envelope Hold scaling.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.KeyNumToModEnvDecay">
            <summary>
            Keyboard key number to Modulation Envelope Decay scaling.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.DelayVolEnv">
            <summary>
            Delay time for the Volume Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.AttackVolEnv">
            <summary>
            Attack time for the Volume Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.HoldVolEnv">
            <summary>
            Hold time for the Volume Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.DecayVolEnv">
            <summary>
            Decay time for the Volume Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.SustainVolEnv">
            <summary>
            Sustain level for the Volume Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ReleaseVolEnv">
            <summary>
            Release time for the Volume Envelope.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.KeyNumToVolEnvHold">
            <summary>
            Keyboard key number to Volume Envelope Hold scaling.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.KeyNumToVolEnvDecay">
            <summary>
            Keyboard key number to Volume Envelope Decay scaling.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Instrument">
            <summary>
            Specifies the index of the Instrument this preset zone refers to.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Reserved1">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.KeyRange">
            <summary>
            Specifies the MIDI key range this zone responds to.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.VelRange">
            <summary>
            Specifies the MIDI velocity range this zone responds to.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.StartLoopAddrsCoarseOffset">
            <summary>
            Sample loop start address coarse offset.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.KeyNum">
            <summary>
            Specifies the fixed MIDI key number to use if this zone is not key-mapped.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Velocity">
            <summary>
            Specifies the fixed MIDI velocity to use if this zone is not velocity-mapped.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.InitialAttenuation">
            <summary>
            Initial volume attenuation (in centibels).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Reserved2">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.EndLoopAddrsCoarseOffset">
            <summary>
            Sample loop end address coarse offset.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.CoarseTune">
            <summary>
            Coarse tuning adjustment (in semitones).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.FineTune">
            <summary>
            Fine tuning adjustment (in cents).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.SampleID">
            <summary>
            Specifies the index of the Sample Header this instrument zone refers to.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.SampleModes">
            <summary>
            Specifies the loop behavior (e.g., no loop, continuous loop).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Reserved3">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ScaleTuning">
            <summary>
            Tuning ratio applied to the keyboard (default is 100%).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.ExclusiveClass">
            <summary>
            Used for exclusive voice handling (e.g., hi-hat closed/open).
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.OverridingRootKey">
            <summary>
            Overrides the Sample Header's root key.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.Unused5">
            <summary>
            Reserved for future use.
            </summary>
        </member>
        <member name="F:SoundFlow.Metadata.SoundFont.GeneratorType.EndOper">
            <summary>
            Marker to indicate the end of the generator list for a zone.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.PresetRecord">
            <summary>
            Maps to the 'phdr' chunk record, defining a preset.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.BagRecord">
            <summary>
            Maps to the 'ibag' and 'pbag' chunk records, defining a zone.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.GeneratorRecord">
            <summary>
            Maps to the 'igen' and 'pgen' chunk records, defining a generator.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.InstrumentRecord">
            <summary>
            Maps to the 'inst' chunk record, defining an instrument.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.SampleHeaderRecord">
            <summary>
            Maps to the 'shdr' chunk record, defining a sample.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.SampleData">
            <summary>
            Holds the final, processed audio data for a single SF2 sample,
            ready to be used by a SamplerGenerator.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.Name">
            <summary>
            The name of the sample.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.Data">
            <summary>
            The processed sample data as 32-bit floats.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.StartLoop">
            <summary>
            The loop start point in samples, adjusted for resampling.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.EndLoop">
            <summary>
            The loop end point in samples, adjusted for resampling.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.OriginalSampleRate">
            <summary>
            The original sample rate of the sample before resampling.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.RootKey">
            <summary>
            The original root key (MIDI note number) of the sample.
            </summary>
        </member>
        <member name="P:SoundFlow.Metadata.SoundFont.SampleData.Correction">
            <summary>
            The fine-tuning correction in cents.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.SoundFontParser">
            <summary>
            A parser for reading the metadata structures of a SoundFont 2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.SoundFontParser.Parse(System.IO.Stream)">
            <summary>
            Parses the metadata from an SF2 file stream.
            </summary>
            <param name="stream">The stream of the SF2 file.</param>
            <returns>A ParsedSoundFont object containing the structured metadata.</returns>
            <exception cref="T:System.IO.InvalidDataException">Thrown if the file is not a valid SF2 file or is malformed.</exception>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.SoundFontParser.ParsePdtaSubChunks(System.IO.BinaryReader,System.Int64,SoundFlow.Metadata.SoundFont.ParsedSoundFont)">
            <summary>
            Parses the sub-chunks within the 'pdta' LIST chunk.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundFont.SoundFontSampleProvider">
            <summary>
            Manages the extraction, conversion, and resampling of all audio samples
            from the 'sdta' chunk of an SF2 file.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.SoundFontSampleProvider.#ctor(System.IO.Stream,SoundFlow.Metadata.SoundFont.SampleHeaderChunk,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Metadata.SoundFont.SoundFontSampleProvider"/> class.
            </summary>
            <param name="stream">The file stream of the SF2 file.</param>
            <param name="sampleHeaders">The parsed sample header chunk.</param>
            <param name="targetSampleRate">The target sample rate of the audio engine.</param>
            <exception cref="T:System.IO.InvalidDataException">Thrown if the 'sdta' or 'smpl' chunk is missing or malformed.</exception>
        </member>
        <member name="M:SoundFlow.Metadata.SoundFont.SoundFontSampleProvider.ReadSmplChunk(System.IO.Stream)">
            <summary>
            Finds and reads the entire 'smpl' data chunk into a byte array.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.SoundMetadataReader">
            <summary>
                Provides functionality to read audio file format and tag information.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataReader.Read(System.String,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Reads the audio information from the specified file path.
            </summary>
            <param name="filePath">The path to the audio file.</param>
            <param name="options">Configuration for what data to parse.</param>
            <returns>A Result object containing either the AudioFormatInfo or an error.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataReader.ReadAsync(System.String,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Asynchronously reads the audio information from the specified file path.
            </summary>
            <param name="filePath">The path to the audio file.</param>
            <param name="options">Configuration for what data to parse.</param>
            <returns>A task representing the asynchronous operation, with a Result object containing either the AudioFormatInfo or an error.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataReader.Read(System.IO.Stream,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Reads the audio information from a stream. The stream must be readable and seekable.
            </summary>
            <param name="stream">The stream containing the audio data.</param>
            <param name="options">Configuration for what data to parse.</param>
            <returns>A Result object containing either the AudioFormatInfo or an error.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataReader.ReadAsync(System.IO.Stream,SoundFlow.Metadata.Models.ReadOptions,System.Boolean)">
            <summary>
                Asynchronously reads the audio information from a stream. The stream must be readable and seekable.
            </summary>
            <param name="stream">The stream containing the audio data.</param>
            <param name="options">Configuration for what data to parse.</param>
            <param name="leaveOpen">True to leave the stream open after reading, otherwise false.</param>
            <returns>A task representing the asynchronous operation, with a Result object containing either the AudioFormatInfo or an error.</returns>
        </member>
        <member name="T:SoundFlow.Metadata.SoundMetadataWriter">
            <summary>
            Provides functionality to write or remove audio file metadata tags.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataWriter.WriteTags(System.String,SoundFlow.Metadata.Models.SoundTags)">
            <summary>
            Writes the provided metadata tags to the specified audio file, overwriting any existing tags.
            This is a destructive operation that rewrites the entire file.
            </summary>
            <param name="filePath">The path to the audio file.</param>
            <param name="tags">The new tags to write to the file.</param>
            <returns>A Result object indicating success or failure.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataWriter.WriteTagsAsync(System.String,SoundFlow.Metadata.Models.SoundTags)">
            <summary>
            Asynchronously writes the provided metadata tags to the specified audio file, overwriting any existing tags.
            This is a destructive operation that rewrites the entire file.
            </summary>
            <param name="filePath">The path to the audio file.</param>
            <param name="tags">The new tags to write to the file.</param>
            <returns>A task representing the asynchronous operation, with a Result object indicating success or failure.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataWriter.RemoveTags(System.String)">
            <summary>
            Removes all recognizable metadata tags from the specified audio file.
            This is a destructive operation that rewrites the entire file.
            </summary>
            <param name="filePath">The path to the audio file.</param>
            <returns>A Result object indicating success or failure.</returns>
        </member>
        <member name="M:SoundFlow.Metadata.SoundMetadataWriter.RemoveTagsAsync(System.String)">
            <summary>
            Asynchronously removes all recognizable metadata tags from the specified audio file.
            This is a destructive operation that rewrites the entire file.
            </summary>
            <param name="filePath">The path to the audio file.</param>
            <returns>A task representing the asynchronous operation, with a Result object indicating success or failure.</returns>
        </member>
        <member name="T:SoundFlow.Metadata.Utilities.BigEndianBinaryReader">
            <summary>
                A BinaryReader that reads in Big Endian format, necessary for formats like AIFF.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Utilities.BigEndianBinaryReader.#ctor(System.IO.Stream)">
            <summary>
                A BinaryReader that reads in Big Endian format, necessary for formats like AIFF.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Utilities.BigEndianBinaryReader.ReadFixedString(System.Int32)">
            <summary>
            Reads a fixed-length string as raw bytes, suitable for box type identifiers
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Utilities.BigEndianBinaryReader.ReadExtended">
            <summary>
                Reads an 80-bit IEEE 754 extended-precision float, common in AIFF files.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Utilities.BigEndianBinaryWriter">
            <summary>
            A BinaryWriter that writes in Big Endian format, necessary for certain format specifications like FLAC metadata blocks.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Utilities.BigEndianBinaryWriter.#ctor(System.IO.Stream)">
            <summary>
            A BinaryWriter that writes in Big Endian format, necessary for certain format specifications like FLAC metadata blocks.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Utilities.BigEndianBinaryWriter.WriteVariableLengthQuantity(System.Int64)">
            <summary>
            Writes a variable-length quantity to the stream, used for MIDI delta-times and lengths.
            </summary>
            <param name="value">The value to write.</param>
        </member>
        <member name="T:SoundFlow.Metadata.Utilities.FormatIdentifier">
            <summary>
            A shared helper to identify audio formats from file headers.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Utilities.OggCrc">
            <summary>
            A utility class to calculate the CRC32 checksum required for Ogg pages.
            This implementation uses a standard lookup table for performance.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Utilities.OggCrc.Calculate(System.Byte[],System.Int32,System.Int32)">
            <summary>
            Calculates the CRC32 checksum for a given byte array segment.
            </summary>
        </member>
        <member name="M:SoundFlow.Metadata.Writers.Format.Mp3Writer.GetAudioDataOffsetAsync(System.IO.Stream)">
            <summary>
            Finds the start of the audio data in an MP3 file by skipping over any ID3v2 tags.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Writers.Tags.Id3V2Builder">
            <summary>
            A helper class to construct an ID3v2 tag block from a SoundTags object.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Writers.Tags.M4aTagBuilder">
            <summary>
            A helper class to construct an 'ilst' atom tree for M4A/MP4 files.
            </summary>
        </member>
        <member name="T:SoundFlow.Metadata.Writers.Tags.VorbisCommentBuilder">
            <summary>
            A helper class to construct a Vorbis Comment block from a SoundTags object.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Abstracts.MidiDevice">
            <summary>
            Represents a base class for an initialized MIDI device, managed by an <see cref="T:SoundFlow.Abstracts.AudioEngine"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Abstracts.MidiDevice.Info">
            <summary>
            Gets the informational struct for the physical MIDI device.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Abstracts.MidiDevice.IsDisposed">
            <summary>
            Gets a value indicating whether this device has been disposed.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Abstracts.MidiDevice.#ctor(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Abstracts.MidiDevice"/> class.
            </summary>
            <param name="info">The device information.</param>
        </member>
        <member name="M:SoundFlow.Midi.Abstracts.MidiDevice.Dispose">
            <summary>
            Releases all resources used by the MIDI device.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Abstracts.MidiModifier">
            <summary>
            Base class for real-time MIDI processing components (MIDI effects).
            Implementations of this class can filter, transform, or generate MIDI messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Abstracts.MidiModifier.Id">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Abstracts.MidiModifier.Name">
            <summary>
            The name of the MIDI modifier.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Abstracts.MidiModifier.IsEnabled">
            <summary>
            Whether the modifier is enabled or not.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Abstracts.MidiModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Processes an incoming MIDI message and returns a collection of zero, one, or more resulting messages.
            </summary>
            <param name="message">The input MIDI message to process.</param>
            <returns>
            An enumerable collection of MIDI messages.
            - Return an empty collection to filter (drop) the message.
            - Return a collection with one modified message to transform it.
            - Return a collection with multiple messages to generate new events (e.g., for an arpeggiator).
            </returns>
        </member>
        <member name="T:SoundFlow.Midi.Devices.MidiMessageReceivedCallback">
            <summary>
            Delegate for handling received MIDI channel messages.
            </summary>
            <param name="message">The received MIDI message.</param>
            <param name="sourceDeviceInfo">The informational struct for the device that sent the message.</param>
        </member>
        <member name="T:SoundFlow.Midi.Devices.SysExMessageReceivedCallback">
            <summary>
            Delegate for handling received MIDI System Exclusive (SysEx) messages.
            </summary>
            <param name="data">The raw SysEx data payload, excluding the start (F0) and end (F7) bytes.</param>
            <param name="sourceDeviceInfo">The informational struct for the device that sent the message.</param>
        </member>
        <member name="T:SoundFlow.Midi.Devices.MidiInputDevice">
            <summary>
            Represents a MIDI input device capable of receiving MIDI messages.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.Devices.MidiInputDevice.OnMessageReceived">
            <summary>
            Occurs when a new MIDI channel message is received from this device.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.Devices.MidiInputDevice.OnSysExReceived">
            <summary>
            Occurs when a new System Exclusive (SysEx) message is received from this device.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Devices.MidiInputDevice.#ctor(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Devices.MidiInputDevice"/> class.
            </summary>
            <param name="info">The device information.</param>
        </member>
        <member name="M:SoundFlow.Midi.Devices.MidiInputDevice.InvokeOnMessageReceived(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Invokes the <see cref="E:SoundFlow.Midi.Devices.MidiInputDevice.OnMessageReceived"/> event with the received message.
            This method is intended to be called by the backend implementation.
            </summary>
            <param name="message">The MIDI message received from the device.</param>
        </member>
        <member name="M:SoundFlow.Midi.Devices.MidiInputDevice.InvokeOnSysExReceived(System.Byte[])">
            <summary>
            Invokes the <see cref="E:SoundFlow.Midi.Devices.MidiInputDevice.OnSysExReceived"/> event with the received SysEx data.
            This method is intended to be called by the backend implementation.
            </summary>
            <param name="data">The raw SysEx data payload received from the device.</param>
        </member>
        <member name="T:SoundFlow.Midi.Devices.MidiOutputDevice">
            <summary>
            Represents a MIDI output device capable of sending MIDI messages.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Devices.MidiOutputDevice.#ctor(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Devices.MidiOutputDevice"/> class.
            </summary>
            <param name="info">The device information.</param>
        </member>
        <member name="M:SoundFlow.Midi.Devices.MidiOutputDevice.SendMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Sends a MIDI channel message to the output device.
            </summary>
            <param name="message">The MIDI message to send.</param>
        </member>
        <member name="M:SoundFlow.Midi.Devices.MidiOutputDevice.SendSysEx(System.Byte[])">
            <summary>
            Sends a System Exclusive (SysEx) message to the output device.
            </summary>
            <param name="data">The raw SysEx data payload, excluding the start (F0) and end (F7) bytes.</param>
        </member>
        <member name="T:SoundFlow.Midi.Enums.MidiCommand">
            <summary>
            Represents the command portion of a MIDI status byte, defining the type of MIDI message.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.NoteOff">
            <summary>
            Note Off message (e.g., releasing a key).
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.NoteOn">
            <summary>
            Note On message (e.g., pressing a key). A Note On with velocity 0 is often interpreted as a Note Off.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.PolyphonicKeyPressure">
            <summary>
            Polyphonic Key Pressure (Aftertouch) message.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.ControlChange">
            <summary>
            Control Change (CC) message, used for adjusting parameters.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.ProgramChange">
            <summary>
            Program Change message, used for changing instruments or presets.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.ChannelPressure">
            <summary>
            Channel Pressure (Aftertouch) message.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.PitchBend">
            <summary>
            Pitch Bend message.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Enums.MidiCommand.SystemExclusive">
            <summary>
            System Exclusive (SysEx) message start.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Interfaces.IMidiControllable">
            <summary>
            Defines an interface for components that can be controlled by MIDI messages.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Interfaces.IMidiControllable.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Processes an incoming MIDI message to control the state of the component.
            </summary>
            <param name="message">The MIDI message to process.</param>
        </member>
        <member name="T:SoundFlow.Midi.Interfaces.IMidiDestinationNode">
            <summary>
            Represents a destination for MIDI messages within the MIDI routing graph.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Interfaces.IMidiDestinationNode.Name">
            <summary>
            Gets a user-friendly name for the destination node.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Interfaces.IMidiDestinationNode.ProcessMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Processes an incoming MIDI message.
            </summary>
            <param name="message">The MIDI message to process.</param>
        </member>
        <member name="T:SoundFlow.Midi.Interfaces.IMidiSourceNode">
            <summary>
            Represents a source of MIDI messages within the MIDI routing graph.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Interfaces.IMidiSourceNode.Name">
            <summary>
            Gets a user-friendly name for the source node.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.Interfaces.IMidiSourceNode.OnMessageOutput">
            <summary>
            Occurs when this node generates a MIDI channel message.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.Interfaces.IMidiSourceNode.OnSysExOutput">
            <summary>
            Occurs when this node generates a System Exclusive (SysEx) message.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Interfaces.ITemporalMidiModifier">
            <summary>
            Defines an interface for MIDI modifiers that require time-based updates to generate events.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Interfaces.ITemporalMidiModifier.Tick(System.Double,System.Double)">
            <summary>
            Advances the modifier's internal state by a specified duration and returns any generated MIDI messages.
            </summary>
            <param name="deltaSeconds">The time elapsed since the last tick, in seconds.</param>
            <param name="bpm">The current tempo in beats per minute.</param>
            <returns>A collection of generated MIDI messages, or an empty collection if no events occurred.</returns>
        </member>
        <member name="T:SoundFlow.Midi.TimeToTickConverter">
            <summary>
            A delegate that defines the contract for converting a real-time TimeSpan into a MIDI tick value.
            </summary>
            <param name="time">The time to convert.</param>
            <returns>The corresponding value in MIDI ticks.</returns>
        </member>
        <member name="T:SoundFlow.Midi.MidiRecorder">
            <summary>
            A non-audio component that captures and timestamps MIDI messages with high-resolution
            timing. This component is standalone and relies on its consumer to provide the logic for
            converting time to MIDI ticks.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.MidiRecorder.IsRecording">
            <summary>
            Gets a value indicating whether the recorder is currently active.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.MidiRecorder.StartTime">
            <summary>
            Gets the timeline start time of the current recording session.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.MidiRecorder.RecordingStopped">
            <summary>
            Occurs when recording is stopped, providing the recorder instance and the resulting MidiDataProvider.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.MidiRecorder.#ctor(SoundFlow.Midi.Devices.MidiInputDevice)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.MidiRecorder"/> class.
            </summary>
            <param name="inputDevice">The MIDI input device to record from.</param>
        </member>
        <member name="M:SoundFlow.Midi.MidiRecorder.StartRecording">
            <summary>
            Starts the recording process.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.MidiRecorder.StopRecording(SoundFlow.Midi.TimeToTickConverter,System.Int32)">
            <summary>
            Stops the recording process and generates a MidiDataProvider from the captured data.
            </summary>
            <param name="timeToTickConverter">A delegate function that converts a TimeSpan into a MIDI tick value based on the project's tempo map.</param>
            <param name="ticksPerQuarterNote">The time division to use for the resulting MIDI file.</param>
        </member>
        <member name="M:SoundFlow.Midi.MidiRecorder.AddLoopOffset(System.TimeSpan)">
            <summary>
            Adds a time offset, used for loop recording to correctly place notes on subsequent passes.
            </summary>
            <param name="offset">The duration of the loop.</param>
        </member>
        <member name="M:SoundFlow.Midi.MidiRecorder.UpdateSampleClock(System.Int32)">
            <summary>
            This method is a no-op kept for API compatibility. Timing is now handled by a high-resolution timer.
            </summary>
            <param name="samplesInBlock">The number of samples processed (unused).</param>
        </member>
        <member name="M:SoundFlow.Midi.MidiRecorder.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Modifier.ArpMode">
            <summary>
            Defines the playback direction of the arpeggiator.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Modifier.ArpMode.Up">
            <summary>
            Ascends through the held notes, playing them in order of lowest to highest.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Modifier.ArpMode.Down">
            <summary>
            Descends through the held notes, playing them in order of highest to lowest.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Modifier.ArpMode.UpDown">
            <summary>
            Ascends then descends through the held notes, without repeating top/bottom notes.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Modifier.ArpMode.Random">
            <summary>
            Plays the held notes in a random order.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Modifier.ArpeggiatorModifier">
            <summary>
            A stateful MIDI modifier that creates rhythmic patterns from held notes.
            This modifier implements <see cref="T:SoundFlow.Midi.Interfaces.ITemporalMidiModifier"/> allowing it to be driven automatically
            by a host Synthesizer's audio clock.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Mode">
            <summary>
            Gets or sets the arpeggiation pattern.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Octaves">
            <summary>
            Gets or sets the number of octaves the pattern will span.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Rate">
            <summary>
            Gets or sets the step duration in Beats (Quarter Notes).
            <para>1.0 = Quarter Note, 0.5 = Eighth Note, 0.25 = Sixteenth Note.</para>
            Default is 0.25 (1/16th).
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Gate">
            <summary>
            Gets or sets the gate length (note duration) as a fraction of the step rate (0.0 to 1.0).
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Processes incoming MIDI messages to manage the list of held notes.
            Note On messages are consumed to build the chord and do not pass through.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.ArpeggiatorModifier.Tick(System.Double,System.Double)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Midi.Modifier.ArpeggiatorModifier.ResetState">
            <summary>
            Resets the arpeggiator's internal state to its starting position.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Modifier.ChannelFilterModifier">
            <summary>
            A MIDI modifier that filters messages based on their channel.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ChannelFilterModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Modifier.ChannelFilterModifier.Channel">
            <summary>
            Gets or sets the MIDI channel to allow. Messages on other channels will be dropped.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.ChannelFilterModifier.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Modifier.ChannelFilterModifier"/> class.
            </summary>
            <param name="channel">The MIDI channel (1-16) to allow.</param>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.ChannelFilterModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Modifier.HarmonizerModifier">
            <summary>
            A MIDI modifier that generates a chord from a single incoming note.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.HarmonizerModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Modifier.HarmonizerModifier.Intervals">
            <summary>
            Gets or sets the intervals in semitones relative to the root note.
            Example for Major Chord: { 0, 4, 7 }
            Example for Power Chord: { 0, 7, 12 }
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.HarmonizerModifier.#ctor(System.Int32[])">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Modifier.HarmonizerModifier"/> class.
            </summary>
            <param name="intervals">The chord intervals in semitones.</param>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.HarmonizerModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Modifier.RandomizerModifier">
            <summary>
            A powerful MIDI modifier that introduces configurable randomness to note messages.
            It can modify chance, velocity, and pitch to humanize performances or create generative patterns.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.Chance">
            <summary>
            Gets or sets the probability (0.0 to 1.0) that a note will be played.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.VelocityRandomness">
            <summary>
            Gets or sets the amount of randomness (0.0 to 1.0) to apply to note velocity.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.VelocityBias">
            <summary>
            Gets or sets a bias for velocity randomization (-1.0 to 1.0).
            Negative values tend towards lower velocities; positive values tend towards higher velocities.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.PitchRandomness">
            <summary>
            Gets or sets the probability (0.0 to 1.0) that a note's pitch will be randomized.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.PitchRange">
            <summary>
            Gets or sets the maximum range in semitones (+/-) for pitch randomization.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.MinNote">
            <summary>
            Gets or sets the minimum note number (0-127) to apply the modifier to.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.RandomizerModifier.MaxNote">
            <summary>
            Gets or sets the maximum note number (0-127) to apply the modifier to.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.RandomizerModifier.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Modifier.RandomizerModifier"/> class with default values.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.RandomizerModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Modifier.TransposeModifier">
            <summary>
            A MIDI modifier that transposes the pitch of Note On and Note Off messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.TransposeModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Modifier.TransposeModifier.Semitones">
            <summary>
            Gets or sets the amount to transpose in semitones. Can be positive or negative.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.TransposeModifier.#ctor(System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Modifier.TransposeModifier"/> class.
            </summary>
            <param name="semitones">The transposition amount in semitones.</param>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.TransposeModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Modifier.VelocityModifier">
            <summary>
            A MIDI modifier that reshapes the velocity of Note On messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.VelocityModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Midi.Modifier.VelocityModifier.Curve">
            <summary>
            Gets or sets the velocity curve.
            -1.0 (logarithmic) makes it easier to play loud notes.
            0.0 is linear (no change).
            +1.0 (exponential) makes it harder to play loud notes.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.VelocityModifier.MinVelocity">
            <summary>
            Gets or sets the minimum output velocity (1-127).
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.VelocityModifier.MaxVelocity">
            <summary>
            Gets or sets the maximum output velocity (1-127).
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Modifier.VelocityModifier.Add">
            <summary>
            Gets or sets a fixed value to add to the velocity after curve and range mapping.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Modifier.VelocityModifier.Process(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager">
            <summary>
            A centralized hub for managing all MIDI I/O, device management, and routing within the audio engine.
            It functions as a virtual patch bay for connecting MIDI sources to destinations.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager.MpeZone">
            <summary>
            Defines an MPE (MIDI Polyphonic Expression) zone for an input device.
            </summary>
            <param name="MasterChannel">The master channel (typically 1 or 16) used for global messages.</param>
            <param name="MemberChannelsStart">The first channel in the block used for per-note messages.</param>
            <param name="MemberChannelCount">The number of channels in the member block.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.MpeZone.#ctor(System.Int32,System.Int32,System.Int32)">
            <summary>
            Defines an MPE (MIDI Polyphonic Expression) zone for an input device.
            </summary>
            <param name="MasterChannel">The master channel (typically 1 or 16) used for global messages.</param>
            <param name="MemberChannelsStart">The first channel in the block used for per-note messages.</param>
            <param name="MemberChannelCount">The number of channels in the member block.</param>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.MpeZone.MasterChannel">
            <summary>The master channel (typically 1 or 16) used for global messages.</summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.MpeZone.MemberChannelsStart">
            <summary>The first channel in the block used for per-note messages.</summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.MpeZone.MemberChannelCount">
            <summary>The number of channels in the member block.</summary>
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager.GlobalPitchBendEvent">
            <summary>
            Internal event structure for a global pitch bend message, generated by the MpeParser.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.GlobalPitchBendEvent.#ctor(System.Int32)">
            <summary>
            Internal event structure for a global pitch bend message, generated by the MpeParser.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager.PerNotePitchBendEvent">
            <summary>
            Internal event structure for a per-note pitch bend message, generated by the MpeParser.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.PerNotePitchBendEvent.#ctor(System.Int32,System.Int32,System.Single)">
            <summary>
            Internal event structure for a per-note pitch bend message, generated by the MpeParser.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager.PerNotePressureEvent">
            <summary>
            Internal event structure for a per-note pressure message, generated by the MpeParser.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.PerNotePressureEvent.#ctor(System.Int32,System.Int32,System.Single)">
            <summary>
            Internal event structure for a per-note pressure message, generated by the MpeParser.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager.PerNoteTimbreEvent">
            <summary>
            Internal event structure for a per-note timbre message, generated by the MpeParser.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.PerNoteTimbreEvent.#ctor(System.Int32,System.Int32,System.Single)">
            <summary>
            Internal event structure for a per-note timbre message, generated by the MpeParser.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.Routing.MidiManager.OnRouteFaulted">
            <summary>
            Occurs when a MIDI route encounters a non-recoverable error, such as a device failure.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.AvailableInputs">
            <summary>
            Gets a read-only list of all available MIDI input devices.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.AvailableOutputs">
            <summary>
            Gets a read-only list of all available MIDI output devices.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.Routes">
            <summary>
            Gets a read-only list of all active MIDI routing connections.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiManager.FaultedRoutes">
            <summary>
            Gets a read-only list of all routes that are in a faulted state due to an error.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.#ctor(SoundFlow.Abstracts.AudioEngine)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Routing.MidiManager"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.ConfigureMpeZone(SoundFlow.Midi.Structs.MidiDeviceInfo,SoundFlow.Midi.Routing.MidiManager.MpeZone)">
            <summary>
            Configures a MIDI input device to operate as an MPE (MIDI Polyphonic Expression) source.
            Once configured, messages from this device's member channels will be interpreted as per-note expression data.
            </summary>
            <param name="deviceInfo">The MIDI input device to configure.</param>
            <param name="zone">The MPE zone configuration, specifying master and member channels.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.DeconfigureMpeZone(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Removes the MPE configuration from a MIDI input device, causing it to revert to standard MIDI behavior.
            </summary>
            <param name="deviceInfo">The MIDI input device to deconfigure.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.CreateRoute(SoundFlow.Midi.Structs.MidiDeviceInfo,SoundFlow.Midi.Interfaces.IMidiControllable)">
            <summary>
            Creates a direct route from a physical MIDI input device to an internal MIDI-controllable target (e.g., a Synthesizer).
            </summary>
            <param name="inputDevice">The source MIDI input device.</param>
            <param name="target">The target component that implements <see cref="T:SoundFlow.Midi.Interfaces.IMidiControllable"/>.</param>
            <returns>The newly created <see cref="T:SoundFlow.Midi.Routing.MidiRoute"/>.</returns>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.CreateRoute(SoundFlow.Midi.Structs.MidiDeviceInfo,SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Creates a direct route from a physical MIDI input device to a physical MIDI output device (MIDI Thru).
            </summary>
            <param name="inputDevice">The source MIDI input device.</param>
            <param name="outputDevice">The destination MIDI output device.</param>
            <returns>The newly created <see cref="T:SoundFlow.Midi.Routing.MidiRoute"/>.</returns>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.AddRoute(SoundFlow.Midi.Routing.MidiRoute)">
            <summary>
            Adds a pre-configured MIDI route to the manager.
            </summary>
            <param name="route">The route to add.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.RemoveRoute(SoundFlow.Midi.Routing.MidiRoute)">
            <summary>
            Removes a MIDI route from the manager.
            </summary>
            <param name="route">The route to remove.</param>
            <returns>True if the route was found and removed; otherwise, false.</returns>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.GetOrCreateInputNode(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Gets an existing, or creates a new, managed MIDI input node for the specified device.
            This method is the recommended way to get an initialized, active MidiInputDevice instance
            without needing to create a full route.
            </summary>
            <param name="deviceInfo">The device information for the MIDI input device.</param>
            <returns>The corresponding <see cref="T:SoundFlow.Midi.Routing.Nodes.MidiInputNode"/>, which contains the active device instance.</returns>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.GetOrCreateOutputNode(SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Gets an existing, or creates a new, managed MIDI output node for the specified device.
            This method is the recommended way to get an initialized, active MidiOutputDevice instance
            without needing to create a full route.
            </summary>
            <param name="deviceInfo">The device information for the MIDI output device.</param>
            <returns>The corresponding <see cref="T:SoundFlow.Midi.Routing.Nodes.MidiOutputNode"/>, which contains the active device instance.</returns>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.OnDeviceMessageReceived(SoundFlow.Midi.Structs.MidiMessage,SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Central dispatcher for all incoming MIDI channel messages from physical devices.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.OnDeviceSysExReceived(System.Byte[],SoundFlow.Midi.Structs.MidiDeviceInfo)">
            <summary>
            Central dispatcher for all incoming SysEx messages from physical devices.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiManager.MpeParser">
            <summary>
            A stateful parser for interpreting an MPE MIDI stream.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiManager.MpeParser.#ctor(SoundFlow.Midi.Routing.MidiManager.MpeZone)">
            <summary>
            A stateful parser for interpreting an MPE MIDI stream.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Routing.MidiRoute">
            <summary>
            Represents a single, end-to-end connection from a MIDI source to a MIDI destination,
            with an ordered chain of MIDI processors (modifiers).
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiRoute.Source">
            <summary>
            Gets the source node of this route.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiRoute.Destination">
            <summary>
            Gets the destination node of this route.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiRoute.Processors">
            <summary>
            Gets the ordered list of MIDI modifiers that process messages in this route.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.MidiRoute.IsFaulted">
            <summary>
            Gets a value indicating whether this route has encountered a non-recoverable error.
            Once faulted, a route will stop processing messages.
            </summary>
        </member>
        <member name="E:SoundFlow.Midi.Routing.MidiRoute.OnError">
            <summary>
            Occurs when an unrecoverable error happens while processing a message, such as a device failure.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiRoute.#ctor(SoundFlow.Midi.Interfaces.IMidiSourceNode,SoundFlow.Midi.Interfaces.IMidiDestinationNode)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Routing.MidiRoute"/> class.
            </summary>
            <param name="source">The source of MIDI messages.</param>
            <param name="destination">The destination for processed MIDI messages.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiRoute.Start">
            <summary>
            Activates the route by subscribing to its source.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiRoute.Stop">
            <summary>
            Deactivates the route by unsubscribing from its source.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiRoute.InsertProcessor(System.Int32,SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Inserts a MIDI modifier into the processing chain at a specific index.
            </summary>
            <param name="index">The zero-based index at which the modifier should be inserted.</param>
            <param name="modifier">The modifier to insert.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiRoute.AddProcessor(SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Adds a MIDI modifier to the end of the processing chain.
            </summary>
            <param name="modifier">The modifier to add.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.MidiRoute.RemoveProcessor(SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Removes a MIDI modifier from the processing chain.
            </summary>
            <param name="modifier">The modifier to remove.</param>
            <returns>True if the modifier was found and removed; otherwise, false.</returns>
        </member>
        <member name="T:SoundFlow.Midi.Routing.Nodes.MidiInputNode">
            <summary>
            An internal implementation of <see cref="T:SoundFlow.Midi.Interfaces.IMidiSourceNode"/> that represents a physical MIDI input device.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.Nodes.MidiInputNode.Device">
            <summary>
            Gets the underlying physical device instance.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.Nodes.MidiInputNode.Name">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Midi.Routing.Nodes.MidiInputNode.OnMessageOutput">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Midi.Routing.Nodes.MidiInputNode.OnSysExOutput">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiInputNode.#ctor(SoundFlow.Midi.Devices.MidiInputDevice)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Routing.Nodes.MidiInputNode"/> class.
            </summary>
            <param name="device">The physical MIDI input device this node represents.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiInputNode.TriggerMessageOutput(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Triggers the <see cref="E:SoundFlow.Midi.Routing.Nodes.MidiInputNode.OnMessageOutput"/> event. Called by the MidiManager.
            </summary>
            <param name="message">The message to output.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiInputNode.TriggerSysExOutput(System.Byte[])">
            <summary>
            Triggers the <see cref="E:SoundFlow.Midi.Routing.Nodes.MidiInputNode.OnSysExOutput"/> event. Called by the MidiManager.
            </summary>
            <param name="data">The SysEx data payload to output.</param>
        </member>
        <member name="T:SoundFlow.Midi.Routing.Nodes.MidiOutputNode">
            <summary>
            An internal implementation of <see cref="T:SoundFlow.Midi.Interfaces.IMidiDestinationNode"/> that represents a physical MIDI output device.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.Nodes.MidiOutputNode.Device">
            <summary>
            Gets the underlying physical device instance.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.Nodes.MidiOutputNode.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiOutputNode.#ctor(SoundFlow.Midi.Devices.MidiOutputDevice)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Routing.Nodes.MidiOutputNode"/> class.
            </summary>
            <param name="device">The physical MIDI output device this node represents.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiOutputNode.ProcessMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiOutputNode.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Routing.Nodes.MidiTargetNode">
            <summary>
            An internal implementation of <see cref="T:SoundFlow.Midi.Interfaces.IMidiDestinationNode"/> that wraps an <see cref="T:SoundFlow.Midi.Interfaces.IMidiControllable"/> component.
            </summary>
        </member>
        <member name="F:SoundFlow.Midi.Routing.Nodes.MidiTargetNode.Target">
            <summary>
            The internal component to send MIDI messages to.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Routing.Nodes.MidiTargetNode.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiTargetNode.#ctor(SoundFlow.Midi.Interfaces.IMidiControllable)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Routing.Nodes.MidiTargetNode"/> class.
            </summary>
            <param name="target">The internal component to send MIDI messages to.</param>
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiTargetNode.ProcessMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Midi.Routing.Nodes.MidiTargetNode.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Midi.Structs.MidiDeviceInfo">
            <summary>
            Represents informational details for a MIDI device.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiDeviceInfo.Id">
            <summary>
            The unique integer identifier for the device, specific to the MIDI backend.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiDeviceInfo.Name">
            <summary>
            The human-readable name of the device.
            </summary>
        </member>
        <member name="T:SoundFlow.Midi.Structs.MidiMessage">
            <summary>
            Represents a standard MIDI channel message.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Timestamp">
            <summary>
            Gets the timestamp of the message, typically provided by the MIDI backend.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.StatusByte">
            <summary>
            Gets the raw status byte of the MIDI message.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Data1">
            <summary>
            Gets the first data byte of the MIDI message.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Data2">
            <summary>
            Gets the second data byte of the MIDI message.
            </summary>
        </member>
        <member name="M:SoundFlow.Midi.Structs.MidiMessage.#ctor(System.Byte,System.Byte,System.Byte,System.Int64)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Midi.Structs.MidiMessage"/> struct.
            </summary>
            <param name="status">The status byte.</param>
            <param name="data1">The first data byte.</param>
            <param name="data2">The second data byte.</param>
            <param name="timestamp">The message timestamp.</param>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Command">
            <summary>
            Gets the MIDI command type from the status byte.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Channel">
            <summary>
            Gets the MIDI channel (1-16) from the status byte.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.NoteNumber">
            <summary>
            Gets the note number for Note On/Off or Polyphonic Key Pressure messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Velocity">
            <summary>
            Gets the velocity for Note On/Off messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.Pressure">
            <summary>
            Gets the pressure value for Polyphonic Key Pressure or Channel Pressure messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.ControllerNumber">
            <summary>
            Gets the controller number for Control Change messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.ControllerValue">
            <summary>
            Gets the controller value for Control Change messages.
            </summary>
        </member>
        <member name="P:SoundFlow.Midi.Structs.MidiMessage.PitchBendValue">
            <summary>
            Gets the pitch bend value, combining Data1 and Data2 into a 14-bit value centered at 8192.
            </summary>
        </member>
        <member name="T:SoundFlow.Modifiers.AlgorithmicReverbModifier">
            <summary>
            Free-verb algorithmic reverb modifier.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.AlgorithmicReverbModifier.#ctor(SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.AlgorithmicReverbModifier" /> class.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.Wet">
            <summary>
            Gets or sets the wet mix amount. Clamped between 0 and 1.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.RoomSize">
            <summary>
            Gets or sets the room size. Clamped between 0 and 1. Updates parameters when changed.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.Damp">
            <summary>
            Gets or sets the damping factor. Clamped between 0 and 1. Updates parameters when changed.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.Width">
            <summary>
            Gets or sets the stereo width. Clamped between 0 and 1.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.PreDelay">
            <summary>
            Gets or sets the pre-delay time in milliseconds. Clamped between 0 and 100ms.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.AlgorithmicReverbModifier.Mix">
            <summary>
            Gets or sets the wet/dry mix ratio. Clamped between 0 and 1.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.AlgorithmicReverbModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.AlgorithmicReverbModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.BassBoosterModifier">
            <summary>
            Boosts bass frequencies using a resonant low-pass filter.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.BassBoosterModifier.Cutoff">
            <summary>
            Gets or sets the cutoff frequency in Hertz.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.BassBoosterModifier.BoostGainDb">
            <summary>
            Gets or sets the boost gain in decibels.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.BassBoosterModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.BassBoosterModifier"/> class.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="cutoff">The cutoff frequency in Hertz.</param>
            <param name="boostGainDb">The boost gain in decibels.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.BassBoosterModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.BassBoosterModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.ChorusModifier">
            <summary>
            A sound modifier that implements a chorus effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.ChorusModifier.DepthMs">
            <summary>
            The depth of the chorus effect in milliseconds.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.ChorusModifier.RateHz">
            <summary>
            The rate of the LFO modulation in Hz.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.ChorusModifier.Feedback">
            <summary>
            The feedback amount (0.0 - 1.0).
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.ChorusModifier.WetDryMix">
            <summary>
            The wet/dry mix (0.0 - 1.0).
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.ChorusModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructs a new instance of <see cref="T:SoundFlow.Modifiers.ChorusModifier"/>.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="depthMs">The depth of the chorus effect in milliseconds.</param>
            <param name="rateHz">The rate of the LFO modulation in Hz.</param>
            <param name="feedback">The feedback amount (0.0 - 1.0).</param>
            <param name="wetDryMix">The wet/dry mix (0.0 - 1.0).</param>
            <param name="maxDelayMs">The maximum delay time in milliseconds. Will be converted to samples.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.ChorusModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.ChorusModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.CompressorModifier">
            <summary>
            A dynamic range compressor modifier.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.CompressorModifier.ThresholdDb">
            <summary>
            The threshold level in dBFS (-inf to 0).
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.CompressorModifier.Ratio">
            <summary>
            The compression ratio (1:1 to inf:1).
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.CompressorModifier.AttackMs">
            <summary>
            The attack time in milliseconds.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.CompressorModifier.ReleaseMs">
            <summary>
            The release time in milliseconds.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.CompressorModifier.KneeDb">
            <summary>
            The knee radius in dBFS. A knee radius of 0 is a hard knee.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.CompressorModifier.MakeupGainDb">
            <summary>
            The make-up gain in dBFS.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.CompressorModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Constructs a new instance of <see cref="T:SoundFlow.Modifiers.CompressorModifier"/>.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="thresholdDb">The threshold level in dBFS (-inf to 0).</param>
            <param name="ratio">The compression ratio (1:1 to inf:1).</param>
            <param name="attackMs">The attack time in milliseconds.</param>
            <param name="releaseMs">The release time in milliseconds.</param>
            <param name="kneeDb">The knee width in dB (0 for hard knee).</param>
            <param name="makeupGainDb">The makeup gain in dB.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.CompressorModifier.UpdateParameters">
            <summary>
            Call this method whenever you change the public properties.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.CompressorModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.DelayModifier">
            <summary>
            A sound modifier that implements a delay effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.DelayModifier.Feedback">
            <summary>
            The feedback amount (0.0 - 1.0).
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.DelayModifier.WetMix">
            <summary>
            The wet/dry mix (0.0 - 1.0).
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.DelayModifier.Cutoff">
            <summary>
            The cutoff frequency in Hertz.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.DelayModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Int32,System.Single,System.Single,System.Single)">
            <summary>
            Constructs a new instance of <see cref="T:SoundFlow.Modifiers.DelayModifier"/>.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="delaySamples">The length of the delay line in samples.</param>
            <param name="feedback">The feedback amount (0.0 - 1.0).</param>
            <param name="wetMix">The wet/dry mix (0.0 - 1.0).</param>
            <param name="cutoff">The cutoff frequency in Hertz.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.DelayModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.DelayModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.Filter">
            <summary>
            Implements a digital biquad filter, allowing for various filter types such as LowPass, HighPass, BandPass, and Notch.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.Filter.#ctor(SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.Filter"/> class with default settings.
            </summary>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
        </member>
        <member name="P:SoundFlow.Modifiers.Filter.Name">
            <inheritdoc/>
        </member>
        <member name="P:SoundFlow.Modifiers.Filter.Type">
            <summary>
            Gets or sets the type of filter.
            Changing the filter type recalculates the filter coefficients.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.Filter.CutoffFrequency">
            <summary>
            Gets or sets the cutoff frequency of the filter in Hertz.
            This frequency determines the point at which the filter starts to attenuate the signal.
            Changing the cutoff frequency recalculates the filter coefficients.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.Filter.Resonance">
            <summary>
            Gets or sets the resonance of the filter, a value between 0 and 1.
            Higher resonance values emphasize frequencies around the cutoff frequency.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.Filter.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Modifiers.Filter.ProcessSample(System.Single,System.Int32)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Modifiers.Filter.UpdateCoefficients">
            <summary>
            Calculates and updates the biquad filter coefficients for all channels.
            </summary>
        </member>
        <member name="T:SoundFlow.Modifiers.FrequencyBandModifier">
            <summary>
            A sound modifier that implements a frequency band modifier.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.FrequencyBandModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Single)">
            <summary>
            Constructs a new instance of <see cref="T:SoundFlow.Modifiers.FrequencyBandModifier"/>.
            </summary> 
            <param name="format">The audio format to process.</param>
            <param name="lowCutoffFrequency">The low cutoff frequency in Hertz.</param>
            <param name="highCutoffFrequency">The high cutoff frequency in Hertz.</param>
        </member>
        <member name="P:SoundFlow.Modifiers.FrequencyBandModifier.HighCutoffFrequency">
            <summary>
            Gets or sets the high cutoff frequency in Hertz.
            </summary>
            <value>This value ranges from 0.0 to <see cref="F:SoundFlow.Structs.AudioFormat.SampleRate"/>.</value>
        </member>
        <member name="P:SoundFlow.Modifiers.FrequencyBandModifier.LowCutoffFrequency">
            <summary>
            Gets or sets the low cutoff frequency in Hertz.
            </summary>
            <value>This value ranges from 0.0 to <see cref="F:SoundFlow.Structs.AudioFormat.SampleRate"/>.</value>
        </member>
        <member name="M:SoundFlow.Modifiers.FrequencyBandModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc/>
        </member>
        <member name="T:SoundFlow.Modifiers.HighPassModifier">
            <summary>
            A sound modifier that implements a high-pass filter.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.HighPassModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.HighPassModifier"/> class.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="cutoffFrequency">The cutoff frequency of the filter.</param>
        </member>
        <member name="P:SoundFlow.Modifiers.HighPassModifier.CutoffFrequency">
            <summary>
            Gets or sets the cutoff frequency of the filter.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.HighPassModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.HighPassModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.LowPassModifier">
            <summary>
            A sound modifier that implements a low-pass filter.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.LowPassModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.LowPassModifier"/> class.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="cutoffFrequency">The cutoff frequency of the filter.</param>
        </member>
        <member name="P:SoundFlow.Modifiers.LowPassModifier.CutoffFrequency">
            <summary>
            Gets or sets the cutoff frequency of the filter.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.LowPassModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.LowPassModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.MultiChannelChorusModifier">
            <summary>
            A sound modifier that implements a multichannel chorus effect.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.MultiChannelChorusModifier.WetMix">
            <summary>
            The wet/dry mix (0.0 - 1.0).
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.MultiChannelChorusModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Int32,System.ValueTuple{System.Single,System.Single,System.Single}[])">
            <summary>
            Constructs a new multichannel chorus effect.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="wetMix">Wet/dry mix ratio (0.0-1.0)</param>
            <param name="maxDelay">Maximum delay length in samples</param>
            <param name="channelParameters">Array of parameters per channel</param>
        </member>
        <member name="M:SoundFlow.Modifiers.MultiChannelChorusModifier.Process(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.MultiChannelChorusModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.ParametricEqualizer">
            <summary>
            A Parametric Equalizer with support for multiple filter types.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.ParametricEqualizer.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Modifiers.ParametricEqualizer.Bands">
            <summary>
            List of EQ bands applied by this equalizer.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.#ctor(SoundFlow.Structs.AudioFormat)">
            <summary>
            Constructs a new instance of <see cref="T:SoundFlow.Modifiers.ParametricEqualizer"/>.
            </summary>
            <param name="format">The audio format to process.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.InitializeFilters">
            <summary>
            Initializes the filters for each channel based on the current EQ bands.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.Process(System.Span{System.Single},System.Int32)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.ProcessSample(System.Single,System.Int32)">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.AddBands(System.Collections.Generic.IEnumerable{SoundFlow.Modifiers.EqualizerBand})">
            <summary>
            Adds multiple EQ bands to the equalizer and reinitialize the filters.
            </summary>
            <param name="bands">The EQ bands to add.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.AddBand(SoundFlow.Modifiers.EqualizerBand)">
            <summary>
            Adds an EQ band to the equalizer and reinitialize the filters.
            </summary>
            <param name="band">The EQ band to add.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.ParametricEqualizer.RemoveBand(SoundFlow.Modifiers.EqualizerBand)">
            <summary>
            Removes an EQ band from the equalizer and reinitialize the filters.
            </summary>
            <param name="band">The EQ band to remove.</param>
        </member>
        <member name="T:SoundFlow.Modifiers.EqualizerBand">
            <summary>
            Represents an EQ band with specific parameters.
            </summary>
            <param name="type">The type of filter to apply.</param>
            <param name="frequency">The center frequency of the EQ band in Hz.</param>
            <param name="gainDb">The gain of the EQ band in decibels.</param>
            <param name="q">The quality factor of the EQ band.</param>
            <param name="s">The gain multiplier (shelf slope) of the EQ band.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.EqualizerBand.#ctor(SoundFlow.Enums.FilterType,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Represents an EQ band with specific parameters.
            </summary>
            <param name="type">The type of filter to apply.</param>
            <param name="frequency">The center frequency of the EQ band in Hz.</param>
            <param name="gainDb">The gain of the EQ band in decibels.</param>
            <param name="q">The quality factor of the EQ band.</param>
            <param name="s">The gain multiplier (shelf slope) of the EQ band.</param>
        </member>
        <member name="P:SoundFlow.Modifiers.EqualizerBand.Frequency">
            <summary>
            The center frequency of the EQ band in Hz.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.EqualizerBand.GainDb">
            <summary>
            The gain of the EQ band in decibels.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.EqualizerBand.Q">
            <summary>
            The quality factor of the EQ band.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.EqualizerBand.S">
            <summary>
            The gain multiplier of the EQ band.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.EqualizerBand.Type">
            <summary>
            The type of filter to apply.
            </summary>
        </member>
        <member name="T:SoundFlow.Modifiers.ResamplerModifier">
            <summary>
            A real-time resampling modifier that changes the playback speed and pitch of an audio signal.
            This is achieved by changing the number of samples in the audio stream, which affects both
            its duration and perceived pitch.
            </summary>
            <remarks>
            Due to the nature of resampling, this modifier introduces a small amount of latency as it needs
            to buffer incoming audio to perform its calculations.
            </remarks>
        </member>
        <member name="P:SoundFlow.Modifiers.ResamplerModifier.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Modifiers.ResamplerModifier.ResampleFactor">
            <summary>
            Gets or sets the resampling factor. 
            Values greater than 1.0 speed up playback and increase pitch.
            Values less than 1.0 slow down playback and decrease pitch.
            A value of 1.0 results in no change.
            </summary>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if the value is less than or equal to zero.</exception>
        </member>
        <member name="M:SoundFlow.Modifiers.ResamplerModifier.#ctor(System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.ResamplerModifier"/> class with a specific factor.
            </summary>
            <param name="resampleFactor">The initial resampling factor. Defaults to 1.0 (no change).</param>
        </member>
        <member name="M:SoundFlow.Modifiers.ResamplerModifier.#ctor(System.Int32,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.ResamplerModifier"/> class by specifying source and target sample rates.
            The resampling factor is calculated as `targetRate / sourceRate`.
            </summary>
            <param name="sourceRate">The original sample rate of the audio.</param>
            <param name="targetRate">The target sample rate to resample to, which determines the new speed and pitch.</param>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if either sourceRate or targetRate is not a positive number.</exception>
        </member>
        <member name="M:SoundFlow.Modifiers.ResamplerModifier.Process(System.Span{System.Single},System.Int32)">
            <summary>
            Processes a block of audio samples, resampling them according to the <see cref="P:SoundFlow.Modifiers.ResamplerModifier.ResampleFactor"/>.
            The modification is performed in-place on the provided buffer.
            </summary>
            <param name="buffer">The buffer containing the audio samples to modify. The resampled audio will be written back into this buffer.</param>
            <param name="channels">The number of channels in the buffer.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.ResamplerModifier.Reset">
            <summary>
            Clears the modifier's buffered resampling state.
            Call this when the upstream playback position is discontinuously changed
            such as stop, seek, or loop restart.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.ResamplerModifier.ProcessSample(System.Single,System.Int32)">
            <summary>
            This method is not supported for the Resampler modifier.
            Processing must be done on a block of samples to perform interpolation.
            </summary>
            <param name="sample">The input audio sample.</param>
            <param name="channel">The channel the sample belongs to.</param>
            <returns>This method always throws an exception.</returns>
            <exception cref="T:System.NotSupportedException">Always thrown, as this modifier requires block-based processing.</exception>
        </member>
        <member name="T:SoundFlow.Modifiers.TrebleBoosterModifier">
            <summary>
            Boosts treble frequencies using a resonant high-pass filter.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.TrebleBoosterModifier.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Modifiers.TrebleBoosterModifier"/> class.
            </summary>
            <param name="format">The audio format to process.</param>
            <param name="cutoff">The cutoff frequency of the high-pass filter.</param>
            <param name="boostGainDb">The gain of the boost in decibels.</param>
        </member>
        <member name="P:SoundFlow.Modifiers.TrebleBoosterModifier.BoostGainDb">
            <summary>
            Gets or sets the gain of the treble boost in decibels.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.TrebleBoosterModifier.Cutoff">
            <summary>
            Gets or sets the cutoff frequency of the high-pass filter.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.TrebleBoosterModifier.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.TrebleBoosterModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Modifiers.VocalExtractorModifier">
            <summary> 
            An advanced vocal extraction effect that supports Mono, Stereo, and Surround formats.
            </summary>
            <remarks> 
            <para>
            For Stereo pairs (e.g., L/R), this uses Spatial Isolation (Mid-Side subtraction) 
            to remove instruments panned to the sides.
            </para>
            <para>
            For Mono or isolated channels (e.g., Center in 5.1), it falls back to Spectral Gating 
            and Bandpass filtering to suppress noise and non-vocal frequencies.
            </para>
            </remarks>
        </member>
        <member name="P:SoundFlow.Modifiers.VocalExtractorModifier.Name">
            <inheritdoc/>
        </member>
        <member name="F:SoundFlow.Modifiers.VocalExtractorModifier.MakeupGain">
            <summary>
            Gain multiplier to compensate for windowing and subtraction loss.
            </summary>
        </member>
        <member name="F:SoundFlow.Modifiers.VocalExtractorModifier.StereoPenalty">
            <summary>
            The penalty factor for stereo width. 
            Higher values (e.g., 2.0 - 3.0) more aggressively remove instruments panned to the sides.
            </summary>
        </member>
        <member name="F:SoundFlow.Modifiers.VocalExtractorModifier.BackgroundThreshold">
            <summary>
            The spectral gating threshold. 
            Frequencies quieter than this percentage of the frame's peak volume are suppressed.
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.VocalExtractorModifier.MinFrequency">
            <summary> 
            The lower bound of the frequency range to preserve (in Hz). 
            Set to ~100Hz to keep the fundamental vocal frequencies (warmth) while cutting sub-bass.
            </summary> 
        </member>
        <member name="P:SoundFlow.Modifiers.VocalExtractorModifier.MaxFrequency">
            <summary> 
            The upper bound of the frequency range to preserve (in Hz). 
            </summary> 
        </member>
        <member name="P:SoundFlow.Modifiers.VocalExtractorModifier.FftSize">
            <summary> 
            The size of the Fast Fourier Transform (FFT) window. 
            </summary>
        </member>
        <member name="P:SoundFlow.Modifiers.VocalExtractorModifier.HopSize">
            <summary> 
            The hop size of the FFT. 
            </summary> 
        </member>
        <member name="T:SoundFlow.Modifiers.VocalExtractorModifier.ChannelState">
            <summary>
            Holds the processing state for a single audio channel.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.VocalExtractorModifier.ChannelState.#ctor(System.Int32)">
            <summary>
            Holds the processing state for a single audio channel.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.VocalExtractorModifier.#ctor(System.Int32,System.Single,System.Single,System.Int32,System.Int32)">
            <summary>
            Constructs a new instance of <see cref="T:SoundFlow.Modifiers.VocalExtractorModifier"/>.
            </summary>
            <param name="sampleRate">The audio sample rate in Hz.</param>
            <param name="minFrequency">The lower bound of the frequency range. Defaults to 100Hz to preserve vocal body.</param>
            <param name="maxFrequency">The upper bound of the frequency range. Defaults to 10000Hz.</param>
            <param name="fftSize">The size of the FFT window. Defaults to 4096 for better bass resolution.</param>
            <param name="hopSize">The hop size of the FFT. Defaults to 1024.</param>
        </member>
        <member name="M:SoundFlow.Modifiers.VocalExtractorModifier.Process(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Modifiers.VocalExtractorModifier.ProcessPair(SoundFlow.Modifiers.VocalExtractorModifier.ChannelState,SoundFlow.Modifiers.VocalExtractorModifier.ChannelState)">
            <summary>
            Processes two channels simultaneously using Spatial Isolation (Mid-Side).
            Best for L/R pairs in Stereo or Quad setups.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.VocalExtractorModifier.ProcessMono(SoundFlow.Modifiers.VocalExtractorModifier.ChannelState)">
            <summary>
            Processes a single channel using Bandpass and Spectral Gating only.
            Used for Mono inputs, or the Center/LFE channels in Surround setups.
            </summary>
        </member>
        <member name="M:SoundFlow.Modifiers.VocalExtractorModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Providers.AssetDataProvider">
            <summary>
                Provides audio data from a file or stream.
            </summary>
            <remarks>Loads full audio directly to memory.</remarks>
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.String,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.AssetDataProvider" /> class by reading from a file path.
                This method handles the stream lifecycle internally, ensuring the file handle is closed immediately after reading.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="filePath">The absolute or relative path to the audio file.</param>
            <param name="options">Optional configuration for metadata reading.</param>
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.IO.Stream,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.AssetDataProvider" /> class by reading from a stream and detecting its format.
                If metadata reading fails, it will attempt to probe the stream with registered codecs.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="stream">The stream to read audio data from.</param>
            <param name="options">Optional configuration for metadata reading.</param>
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.IO.Stream)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.AssetDataProvider" /> class with a specified format.
                If metadata reading fails, it will attempt to probe the stream with registered codecs.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
            <param name="stream">The stream to read audio data from.</param>
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.Byte[],SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.AssetDataProvider" /> class from a byte array.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="data">The byte array containing the audio file data.</param>
            <param name="options">Optional configuration for metadata reading.</param>
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.AssetDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.AssetDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.AssetDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.AssetDataProvider.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Providers.ChunkedDataProvider">
            <summary>
                Provides audio data from a file or stream by reading in chunks.
            </summary>
            <remarks>
                Efficiently handles large audio files by reading and decoding audio data in manageable chunks.
            </remarks>
        </member>
        <member name="M:SoundFlow.Providers.ChunkedDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.IO.Stream,SoundFlow.Metadata.Models.ReadOptions,System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.ChunkedDataProvider" /> class by automatically detecting the format.
                If metadata reading fails, it will attempt to probe the stream with registered codecs.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="stream">The stream to read audio data from. Must be readable and seekable.</param>
            <param name="options">Optional configuration for metadata reading.</param>
            <param name="chunkSize">The number of samples per channel to read in each chunk.</param>
        </member>
        <member name="M:SoundFlow.Providers.ChunkedDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.IO.Stream,System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.ChunkedDataProvider" /> class with a specified format.
                If metadata reading fails, it will attempt to probe the stream with registered codecs.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
            <param name="stream">The stream to read audio data from.</param>
            <param name="chunkSize">The number of samples to read in each chunk.</param>
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.ChunkedDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.ChunkedDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.ChunkedDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.ChunkedDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.ChunkedDataProvider.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.ChunkedDataProvider.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Providers.MicrophoneDataProvider">
            <summary>
            Provides audio data from a microphone by subscribing to a specific capture device.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.MicrophoneDataProvider.#ctor(SoundFlow.Abstracts.Devices.AudioDevice,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Providers.MicrophoneDataProvider"/> class.
            </summary>
            <param name="captureDevice">The capture device to source audio from.</param>
            <param name="bufferSize">The size of internal audio buffers in samples.</param>
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.MicrophoneDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.MicrophoneDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.MicrophoneDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.MicrophoneDataProvider.StartCapture">
            <summary>
                Starts capturing audio data from the microphone.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.MicrophoneDataProvider.StopCapture">
            <summary>
                Stops capturing audio data from the microphone.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.MicrophoneDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.MicrophoneDataProvider.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.MicrophoneDataProvider.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Providers.MidiDataProvider">
            <summary>
            A data provider that processes a <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/> into a single, time-ordered sequence of events,
            and provides utilities to convert MIDI ticks into real time based on the file's internal tempo map.
            </summary>
        </member>
        <member name="T:SoundFlow.Providers.MidiDataProvider.TimedMidiEvent">
            <summary>
            Represents a MIDI event with an absolute time in ticks from the start of the sequence.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.TimedMidiEvent.#ctor(System.Int64,SoundFlow.Metadata.Midi.MidiEvent)">
            <summary>
            Represents a MIDI event with an absolute time in ticks from the start of the sequence.
            </summary>
        </member>
        <member name="T:SoundFlow.Providers.MidiDataProvider.TempoPoint">
            <summary>
            Represents a tempo change at a specific point in the MIDI sequence.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.TempoPoint.#ctor(System.Int64,System.Int32)">
            <summary>
            Represents a tempo change at a specific point in the MIDI sequence.
            </summary>
        </member>
        <member name="P:SoundFlow.Providers.MidiDataProvider.Events">
            <summary>
            Gets the list of all MIDI events from all tracks, sorted chronologically.
            </summary>
        </member>
        <member name="P:SoundFlow.Providers.MidiDataProvider.TicksPerQuarterNote">
            <summary>
            Gets the time division from the MIDI file, in ticks per quarter note.
            </summary>
        </member>
        <member name="P:SoundFlow.Providers.MidiDataProvider.LengthTicks">
            <summary>
            Gets the total duration of the MIDI sequence in ticks.
            </summary>
        </member>
        <member name="P:SoundFlow.Providers.MidiDataProvider.Duration">
            <summary>
            Gets the total duration of the MIDI sequence as a TimeSpan, calculated from its internal tempo map.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.#ctor(SoundFlow.Metadata.Midi.MidiFile)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Providers.MidiDataProvider"/> class from a <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/>.
            </summary>
            <param name="midiFile">The parsed MIDI file to process.</param>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.#ctor(System.IO.Stream)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Providers.MidiDataProvider"/> class from a MIDI file stream.
            </summary>
            <param name="stream">The stream containing the MIDI file data.</param>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.#ctor(SoundFlow.Editing.MidiSequence)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Providers.MidiDataProvider"/> class from a mutable <see cref="T:SoundFlow.Editing.MidiSequence"/>.
            This acts as a read-only "view" for the playback engine.
            </summary>
            <param name="sequence">The MIDI sequence to create a provider from.</param>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.GetEvents(System.Int64,System.Int64)">
            <summary>
            Retrieves all MIDI events that occur within a specified time range, defined by ticks.
            </summary>
            <param name="startTick">The starting tick of the range (inclusive).</param>
            <param name="endTick">The ending tick of the range (exclusive).</param>
            <returns>An enumerable collection of timed MIDI events within the specified range.</returns>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.GetTimeSpanForTick(System.Int64)">
            <summary>
            Converts an absolute time in MIDI ticks to a <see cref="T:System.TimeSpan"/> using the file's internal tempo map.
            </summary>
            <param name="tick">The absolute tick position to convert.</param>
            <returns>The corresponding TimeSpan from the beginning of the sequence.</returns>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.GetTickForTimeSpan(System.TimeSpan)">
            <summary>
            Converts a <see cref="T:System.TimeSpan"/> to an absolute time in MIDI ticks using the file's internal tempo map.
            </summary>
            <param name="time">The TimeSpan to convert.</param>
            <returns>The corresponding absolute tick position.</returns>
        </member>
        <member name="M:SoundFlow.Providers.MidiDataProvider.ToMidiFile">
            <summary>
            Converts the data provider's event stream back into a standard MidiFile object.
            </summary>
            <returns>A new <see cref="T:SoundFlow.Metadata.Midi.MidiFile"/> instance.</returns>
        </member>
        <member name="T:SoundFlow.Providers.NetworkDataProvider">
            <summary>
                Provides audio data from an internet source, supporting both direct audio URLs and HLS (m3u(8)) playlists.
            </summary>
            <remarks>
                Note: Initialization is performed asynchronously. The provider may not be ready to produce data immediately
                after the constructor returns. Methods will return 0 or default values until initialization is complete
            </remarks>
        </member>
        <member name="M:SoundFlow.Providers.NetworkDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.String,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.NetworkDataProvider" /> class, automatically detecting the audio format.
                This begins the process of downloading and preparing the stream. Not recommended for HLS streams.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="url">The URL of the audio stream.</param>
            <param name="options">Optional configuration for metadata reading.</param>
        </member>
        <member name="M:SoundFlow.Providers.NetworkDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.String,System.String)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.NetworkDataProvider" /> class with a specified format.
                This is required for HLS streams where the segment format must be known in advance.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="format">The audio format containing channels and sample rate and sample format.</param>
            <param name="url">The URL of the audio stream.</param>
            <param name="hlsSegmentFormatId">For HLS streams, the format identifier (e.g., "aac", "mp3") of the individual segments. This is ignored for direct streams.</param>
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.NetworkDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.NetworkDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.NetworkDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.NetworkDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.NetworkDataProvider.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.NetworkDataProvider.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Providers.NetworkDataProviderBase">
            <summary>
                Internal abstract base class for network providers.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.NetworkDataProviderBase.#ctor(SoundFlow.Abstracts.AudioEngine,System.Nullable{SoundFlow.Structs.AudioFormat},System.String,System.Net.Http.HttpClient)">
            <summary>
                Internal abstract base class for network providers.
            </summary>
        </member>
        <member name="T:SoundFlow.Providers.DirectStreamProvider">
            <summary>
                Handles direct audio streams (e.g., MP3, WAV, OGG files).
                Uses a background buffering strategy for large files to prevent network issues from crashing the audio thread.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.DirectStreamProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.Nullable{SoundFlow.Structs.AudioFormat},System.String,System.Net.Http.HttpClient,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Handles direct audio streams (e.g., MP3, WAV, OGG files).
                Uses a background buffering strategy for large files to prevent network issues from crashing the audio thread.
            </summary>
        </member>
        <member name="T:SoundFlow.Providers.HlsStreamProvider">
            <summary>
                Handles HLS (HTTP Live Streaming) playlists (m3u8).
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.HlsStreamProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.Nullable{SoundFlow.Structs.AudioFormat},System.String,System.String,System.Net.Http.HttpClient)">
            <summary>
                Handles HLS (HTTP Live Streaming) playlists (m3u8).
            </summary>
        </member>
        <member name="T:SoundFlow.Providers.BufferedNetworkStream">
            <summary>
                A thread-safe, in-memory stream that acts as a circular buffer between a producer (network download)
                and a consumer (audio decoder). It blocks reads when empty and writes when full.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.BufferedNetworkStream.#ctor(System.Int32)">
            <summary>
                A thread-safe, in-memory stream that acts as a circular buffer between a producer (network download)
                and a consumer (audio decoder). It blocks reads when empty and writes when full.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.BufferedNetworkStream.StartProducerTask(System.Net.Http.HttpResponseMessage)">
            <summary>
            Starts the background producer task that reads from the network response and fills the buffer.
            This method takes ownership of the HttpResponseMessage.
            </summary>
            <param name="sourceResponse">The HTTP response message containing the content stream.</param>
        </member>
        <member name="T:SoundFlow.Providers.QueueFullBehavior">
            <summary>
                Defines the behavior for when an attempt is made to add samples to a full QueueDataProvider.
            </summary>
        </member>
        <member name="F:SoundFlow.Providers.QueueFullBehavior.Throw">
            <summary>
                Throw an <see cref="T:System.InvalidOperationException"/> when the queue is full. This is the default behavior.
            </summary>
        </member>
        <member name="F:SoundFlow.Providers.QueueFullBehavior.Block">
            <summary>
                Block the calling thread until space becomes available in the queue.
            </summary>
        </member>
        <member name="F:SoundFlow.Providers.QueueFullBehavior.Drop">
            <summary>
                Silently drop the incoming samples and return immediately.
            </summary>
        </member>
        <member name="T:SoundFlow.Providers.QueueDataProvider">
            <summary>
                Provides audio data from an in-memory queue that is fed samples externally.
                This provider is ideal for scenarios where audio data is generated or received in chunks.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.#ctor(SoundFlow.Structs.AudioFormat,System.Nullable{System.Int32},SoundFlow.Providers.QueueFullBehavior)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.QueueDataProvider" /> class.
            </summary>
            <param name="format">The audio format containing channels and sample rate and sample format</param>
            <param name="maxSamples">
                The maximum number of samples the queue can hold.
                If null, the queue has no size limit (and the 'full' behavior is irrelevant).
            </param>
            <param name="fullBehavior">
                The behavior to exhibit when <see cref="M:SoundFlow.Providers.QueueDataProvider.AddSamples(System.ReadOnlySpan{System.Single})"/> is called on a full queue.
                This parameter is ignored if <paramref name="maxSamples"/> is null.
            </param>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if sampleRate is not positive.</exception>
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.SamplesAvailable">
            <summary>
                Gets the number of samples currently available in the queue.
            </summary>
        </member>
        <member name="P:SoundFlow.Providers.QueueDataProvider.TotalSamplesEnqueued">
            <summary>
                Gets the total number of samples enqueued so far.
            </summary>
        </member>
        <member name="E:SoundFlow.Providers.QueueDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.QueueDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.AddSamples(System.ReadOnlySpan{System.Single})">
            <summary>
                Adds audio samples to the queue. The behavior when the queue is full is determined
                by the <see cref="T:SoundFlow.Providers.QueueFullBehavior"/> set in the constructor.
            </summary>
            <param name="samples">The buffer containing the samples to add.</param>
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.Reset">
            <summary>
                Resets the provider to its initial state, clearing the sample queue and resetting the position.
                This allows the instance to be reused. Any threads blocked in <see cref="M:SoundFlow.Providers.QueueDataProvider.AddSamples(System.ReadOnlySpan{System.Single})"/> will be unblocked.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.CompleteAdding">
            <summary>
                Marks the end of sample addition, indicating that the producer is finished adding samples.
                Any threads blocked in <see cref="M:SoundFlow.Providers.QueueDataProvider.ReadBytes(System.Span{System.Single})"/> will be unblocked.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.QueueDataProvider.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Providers.RawDataProvider">
            <summary>
                Provides audio data from a raw PCM stream or a raw float array.
                This provider is designed for sources that directly contain raw PCM bytes or float samples without any encoding headers.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.#ctor(System.Single[],System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.RawDataProvider"/> class from a raw float array.
            </summary>
            <param name="rawSamples">The raw float array containing the audio samples.</param>
            <param name="sampleRate">The sample rate of the audio data. Defaults to 48000.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="rawSamples"/> is <c>null</c>.</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.#ctor(System.IO.Stream,SoundFlow.Enums.SampleFormat,System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.RawDataProvider"/> class from a raw PCM stream.
            </summary>
            <param name="pcmStream">The raw PCM stream containing the audio samples.</param>
            <param name="sampleFormat">The sample format of the raw PCM stream.</param>
            <param name="sampleRate">The sample rate of the audio data. Defaults to 48000.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="pcmStream"/> is <c>null</c>.</exception>
            <exception cref="T:System.ArgumentException">Thrown if <paramref name="sampleFormat"/> is <see cref="F:SoundFlow.Enums.SampleFormat.Unknown"/>.</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.#ctor(System.Byte[],SoundFlow.Enums.SampleFormat,System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.RawDataProvider"/> class from a raw byte array.
            </summary>
            <param name="rawBytes">The raw byte array containing the audio samples.</param>
            <param name="sampleFormat">The sample format of the raw byte array.</param>
            <param name="sampleRate">The sample rate of the audio data. Defaults to 48000.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="rawBytes"/> is <c>null</c>.</exception>
            <exception cref="T:System.ArgumentException">Thrown if <paramref name="sampleFormat"/> is <see cref="F:SoundFlow.Enums.SampleFormat.Unknown"/>.</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.#ctor(System.Int32[],System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.RawDataProvider"/> class from a raw int array.
            </summary>
            <param name="rawSamples">The raw int array containing the audio samples.</param>
            <param name="sampleRate">The sample rate of the audio data. Defaults to 48000.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="rawSamples"/> is <c>null</c>.</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.#ctor(System.Int16[],System.Int32)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.RawDataProvider"/> class from a raw short array.
            </summary>
            <param name="rawSamples">The raw short array containing the audio samples.</param>
            <param name="sampleRate">The sample rate of the audio data. Defaults to 48000.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="rawSamples"/> is <c>null</c>.</exception>
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.RawDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.RawDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.RawDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
            <exception cref="T:System.ObjectDisposedException">Thrown if the provider has been disposed.</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.Seek(System.Int32)">
            <inheritdoc />
            <exception cref="T:System.ObjectDisposedException">Thrown if the provider has been disposed.</exception>
            <exception cref="T:System.NotSupportedException">Thrown if seeking is not supported on the underlying PCM stream.</exception>
            <exception cref="T:System.InvalidOperationException">Thrown if no data source is initialized.</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.Dispose">
            <summary>
                Releases the unmanaged resources used by the <see cref="T:SoundFlow.Providers.RawDataProvider"/>.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.GetLength">
            <summary>
                Calculates the total length of the audio data in samples
            </summary>
            <returns>
                Length in samples for streams that can seek, -1 for non-seekable streams,
                or length of array data sources
            </returns>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.GetArrayLength">
            <summary>
                Gets the length of array-based data sources in samples
            </summary>
            <returns>Number of samples in the current array source</returns>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.ReadData(System.Span{System.Single})">
            <summary>
                Reads audio data into the provided buffer from the current source
            </summary>
            <param name="buffer">Target buffer for the audio samples</param>
            <returns>Number of samples actually read</returns>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.ReadFromStream(System.Span{System.Single})">
            <summary>
                Reads audio data from a stream source
            </summary>
            <param name="buffer">Target buffer for the audio samples</param>
            <returns>Number of samples actually read</returns>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.ReadFromArray``1(``0[],System.Span{System.Single},System.Func{``0,System.Single})">
            <summary>
                Generic method to read from array-based sources
            </summary>
            <typeparam name="T">Type of the source array</typeparam>
            <param name="source">Source array containing audio data</param>
            <param name="buffer">Target buffer for the audio samples</param>
            <param name="convertAction">Conversion action to transform a single source sample to float</param>
            <returns>Number of samples actually read</returns>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.ClampSampleOffset(System.Int32,System.Int64)">
            <summary>
                Clamps the sample offset to valid range
            </summary>
            <param name="offset">Requested sample offset</param>
            <param name="maxSamples">Maximum available samples</param>
            <returns>Clamped sample offset within valid range</returns>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.ConvertBytesToFloat(System.Span{System.Byte},System.Span{System.Single},SoundFlow.Enums.SampleFormat)">
            <summary>
                Converts raw audio bytes to normalized float samples
            </summary>
            <param name="byteBuffer">Source byte buffer</param>
            <param name="floatBuffer">Target float buffer</param>
            <param name="format">Source sample format</param>
            <exception cref="T:System.NotSupportedException">Thrown for unsupported sample formats</exception>
        </member>
        <member name="M:SoundFlow.Providers.RawDataProvider.Convert24BitToFloat(System.Span{System.Byte},System.Int32)">
            <summary>
                Converts 24-bit packed samples to float
            </summary>
            <param name="bytes">Source byte buffer</param>
            <param name="index">Starting index of 24-bit sample</param>
            <returns>Normalized float sample</returns>
        </member>
        <member name="T:SoundFlow.Providers.StreamDataProvider">
            <summary>
                Provides audio data from a stream.
            </summary>
        </member>
        <member name="M:SoundFlow.Providers.StreamDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,System.IO.Stream,SoundFlow.Metadata.Models.ReadOptions)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.StreamDataProvider" /> class by automatically detecting the format.
                It first attempts to read metadata; if that fails, it falls back to probing the stream with all available codecs.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="stream">The stream to read audio data from. Must be readable and seekable.</param>
            <param name="options">Optional configuration for metadata reading.</param>
        </member>
        <member name="M:SoundFlow.Providers.StreamDataProvider.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,System.IO.Stream)">
            <summary>
                Initializes a new instance of the <see cref="T:SoundFlow.Providers.StreamDataProvider" /> class with a specified format.
            </summary>
            <param name="engine">The audio engine instance.</param>
            <param name="format">The audio format.</param>
            <param name="stream">The stream to read audio data from.</param>
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.Position">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.Length">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.CanSeek">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.SampleFormat">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.SampleRate">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.IsDisposed">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Providers.StreamDataProvider.FormatInfo">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.StreamDataProvider.EndOfStreamReached">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Providers.StreamDataProvider.PositionChanged">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.StreamDataProvider.ReadBytes(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.StreamDataProvider.Seek(System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Providers.StreamDataProvider.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer">
            <summary>
            Analyzes audio content to generate robust acoustic fingerprints for identification.
            Uses spectral peak analysis and combinatorial hashing.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Security.Configuration.FingerprintConfiguration)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer"/> class.
            </summary>
            <param name="format">The audio format.</param>
            <param name="config">Configuration options. If null, defaults will be used.</param>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.GetGeneratedHashes">
            <summary>
            Gets the complete list of hashes generated so far.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.ProcessFrame">
            <summary>
            Processes a single FFT frame: Windowing, FFT, Peak Extraction, and Hashing.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.ExtractPeaks">
            <summary>
            Identifies significant spectral peaks using adaptive thresholding and band limits.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.ContentFingerprintAnalyzer.GenerateHashesForFrame(System.Int32)">
            <summary>
            Generates hashes by pairing peaks from the current frame with peaks from previous frames.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Analyzers.IntegrityWatermarkVerifyAnalyzer">
            <summary>
            Verifies the integrity of an audio stream by validating block-chained watermarks.
            Raises an event if the hash embedded in Block N does not match the computed hash of Block N-1.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Analyzers.IntegrityWatermarkVerifyAnalyzer.Name">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Security.Analyzers.IntegrityWatermarkVerifyAnalyzer.IntegrityViolationDetected">
            <summary>
            Occurs when an integrity violation is detected.
            The argument provided is the index of the block where verification failed.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.IntegrityWatermarkVerifyAnalyzer.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Analyzers.IntegrityWatermarkVerifyAnalyzer"/> class.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.IntegrityWatermarkVerifyAnalyzer.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Security.Analyzers.ExtractorState">
            <summary>
            Defines the internal state of the watermark extractor.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer">
            <summary>
            Analyzes an audio stream to extract hidden ownership watermarks embedded using DSSS.
            Implements a sliding window correlator to detect the synchronization sequence before decoding the payload.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer.Name">
            <inheritdoc />
        </member>
        <member name="E:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer.PayloadExtracted">
            <summary>
            Occurs when the payload extraction is complete.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer"/> class.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Analyzers.OwnershipWatermarkExtractAnalyzer.Finish">
            <summary>
            Finalizes extraction and attempts to parse the collected payload bits.
            This should be called when the audio stream ends.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.AudioEncryptor">
            <summary>
            Provides high-level methods to encrypt and decrypt audio using the <see cref="T:SoundFlow.Security.Containers.SecureAudioContainer"/> format.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.EncryptAsync(SoundFlow.Interfaces.ISoundDataProvider,System.IO.Stream,SoundFlow.Security.Configuration.EncryptionConfiguration,SoundFlow.Security.Configuration.SignatureConfiguration,System.Boolean)">
            <summary>
            Asynchronously reads audio from the source provider, encrypts it, and writes it to the destination stream.
            Uses streaming to support large files without high memory usage.
            Optionally signs the destination stream. If <paramref name="embedSignature"/> is true, the signature is embedded in the header; otherwise, it is returned.
            </summary>
            <param name="source">The source audio provider.</param>
            <param name="destinationStream">The output stream. If signing is requested, it must be readable and seekable.</param>
            <param name="config">The encryption configuration.</param>
            <param name="signingConfig">Configuration to sign the data. If null, no signing occurs.</param>
            <param name="embedSignature">If true and <paramref name="signingConfig"/> is present, the signature is embedded into the container header.</param>
            <returns>
            A task containing the Base64 signature string if signing was performed and <paramref name="embedSignature"/> was false.
            Returns null if no signing occurred or if the signature was embedded.
            </returns>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.EncryptAsync(SoundFlow.Interfaces.ISoundDataProvider,System.String,SoundFlow.Security.Configuration.EncryptionConfiguration,SoundFlow.Security.Configuration.SignatureConfiguration,System.Boolean)">
            <summary>
            Reads audio from the source provider, encrypts it, and writes it to the destination file path.
            Optionally signs the result (either embedded or detached).
            </summary>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.Decrypt(System.IO.Stream,System.Byte[])">
            <summary>
            Reads an encrypted stream and returns a provider that streams the decrypted audio.
            The source stream remains open and its ownership is transferred to the returned provider,
            which will dispose of the stream when it is disposed.
            </summary>
            <param name="sourceStream">The stream containing the secure audio data.</param>
            <param name="key">The decryption key.</param>
            <returns>A result containing a streaming provider, or an error.</returns>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.Decrypt(System.String,System.Byte[])">
            <summary>
            Opens an encrypted file and returns a provider that streams the decrypted audio.
            The file remains locked until the provider is disposed.
            </summary>
            <param name="sourceFilePath">The path to the secure audio file.</param>
            <param name="key">The decryption key.</param>
            <returns>A result containing a streaming provider, or an error.</returns>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.VerifyAndDecryptAsync(System.String,System.Byte[],SoundFlow.Security.Configuration.SignatureConfiguration,System.String)">
            <summary>
            Opens an encrypted file, verifies its authenticity (embedded or detached), and returns a decryption provider.
            </summary>
            <param name="sourceFilePath">The path to the secure audio file.</param>
            <param name="key">The decryption key.</param>
            <param name="signingConfig">The configuration containing the Public Key.</param>
            <param name="detachedSignature">Optional detached signature. If null, the method looks for an embedded signature.</param>
            <returns>A result containing the decrypted provider if verification succeeds.</returns>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.VerifyAndDecryptAsync(System.IO.Stream,System.Byte[],SoundFlow.Security.Configuration.SignatureConfiguration,System.String)">
            <summary>
            Verifies the authenticity of an encrypted stream and returns a decryption provider.
            Handles both embedded signatures (by masking the signature block with zeros) and detached signatures.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.AudioEncryptor.ZeroingStream">
            <summary>
            A stream wrapper that zeroes out a specific range of bytes during read.
            Used to simulate the "pre-signed" state of the file header during verification.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.AudioEncryptor.ZeroingStream.#ctor(System.IO.Stream,System.Int64,System.Int32)">
            <summary>
            A stream wrapper that zeroes out a specific range of bytes during read.
            Used to simulate the "pre-signed" state of the file header during verification.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.AudioEncryptor.DecryptionStream">
            <summary>
            Internal stream wrapper that decrypts data on-the-fly during Read operations.
            Supports seeking by recalculating AES-CTR state.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.AudioIdentifier">
            <summary>
            Provides high-level functionality to identify audio content using fingerprints.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.AudioIdentifier.GenerateFingerprint(SoundFlow.Interfaces.ISoundDataProvider,SoundFlow.Security.Configuration.FingerprintConfiguration)">
            <summary>
            Generates a fingerprint for the provided audio data by processing the entire stream immediately.
            </summary>
            <param name="provider">The audio data provider.</param>
            <param name="config">Optional configuration.</param>
            <returns>A generated <see cref="T:SoundFlow.Security.Models.AudioFingerprint"/>.</returns>
        </member>
        <member name="M:SoundFlow.Security.AudioIdentifier.IdentifyAsync(SoundFlow.Interfaces.ISoundDataProvider,SoundFlow.Security.Stores.IFingerprintStore,SoundFlow.Security.Configuration.FingerprintConfiguration)">
            <summary>
            Attempts to identify the audio content provided by the data provider by matching it against the store.
            Uses a histogram of time-deltas to find the best alignment.
            </summary>
            <param name="provider">The query audio provider.</param>
            <param name="store">The fingerprint store to search.</param>
            <param name="config">Optional configuration.</param>
            <returns>A <see cref="T:SoundFlow.Security.Models.FingerprintResult"/> detailing the match.</returns>
        </member>
        <member name="T:SoundFlow.Security.AudioWatermarker">
            <summary>
            Provides high-level methods to apply and extract watermarks.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.AudioWatermarker.EmbedOwnershipWatermark(SoundFlow.Interfaces.ISoundDataProvider,System.IO.Stream,System.String,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Embeds a text ownership watermark into an audio source and writes the result to a destination stream.
            The output format is 32-bit Float WAV.
            </summary>
            <param name="source">The source audio provider.</param>
            <param name="destination">The destination stream (must be writable and seekable to update headers).</param>
            <param name="text">The text to embed.</param>
            <param name="config">Configuration options.</param>
            <exception cref="T:System.ArgumentException">Thrown if the destination stream does not support seeking.</exception>
        </member>
        <member name="M:SoundFlow.Security.AudioWatermarker.EmbedOwnershipWatermarkToFile(SoundFlow.Interfaces.ISoundDataProvider,System.String,System.String,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Wrapper to embed a watermark directly to a file path.
            </summary>
            <param name="source">The source audio provider.</param>
            <param name="destinationPath">The output file path.</param>
            <param name="text">The text to embed.</param>
            <param name="config">Configuration options.</param>
        </member>
        <member name="M:SoundFlow.Security.AudioWatermarker.ExtractOwnershipWatermarkAsync(SoundFlow.Interfaces.ISoundDataProvider,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Attempts to extract a text payload from a watermarked audio source.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Configuration.EncryptionConfiguration">
            <summary>
            Configuration settings for audio stream encryption.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.EncryptionConfiguration.Key">
            <summary>
            Gets or sets the encryption key. Must be 32 bytes (256 bits) for AES-256.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.EncryptionConfiguration.Iv">
            <summary>
            Gets or sets the initialization vector (Nonce).
            For AES-CTR, this is typically 12 bytes, with the last 4 bytes reserved for the counter.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.EncryptionConfiguration.EnableIntegrityCheck">
            <summary>
            Gets or sets a value indicating whether to compute an HMAC integrity tag during processing.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Configuration.FingerprintConfiguration">
            <summary>
            Configuration settings for the content fingerprint analyzer.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.FftSize">
            <summary>
            Gets or sets the size of the FFT window. Must be a power of 2.
            Default is 2048.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.OverlapFactor">
            <summary>
            Gets or sets the overlap factor between analysis frames.
            Default is 2 (50% overlap).
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.MinFrequency">
            <summary>
            Gets or sets the minimum frequency to consider for peaks (Hz).
            Default is 300Hz.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.MaxFrequency">
            <summary>
            Gets or sets the maximum frequency to consider for peaks (Hz).
            Default is 5000Hz.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.TargetZoneSize">
            <summary>
            Gets or sets the size of the target zone in time (frames) for combinatorial hashing.
            Reducing this reduces hash density.
            Default is 3 frames (reduced from 5 to optimize density).
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.MinPeakMagnitude">
            <summary>
            Gets or sets the minimum magnitude required for a spectral peak to be considered.
            Normalized range 0.0 to 1.0.
            Default is 0.01 (increased from 0.002 to reduce noise hashes).
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.AdaptiveThresholdMultiplier">
            <summary>
            Gets or sets the multiplier for adaptive thresholding.
            A peak must be this many times larger than the local average to be selected.
            Default is 2.0 (increased from 1.5 to select only prominent peaks).
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.MinConfidenceThreshold">
            <summary>
            Gets or sets the minimum absolute number of aligned hashes required to declare a match.
            Default is 25.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.FingerprintConfiguration.MinRelativeConfidence">
            <summary>
            Gets or sets the minimum relative confidence score (Matched Hashes / Total Query Hashes).
            Range 0.0 to 1.0. 
            A value of 0.05 (5%) implies that at least 5% of the query's hashes must match the target.
            This effectively filters out random collisions in large queries.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Configuration.SignatureConfiguration">
            <summary>
            Configuration settings for digital signature operations (signing and verification).
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.SignatureConfiguration.PrivateKeyPem">
            <summary>
            Gets or sets the PEM-encoded Private Key (PKCS#8).
            Required for <see cref="M:SoundFlow.Security.FileAuthenticator.SignStreamAsync(System.IO.Stream,SoundFlow.Security.Configuration.SignatureConfiguration)"/>.
            <remarks>Never distribute this key with your application.</remarks>
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.SignatureConfiguration.PublicKeyPem">
            <summary>
            Gets or sets the PEM-encoded Public Key (SubjectPublicKeyInfo).
            Required for <see cref="M:SoundFlow.Security.FileAuthenticator.VerifyStreamAsync(System.IO.Stream,System.String,SoundFlow.Security.Configuration.SignatureConfiguration)"/>.
            <remarks>This key is safe to distribute.</remarks>
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Configuration.SignatureConfiguration.#ctor(System.String,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Configuration.SignatureConfiguration"/> class.
            </summary>
            <param name="privateKeyPem">The PEM-encoded Private Key (PKCS#8).</param>
            <param name="publicKeyPem">The PEM-encoded Public Key (SubjectPublicKeyInfo).</param>
        </member>
        <member name="M:SoundFlow.Security.Configuration.SignatureConfiguration.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Configuration.SignatureConfiguration"/> class.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Configuration.SignatureConfiguration.Generate">
            <summary>
            Generates a new key pair and returns a <see cref="T:SoundFlow.Security.Configuration.SignatureConfiguration"/> instance using <see cref="M:SoundFlow.Security.Utils.SignatureKeyGenerator.Generate"/>.
            </summary>
            <returns>A <see cref="T:SoundFlow.Security.Configuration.SignatureConfiguration"/> instance with the generated key pair.</returns>
        </member>
        <member name="T:SoundFlow.Security.Configuration.WatermarkConfiguration">
            <summary>
            Configuration settings for audio watermarking operations.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.WatermarkConfiguration.Key">
            <summary>
            Gets or sets the secret key used to seed the pseudo-random number generator for spread spectrum watermarking.
            Both the embedder and extractor must use the same key.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.WatermarkConfiguration.Strength">
            <summary>
            Gets or sets the embedding strength (Alpha).
            Higher values make the watermark more robust but more audible.
            Range: 0.001 (invisible) to 0.1 (audible hiss).
            Default is 0.08 for a good balance of robustness and quality.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.WatermarkConfiguration.SpreadFactor">
            <summary>
            Gets or sets the spread factor (Chip Rate).
            Determines how many audio samples represent a single bit of data.
            Higher values drastically increase robustness against noise and compression but decrease data rate.
            Default is 16384 (approx 40 bits/sec at 44.1kHz).
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Configuration.WatermarkConfiguration.IntegrityBlockSize">
            <summary>
            Gets or sets the block size for integrity watermarking hashing.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Containers.SecureAudioContainer">
            <summary>
            A utility class for handling the metadata headers of encrypted audio containers.
            </summary>
        </member>
        <member name="F:SoundFlow.Security.Containers.SecureAudioContainer.MaxSignatureSize">
            <summary>
            Fixed size reserved for the signature block (Length + Data + Padding) if embedded.
            512 bytes is sufficient for ECDSA P-384 (approx 100-120 bytes) and future proofing.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Containers.SecureAudioContainer.ContainerFlags">
            <summary>
            Container flags to indicate the presence of an embedded digital signature.
            </summary>
        </member>
        <member name="F:SoundFlow.Security.Containers.SecureAudioContainer.ContainerFlags.None">
            <summary>
            No flags set.
            </summary>
        </member>
        <member name="F:SoundFlow.Security.Containers.SecureAudioContainer.ContainerFlags.HasEmbeddedSignature">
            <summary>
            The container has an embedded digital signature.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Containers.SecureAudioContainer.WriteHeader(System.IO.Stream,SoundFlow.Security.Configuration.EncryptionConfiguration,SoundFlow.Structs.AudioFormat,System.Boolean)">
            <summary>
            Writes the Secure Audio container header to the stream.
            </summary>
            <param name="outputStream">The destination stream.</param>
            <param name="config">The encryption configuration containing the IV.</param>
            <param name="originalFormat">The format of the audio data.</param>
            <param name="embedSignature">Whether to reserve space for an embedded digital signature.</param>
            <returns>The byte offset where the signature block begins (if embedded), or -1.</returns>
        </member>
        <member name="M:SoundFlow.Security.Containers.SecureAudioContainer.ReadHeader(System.IO.Stream)">
            <summary>
            Reads the Secure Audio container header from the stream.
            </summary>
            <param name="inputStream">The source stream.</param>
            <returns>
            A result containing the audio format, the IV, the data start offset, 
            and optionally the extracted signature bytes and its file offset if present.
            </returns>
        </member>
        <member name="T:SoundFlow.Security.FileAuthenticator">
            <summary>
            Provides methods to sign and verify files using ECDSA Digital Signatures.
            This ensures file authenticity and integrity at the binary container level.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.FileAuthenticator.SignFileAsync(System.String,SoundFlow.Security.Configuration.SignatureConfiguration)">
            <summary>
            Asynchronously calculates a digital signature for a specific file.
            </summary>
            <param name="filePath">The path to the file to sign.</param>
            <param name="config">The configuration containing the Private Key in PEM format.</param>
            <returns>A result containing the Base64-encoded signature string.</returns>
        </member>
        <member name="M:SoundFlow.Security.FileAuthenticator.SignStreamAsync(System.IO.Stream,SoundFlow.Security.Configuration.SignatureConfiguration)">
            <summary>
            Asynchronously calculates a digital signature for a data stream.
            </summary>
            <param name="stream">The stream to sign. Must be readable.</param>
            <param name="config">The configuration containing the Private Key in PEM format.</param>
            <returns>A result containing the Base64-encoded signature string.</returns>
        </member>
        <member name="M:SoundFlow.Security.FileAuthenticator.VerifyFileAsync(System.String,System.String,SoundFlow.Security.Configuration.SignatureConfiguration)">
            <summary>
            Asynchronously verifies the authenticity of a file against a provided signature.
            </summary>
            <param name="filePath">The path to the file to verify.</param>
            <param name="signatureBase64">The Base64-encoded signature to verify against.</param>
            <param name="config">The configuration containing the Public Key in PEM format.</param>
            <returns>A result containing true if the signature is valid, otherwise false.</returns>
        </member>
        <member name="M:SoundFlow.Security.FileAuthenticator.VerifyStreamAsync(System.IO.Stream,System.String,SoundFlow.Security.Configuration.SignatureConfiguration)">
            <summary>
            Asynchronously verifies the authenticity of a data stream against a provided signature.
            </summary>
            <param name="stream">The stream to verify.</param>
            <param name="signatureBase64">The Base64-encoded signature to verify against.</param>
            <param name="config">The configuration containing the Public Key in PEM format.</param>
            <returns>A result containing true if the signature is valid, otherwise false.</returns>
        </member>
        <member name="T:SoundFlow.Security.Models.AudioFingerprint">
            <summary>
            Represents the complete acoustic fingerprint of an audio source.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.AudioFingerprint.TrackId">
            <summary>
            Gets or sets the unique identifier for the audio source.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.AudioFingerprint.Hashes">
            <summary>
            Gets or sets the list of generated hashes.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.AudioFingerprint.DurationSeconds">
            <summary>
            Gets or sets the total duration of the analyzed audio in seconds.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Models.FingerprintHash">
            <summary>
            Represents a single feature point in an audio fingerprint.
            </summary>
            <param name="Hash">The computed hash value representing the relationship between spectral peaks.</param>
            <param name="TimeOffset">The time offset (in analysis frames) where the anchor point of this hash occurs.</param>
        </member>
        <member name="M:SoundFlow.Security.Models.FingerprintHash.#ctor(System.UInt32,System.Int32)">
            <summary>
            Represents a single feature point in an audio fingerprint.
            </summary>
            <param name="Hash">The computed hash value representing the relationship between spectral peaks.</param>
            <param name="TimeOffset">The time offset (in analysis frames) where the anchor point of this hash occurs.</param>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintHash.Hash">
            <summary>The computed hash value representing the relationship between spectral peaks.</summary>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintHash.TimeOffset">
            <summary>The time offset (in analysis frames) where the anchor point of this hash occurs.</summary>
        </member>
        <member name="T:SoundFlow.Security.Models.FingerprintMatchCandidate">
            <summary>
            Represents a raw candidate match retrieved from the fingerprint store.
            </summary>
            <param name="TrackId">The unique identifier of the track in the database.</param>
            <param name="TrackTimeOffset">The time offset (in frames) where this hash occurs in the source track.</param>
        </member>
        <member name="M:SoundFlow.Security.Models.FingerprintMatchCandidate.#ctor(System.String,System.Int32)">
            <summary>
            Represents a raw candidate match retrieved from the fingerprint store.
            </summary>
            <param name="TrackId">The unique identifier of the track in the database.</param>
            <param name="TrackTimeOffset">The time offset (in frames) where this hash occurs in the source track.</param>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintMatchCandidate.TrackId">
            <summary>The unique identifier of the track in the database.</summary>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintMatchCandidate.TrackTimeOffset">
            <summary>The time offset (in frames) where this hash occurs in the source track.</summary>
        </member>
        <member name="T:SoundFlow.Security.Models.FingerprintResult">
            <summary>
            Represents the final result of an audio identification attempt.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintResult.TrackId">
            <summary>
            Gets the unique identifier of the matched track.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintResult.Confidence">
            <summary>
            Gets the confidence score of the match.
            This represents the number of hashes that temporally aligned with the database.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintResult.MatchTimeSeconds">
            <summary>
            Gets the calculated time offset (in seconds) where the query audio starts within the matched track.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Models.FingerprintResult.ProcessingTime">
            <summary>
            Gets the total processing time for the identification.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier">
            <summary>
            Embeds a fragile integrity watermark using Block-Chained LSB Steganography.
            This modifier calculates a Pearson hash of the current audio block and embeds it 
            into the Least Significant Bits (LSB) of the subsequent block.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier.#ctor(SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier"/> class.
            </summary>
            <param name="config">Configuration settings containing the block size.</param>
        </member>
        <member name="M:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier.Process(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.IntegrityWatermarkEmbedModifier.EmbedBit(System.Single,System.Int32)">
            <summary>
            Embeds a single bit into the LSB of the float's mantissa representation.
            </summary>
        </member>
        <member name="T:SoundFlow.Security.Modifiers.OwnershipWatermarkEmbedModifier">
            <summary>
            Embeds a robust, invisible watermark into the audio stream using Direct Sequence Spread Spectrum (DSSS).
            This modifier generates a pseudo-random noise sequence seeded by a secret key and modulates
            the payload bits onto this noise. The noise is then added to the audio signal.
            </summary>
        </member>
        <member name="P:SoundFlow.Security.Modifiers.OwnershipWatermarkEmbedModifier.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.OwnershipWatermarkEmbedModifier.#ctor(SoundFlow.Security.Payloads.IWatermarkPayload,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Modifiers.OwnershipWatermarkEmbedModifier"/> class.
            </summary>
            <param name="payload">The data to embed.</param>
            <param name="config">Configuration settings.</param>
        </member>
        <member name="M:SoundFlow.Security.Modifiers.OwnershipWatermarkEmbedModifier.Process(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.OwnershipWatermarkEmbedModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Security.Modifiers.StreamEncryptionModifier">
            <summary>
            A modifier that performs real-time AES-256-CTR encryption or decryption.
            </summary>
            <remarks>
            <para>
            This implementation uses AES-CTR (Counter Mode).
            CTR mode is used because it transforms the block cipher into a stream cipher.
            This preserves the length of the data exactly (no padding), which is critical
            for maintaining the sample-count synchronization of the audio engine.
            </para>
            </remarks>
        </member>
        <member name="P:SoundFlow.Security.Modifiers.StreamEncryptionModifier.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.#ctor(SoundFlow.Security.Configuration.EncryptionConfiguration)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Security.Modifiers.StreamEncryptionModifier"/> class.
            </summary>
            <param name="config">The encryption configuration containing the Key (32 bytes) and IV (12 or 16 bytes).</param>
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.SeekTo(System.Int64)">
            <summary>
            Resets the internal cryptographic state to a specific byte offset in the stream.
            This allows for random access seeking within the encrypted stream.
            </summary>
            <param name="byteOffset">The absolute byte offset from the beginning of the data.</param>
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.Process(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.ProcessSample(System.Single,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.ProcessBytes(System.Span{System.Byte})">
            <summary>
            Processes the byte buffer using SIMD instructions where possible.
            </summary>
            <param name="data">The data to encrypt/decrypt.</param>
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.GenerateKeyStreamBlock(System.Boolean)">
            <summary>
            Generates the next 16 bytes of the keystream by encrypting the current counter value.
            Increments the counter afterwards.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Modifiers.StreamEncryptionModifier.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Security.Payloads.IWatermarkPayload">
            <summary>
            Defines the contract for data that can be embedded into an audio watermark.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Payloads.IWatermarkPayload.ToBits">
            <summary>
            Converts the high-level payload data into a bit array for embedding.
            </summary>
            <returns>A <see cref="T:System.Collections.BitArray"/> representing the payload.</returns>
        </member>
        <member name="M:SoundFlow.Security.Payloads.IWatermarkPayload.FromBits(System.Collections.BitArray)">
            <summary>
            Reconstructs the high-level payload data from a bit array.
            </summary>
            <param name="bits">The extracted bits.</param>
            <returns>The reconstructed object (e.g., a string or byte array).</returns>
        </member>
        <member name="T:SoundFlow.Security.Payloads.TextPayload">
            <summary>
            A watermark payload representing a text string.
            </summary>
            <param name="text">The text to embed.</param>
        </member>
        <member name="M:SoundFlow.Security.Payloads.TextPayload.#ctor(System.String)">
            <summary>
            A watermark payload representing a text string.
            </summary>
            <param name="text">The text to embed.</param>
        </member>
        <member name="P:SoundFlow.Security.Payloads.TextPayload.Text">
            <summary>
            Gets the text content of the payload.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Payloads.TextPayload.#ctor">
            <summary>
            Helper constructor for deserialization or empty initialization.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Payloads.TextPayload.ToBits">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Payloads.TextPayload.FromBits(System.Collections.BitArray)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Security.Stores.IFingerprintStore">
            <summary>
            Defines the contract for a fingerprint storage backend.
            Implement this interface to store fingerprints in a database (SQL, NoSQL, Redis, etc.).
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Stores.IFingerprintStore.InsertAsync(SoundFlow.Security.Models.AudioFingerprint)">
            <summary>
            Stores a computed fingerprint in the database.
            </summary>
            <param name="fingerprint">The fingerprint to store.</param>
        </member>
        <member name="M:SoundFlow.Security.Stores.IFingerprintStore.QueryHashAsync(System.UInt32)">
            <summary>
            Queries the database for tracks containing the specified hash.
            </summary>
            <param name="hash">The hash to look up.</param>
            <returns>A list of candidates containing the track ID and the time offset where the hash occurs.</returns>
        </member>
        <member name="T:SoundFlow.Security.Stores.InMemoryFingerprintStore">
            <summary>
            A reference implementation of <see cref="T:SoundFlow.Security.Stores.IFingerprintStore"/> that stores data in memory.
            Suitable for small libraries, unit tests, or caching layers.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Stores.InMemoryFingerprintStore.InsertAsync(SoundFlow.Security.Models.AudioFingerprint)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Security.Stores.InMemoryFingerprintStore.QueryHashAsync(System.UInt32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Security.Utils.SignatureKeyGenerator">
            <summary>
            Utility for generating secure ECDSA key pairs for file signing.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Utils.SignatureKeyGenerator.Generate">
            <summary>
            Generates a new ECDSA key pair using the NIST P-384 curve.
            P-384 offers a security level approximately equivalent to AES-192.
            </summary>
            <returns>A <see cref="T:SoundFlow.Security.Configuration.SignatureConfiguration"/> containing the Private Key (PKCS#8) and the Public Key (SPKI).</returns>
        </member>
        <member name="T:SoundFlow.Security.Utils.WatermarkingUtils">
            <summary>
            Provides utility methods for Pearson hashing.
            </summary>
        </member>
        <member name="F:SoundFlow.Security.Utils.WatermarkingUtils.PearsonTable">
            <summary>
            The Pearson hashing permutation table (0-255).
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Utils.WatermarkingUtils.CalculatePearsonHash(System.Span{System.Single})">
            <summary>
            Calculates the 8-bit Pearson hash of the float buffer.
            Pearson hashing provides a good distribution for data integrity checks with low collision rates for small changes.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.Utils.WatermarkingUtils.NextFloat(System.UInt32)">
            <summary>
            Calculates the next float in a sequence using XorShift32.
            </summary>
            <param name="rngState">The current state of the PRNG.</param>
            <returns>The next float in the sequence and the updated state.</returns>
        </member>
        <member name="M:SoundFlow.Security.Utils.WatermarkingUtils.GetStableHash(System.String)">
            <summary>
            Calculates the FNV-1a hash of a string.
            FNV-1a is a fast non-cryptographic hash algorithm with good distribution for stable seeding.
            </summary>
            <param name="str">The string to hash.</param>
            <returns>The FNV-1a hash of the string.</returns>
        </member>
        <member name="T:SoundFlow.Security.WatermarkTuner">
            <summary>
            Provides static methods to automatically determine the optimal watermarking configuration
            for a given audio source and payload. This "tuner" simulates embedding and extracting
            at various parameters to find a balance between robustness and inaudibility.
            </summary>
        </member>
        <member name="F:SoundFlow.Security.WatermarkTuner.SpreadLevels">
            <summary>
            Defines the discrete spread factor levels to test, ordered from most robust (and slowest)
            to least robust (and fastest). A higher spread factor disperses the watermark signal
            over more audio frames, increasing its resilience to damage.
            </summary>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.TuneConfigurationAsync(SoundFlow.Interfaces.ISoundDataProvider,System.String,System.String,System.Boolean)">
            <summary>
            Asynchronously analyzes an audio source to find the most robust watermarking configuration.
            It iterates through predefined spread factors and strength levels, simulating an embed/extract
            cycle at strategic audio positions to verify the payload's integrity.
            </summary>
            <param name="source">The audio data provider to analyze.</param>
            <param name="payload">The string data to be embedded in the watermark.</param>
            <param name="secretKey">The secret key used for encryption and hashing within the watermark.</param>
            <param name="applySafetyMargin">If true, the tuner will apply a safety margin to the final strength.</param>
            <returns>
            A task that resolves to a <see cref="T:SoundFlow.Security.Configuration.WatermarkConfiguration"/> object containing the
            recommended parameters. If no suitable configuration is found, returns a safe default.
            </returns>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.GetCandidateOffsets(SoundFlow.Interfaces.ISoundDataProvider,System.Int32,System.Int32)">
            <summary>
            Identifies a list of strategic starting frame offsets within the audio source for testing.
            </summary>
            <param name="source">The audio data provider.</param>
            <param name="frameCount">The total number of frames the watermark requires.</param>
            <param name="channels">The number of audio channels.</param>
            <returns>A list of integer offsets, each representing a starting frame index.</returns>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.FindDenseAudioSlice(SoundFlow.Interfaces.ISoundDataProvider,System.Int32,System.Int32)">
            <summary>
            Scans the audio source to find the slice that is least likely to contain silence.
            Watermarks are generally more robust when embedded in louder, more complex audio segments.
            </summary>
            <param name="source">The audio data provider.</param>
            <param name="frameCount">The size of the slice to evaluate, in frames.</param>
            <param name="channels">The number of audio channels.</param>
            <returns>The starting frame index of the "densest" slice, or -1 if none could be determined.</returns>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.ReadSlice(SoundFlow.Interfaces.ISoundDataProvider,System.Int32,System.Int32)">
            <summary>
            Reads a specific slice of audio data from a provider into an in-memory buffer.
            </summary>
            <param name="source">The audio data provider.</param>
            <param name="startFrameIndex">The frame index to start reading from.</param>
            <param name="frameCount">The number of frames to read.</param>
            <returns>A float array containing the requested audio samples.</returns>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.EmbedToMemory(System.Single[],SoundFlow.Metadata.Models.SoundFormatInfo,System.String,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Helper method to embed a watermark into an in-memory sample buffer.
            </summary>
            <param name="sourceSamples">The raw audio samples to modify.</param>
            <param name="info">The format information for the audio.</param>
            <param name="text">The payload text to embed.</param>
            <param name="config">The watermarking configuration to use.</param>
            <returns>A new float array containing the watermarked audio samples.</returns>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.ApplyVolumeAttack(System.Single[],System.Single)">
            <summary>
            Simulates a simple volume reduction attack on an in-memory sample buffer.
            This is used during tuning to test watermark resilience.
            </summary>
            <param name="samples">The audio sample buffer to modify in-place.</param>
            <param name="volume">The volume multiplier (e.g., 0.75 for 75% volume).</param>
        </member>
        <member name="M:SoundFlow.Security.WatermarkTuner.ExtractFromMemory(System.Single[],SoundFlow.Metadata.Models.SoundFormatInfo,SoundFlow.Security.Configuration.WatermarkConfiguration)">
            <summary>
            Helper method to extract a watermark from an in-memory sample buffer.
            </summary>
            <param name="watermarkedSamples">The raw audio samples containing a watermark.</param>
            <param name="info">The format information for the audio.</param>
            <param name="config">The watermarking configuration to use for extraction.</param>
            <returns>A task resolving to a <see cref="T:SoundFlow.Structs.Result`1"/> containing the extracted payload if successful.</returns>
        </member>
        <member name="T:SoundFlow.Structs.ChannelLayout">
            <summary>
            Defines the physical or logical arrangement of channels in an audio stream.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.ChannelLayout.Unknown">
            <summary>
            The channel layout is unknown or not specified.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.ChannelLayout.Mono">
            <summary>
            A single audio channel.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.ChannelLayout.Stereo">
            <summary>
            Two audio channels, typically Left and Right.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.ChannelLayout.Quad">
            <summary>
            Four audio channels, typically Front Left, Front Right, Rear Left, Rear Right.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.ChannelLayout.Surround51">
            <summary>
            Six audio channels for a 5.1 surround sound setup (L, R, C, LFE, SL, SR).
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.ChannelLayout.Surround71">
            <summary>
            Eight audio channels for a 7.1 surround sound setup (L, R, C, LFE, SL, SR, SideL, SideR).
            </summary>
        </member>
        <member name="T:SoundFlow.Structs.AudioFormat">
            <summary>
            Represents the format of an audio stream, including sample format, channel count, and sample rate.
            This is a record struct, providing value-based equality and a non-nullable value type.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Format">
            <summary>
            Gets or sets the sample format (e.g., S16, F32).
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Channels">
            <summary>
            Gets or sets the number of audio channels (e.g., 1 for mono, 2 for stereo).
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Layout">
            <summary>
            Gets or sets the physical or logical arrangement of the channels.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.SampleRate">
            <summary>
            Gets or sets the sample rate in Hertz (e.g., 44100, 48000).
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.AudioFormat.InverseSampleRate">
            <summary>
            Gets the inverse of the sample rate.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Cd">
            <summary>
            Preset for standard Compact Disc (CD) audio.
            </summary>
            <remarks>
            Format: S16, Channels: 2 (Stereo), Layout: Stereo, Sample Rate: 44100 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Dvd">
            <summary>
            Preset for standard DVD-Video audio.
            </summary>
            <remarks>
            Format: S16, Channels: 2 (Stereo), Layout: Stereo, Sample Rate: 48000 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.DvdHq">
            <summary>
            Preset for standard DVD-Video audio using 32-bit floating-point samples.
            </summary>
            <remarks>
            Format: F32, Channels: 2 (Stereo), Layout: Stereo, Sample Rate: 48000 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Surround51">
            <summary>
            Preset for 5.1 Surround Sound audio.
            </summary>
            <remarks>
            Format: F32, Channels: 6, Layout: Surround51, Sample Rate: 48000 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Surround71">
            <summary>
            Preset for 7.1 Surround Sound audio.
            </summary>
            <remarks>
            Format: F32, Channels: 8, Layout: Surround71, Sample Rate: 48000 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Studio">
            <summary>
            Preset for common studio recording (24-bit, 96 kHz).
            </summary>
            <remarks>
            Format: S24, Channels: 2 (Stereo), Layout: Stereo, Sample Rate: 96000 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.StudioHq">
            <summary>
            Preset for common studio recording using 32-bit floating-point samples.
            </summary>
            <remarks>
            Format: F32, Channels: 2 (Stereo), Layout: Stereo, Sample Rate: 96000 Hz.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Broadcast">
            <summary>
            Preset for standard broadcast audio (mono).
            </summary>
            <remarks>
            Format: S16, Channels: 1 (Mono), Layout: Mono, Sample Rate: 48000 Hz. Often used for voice-over.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.AudioFormat.Telephony">
            <summary>
            Preset for telephony and VoIP audio.
            </summary>
            <remarks>
            Format: U8, Channels: 1 (Mono), Layout: Mono, Sample Rate: 8000 Hz.
            </remarks>
        </member>
        <member name="M:SoundFlow.Structs.AudioFormat.GetFormatFromStream(System.IO.Stream)">
            <summary>
                Infers an <see cref="T:SoundFlow.Structs.AudioFormat"/> from the given stream by reading the stream's metadata.
            </summary>
            <param name="stream">The stream to read the metadata from.</param>
            <returns>The inferred <see cref="T:SoundFlow.Structs.AudioFormat"/>.</returns>
            <remarks>
                This method is a convenience wrapper around <see cref="M:SoundFlow.Metadata.SoundMetadataReader.Read(System.IO.Stream,SoundFlow.Metadata.Models.ReadOptions)"/> and the
                <see cref="M:SoundFlow.Structs.AudioFormat.GetLayoutFromChannels(System.Int32)"/> method. It does not perform any additional processing.
            </remarks>
        </member>
        <member name="M:SoundFlow.Structs.AudioFormat.GetLayoutFromChannels(System.Int32)">
            <summary>
            Infers the ChannelLayout from a given channel count.
            </summary>
            <param name="channels">The number of channels.</param>
            <returns>The inferred ChannelLayout.</returns>
        </member>
        <member name="T:SoundFlow.Structs.DeviceInfo">
            <summary>
            Represents device information including ID, name, default status, and data formats.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.DeviceInfo.Id">
            <summary>
            The unique identifier for the device.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.DeviceInfo.Name">
            <summary>
            The name of the device.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.DeviceInfo.IsDefault">
            <summary>
            Indicates whether the device is set as default.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.DeviceInfo.SupportedDataFormats">
            <summary>
            Gets the supported native data formats for the device.
            </summary>
        </member>
        <member name="T:SoundFlow.Structs.IError">
            <summary>
            Base interface for all errors in the library.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.IError.Message">
            <summary>
            Gets a message that describes the current error.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.IError.InnerException">
            <summary>
            Gets the <see cref="T:System.Exception"/> instance that caused the current error.
            </summary>
        </member>
        <member name="T:SoundFlow.Structs.Error">
            <summary>
            A base error implementation.
            </summary>
            <param name="Message">A message that describes the current error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.Error.#ctor(System.String,System.Exception)">
            <summary>
            A base error implementation.
            </summary>
            <param name="Message">A message that describes the current error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.Error.Message">
            <summary>A message that describes the current error.</summary>
        </member>
        <member name="P:SoundFlow.Structs.Error.InnerException">
            <summary>The exception that is the cause of the current error, or a null reference if no inner exception is specified.</summary>
        </member>
        <member name="T:SoundFlow.Structs.ValidationError">
            <summary>
            Represents errors related to invalid input arguments or preconditions.
            </summary>
            <param name="Message">A message that describes the validation error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.ValidationError.#ctor(System.String,System.Exception)">
            <summary>
            Represents errors related to invalid input arguments or preconditions.
            </summary>
            <param name="Message">A message that describes the validation error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="T:SoundFlow.Structs.NotFoundError">
            <summary>
            Represents an error when a required resource (like a file) is not found.
            </summary>
            <param name="ResourceName">The name or identifier of the resource that was not found.</param>
            <param name="Message">A message that describes the error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.NotFoundError.#ctor(System.String,System.String,System.Exception)">
            <summary>
            Represents an error when a required resource (like a file) is not found.
            </summary>
            <param name="ResourceName">The name or identifier of the resource that was not found.</param>
            <param name="Message">A message that describes the error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.NotFoundError.ResourceName">
            <summary>The name or identifier of the resource that was not found.</summary>
        </member>
        <member name="T:SoundFlow.Structs.FileFormatError">
            <summary>
            Represents errors that occur during the parsing or writing of a specific file format.
            </summary>
            <param name="Message">A message that describes the error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.FileFormatError.#ctor(System.String,System.Exception)">
            <summary>
            Represents errors that occur during the parsing or writing of a specific file format.
            </summary>
            <param name="Message">A message that describes the error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="T:SoundFlow.Structs.UnsupportedFormatError">
            <summary>
            The error that occurs when attempting to read an audio format that is not supported by the library.
            </summary>
            <param name="FormatDetails">Specific details about the unsupported format (e.g., codec name, sample format).</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.UnsupportedFormatError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when attempting to read an audio format that is not supported by the library.
            </summary>
            <param name="FormatDetails">Specific details about the unsupported format (e.g., codec name, sample format).</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.UnsupportedFormatError.FormatDetails">
            <summary>Specific details about the unsupported format (e.g., codec name, sample format).</summary>
        </member>
        <member name="T:SoundFlow.Structs.HeaderNotFoundError">
            <summary>
            The error that occurs when a mandatory header, marker, or chunk is missing from a file.
            </summary>
            <param name="HeaderDescription">A description of the mandatory header that was not found (e.g., "RIFF chunk", "ID3v2 tag").</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.HeaderNotFoundError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when a mandatory header, marker, or chunk is missing from a file.
            </summary>
            <param name="HeaderDescription">A description of the mandatory header that was not found (e.g., "RIFF chunk", "ID3v2 tag").</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.HeaderNotFoundError.HeaderDescription">
            <summary>A description of the mandatory header that was not found (e.g., "RIFF chunk", "ID3v2 tag").</summary>
        </member>
        <member name="T:SoundFlow.Structs.CorruptChunkError">
            <summary>
            The error that occurs when a recognized audio file's structural component (chunk, atom, etc.) is malformed.
            </summary>
            <param name="ChunkId">The identifier of the corrupted chunk or atom (e.g., "fmt ", "data").</param>
            <param name="Reason">The reason why the chunk is considered corrupt.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.CorruptChunkError.#ctor(System.String,System.String,System.Exception)">
            <summary>
            The error that occurs when a recognized audio file's structural component (chunk, atom, etc.) is malformed.
            </summary>
            <param name="ChunkId">The identifier of the corrupted chunk or atom (e.g., "fmt ", "data").</param>
            <param name="Reason">The reason why the chunk is considered corrupt.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.CorruptChunkError.ChunkId">
            <summary>The identifier of the corrupted chunk or atom (e.g., "fmt ", "data").</summary>
        </member>
        <member name="P:SoundFlow.Structs.CorruptChunkError.Reason">
            <summary>The reason why the chunk is considered corrupt.</summary>
        </member>
        <member name="T:SoundFlow.Structs.CorruptFrameError">
            <summary>
            The error that occurs when a specific frame within a stream-based format (like MP3 or AAC) is malformed.
            </summary>
            <param name="FrameDescription">A description of the type of frame that was corrupted.</param>
            <param name="Reason">The reason why the frame is considered corrupt.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.CorruptFrameError.#ctor(System.String,System.String,System.Exception)">
            <summary>
            The error that occurs when a specific frame within a stream-based format (like MP3 or AAC) is malformed.
            </summary>
            <param name="FrameDescription">A description of the type of frame that was corrupted.</param>
            <param name="Reason">The reason why the frame is considered corrupt.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.CorruptFrameError.FrameDescription">
            <summary>A description of the type of frame that was corrupted.</summary>
        </member>
        <member name="P:SoundFlow.Structs.CorruptFrameError.Reason">
            <summary>The reason why the frame is considered corrupt.</summary>
        </member>
        <member name="T:SoundFlow.Structs.ObjectDisposedError">
            <summary>
            The error that occurs when an object has been disposed.
            </summary>
            <param name="ObjectDescription">A description of the disposed object (e.g., class name).</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.ObjectDisposedError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when an object has been disposed.
            </summary>
            <param name="ObjectDescription">A description of the disposed object (e.g., class name).</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.ObjectDisposedError.ObjectDescription">
            <summary>A description of the disposed object (e.g., class name).</summary>
        </member>
        <member name="T:SoundFlow.Structs.DeviceError">
            <summary>
            Represents errors related to an audio or MIDI device.
            </summary>
            <param name="Message">A message that describes the device error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.DeviceError.#ctor(System.String,System.Exception)">
            <summary>
            Represents errors related to an audio or MIDI device.
            </summary>
            <param name="Message">A message that describes the device error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="T:SoundFlow.Structs.DeviceStateError">
            <summary>
            The error that occurs when an operation is performed on a device that is in an invalid state for that operation.
            </summary>
            <param name="Reason">A message describing why the state is invalid for the operation.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.DeviceStateError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when an operation is performed on a device that is in an invalid state for that operation.
            </summary>
            <param name="Reason">A message describing why the state is invalid for the operation.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.DeviceStateError.Reason">
            <summary>A message describing why the state is invalid for the operation.</summary>
        </member>
        <member name="T:SoundFlow.Structs.DeviceOperationError">
            <summary>
            The error that occurs when a core device operation (like open, start, or stop) fails.
            </summary>
            <param name="Operation">The name of the operation that failed (e.g., "start device").</param>
            <param name="Reason">The underlying reason for the failure.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.DeviceOperationError.#ctor(System.String,System.String,System.Exception)">
            <summary>
            The error that occurs when a core device operation (like open, start, or stop) fails.
            </summary>
            <param name="Operation">The name of the operation that failed (e.g., "start device").</param>
            <param name="Reason">The underlying reason for the failure.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.DeviceOperationError.Operation">
            <summary>The name of the operation that failed (e.g., "start device").</summary>
        </member>
        <member name="P:SoundFlow.Structs.DeviceOperationError.Reason">
            <summary>The underlying reason for the failure.</summary>
        </member>
        <member name="T:SoundFlow.Structs.DeviceNotFoundError">
            <summary>
            The error that occurs when a requested audio device cannot be found.
            </summary>
            <param name="DeviceIdentifier">The identifier (name, ID, etc.) of the device that was not found.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.DeviceNotFoundError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when a requested audio device cannot be found.
            </summary>
            <param name="DeviceIdentifier">The identifier (name, ID, etc.) of the device that was not found.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.DeviceNotFoundError.DeviceIdentifier">
            <summary>The identifier (name, ID, etc.) of the device that was not found.</summary>
        </member>
        <member name="T:SoundFlow.Structs.BackendNotFoundError">
            <summary>
            The error that occurs when a required audio backend (like WASAPI, CoreAudio, etc.) is not available or enabled.
            </summary>
            <param name="BackendName">The name of the specific backend that was not found, if applicable.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.BackendNotFoundError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when a required audio backend (like WASAPI, CoreAudio, etc.) is not available or enabled.
            </summary>
            <param name="BackendName">The name of the specific backend that was not found, if applicable.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.BackendNotFoundError.BackendName">
            <summary>The name of the specific backend that was not found, if applicable.</summary>
        </member>
        <member name="T:SoundFlow.Structs.ResourceBusyError">
            <summary>
            The error that occurs when an operation attempts to use a resource that is already in use.
            </summary>
            <param name="ResourceName">The name or description of the busy resource.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.ResourceBusyError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when an operation attempts to use a resource that is already in use.
            </summary>
            <param name="ResourceName">The name or description of the busy resource.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.ResourceBusyError.ResourceName">
            <summary>The name or description of the busy resource.</summary>
        </member>
        <member name="T:SoundFlow.Structs.OutOfMemoryError">
            <summary>
            The error that occurs when an attempt to allocate memory fails.
            </summary>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.OutOfMemoryError.#ctor(System.Exception)">
            <summary>
            The error that occurs when an attempt to allocate memory fails.
            </summary>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="T:SoundFlow.Structs.InvalidOperationError">
            <summary>
            The error that occurs when a method call is invalid for the object's current state.
            This is analogous to <see cref="T:System.InvalidOperationException"/>.
            </summary>
            <param name="Message">The message that describes the error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.InvalidOperationError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when a method call is invalid for the object's current state.
            This is analogous to <see cref="T:System.InvalidOperationException"/>.
            </summary>
            <param name="Message">The message that describes the error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="T:SoundFlow.Structs.NotImplementedError">
            <summary>
            The error that occurs when a requested feature or method is not implemented.
            </summary>
            <param name="FeatureName">The name of the unimplemented feature.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.NotImplementedError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when a requested feature or method is not implemented.
            </summary>
            <param name="FeatureName">The name of the unimplemented feature.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.NotImplementedError.FeatureName">
            <summary>The name of the unimplemented feature.</summary>
        </member>
        <member name="T:SoundFlow.Structs.HostError">
            <summary>
            Represents a generic error reported by the underlying operating system or host environment.
            </summary>
            <param name="Reason">The description of the error provided by the host.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.HostError.#ctor(System.String,System.Exception)">
            <summary>
            Represents a generic error reported by the underlying operating system or host environment.
            </summary>
            <param name="Reason">The description of the error provided by the host.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.HostError.Reason">
            <summary>The description of the error provided by the host.</summary>
        </member>
        <member name="T:SoundFlow.Structs.InternalLibraryError">
            <summary>
            Represents an unexpected error within a wrapped native library.
            </summary>
            <param name="LibraryName">The name of the native library where the error originated (for example, "miniaudio").</param>
            <param name="Reason">The description of the internal error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.InternalLibraryError.#ctor(System.String,System.String,System.Exception)">
            <summary>
            Represents an unexpected error within a wrapped native library.
            </summary>
            <param name="LibraryName">The name of the native library where the error originated (for example, "miniaudio").</param>
            <param name="Reason">The description of the internal error.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.InternalLibraryError.LibraryName">
            <summary>The name of the native library where the error originated (for example, "miniaudio").</summary>
        </member>
        <member name="P:SoundFlow.Structs.InternalLibraryError.Reason">
            <summary>The description of the internal error.</summary>
        </member>
        <member name="T:SoundFlow.Structs.IoError">
            <summary>
            Represents errors that occur during an I/O operation.
            </summary>
            <param name="OperationDescription">A description of the I/O operation that failed (e.g., "reading from file stream").</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.IoError.#ctor(System.String,System.Exception)">
            <summary>
            Represents errors that occur during an I/O operation.
            </summary>
            <param name="OperationDescription">A description of the I/O operation that failed (e.g., "reading from file stream").</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.IoError.OperationDescription">
            <summary>A description of the I/O operation that failed (e.g., "reading from file stream").</summary>
        </member>
        <member name="T:SoundFlow.Structs.TimeoutError">
            <summary>
            The error that occurs when an operation times out.
            </summary>
            <param name="OperationDescription">A description of the operation that timed out.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.TimeoutError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when an operation times out.
            </summary>
            <param name="OperationDescription">A description of the operation that timed out.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.TimeoutError.OperationDescription">
            <summary>A description of the operation that timed out.</summary>
        </member>
        <member name="T:SoundFlow.Structs.AccessDeniedError">
            <summary>
            The error that occurs when access to a requested resource is denied.
            </summary>
            <param name="ResourceIdentifier">The path or identifier of the resource to which access was denied.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.AccessDeniedError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when access to a requested resource is denied.
            </summary>
            <param name="ResourceIdentifier">The path or identifier of the resource to which access was denied.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.AccessDeniedError.ResourceIdentifier">
            <summary>The path or identifier of the resource to which access was denied.</summary>
        </member>
        <member name="T:SoundFlow.Structs.DuplicateRequestError">
            <summary>
            The error that occurs when a duplicate request is made, even though the state is preserved.
            This means that the same method or operation should only be called once, as subsequent calls will have no effect,
            and the state should be changed to be able to perform the operation.
            </summary>
            <param name="RequestDescription">A description of the request that was made twice.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="M:SoundFlow.Structs.DuplicateRequestError.#ctor(System.String,System.Exception)">
            <summary>
            The error that occurs when a duplicate request is made, even though the state is preserved.
            This means that the same method or operation should only be called once, as subsequent calls will have no effect,
            and the state should be changed to be able to perform the operation.
            </summary>
            <param name="RequestDescription">A description of the request that was made twice.</param>
            <param name="InnerException">The exception that is the cause of the current error, or a null reference if no inner exception is specified.</param>
        </member>
        <member name="P:SoundFlow.Structs.DuplicateRequestError.RequestDescription">
            <summary>A description of the request that was made twice.</summary>
        </member>
        <member name="T:SoundFlow.Structs.Events.AudioFramesRenderedEventArgs">
            <summary>
            Provides data for the AudioFramesRendered event.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Events.AudioFramesRenderedEventArgs.Device">
            <summary>
            Gets the audio device that rendered the frames.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Events.AudioFramesRenderedEventArgs.FrameCount">
            <summary>
            Gets the number of audio frames that were rendered.
            </summary>
        </member>
        <member name="M:SoundFlow.Structs.Events.AudioFramesRenderedEventArgs.#ctor(SoundFlow.Abstracts.Devices.AudioDevice,System.Int32)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Structs.Events.AudioFramesRenderedEventArgs"/> class.
            </summary>
        </member>
        <member name="T:SoundFlow.Structs.Events.DeviceEventArgs">
            <summary>
            Provides data for device-related events.
            </summary>
        </member>
        <member name="M:SoundFlow.Structs.Events.DeviceEventArgs.#ctor(SoundFlow.Abstracts.Devices.AudioDevice)">
            <summary>
            Provides data for device-related events.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Events.DeviceEventArgs.Device">
            <summary>
            Gets the audio device that the event is about.
            </summary>
        </member>
        <member name="T:SoundFlow.Structs.NativeDataFormat">
            <summary>
            Represents a native data format with audio format, channels, sample rate, and flags.
            </summary>
            <remarks>
            This struct is used to get the supported native data format of an audio device using the MiniAudio library.
            Can be used by reading an array from a pointer to `NativeDataFormats` of <see cref="T:SoundFlow.Structs.DeviceInfo"/> struct.
            </remarks>
        </member>
        <member name="F:SoundFlow.Structs.NativeDataFormat.Format">
            <summary>
            The audio sample format.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.NativeDataFormat.Channels">
            <summary>
            The number of audio channels.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.NativeDataFormat.SampleRate">
            <summary>
            The sample rate of the audio in Hz.
            </summary>
        </member>
        <member name="F:SoundFlow.Structs.NativeDataFormat.Flags">
            <summary>
            Additional flags for the native data format.
            </summary>
        </member>
        <member name="T:SoundFlow.Structs.Result">
            <summary>
            Represents the outcome of an operation, which can be either a success or a failure.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Result.IsSuccess">
            <summary>
            Gets a value indicating whether the operation succeeded.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Result.IsFailure">
            <summary>
            Gets a value indicating whether the operation failed.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Result.Error">
            <summary>
            Gets the error details if the operation failed, otherwise <c>null</c>.
            </summary>
        </member>
        <member name="M:SoundFlow.Structs.Result.Ok">
            <summary>
            Creates a successful result instance.
            </summary>
            <returns>A successful <see cref="T:SoundFlow.Structs.Result"/>.</returns>
        </member>
        <member name="M:SoundFlow.Structs.Result.Fail(SoundFlow.Structs.IError)">
            <summary>
            Creates a failed result instance with the specified error.
            </summary>
            <param name="error">The error details.</param>
            <returns>A failed <see cref="T:SoundFlow.Structs.Result"/>.</returns>
        </member>
        <member name="M:SoundFlow.Structs.Result.op_Implicit(SoundFlow.Structs.Error)~SoundFlow.Structs.Result">
            <summary>
            Implicitly converts an <see cref="P:SoundFlow.Structs.Result.Error"/> object into a failed <see cref="T:SoundFlow.Structs.Result"/>.
            </summary>
            <param name="error">The error to convert.</param>
        </member>
        <member name="T:SoundFlow.Structs.Result`1">
            <summary>
            Represents the outcome of an operation that returns a value on success.
            </summary>
            <typeparam name="T">The type of the value returned on success.</typeparam>
        </member>
        <member name="P:SoundFlow.Structs.Result`1.IsSuccess">
            <summary>
            Gets a value indicating whether the operation succeeded.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Result`1.IsFailure">
            <summary>
            Gets a value indicating whether the operation failed.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Result`1.Value">
            <summary>
            Gets the successful value if the operation succeeded, otherwise the default value of <typeparamref name="T"/>.
            </summary>
        </member>
        <member name="P:SoundFlow.Structs.Result`1.Error">
            <summary>
            Gets the error details if the operation failed, otherwise <c>null</c>.
            </summary>
        </member>
        <member name="M:SoundFlow.Structs.Result`1.Ok(`0)">
            <summary>
            Creates a successful result instance with the specified value.
            </summary>
            <param name="value">The successful value.</param>
            <returns>A successful <see cref="T:SoundFlow.Structs.Result`1"/>.</returns>
        </member>
        <member name="M:SoundFlow.Structs.Result`1.Fail(SoundFlow.Structs.IError)">
            <summary>
            Creates a failed result instance with the specified error.
            </summary>
            <param name="error">The error details.</param>
            <returns>A failed <see cref="T:SoundFlow.Structs.Result`1"/>.</returns>
        </member>
        <member name="M:SoundFlow.Structs.Result`1.op_Implicit(`0)~SoundFlow.Structs.Result{`0}">
            <summary>
            Implicitly converts a value of type <typeparamref name="T"/> into a successful <see cref="T:SoundFlow.Structs.Result`1"/>.
            </summary>
            <param name="value">The value to convert.</param>
        </member>
        <member name="M:SoundFlow.Structs.Result`1.op_Implicit(SoundFlow.Structs.Error)~SoundFlow.Structs.Result{`0}">
            <summary>
            Implicitly converts an <see cref="P:SoundFlow.Structs.Result`1.Error"/> object into a failed <see cref="T:SoundFlow.Structs.Result`1"/>.
            </summary>
            <param name="error">The error to convert.</param>
        </member>
        <member name="M:SoundFlow.Structs.Result`1.op_Implicit(SoundFlow.Structs.Result{`0})~SoundFlow.Structs.Result">
            <summary>
            Implicitly converts a <see cref="T:SoundFlow.Structs.Result`1"/> into a non-generic <see cref="T:SoundFlow.Structs.Result"/>.
            </summary>
            <param name="result">The result to convert.</param>
        </member>
        <member name="T:SoundFlow.Synthesis.Banks.BasicInstrumentBank">
            <summary>
            A simple, hardcoded implementation of an instrument bank for demonstration and testing.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.BasicInstrumentBank.#ctor(SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Banks.BasicInstrumentBank"/> class.
            </summary>
            <param name="format">The audio format required to create voice definitions.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.BasicInstrumentBank.GetInstrument(System.Int32,System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Banks.MultiInstrumentBank">
            <summary>
            A high-level instrument bank that manages a prioritized list of other IInstrumentBank instances.
            This allows for layering multiple sound sources (e.g., multiple SoundFonts, or a SoundFont
            layered on top of basic synths) and provides a robust fallback mechanism.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.MultiInstrumentBank.#ctor(SoundFlow.Synthesis.Instruments.Instrument)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Banks.MultiInstrumentBank"/> class.
            </summary>
            <param name="masterFallbackInstrument">The final fallback instrument to use if a program is not found in any loaded bank.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.MultiInstrumentBank.AddBank(SoundFlow.Synthesis.Interfaces.IInstrumentBank)">
            <summary>
            Adds an instrument bank to the collection. Banks added later have higher priority.
            </summary>
            <param name="bank">The instrument bank to add.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.MultiInstrumentBank.RemoveBank(SoundFlow.Synthesis.Interfaces.IInstrumentBank)">
            <summary>
            Removes an instrument bank from the collection.
            </summary>
            <param name="bank">The instrument bank to remove.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.MultiInstrumentBank.ClearBanks">
            <summary>
            Clears all loaded instrument banks.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.MultiInstrumentBank.GetInstrument(System.Int32,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.MultiInstrumentBank.Dispose">
            <summary>
            Disposes of all disposable IInstrumentBank instances held by this manager.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Banks.PresetInfo">
            <summary>
            A simple data structure to hold information about a preset in a SoundFont.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.PresetInfo.#ctor(System.Int32,System.Int32,System.String)">
            <summary>
            A simple data structure to hold information about a preset in a SoundFont.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Banks.SoundFontBank">
            <summary>
            An IInstrumentBank implementation that loads instruments from a SoundFont 2 (SF2) file.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Banks.SoundFontBank.AvailablePresets">
            <summary>
            Gets a read-only list of all presets (programs) available in this SoundFont bank, sorted by bank and program number.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.SoundFontBank.#ctor(System.String,SoundFlow.Structs.AudioFormat)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Banks.SoundFontBank"/> class by parsing an SF2 file.
            </summary>
            <param name="filePath">The path to the SF2 file.</param>
            <param name="format">The audio format of the synthesizer engine.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.SoundFontBank.GetInstrument(System.Int32,System.Int32)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Banks.SoundFontBank.Dispose">
            <summary>
            Disposes the underlying file stream.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Generators.AdsrGenerator">
            <summary>
            An IGenerator that produces an Attack-Decay-Sustain-Release (ADSR) envelope signal.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.AdsrGenerator.#ctor(SoundFlow.Structs.AudioFormat,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Generators.AdsrGenerator"/> class.
            </summary>
            <param name="format">The audio format, used to get the sample rate.</param>
            <param name="attackTime">Attack time in seconds.</param>
            <param name="decayTime">Decay time in seconds.</param>
            <param name="sustainLevel">Sustain level (0.0 to 1.0).</param>
            <param name="releaseTime">Release time in seconds.</param>
        </member>
        <member name="P:SoundFlow.Synthesis.Generators.AdsrGenerator.IsFinished">
            <summary>
            Gets a value indicating whether the envelope has finished its release phase.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Generators.AdsrGenerator.IsReleasing">
            <summary>
            Gets a value indicating if the envelope is in the release stage.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.AdsrGenerator.NoteOff">
            <summary>
            Triggers the release phase of the envelope.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.AdsrGenerator.Kill">
            <summary>
            Forces the envelope into a very fast release to kill the sound quickly.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.AdsrGenerator.Generate(System.Span{System.Single},SoundFlow.Synthesis.Voices.VoiceContext)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.AdsrGenerator.Reset">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Generators.CombineGenerator">
            <summary>
            An IGenerator that combines the output of two child generators using a specified function.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.CombineGenerator.#ctor(SoundFlow.Synthesis.Interfaces.IGenerator,SoundFlow.Synthesis.Interfaces.IGenerator,System.Func{System.Single,System.Single,System.Single})">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Generators.CombineGenerator"/> class.
            </summary>
            <param name="source1">The first generator.</param>
            <param name="source2">The second generator.</param>
            <param name="combineFunc">A function to combine samples from source1 and source2.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.CombineGenerator.Generate(System.Span{System.Single},SoundFlow.Synthesis.Voices.VoiceContext)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.CombineGenerator.Reset">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Generators.OscillatorGenerator">
            <summary>
            An IGenerator that produces a basic waveform (e.g., sine, square).
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.OscillatorGenerator.#ctor(SoundFlow.Components.Oscillator.WaveformType)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Generators.OscillatorGenerator"/> class.
            </summary>
            <param name="waveformType">The type of waveform to generate.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.OscillatorGenerator.Generate(System.Span{System.Single},SoundFlow.Synthesis.Voices.VoiceContext)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.OscillatorGenerator.Reset">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.OscillatorGenerator.Polyblep(System.Single,System.Single)">
            <summary>
            Calculates the polynomial correction for a band-limited step function (PolyBLEP).
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Generators.SamplerGenerator">
            <summary>
            An IGenerator that plays back audio from a sample buffer, with pitch shifting.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.SamplerGenerator.#ctor(System.Single[],System.Int32,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Generators.SamplerGenerator"/> class.
            </summary>
            <param name="sampleData">The raw audio data of the sample.</param>
            <param name="rootNoteNumber">The MIDI note number at which the sample plays at its original pitch.</param>
            <param name="isLooping">Whether the sample should loop.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.SamplerGenerator.Generate(System.Span{System.Single},SoundFlow.Synthesis.Voices.VoiceContext)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Generators.SamplerGenerator.Reset">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Instruments.Instrument">
            <summary>
            Represents a synthesizer instrument or patch.
            It contains the logic to select a voice definition based on note and velocity,
            supporting multi-sampling, key splits, and velocity layers.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.Instrument.IsFallback">
            <summary>
            Gets a value indicating whether this instrument is a fallback placeholder.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.Instrument.IsEmpty">
            <summary>
            Gets a value indicating whether this instrument has no mappings.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Instruments.Instrument.#ctor(System.Collections.Generic.List{SoundFlow.Synthesis.Instruments.VoiceMapping},SoundFlow.Synthesis.Instruments.VoiceDefinition,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Instruments.Instrument"/> class.
            </summary>
            <param name="mappings">A list of voice mappings that define the instrument's layers and splits.</param>
            <param name="fallbackDefinition">A default voice definition to use if no other mapping matches.</param>
            <param name="isFallback">Whether this instrument should be considered a fallback placeholder.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Instruments.Instrument.GetVoiceDefinition(System.Int32,System.Int32)">
            <summary>
            Gets the appropriate voice definition for a given note number and velocity.
            It iterates through the instrument's mappings to find the first one that matches
            the input note and velocity.
            </summary>
            <param name="noteNumber">The MIDI note number.</param>
            <param name="velocity">The note's velocity.</param>
            <returns>The selected <see cref="T:SoundFlow.Synthesis.Instruments.VoiceDefinition"/>, or a fallback definition if no specific mapping is found.</returns>
        </member>
        <member name="T:SoundFlow.Synthesis.Instruments.VoiceDefinition">
            <summary>
            A factory class that defines how to construct a synthesizer voice.
            It encapsulates the generator chain and parameters for a specific sound.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Instruments.VoiceDefinition.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Components.Oscillator.WaveformType,System.Int32,System.Single,System.Single,System.Single,System.Single,System.Single,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Instruments.VoiceDefinition"/> class.
            </summary>
            <param name="format">The audio format.</param>
            <param name="oscType">The waveform for the oscillator.</param>
            <param name="unison">The number of unison voices (oscillators) per note.</param>
            <param name="detune">The maximum detune amount for unison voices (e.g., 0.005 for 0.5%).</param>
            <param name="attack">Attack time in seconds.</param>
            <param name="decay">Decay time in seconds.</param>
            <param name="sustain">Sustain level (0-1).</param>
            <param name="release">Release time in seconds.</param>
            <param name="useFilter">Whether to apply a modulated low-pass filter to this voice.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Instruments.VoiceDefinition.CreateVoice(SoundFlow.Synthesis.Voices.VoiceContext)">
            <summary>
            Creates a new <see cref="T:SoundFlow.Synthesis.Interfaces.IVoice"/> instance based on this definition.
            </summary>
            <param name="context">The context for the new voice.</param>
            <returns>A new, fully constructed IVoice.</returns>
        </member>
        <member name="T:SoundFlow.Synthesis.Instruments.VoiceMapping">
            <summary>
            Defines a mapping that links a specific range of MIDI notes and velocities
            to a particular VoiceDefinition. This is the core of a multi-sampled instrument.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.Definition">
            <summary>
            The VoiceDefinition to use when the conditions of this mapping are met.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.MinKey">
            <summary>
            The minimum MIDI note number for this mapping (inclusive).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.MaxKey">
            <summary>
            The maximum MIDI note number for this mapping (inclusive).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.MinVelocity">
            <summary>
            The minimum velocity for this mapping (inclusive).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.MaxVelocity">
            <summary>
            The maximum velocity for this mapping (inclusive).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.InitialAttenuation">
            <summary>
            Gets or sets the initial volume attenuation applied to the voice (in dB).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.Pan">
            <summary>
            Gets or sets the stereo pan position for the voice (-1.0 for hard left, 1.0 for hard right, 0.0 for center).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.RootKeyOverride">
            <summary>
            Gets or sets the MIDI key number that should be treated as the root or natural pitch of the sample.
            A value of -1 indicates that the sample's inherent root key should be used.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.Tune">
            <summary>
            Gets or sets the fine tuning offset applied to the voice (in cents).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Instruments.VoiceMapping.LoopMode">
            <summary>
            Gets or sets the sample looping behavior (e.g., non-looping, continuous loop).
            The exact interpretation depends on the synthesizer engine.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Instruments.VoiceMapping.#ctor(SoundFlow.Synthesis.Instruments.VoiceDefinition)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Instruments.VoiceMapping"/> class.
            </summary>
            <param name="definition">The VoiceDefinition for this mapping.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Instruments.VoiceMapping.IsMatch(System.Int32,System.Int32)">
            <summary>
            Checks if a given note number and velocity fall within this mapping's range.
            </summary>
            <param name="noteNumber">The MIDI note number to check.</param>
            <param name="velocity">The velocity to check.</param>
            <returns>True if the note and velocity are within the defined ranges.</returns>
        </member>
        <member name="T:SoundFlow.Synthesis.Interfaces.IGenerator">
            <summary>
            Represents a fundamental component in a voice's signal generation chain.
            An IGenerator produces an audio signal or a control signal.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IGenerator.Generate(System.Span{System.Single},SoundFlow.Synthesis.Voices.VoiceContext)">
            <summary>
            Generates a block of audio or control samples.
            </summary>
            <param name="buffer">The buffer to fill with generated samples. Generators should add their output to this buffer.</param>
            <param name="context">The context for the current voice, containing frequency, velocity, etc.</param>
            <returns>The number of samples written to the buffer.</returns>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IGenerator.Reset">
            <summary>
            Resets the internal state of the generator.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Interfaces.IInstrumentBank">
            <summary>
            Defines a collection of instruments, accessible via MIDI bank and program numbers.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IInstrumentBank.GetInstrument(System.Int32,System.Int32)">
            <summary>
            Retrieves an instrument from the bank.
            </summary>
            <param name="bank">The MIDI bank number.</param>
            <param name="program">The MIDI program (preset) number.</param>
            <returns>The requested <see cref="T:SoundFlow.Synthesis.Instruments.Instrument"/>, or a default instrument if not found.</returns>
        </member>
        <member name="T:SoundFlow.Synthesis.Interfaces.ISequencerContext">
            <summary>
            Defines the context required by a Sequencer to perform tempo-aware time conversions.
            This allows the Sequencer to remain decoupled from the main Composition object.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.ISequencerContext.TempoTrack">
            <summary>
            Gets the master tempo track, defining tempo changes over time.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.ISequencerContext.TicksPerQuarterNote">
            <summary>
            Gets the time division for MIDI data in ticks per quarter note.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Interfaces.IVoice">
            <summary>
            Represents a single, active sound-producing voice within a synthesizer.
            A voice is typically triggered by a Note On event and ends after its release phase.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.IVoice.NoteNumber">
            <summary>
            Gets the MIDI note number this voice is playing.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.IVoice.Velocity">
            <summary>
            Gets the velocity at which this voice was triggered.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.IVoice.IsReleasing">
            <summary>
            Gets a value indicating if the voice is currently in its release phase.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.IVoice.IsSustained">
            <summary>
            Gets or sets a value indicating if this voice is being held by the sustain pedal.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Interfaces.IVoice.IsFinished">
            <summary>
            Gets a value indicating whether the voice has finished its lifecycle (e.g., completed its release envelope)
            and can be removed from the active voice pool.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.Render(System.Span{System.Single})">
            <summary>
            Renders the voice's audio output into the provided buffer.
            </summary>
            <param name="buffer">The buffer to fill with audio data. The voice should add its output to this buffer.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.NoteOff">
            <summary>
            Triggers the release phase of the voice (e.g., when a Note Off message is received).
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.Kill">
            <summary>
            Immediately silences the voice, typically with a very short fade-out to prevent clicks.
            Used for voice stealing or "all notes off" commands.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.ProcessMidiControl(SoundFlow.Midi.Structs.MidiMessage,System.Single)">
            <summary>
            Processes a MIDI control message to update the voice's parameters in real-time
            (e.g., pitch bend, modulation). This method is primarily for global channel controls.
            </summary>
            <param name="message">The MIDI message to process.</param>
            <param name="channelPitchBend">The current pitch bend of the channel in semitones.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.SetPerNotePitchBend(System.Single)">
            <summary>
            Updates the per-note pitch bend for this voice (MPE).
            </summary>
            <param name="semitones">The pitch bend amount in semitones.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.SetPerNotePressure(System.Single)">
            <summary>
            Updates the per-note pressure for this voice (MPE).
            </summary>
            <param name="value">The pressure value, normalized from 0.0 to 1.0.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Interfaces.IVoice.SetPerNoteTimbre(System.Single)">
            <summary>
            Updates the per-note timbre/CC74 for this voice (MPE).
            </summary>
            <param name="value">The timbre value, normalized from 0.0 to 1.0.</param>
        </member>
        <member name="T:SoundFlow.Synthesis.Sequencer">
            <summary>
            A component that plays back MIDI events from a MidiDataProvider in a sample-accurate manner
            and dispatches them to a target IMidiControllable (e.g., a Synthesizer).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.Context">
            <summary>
            Gets or sets the optional context for this sequencer. If provided, the sequencer will synchronize
            its timing to this external context (e.g., a composition's master clock). If null, it will use
            the MIDI data's own internal tempo map for playback.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.DataProvider">
            <summary>
            Gets the MIDI data provider for this sequencer.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.State">
            <summary>
            Gets the current playback state of the sequencer.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.IsLooping">
            <summary>
            Gets or sets whether the sequence should loop when it reaches the end.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.CurrentTime">
            <summary>
            Gets the current playback time. The calculation uses the master context if available,
            otherwise it falls back to the data provider's internal tempo.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Sequencer.Duration">
            <summary>
            Gets the duration of the sequence. The calculation uses the master context if available,
            otherwise it falls back to the data provider's internal tempo.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Sequencer.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Providers.MidiDataProvider,SoundFlow.Midi.Interfaces.IMidiControllable)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Sequencer"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The audio format, used for timing calculations.</param>
            <param name="dataProvider">The provider of MIDI data to be sequenced.</param>
            <param name="target">The MIDI controllable component that will receive the events.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Sequencer.Play">
            <summary>
            Starts or resumes playback of the sequence.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Sequencer.Pause">
            <summary>
            Pauses playback of the sequence.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Sequencer.Stop">
            <summary>
            Stops playback and resets the position to the beginning.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Sequencer.Seek(System.TimeSpan)">
            <summary>
            Seeks to a specific time in the sequence.
            </summary>
            <param name="time">The time to seek to.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Sequencer.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc />
            <remarks>
            This method does not generate audio. It uses the audio render callback for sample-accurate MIDI event timing.
            </remarks>
        </member>
        <member name="T:SoundFlow.Synthesis.Synthesizer">
            <summary>
            A polyphonic, multi-timbral synthesizer component that generates audio from MIDI messages.
            Supports internal effects chain and automatic processing of temporal modifiers (like Arpeggiators).
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Synthesizer.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Synthesis.Synthesizer.MidiModifiers">
            <summary>
            Gets a read-only list of MIDI modifiers (effects) applied to incoming messages before they trigger voices.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Synthesizer.Bpm">
            <summary>
            Gets or sets the Tempo (Beats Per Minute) used to drive temporal modifiers like Arpeggiators.
            Default is 120.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Synthesizer.MpeEnabled">
            <summary>
            Gets or sets whether the synthesizer operates in MPE (MIDI Polyphonic Expression) mode.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.#ctor(SoundFlow.Abstracts.AudioEngine,SoundFlow.Structs.AudioFormat,SoundFlow.Synthesis.Interfaces.IInstrumentBank)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Synthesizer"/> class.
            </summary>
            <param name="engine">The parent audio engine.</param>
            <param name="format">The audio format for the synthesizer's output.</param>
            <param name="instrumentBank">The bank of instruments the synthesizer will use.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.AddMidiModifier(SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Adds a <see cref="T:SoundFlow.Midi.Abstracts.MidiModifier"/> to the end of the synthesizer's MIDI processing chain.
            </summary>
            <param name="modifier">The modifier to add.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="modifier"/> is null.</exception>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.RemoveMidiModifier(SoundFlow.Midi.Abstracts.MidiModifier)">
            <summary>
            Removes a <see cref="T:SoundFlow.Midi.Abstracts.MidiModifier"/> from the synthesizer's MIDI processing chain.
            </summary>
            <param name="modifier">The modifier to remove.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.DispatchMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Internal method to route a MIDI message to the appropriate channel or MPE logic.
            This bypasses the modifier pipeline to prevent infinite loops from internal generators.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.Reset">
            <summary>
            Resets the synthesizer to a clean state, killing all sounding voices and resetting all channel parameters.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.ProcessMpeEvent(System.Object)">
            <summary>
            For internal use by MidiManager. Processes a high-level MPE event.
            </summary>
            <param name="mpeEvent">The MPE event object.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Synthesizer.GenerateAudio(System.Span{System.Single},System.Int32)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Voices.MidiChannel">
            <summary>
            Manages the state and voices for a single MIDI channel.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.MidiChannel.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Synthesis.Interfaces.IInstrumentBank)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Voices.MidiChannel"/> class.
            </summary>
            <param name="format">The audio format.</param>
            <param name="instrumentBank">The instrument bank to source sounds from.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.MidiChannel.ProcessMidiMessage(SoundFlow.Midi.Structs.MidiMessage)">
            <summary>
            Processes an incoming MIDI message for this channel.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.MidiChannel.Render(System.Span{System.Single})">
            <summary>
            Renders all active voices for this channel into the provided buffer.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.MidiChannel.Reset">
            <summary>
            Resets the channel to its default state, killing all active voices.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Voices.SampleVoice">
            <summary>
            A specialized IVoice implementation for playing back samples from a SoundFont.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.SampleVoice.#ctor(SoundFlow.Synthesis.Instruments.VoiceDefinition,SoundFlow.Synthesis.Voices.VoiceContext)">
            <summary>
            A specialized IVoice implementation for playing back samples from a SoundFont.
            </summary>
        </member>
        <member name="T:SoundFlow.Synthesis.Voices.Voice">
            <summary>
            A concrete implementation of IVoice, representing a single synthesizer voice.
            This version is architected for complex, layered sounds with unison.
            </summary>
        </member>
        <member name="P:SoundFlow.Synthesis.Voices.Voice.NoteNumber">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Synthesis.Voices.Voice.Velocity">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Synthesis.Voices.Voice.IsFinished">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Synthesis.Voices.Voice.IsReleasing">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Synthesis.Voices.Voice.IsSustained">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Voices.Voice.UnisonLayer">
            <summary>
            Represents a single oscillator layer within a unison voice.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.UnisonLayer.#ctor(SoundFlow.Synthesis.Interfaces.IGenerator,System.Single,System.Single)">
            <summary>
            Represents a single oscillator layer within a unison voice.
            </summary>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.#ctor(SoundFlow.Synthesis.Instruments.VoiceDefinition,SoundFlow.Synthesis.Voices.VoiceContext)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Synthesis.Voices.Voice"/> class based on a definition.
            </summary>
            <param name="definition">The voice definition describing how to build this voice.</param>
            <param name="context">The initial context for this voice.</param>
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.Render(System.Span{System.Single})">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.NoteOff">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.Kill">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.ProcessMidiControl(SoundFlow.Midi.Structs.MidiMessage,System.Single)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.SetPerNotePitchBend(System.Single)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.SetPerNotePressure(System.Single)">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Synthesis.Voices.Voice.SetPerNoteTimbre(System.Single)">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Synthesis.Voices.VoiceContext">
            <summary>
            Provides contextual information for a single voice's generation process.
            This class is passed down through a voice's IGenerator chain.
            </summary>
        </member>
        <member name="F:SoundFlow.Synthesis.Voices.VoiceContext.NoteNumber">
            <summary>
            The MIDI note number being played.
            </summary>
        </member>
        <member name="F:SoundFlow.Synthesis.Voices.VoiceContext.Velocity">
            <summary>
            The velocity of the note press (0-127).
            </summary>
        </member>
        <member name="F:SoundFlow.Synthesis.Voices.VoiceContext.Frequency">
            <summary>
            The final, calculated frequency for the current processing step, including all modulations.
            This is the value that IGenerators like oscillators should use.
            </summary>
        </member>
        <member name="F:SoundFlow.Synthesis.Voices.VoiceContext.BaseFrequency">
            <summary>
            The pure, unmodified frequency of the MIDI note number before any pitch bend or detuning.
            </summary>
        </member>
        <member name="F:SoundFlow.Synthesis.Voices.VoiceContext.ChannelPitchBend">
            <summary>
            The global pitch bend value for the entire MIDI channel, in semitones.
            </summary>
        </member>
        <member name="F:SoundFlow.Synthesis.Voices.VoiceContext.SampleRate">
            <summary>
            The sample rate of the audio engine.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.BiquadFilter">
            <summary>
            A standalone Biquad filter implementation.
            Handles state and coefficient calculation for a single audio channel based on the RBJ Audio EQ Cookbook.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.BiquadFilter.Update(SoundFlow.Enums.FilterType,System.Single,System.Single,System.Single,System.Single,System.Single)">
            <summary>
            Updates the filter coefficients based on the specified parameters.
            </summary>
            <param name="type">The type of filter to apply.</param>
            <param name="sampleRate">The sample rate of the audio data.</param>
            <param name="frequency">The center or cutoff frequency in Hz.</param>
            <param name="q">The quality factor (Q) or resonance.</param>
            <param name="gainDb">The gain in decibels (used for Peaking and Shelf filters).</param>
            <param name="shelfSlope">The shelf slope parameter (used for Shelf filters).</param>
        </member>
        <member name="M:SoundFlow.Utils.BiquadFilter.Process(System.Single)">
            <summary>
            Processes a single audio sample through the filter.
            </summary>
            <param name="sample">The input sample.</param>
            <returns>The filtered output sample.</returns>
        </member>
        <member name="M:SoundFlow.Utils.BiquadFilter.Reset">
            <summary>
            Resets the internal state of the filter.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.ChannelMixer">
            <summary>
            A high-performance utility class for mixing audio channels.
            Assumes audio data is in an interleaved format (e.g., [L, R, L, R, ...]).
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.ChannelMixer.EnableAvx">
            <summary>
            Gets or sets a value indicating whether to use AVX (Advanced Vector Extensions) instructions
            if the hardware supports them. Defaults to <c>true</c>.
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.ChannelMixer.EnableSse">
            <summary>
            Gets or sets a value indicating whether to use SSE (Streaming SIMD Extensions) instructions
            if the hardware supports them. Defaults to <c>true</c>.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.ChannelMixer.Mix(System.Single[],System.Int32,System.Int32)">
            <summary>
            Mixes an audio sample buffer from a source channel count to a target channel count.
            </summary>
            <param name="samples">The float array of audio samples, in interleaved format.</param>
            <param name="sourceChannels">The number of channels in the source audio.</param>
            <param name="targetChannels">The desired number of channels for the output audio.</param>
            <returns>A new float array with the mixed audio samples.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if the samples array is null.</exception>
            <exception cref="T:System.ArgumentException">Thrown for invalid arguments, such as non-positive channel counts or an array length that is not a multiple of the source channel count.</exception>
        </member>
        <member name="M:SoundFlow.Utils.ChannelMixer.MixMonoToStereo(System.Single[])">
            <summary>
            Mixes a mono signal to stereo by duplicating the mono sample for both left and right channels.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.ChannelMixer.MixStereoToMono(System.Single[])">
            <summary>
            Mixes a stereo signal to mono by averaging the left and right channels.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.ChannelMixer.MixGeneral(System.Single[],System.Int32,System.Int32)">
            <summary>
            General-purpose mixer using a single-pass, SIMD-accelerated approach.
            This implementation is cache-friendly and avoids intermediate buffers.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.ChannelMixer.HorizontalSum(System.Runtime.Intrinsics.Vector128{System.Single})">
            <summary>
            Calculates the horizontal sum of all elements in a 128-bit vector.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.ChannelMixer.HorizontalSum(System.Runtime.Intrinsics.Vector256{System.Single})">
            <summary>
            Calculates the horizontal sum of all elements in a 256-bit vector.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.DeviceBufferHelper">
            <summary>
            Provides static methods for converting audio buffers between the internal 32-bit float format
            and various device-specific PCM formats.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceBufferHelper.ConvertToDeviceFormat(System.Span{System.Single},System.IntPtr,System.Int32,SoundFlow.Enums.SampleFormat)">
            <summary>
            Dispatches conversion from a float buffer to the appropriate device format.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceBufferHelper.ConvertFromDeviceFormat(System.IntPtr,System.Span{System.Single},System.Int32,SoundFlow.Enums.SampleFormat)">
            <summary>
            Dispatches conversion from a raw device buffer to a float buffer.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceBufferHelper.ConvertFloatTo``1(System.Span{System.Single},System.IntPtr,System.Int32)">
            <summary>
            Converts a buffer of float samples to a specified integer PCM format and writes to a native memory location.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceBufferHelper.ConvertFrom``1(System.IntPtr,System.Span{System.Single},System.Int32)">
            <summary>
            Converts a native buffer from a specified integer PCM format to a buffer of float samples.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceBufferHelper.ConvertFloatToS24(System.Span{System.Single},System.IntPtr,System.Int32)">
            <summary>
            Converts a buffer of float samples to 24-bit PCM format, packing them into a native byte buffer.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceBufferHelper.ConvertFromS24(System.IntPtr,System.Span{System.Single},System.Int32)">
            <summary>
            Converts a native 24-bit PCM byte buffer to a buffer of float samples.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.DeviceSwitcher">
            <summary>
            Internal helper class to manage the state transfer when switching audio devices.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceSwitcher.PreservePlaybackState(SoundFlow.Abstracts.Devices.AudioPlaybackDevice)">
            <summary>
            Preserves the state of a playback device by extracting its sound components.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceSwitcher.RestorePlaybackState(SoundFlow.Abstracts.Devices.AudioPlaybackDevice,System.Collections.Generic.IReadOnlyCollection{SoundFlow.Abstracts.SoundComponent})">
            <summary>
            Restores the state to a new playback device by re-adding the preserved components.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceSwitcher.PreserveCaptureState(SoundFlow.Abstracts.Devices.AudioCaptureDevice)">
            <summary>
            Preserves the state of a capture device by extracting its event subscribers.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.DeviceSwitcher.RestoreCaptureState(SoundFlow.Abstracts.Devices.AudioCaptureDevice,System.Delegate[])">
            <summary>
            Restores the state to a new capture device by re-adding the preserved event subscribers.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.Extensions">
            <summary>
                Extension methods.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.Extensions.GetBytesPerSample(SoundFlow.Enums.SampleFormat)">
            <summary>
                Gets the size of a single sample in bytes for this sample format.
            </summary>
            <exception cref="T:System.ArgumentOutOfRangeException">Thrown if <paramref name="sampleFormat" /> is invalid.</exception>
            <returns>The size of a single sample in bytes.</returns>
        </member>
        <member name="M:SoundFlow.Utils.Extensions.GetSampleFormatFromBitsPerSample(System.Int32)">
            <summary>
                Converts a given number of bits per sample to a <see cref="T:SoundFlow.Enums.SampleFormat" />.
            </summary>
            <param name="bitsPerSample">The number of bits per sample.</param>
            <returns>The corresponding <see cref="T:SoundFlow.Enums.SampleFormat" />.</returns>
        </member>
        <member name="M:SoundFlow.Utils.Extensions.GetSpan``1(System.IntPtr,System.Int32)">
            <summary>
                Gets a <see cref="T:System.Span`1" /> for a given pointer and length.
            </summary>
            <typeparam name="T">The type of the elements in the span.</typeparam>
            <param name="ptr">The pointer to the first element of the span.</param>
            <param name="length">The number of elements in the span.</param>
            <returns>A <see cref="T:System.Span`1" /> for the given pointer and length.</returns>
        </member>
        <member name="M:SoundFlow.Utils.Extensions.ReadIntoArray``1(System.IntPtr,``0[],System.Int32)">
            <summary>
                Reads an array of structures from a native memory pointer into a pre-allocated destination array.
            </summary>
            <typeparam name="T">The type of the structures to read. Must be a value type.</typeparam>
            <param name="pointer">The native pointer to the start of the array.</param>
            <param name="destination">The pre-allocated array to write the structures into.</param>
            <param name="count">The number of structures to read.</param>
            <exception cref="T:System.ArgumentException">Thrown if the destination array is smaller than <paramref name="count"/>.</exception>
        </member>
        <member name="M:SoundFlow.Utils.Extensions.ReadArray``1(System.IntPtr,System.Int32)">
            <summary>
                Reads an array of structures from a native memory pointer, allocating a new managed array.
            </summary>
            <typeparam name="T">The type of the structures to read. Must be a value type.</typeparam>
            <param name="pointer">The native pointer to the start of the array.</param>
            <param name="count">The number of structures to read.</param>
            <returns>A new array of structures of type <typeparamref name="T"/> read from the specified pointer.</returns>
        </member>
        <member name="T:SoundFlow.Utils.LogLevel">
            <summary>
            Defines the severity levels for log messages.
            </summary>
        </member>
        <member name="F:SoundFlow.Utils.LogLevel.Debug">
            <summary>
            Detailed information for debugging purposes.
            </summary>
        </member>
        <member name="F:SoundFlow.Utils.LogLevel.Info">
            <summary>
            General informational messages about the library's operation.
            </summary>
        </member>
        <member name="F:SoundFlow.Utils.LogLevel.Warning">
            <summary>
            Indicates a potential issue that does not prevent the current operation from completing.
            </summary>
        </member>
        <member name="F:SoundFlow.Utils.LogLevel.Error">
            <summary>
            Indicates an error that has occurred, which may affect functionality.
            </summary>
        </member>
        <member name="F:SoundFlow.Utils.LogLevel.Critical">
            <summary>
            Indicates a fatal error that has occurred, which will prevent the application from continuing.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.LogEntry">
            <summary>
            Represents a single log event.
            Using a 'readonly struct' avoids heap allocation and GC pressure for high-performance scenarios.
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.LogEntry.Level">
            <summary>
            Gets the severity level of the log entry.
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.LogEntry.Message">
            <summary>
            Gets the log message.
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.LogEntry.Timestamp">
            <summary>
            Gets the date and time when the log entry was created.
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.LogEntry.Caller">
            <summary>
            Gets information about the calling member (e.g., 'ClassName.MethodName').
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.LogEntry.#ctor(SoundFlow.Utils.LogLevel,System.String,System.DateTime,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Utils.LogEntry"/> struct.
            </summary>
            <param name="level">The severity level of the log entry.</param>
            <param name="message">The log message.</param>
            <param name="timestamp">The date and time of the log entry.</param>
            <param name="caller">Information about the calling member.</param>
        </member>
        <member name="M:SoundFlow.Utils.LogEntry.ToString">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Utils.Log">
            <summary>
            Provides a centralized, decoupled logging mechanism for the SoundFlow library.
            End-users can subscribe to the static OnLog event to capture and handle log messages.
            </summary>
        </member>
        <member name="E:SoundFlow.Utils.Log.OnLog">
            <summary>
            Occurs when the SoundFlow library generates a log message.
            Subscribe to this event in your application to route logs to a console, file, or UI.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.Log.Dispatch(SoundFlow.Utils.LogLevel,System.String,System.String,System.String)">
            <summary>
            Creates a <see cref="T:SoundFlow.Utils.LogEntry"/> and invokes the <see cref="E:SoundFlow.Utils.Log.OnLog"/> event.
            </summary>
            <param name="level">The severity level for the log entry.</param>
            <param name="message">The log message.</param>
            <param name="memberName">The name of the calling member. Populated by the compiler.</param>
            <param name="filePath">The path of the source file of the caller. Populated by the compiler.</param>
        </member>
        <member name="M:SoundFlow.Utils.Log.Debug(System.String,System.String,System.String)">
            <summary>
            Logs a message with the <see cref="F:SoundFlow.Utils.LogLevel.Debug"/> severity level.
            </summary>
            <param name="message">The log message.</param>
            <param name="member">The name of the calling member. This is automatically populated by the compiler and should not be set manually.</param>
            <param name="path">The path of the source file of the caller. This is automatically populated by the compiler and should not be set manually.</param>
        </member>
        <member name="M:SoundFlow.Utils.Log.Info(System.String,System.String,System.String)">
            <summary>
            Logs a message with the <see cref="F:SoundFlow.Utils.LogLevel.Info"/> severity level.
            </summary>
            <param name="message">The log message.</param>
            <param name="member">The name of the calling member. This is automatically populated by the compiler and should not be set manually.</param>
            <param name="path">The path of the source file of the caller. This is automatically populated by the compiler and should not be set manually.</param>
        </member>
        <member name="M:SoundFlow.Utils.Log.Warning(System.String,System.String,System.String)">
            <summary>
            Logs a message with the <see cref="F:SoundFlow.Utils.LogLevel.Warning"/> severity level.
            </summary>
            <param name="message">The log message.</param>
            <param name="member">The name of the calling member. This is automatically populated by the compiler and should not be set manually.</param>
            <param name="path">The path of the source file of the caller. This is automatically populated by the compiler and should not be set manually.</param>
        </member>
        <member name="M:SoundFlow.Utils.Log.Error(System.String,System.String,System.String)">
            <summary>
            Logs a message with the <see cref="F:SoundFlow.Utils.LogLevel.Error"/> severity level.
            </summary>
            <param name="message">The log message.</param>
            <param name="member">The name of the calling member. This is automatically populated by the compiler and should not be set manually.</param>
            <param name="path">The path of the source file of the caller. This is automatically populated by the compiler and should not be set manually.</param>
        </member>
        <member name="M:SoundFlow.Utils.Log.Critical(System.String,System.String,System.String)">
            <summary>
            Logs a message with the <see cref="F:SoundFlow.Utils.LogLevel.Critical"/> severity level.
            </summary>
            <param name="message">The log message.</param>
            <param name="member">The name of the calling member. This is automatically populated by the compiler and should not be set manually.</param>
            <param name="path">The path of the source file of the caller. This is automatically populated by the compiler and should not be set manually.</param>
        </member>
        <member name="T:SoundFlow.Utils.MathHelper">
            <summary>
                Helper methods for common math operations.
            </summary>
        </member>
        <member name="P:SoundFlow.Utils.MathHelper.EnableAvx">
            <summary>
            Gets or sets a value indicating whether to use AVX (Advanced Vector Extensions) instructions
            if the hardware supports them. Defaults to <c>true</c>.
            </summary>
            <remarks>
            Setting this to <c>false</c> will prevent the use of AVX, and the implementation will
            fall back to SSE or scalar code, even on AVX-capable hardware.
            </remarks>
        </member>
        <member name="P:SoundFlow.Utils.MathHelper.EnableSse">
            <summary>
            Gets or sets a value indicating whether to use SSE (Streaming SIMD Extensions) instructions
            if the hardware supports them. Defaults to <c>true</c>.
            </summary>
            <remarks>
            Setting this to <c>false</c> will prevent the use of SSE, and the implementation will
            fall back to scalar code, even on SSE-capable hardware. This also affects AVX routines
            that may use SSE for specific operations.
            </remarks>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.ResampleLinear(System.Single[],System.Int32,System.Int32,System.Int32)">
            <summary>
            Resamples an array of audio data using linear interpolation.
            This is a high-performance method for offline, one-shot resampling that affects both speed and pitch.
            </summary>
            <param name="inputData">The raw audio samples to resample. The samples should be interleaved for multi-channel audio.</param>
            <param name="channels">The number of audio channels in the input data.</param>
            <param name="sourceRate">The original sample rate of the input data in Hz.</param>
            <param name="targetRate">The desired sample rate for the output data in Hz.</param>
            <returns>A new array containing the resampled audio data.</returns>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.InverseFft(System.Numerics.Complex[])">
            <summary>
            Computes the Inverse Fast Fourier Transform (IFFT) of a complex array.
            </summary>
            <param name="data">The complex data array.</param>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.Fft(System.Numerics.Complex[])">
            <summary>
            Computes the Fast Fourier Transform (FFT) of a complex array using SIMD acceleration with fallback to a scalar implementation.
            </summary>
            <param name="data">The complex data array. Must be a power of 2 in length.</param>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.FftScalar(System.Numerics.Complex[])">
            <summary>
            Scalar recursive implementation of the Fast Fourier Transform (FFT).
            </summary>
            <param name="data">The complex data array. Must be a power of 2 in length.</param>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.FftSse(System.Numerics.Complex[])">
            <summary>
            SSE-accelerated iterative implementation of the Fast Fourier Transform (FFT).
            </summary>
            <param name="data">The complex data array. Must be a power of 2 in length.</param>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.FftAvx(System.Numerics.Complex[])">
            <summary>
            AVX-accelerated iterative implementation of the Fast Fourier Transform (FFT).
            </summary>
            <param name="data">The complex data array. Must be a power of 2 in length.</param>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.FftSseStage(System.Numerics.Complex*,System.Int32,System.Int32)">
            <summary> Helper for a single FFT stage using SSE, callable from other FFT methods. </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.BitReverse(System.Numerics.Complex[])">
            <summary>
            Bit-reverses the order of elements in a complex array.
            </summary>
            <param name="data">The complex data array. Must be a power of 2 in length.</param>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.MultiplyComplexSse3(System.Runtime.Intrinsics.Vector128{System.Double},System.Runtime.Intrinsics.Vector128{System.Double})">
            <summary>
            Multiplies a complex number by another using SSE3.
            a * b = (ax*bx - ay*by, ax*by + ay*bx)
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.MultiplyComplexAvx(System.Runtime.Intrinsics.Vector256{System.Double},System.Runtime.Intrinsics.Vector256{System.Double})">
            <summary>
            Multiplies two pairs of complex numbers using AVX.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HammingWindow(System.Int32)">
            <summary>
            Generates a Hamming window of a specified size.
            </summary>
            <param name="size">The size of the Hamming window.</param>
            <returns>The Hamming window array.</returns>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HammingWindowScalar(System.Int32)">
            <summary>
            Generates a Hamming window using a scalar implementation.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HammingWindowSse(System.Int32)">
            <summary>
            Generates a Hamming window using SSE acceleration.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HammingWindowAvx(System.Int32)">
            <summary>
            Generates a Hamming window using AVX acceleration.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HanningWindow(System.Int32)">
            <summary>
            Generates a Hanning window of a specified size.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HanningWindowScalar(System.Int32)">
            <summary>
            Generates a Hanning window using a scalar implementation.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HanningWindowSse(System.Int32)">
            <summary>
            Generates a Hanning window using SSE acceleration.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.HanningWindowAvx(System.Int32)">
            <summary>
            Generates a Hanning window using AVX acceleration.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.IsPowerOfTwo(System.Int64)">
            <summary>
            Checks if a number is a power of two (2, 4, 8, 16, etc.).
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.FastCosineSse(System.Runtime.Intrinsics.Vector128{System.Single})">
            <summary>
            Approximates the cosine of a vector using a highly accurate polynomial on a reduced quadrant.
            Requires SSE4.1 for Floor/BlendVariable.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MathHelper.FastCosineAvx(System.Runtime.Intrinsics.Vector256{System.Single})">
            <summary>
            Approximates the cosine of a vector using a highly accurate polynomial on a reduced quadrant.
            </summary>
        </member>
        <member name="T:SoundFlow.Utils.MidiTimeConverter">
            <summary>
            A static utility class providing methods to convert between MIDI ticks and real time (TimeSpan)
            based on a composition's tempo map.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.MidiTimeConverter.GetTimeSpanForTick(System.Int64,System.Int32,System.Collections.Generic.IReadOnlyList{SoundFlow.Editing.TempoMarker})">
            <summary>
            Converts an absolute time in MIDI ticks to a <see cref="T:System.TimeSpan"/>.
            </summary>
            <param name="tick">The absolute tick position to convert.</param>
            <param name="ticksPerQuarterNote">The time division of the sequence.</param>
            <param name="tempoTrack">The composition's master tempo track.</param>
            <returns>The corresponding TimeSpan from the beginning of the sequence.</returns>
        </member>
        <member name="M:SoundFlow.Utils.MidiTimeConverter.GetTickForTimeSpan(System.TimeSpan,System.Int32,System.Collections.Generic.IReadOnlyList{SoundFlow.Editing.TempoMarker})">
            <summary>
            Converts a <see cref="T:System.TimeSpan"/> to an absolute time in MIDI ticks.
            </summary>
            <param name="time">The TimeSpan to convert.</param>
            <param name="ticksPerQuarterNote">The time division of the sequence.</param>
            <param name="tempoTrack">The composition's master tempo track.</param>
            <returns>The corresponding absolute tick position.</returns>
        </member>
        <member name="T:SoundFlow.Utils.TypeRegistry">
            <summary>
            A registry for resolving types by name at runtime in a NativeAOT-compatible way.
            This prevents the linker from trimming required types and avoids the use of unsafe reflection.
            </summary>
        </member>
        <member name="M:SoundFlow.Utils.TypeRegistry.RegisterType``1">
            <summary>
            Registers a custom type to ensure it can be resolved during project loading.
            This method must be called for any user-defined Modifiers or Analyzers when running in NativeAOT.
            </summary>
            <typeparam name="T">The type to register. Must have public properties and constructors.</typeparam>
        </member>
        <member name="M:SoundFlow.Utils.TypeRegistry.ResolveType(System.String)">
            <summary>
            Resolves a type by its full name from the registry.
            </summary>
            <param name="typeName">The full name of the type.</param>
            <returns>The resolved <see cref="T:System.Type"/> or null if not found.</returns>
        </member>
        <member name="T:SoundFlow.Visualization.LevelMeterAnalyzer">
            <summary>
            Analyzes audio data to provide level (peak, RMS) information.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterAnalyzer.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Visualization.LevelMeterAnalyzer.#ctor(SoundFlow.Structs.AudioFormat,SoundFlow.Interfaces.IVisualizer)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Visualization.LevelMeterAnalyzer"/> class.
            </summary>
            <param name="format">The audio format to analyze.</param>
            <param name="visualizer">The visualizer to send data to.</param>
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterAnalyzer.Rms">
            <summary>
            Gets the current RMS level.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterAnalyzer.Peak">
            <summary>
            Gets the current peak level.
            </summary>
        </member>
        <member name="M:SoundFlow.Visualization.LevelMeterAnalyzer.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <inheritdoc/>
        </member>
        <member name="T:SoundFlow.Visualization.LevelMeterVisualizer">
            <summary>
            Visualizes the current audio level (RMS or peak).
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterVisualizer.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterVisualizer.BarColor">
            <summary>
            Gets or sets the color of the level bar.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterVisualizer.PeakHoldColor">
            <summary>
            Gets or sets the color of the peak hold indicator.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.LevelMeterVisualizer.Size">
            <summary>
            Gets the size of the Level Meter Visualizer in pixels (X - width, Y - height).
            </summary>
        </member>
        <member name="M:SoundFlow.Visualization.LevelMeterVisualizer.#ctor(SoundFlow.Visualization.LevelMeterAnalyzer)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Visualization.LevelMeterVisualizer"/> class.
            </summary>
            <param name="levelMeterAnalyzer">The level meter analyzer to get data from.</param>
        </member>
        <member name="M:SoundFlow.Visualization.LevelMeterVisualizer.ProcessOnAudioData(System.ReadOnlySpan{System.Single})">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Visualization.LevelMeterVisualizer.Render(SoundFlow.Interfaces.IVisualizationContext)">
            <inheritdoc/>
        </member>
        <member name="E:SoundFlow.Visualization.LevelMeterVisualizer.VisualizationUpdated">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Visualization.LevelMeterVisualizer.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Visualization.SpectrumAnalyzer">
            <summary>
            Analyzes audio data to provide frequency spectrum information using FFT.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.SpectrumAnalyzer.Name">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Visualization.SpectrumAnalyzer.#ctor(SoundFlow.Structs.AudioFormat,System.Int32,SoundFlow.Interfaces.IVisualizer)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Visualization.SpectrumAnalyzer"/> class.
            </summary>
            <param name="format">The audio format to analyze.</param>
            <param name="fftSize">The size of the FFT. Must be a power of 2.</param>
            <param name="visualizer">The visualizer to send data to.</param>
            <exception cref="T:System.ArgumentException"></exception>
        </member>
        <member name="P:SoundFlow.Visualization.SpectrumAnalyzer.SpectrumData">
            <summary>
            Gets the spectrum data.
            </summary>
        </member>
        <member name="M:SoundFlow.Visualization.SpectrumAnalyzer.Analyze(System.ReadOnlySpan{System.Single},System.Int32)">
            <inheritdoc/>
        </member>
        <member name="T:SoundFlow.Visualization.SpectrumVisualizer">
            <summary>
            Visualizes the frequency spectrum of the audio data.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.SpectrumVisualizer.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Visualization.SpectrumVisualizer.BarColor">
            <summary>
            Gets or sets the color of the spectrum bars.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.SpectrumVisualizer.Size">
            <summary>
            Gets the size of the spectrum visualizer in pixels (X - width, Y - height).
            </summary>
        </member>
        <member name="M:SoundFlow.Visualization.SpectrumVisualizer.#ctor(SoundFlow.Visualization.SpectrumAnalyzer)">
            <summary>
            Initializes a new instance of the <see cref="T:SoundFlow.Visualization.SpectrumVisualizer"/> class.
            </summary>
            <param name="spectrumAnalyzer">The spectrum analyzer to get data from.</param>
        </member>
        <member name="M:SoundFlow.Visualization.SpectrumVisualizer.ProcessOnAudioData(System.ReadOnlySpan{System.Single})">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Visualization.SpectrumVisualizer.Render(SoundFlow.Interfaces.IVisualizationContext)">
            <inheritdoc/>
        </member>
        <member name="E:SoundFlow.Visualization.SpectrumVisualizer.VisualizationUpdated">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Visualization.SpectrumVisualizer.Dispose">
            <inheritdoc />
        </member>
        <member name="T:SoundFlow.Visualization.WaveformVisualizer">
            <summary>
            Visualizes audio data as a waveform.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.WaveformVisualizer.Name">
            <inheritdoc />
        </member>
        <member name="P:SoundFlow.Visualization.WaveformVisualizer.Waveform">
            <summary>
            Gets the waveform data.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.WaveformVisualizer.WaveformColor">
            <summary>
            Gets or sets the color of the waveform.
            </summary>
        </member>
        <member name="P:SoundFlow.Visualization.WaveformVisualizer.Size">
            <summary>
            Gets the size of the waveform visualization in pixels (X - width, Y - height).
            </summary>
        </member>
        <member name="M:SoundFlow.Visualization.WaveformVisualizer.ProcessOnAudioData(System.ReadOnlySpan{System.Single})">
            <inheritdoc/>
        </member>
        <member name="M:SoundFlow.Visualization.WaveformVisualizer.Render(SoundFlow.Interfaces.IVisualizationContext)">
            <inheritdoc/>
        </member>
        <member name="E:SoundFlow.Visualization.WaveformVisualizer.VisualizationUpdated">
            <inheritdoc />
        </member>
        <member name="M:SoundFlow.Visualization.WaveformVisualizer.Dispose">
            <inheritdoc />
        </member>
    </members>
</doc>
