import './AudioAPIModule';

export { default as AnalyserNode } from './core/AnalyserNode';
export { default as AudioBuffer } from './core/AudioBuffer';
export { default as AudioBufferQueueSourceNode } from './core/AudioBufferQueueSourceNode';
export { default as AudioBufferSourceNode } from './core/AudioBufferSourceNode';
export { default as AudioContext } from './core/AudioContext';
export { decodeAudioData, decodePCMInBase64 } from './core/AudioDecoder';
export { concatAudioFiles, getAudioDuration } from './core/AudioFileUtils';
export { isFfmpegEnabled } from './utils/flags';
export { default as AudioDestinationNode } from './core/AudioDestinationNode';
export { default as AudioNode } from './core/AudioNode';
export { default as AudioParam } from './core/AudioParam';
export { default as AudioRecorder } from './core/AudioRecorder';
export { default as AudioScheduledSourceNode } from './core/AudioScheduledSourceNode';
export { default as BaseAudioContext } from './core/BaseAudioContext';
export { default as BiquadFilterNode } from './core/BiquadFilterNode';
export { default as ConstantSourceNode } from './core/ConstantSourceNode';
export { default as ConvolverNode } from './core/ConvolverNode';
export { default as DelayNode } from './core/DelayNode';
export { default as GainNode } from './core/GainNode';
export { default as MediaElementAudioSourceNode } from './core/MediaElementAudioSourceNode';
export { default as OfflineAudioContext } from './core/OfflineAudioContext';
export { default as OscillatorNode } from './core/OscillatorNode';
export { default as PeriodicWave } from './core/PeriodicWave';
export { default as RecorderAdapterNode } from './core/RecorderAdapterNode';
export { default as StereoPannerNode } from './core/StereoPannerNode';
export { default as StreamerNode } from './core/StreamerNode';
export { default as WaveShaperNode } from './core/WaveShaperNode';
export { default as WorkletNode } from './core/WorkletNode';
export { default as WorkletProcessingNode } from './core/WorkletProcessingNode';
export { default as WorkletSourceNode } from './core/WorkletSourceNode';

export * from './errors';
export * from './system/types';
export * from './types';

// React components (Audio tag)
export * from './Audio';
export { default as Audio } from './Audio';
export { default as AudioControls } from './Audio/controls/AudioControls';
export type { MediaElementAudioSourceOptions } from './core/MediaElementAudioSourceNode';
export type { default as AudioEventSubscription } from './events/AudioEventSubscription';
export { default as FilePreset } from './utils/filePresets';

// Notification System
export {
  PlaybackNotificationManager,
  RecordingNotificationManager,
} from './system/notification';

export { default as AudioManager } from './system';

export {
  NotificationManager,
  PlaybackControlName,
  PlaybackNotificationEventName,
  PlaybackNotificationInfo,
} from './system/notification';
