gitextract_uaa1x4hk/ ├── .claude/ │ ├── README.md │ ├── commands/ │ │ └── pre-push-update.md │ ├── hooks/ │ │ └── double-prompt.js │ ├── last-knowledge-update │ ├── settings.json │ └── skills/ │ ├── audio-nodes/ │ │ ├── SKILL.md │ │ ├── gainnode-example.md │ │ └── maintenance.md │ ├── build-compilation-dependencies/ │ │ ├── SKILL.md │ │ ├── build-details.md │ │ └── maintenance.md │ ├── flow/ │ │ ├── SKILL.md │ │ └── maintenance.md │ ├── host-objects/ │ │ ├── SKILL.md │ │ ├── examples.md │ │ └── maintenance.md │ ├── post-work-checks/ │ │ ├── SKILL.md │ │ └── maintenance.md │ ├── thread-safety-itc/ │ │ ├── SKILL.md │ │ └── maintenance.md │ ├── turbo-modules/ │ │ ├── SKILL.md │ │ └── maintenance.md │ ├── utilities/ │ │ ├── SKILL.md │ │ ├── api.md │ │ └── maintenance.md │ ├── web-audio-api/ │ │ ├── SKILL.md │ │ └── maintenance.md │ └── writing-skills/ │ ├── SKILL.md │ └── maintenance.md ├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yaml │ │ └── feature_request.yaml │ ├── actions/ │ │ └── setup/ │ │ └── action.yml │ ├── pull_request_template.md │ ├── release.yml │ └── workflows/ │ ├── ci.yml │ ├── graph-tests.yml │ ├── npm-audio-package-build.yml │ ├── npm-custom-node-generator-build.yml │ ├── publish-docs.yml │ └── tests.yml ├── .gitignore ├── .nvmrc ├── .yarn/ │ └── releases/ │ └── yarn-4.5.0.cjs ├── .yarnrc.yml ├── CLAUDE.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── THIRD_PARTY.md ├── apps/ │ ├── CLAUDE.md │ ├── common-app/ │ │ ├── .eslintrc.js │ │ ├── index.ts │ │ ├── package.json │ │ ├── prettier.config.js │ │ ├── scripts/ │ │ │ └── dependencies.js │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── components/ │ │ │ │ ├── BGGradient.tsx │ │ │ │ ├── Button.tsx │ │ │ │ ├── Container.tsx │ │ │ │ ├── Select.tsx │ │ │ │ ├── Slider.tsx │ │ │ │ ├── Spacer.tsx │ │ │ │ ├── Switch.tsx │ │ │ │ ├── VerticalSlider.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── CheckedCircleIcon.tsx │ │ │ │ │ ├── MenuIcon.tsx │ │ │ │ │ └── PlayPauseIcon.tsx │ │ │ │ └── index.ts │ │ │ ├── demos/ │ │ │ │ ├── Crossfade/ │ │ │ │ │ └── Crossfade.tsx │ │ │ │ ├── PedalBoard/ │ │ │ │ │ ├── AutoWahPedal.tsx │ │ │ │ │ ├── EchoPedal.tsx │ │ │ │ │ ├── OverdrivePedal.tsx │ │ │ │ │ ├── PedalBoard.tsx │ │ │ │ │ ├── ReverbPedal.tsx │ │ │ │ │ └── curves.ts │ │ │ │ ├── Record/ │ │ │ │ │ ├── ControlPanel.tsx │ │ │ │ │ ├── PauseButton.tsx │ │ │ │ │ ├── PlaybackVisualization.tsx │ │ │ │ │ ├── Record.tsx │ │ │ │ │ ├── RecordButton.tsx │ │ │ │ │ ├── RecordingTime.tsx │ │ │ │ │ ├── RecordingVisualization.tsx │ │ │ │ │ ├── Status.tsx │ │ │ │ │ ├── TimeStream.tsx │ │ │ │ │ ├── constants.tsx │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── examples/ │ │ │ │ ├── AudioFile/ │ │ │ │ │ ├── AudioFile.tsx │ │ │ │ │ ├── AudioPlayer.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioParamPipeline/ │ │ │ │ │ ├── AudioParamPipeline.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioPipelineStress/ │ │ │ │ │ ├── AudioPipelineStress.tsx │ │ │ │ │ ├── StopRequestedError.ts │ │ │ │ │ ├── StressPlaybackController.ts │ │ │ │ │ ├── StressResourceOwner.ts │ │ │ │ │ ├── audioSessions.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── AudioTag/ │ │ │ │ │ ├── AudioTag.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioVisualizer/ │ │ │ │ │ ├── AudioVisualizer.tsx │ │ │ │ │ ├── Canvas.tsx │ │ │ │ │ ├── Charts.tsx │ │ │ │ │ ├── FreqTimeChart.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── ConvolverIR/ │ │ │ │ │ ├── ConvolverIR.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── DrumMachine/ │ │ │ │ │ ├── DrumMachine.tsx │ │ │ │ │ ├── Grid.tsx │ │ │ │ │ ├── NotesHighlight.tsx │ │ │ │ │ ├── PatternShape.tsx │ │ │ │ │ ├── PlayButton.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── instruments.ts │ │ │ │ │ ├── presets.ts │ │ │ │ │ └── useGestures.ts │ │ │ │ ├── Metronome/ │ │ │ │ │ ├── Metronome.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── patterns.ts │ │ │ │ ├── OfflineRendering/ │ │ │ │ │ ├── OfflineRendering.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Oscillator/ │ │ │ │ │ ├── Oscillator.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Piano/ │ │ │ │ │ ├── Keyboard.tsx │ │ │ │ │ ├── Piano.tsx │ │ │ │ │ ├── PianoNote.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── PlaybackSpeed/ │ │ │ │ │ ├── PlaybackSpeed.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Record/ │ │ │ │ │ └── Record.tsx │ │ │ │ ├── Streaming/ │ │ │ │ │ └── Streaming.tsx │ │ │ │ ├── Worklets/ │ │ │ │ │ └── Worklets.tsx │ │ │ │ └── index.ts │ │ │ ├── singletons/ │ │ │ │ └── index.ts │ │ │ ├── styles.ts │ │ │ ├── testComponents/ │ │ │ │ ├── ControlBar.tsx │ │ │ │ ├── CurrentStepCard.tsx │ │ │ │ ├── EmptyState.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── LiveLog.tsx │ │ │ │ ├── ScenarioCard.tsx │ │ │ │ ├── ScenarioResults.tsx │ │ │ │ ├── SectionTitle.tsx │ │ │ │ ├── StatusPill.tsx │ │ │ │ ├── StepRow.tsx │ │ │ │ ├── Summary.tsx │ │ │ │ ├── SummaryBadge.tsx │ │ │ │ ├── UnsupportedNotice.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── statusStyles.ts │ │ │ │ └── types.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── skiUtils.ts │ │ │ ├── soundEngines/ │ │ │ │ ├── Clap.ts │ │ │ │ ├── HiHat.ts │ │ │ │ ├── Kick.ts │ │ │ │ ├── MetronomeSound.ts │ │ │ │ └── SoundEngine.ts │ │ │ ├── usePlayer.tsx │ │ │ └── withSeparators.ts │ │ ├── tsconfig.json │ │ └── types.d.ts │ └── fabric-example/ │ ├── .bundle/ │ │ └── config │ ├── .watchmanconfig │ ├── App.tsx │ ├── Gemfile │ ├── README.md │ ├── android/ │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ ├── debug.keystore │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── fabricexample/ │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainApplication.kt │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── logo.xml │ │ │ │ ├── pause.xml │ │ │ │ ├── resume.xml │ │ │ │ └── rn_edit_text_material.xml │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ └── values/ │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle │ ├── app.json │ ├── babel.config.js │ ├── index.js │ ├── ios/ │ │ ├── .xcode.env │ │ ├── FabricExample/ │ │ │ ├── AppDelegate.swift │ │ │ ├── Images.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ └── PrivacyInfo.xcprivacy │ │ ├── FabricExample.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── FabricExample.xcscheme │ │ ├── FabricExample.xcworkspace/ │ │ │ └── contents.xcworkspacedata │ │ ├── FabricExampleTests/ │ │ │ ├── AudioAPIModuleTests.mm │ │ │ ├── AudioEngineTests.mm │ │ │ ├── AudioPlayerTests.mm │ │ │ ├── AudioSessionManagerTests.mm │ │ │ ├── IOSAudioRecorderTests.mm │ │ │ ├── NativeAudioRecorderTests.mm │ │ │ └── SystemNotificationManagerTests.mm │ │ └── Podfile │ ├── metro.config.js │ ├── package.json │ ├── react-native.config.js │ └── tsconfig.json ├── ghdocs/ │ ├── audio-node.md │ └── changelog.md ├── lefthook.yml ├── lgplv3 ├── package.json ├── packages/ │ ├── audiodocs/ │ │ ├── .eslintrc │ │ ├── .gitignore │ │ ├── .yarn/ │ │ │ └── releases/ │ │ │ └── yarn-1.22.22.cjs │ │ ├── .yarnrc.yml │ │ ├── CLAUDE.md │ │ ├── README.md │ │ ├── babel.config.js │ │ ├── docs/ │ │ │ ├── analysis/ │ │ │ │ ├── _category_.json │ │ │ │ └── analyser-node.mdx │ │ │ ├── core/ │ │ │ │ ├── _category_.json │ │ │ │ ├── audio-context.mdx │ │ │ │ ├── audio-node.mdx │ │ │ │ ├── audio-param.mdx │ │ │ │ ├── base-audio-context.mdx │ │ │ │ └── offline-audio-context.mdx │ │ │ ├── destinations/ │ │ │ │ ├── _category_.json │ │ │ │ └── audio-destination-node.mdx │ │ │ ├── effects/ │ │ │ │ ├── _category_.json │ │ │ │ ├── biquad-filter-node.mdx │ │ │ │ ├── convolver-node.mdx │ │ │ │ ├── delay-node.mdx │ │ │ │ ├── gain-node.mdx │ │ │ │ ├── iir-filter-node.mdx │ │ │ │ ├── periodic-wave.mdx │ │ │ │ ├── stereo-panner-node.mdx │ │ │ │ └── wave-shaper-node.mdx │ │ │ ├── experimental/ │ │ │ │ ├── _category_.json │ │ │ │ └── audio-tag.mdx │ │ │ ├── fundamentals/ │ │ │ │ ├── _category_.json │ │ │ │ ├── best-practices.mdx │ │ │ │ ├── getting-started.mdx │ │ │ │ └── introduction.mdx │ │ │ ├── guides/ │ │ │ │ ├── _category_.json │ │ │ │ ├── create-your-own-effect.mdx │ │ │ │ ├── lets-make-some-noise.mdx │ │ │ │ ├── making-a-piano-keyboard.mdx │ │ │ │ ├── noise-generation.mdx │ │ │ │ └── see-your-sound.mdx │ │ │ ├── inputs/ │ │ │ │ ├── _category_.json │ │ │ │ └── audio-recorder.mdx │ │ │ ├── other/ │ │ │ │ ├── _category_.json │ │ │ │ ├── audio-api-plugin.mdx │ │ │ │ ├── compatibility.mdx │ │ │ │ ├── ffmpeg-info.mdx │ │ │ │ ├── non-expo-permissions.mdx │ │ │ │ ├── running_with_mac_catalyst.mdx │ │ │ │ ├── testing.mdx │ │ │ │ └── web-audio-api-coverage.mdx │ │ │ ├── react/ │ │ │ │ ├── _category_.json │ │ │ │ └── select-input.mdx │ │ │ ├── sources/ │ │ │ │ ├── _category_.json │ │ │ │ ├── audio-buffer-base-source-node.mdx │ │ │ │ ├── audio-buffer-queue-source-node.mdx │ │ │ │ ├── audio-buffer-source-node.mdx │ │ │ │ ├── audio-buffer.mdx │ │ │ │ ├── audio-scheduled-source-node.mdx │ │ │ │ ├── constant-source-node.mdx │ │ │ │ ├── oscillator-node.mdx │ │ │ │ ├── recorder-adapter-node.mdx │ │ │ │ └── streamer-node.mdx │ │ │ ├── system/ │ │ │ │ ├── _category_.json │ │ │ │ ├── audio-manager.mdx │ │ │ │ ├── playback-notification-manager.mdx │ │ │ │ └── recording-notification-manager.mdx │ │ │ ├── types/ │ │ │ │ ├── _category_.json │ │ │ │ ├── channel-count-mode.mdx │ │ │ │ ├── channel-interpretation.mdx │ │ │ │ └── oscillator-type.mdx │ │ │ ├── utils/ │ │ │ │ ├── _category_.json │ │ │ │ ├── decoding.mdx │ │ │ │ └── time-stretching.mdx │ │ │ └── worklets/ │ │ │ ├── _category_.json │ │ │ ├── introduction.mdx │ │ │ ├── worklet-node.mdx │ │ │ ├── worklet-processing-node.mdx │ │ │ └── worklet-source-node.mdx │ │ ├── docusaurus.config.js │ │ ├── package.json │ │ ├── prettier.config.js │ │ ├── sidebars.js │ │ ├── src/ │ │ │ ├── audio/ │ │ │ │ ├── AudioManager.ts │ │ │ │ ├── Equalizer.ts │ │ │ │ ├── MockAudioContext.ts │ │ │ │ ├── effects.ts │ │ │ │ ├── types.ts │ │ │ │ ├── useEqualizerControls.ts │ │ │ │ ├── useIsPlaying.ts │ │ │ │ └── utils.ts │ │ │ ├── canvasUtils/ │ │ │ │ ├── clearCanvas.ts │ │ │ │ ├── createGradient.ts │ │ │ │ ├── drawEQControlPoints.ts │ │ │ │ ├── drawEqGrid.ts │ │ │ │ ├── drawShadedCurve.ts │ │ │ │ ├── drawSpectroLines.ts │ │ │ │ ├── getBarWidth.ts │ │ │ │ ├── getEqualizerResponse.ts │ │ │ │ ├── groupEQBandLevels.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lagrangeInterpolation.ts │ │ │ │ ├── stretchFrequencies.ts │ │ │ │ └── types.ts │ │ │ ├── components/ │ │ │ │ ├── AnimableIcon/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── AudioNodePropsTable/ │ │ │ │ │ ├── AudioNodePropsTable.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── styles.module.css │ │ │ │ ├── Badges/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── Charts/ │ │ │ │ │ ├── ExponentialRampToValueAtTime/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── LinearRampToValueAtTime/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SetTargetAtTime/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SetValueAtTime/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SetValueCurveAtTime/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── AudioParamChartBase.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── Compatibility/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── HandIcon/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── InteractiveExample/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── InteractivePlayground/ │ │ │ │ │ ├── AudioBufferSourceExample/ │ │ │ │ │ │ ├── AudioBufferSourceExample.tsx │ │ │ │ │ │ └── useAudioBufferSourcePlayground.tsx │ │ │ │ │ ├── GainAdsrExample/ │ │ │ │ │ │ ├── AdsrChart.tsx │ │ │ │ │ │ ├── GainAdsrExample.tsx │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ └── useGainAdsrPlayground.tsx │ │ │ │ │ ├── OscillatorExample/ │ │ │ │ │ │ ├── OscillatorExample.tsx │ │ │ │ │ │ └── useOscilatorPlayground.tsx │ │ │ │ │ ├── WaveformVisualizer.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── RadonBanner/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ └── TopPromoRotator/ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── css/ │ │ │ │ ├── colors.css │ │ │ │ ├── custom.css │ │ │ │ ├── overrides.css │ │ │ │ └── typography.css │ │ │ ├── examples/ │ │ │ │ ├── Biquad/ │ │ │ │ │ ├── BiquadExampleComponent.tsx │ │ │ │ │ ├── BoxWithFlaps.tsx │ │ │ │ │ ├── FrequencyResponseGraph.module.css │ │ │ │ │ ├── FrequencyResponseGraph.tsx │ │ │ │ │ └── drawFrequencyResponse.tsx │ │ │ │ ├── LetsMakeSomeNoise/ │ │ │ │ │ ├── Component.tsx │ │ │ │ │ └── Source.tsx │ │ │ │ ├── NoiseGeneration/ │ │ │ │ │ ├── BrownianNoiseComponent.tsx │ │ │ │ │ ├── BrownianNoiseSource.tsx │ │ │ │ │ ├── PinkNoiseComponent.tsx │ │ │ │ │ ├── PinkNoiseSource.tsx │ │ │ │ │ ├── WhiteNoiseComponent.tsx │ │ │ │ │ └── WhiteNoiseSource.tsx │ │ │ │ ├── SeeYourSound/ │ │ │ │ │ ├── BaseComponent.tsx │ │ │ │ │ ├── BaseSource.tsx │ │ │ │ │ ├── CanvasSizerComponent.tsx │ │ │ │ │ ├── FrequencyDomainComponent.tsx │ │ │ │ │ ├── FrequencyDomainSource.tsx │ │ │ │ │ ├── TimeDomainComponent.tsx │ │ │ │ │ └── TimeDomainSource.tsx │ │ │ │ ├── SimplePiano/ │ │ │ │ │ ├── EnvelopesComponent.tsx │ │ │ │ │ ├── EnvelopesSource.tsx │ │ │ │ │ ├── FinalComponent.tsx │ │ │ │ │ ├── FinalSource.tsx │ │ │ │ │ ├── ItHangsComponent.tsx │ │ │ │ │ ├── ItHangsSource.tsx │ │ │ │ │ ├── PressOutComponent.tsx │ │ │ │ │ └── PressOutSource.tsx │ │ │ │ └── VinylPlayer/ │ │ │ │ ├── VinylPlayer.tsx │ │ │ │ ├── consts.ts │ │ │ │ ├── index.ts │ │ │ │ └── styles.module.css │ │ │ ├── hooks/ │ │ │ │ ├── usePageType.tsx │ │ │ │ └── useScreenSize.tsx │ │ │ ├── landingComponents/ │ │ │ │ ├── FooterBackground/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── Hero/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── HireUsSection/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── HomepageButton/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── LandingBlog/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── LandingFeatures/ │ │ │ │ │ ├── LandingFeature.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── LandingWidget/ │ │ │ │ │ ├── Canvas/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── Equalizer/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── SoundButton/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── Spectrogram/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Toolbar/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── styles.module.css │ │ │ │ │ └── types.ts │ │ │ │ ├── Testimonials/ │ │ │ │ │ ├── TestimonialItem/ │ │ │ │ │ │ ├── QuoteIcon/ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── TestimonialList/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── styles.module.css │ │ │ │ │ │ ├── styles.prev.css │ │ │ │ │ │ ├── testimonials.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useDrag.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ └── index.ts │ │ │ ├── pages/ │ │ │ │ ├── TestPage.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── theme/ │ │ │ │ ├── CodeBlock/ │ │ │ │ │ ├── highlighting-dark.js │ │ │ │ │ └── highlighting-light.js │ │ │ │ ├── DocSidebar/ │ │ │ │ │ └── index.jsx │ │ │ │ ├── Navbar/ │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.css │ │ │ │ ├── NotFound/ │ │ │ │ │ └── index.jsx │ │ │ │ ├── Root.jsx │ │ │ │ ├── SkipToContent/ │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── TOCItems/ │ │ │ │ │ ├── Tree/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ ├── Tabs/ │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── styles.module.css │ │ │ │ └── muiTheme.jsx │ │ │ ├── types.d.ts │ │ │ ├── ui/ │ │ │ │ ├── DetailBox/ │ │ │ │ │ ├── DetailBox.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── styles.module.css │ │ │ │ ├── FilterList/ │ │ │ │ │ ├── FilterList.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── styles.module.css │ │ │ │ ├── Icon/ │ │ │ │ │ ├── Icon.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── styles.module.css │ │ │ │ ├── Layout/ │ │ │ │ │ ├── Box/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── Column/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── Container/ │ │ │ │ │ │ ├── Container.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── Row/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ ├── Spacer/ │ │ │ │ │ │ ├── Spacer.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.css │ │ │ │ │ └── index.tsx │ │ │ │ ├── ResponsiveCanvas/ │ │ │ │ │ ├── ResponsiveCanvas.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── styles.module.css │ │ │ │ ├── SliderInput/ │ │ │ │ │ ├── SliderInput.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── styles.module.css │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ └── Switch/ │ │ │ │ ├── Switch.tsx │ │ │ │ ├── index.ts │ │ │ │ └── styles.module.css │ │ │ └── wasm-loader.js │ │ ├── static/ │ │ │ ├── .nojekyll │ │ │ ├── audio/ │ │ │ │ ├── music/ │ │ │ │ │ └── guitar-sample.flac │ │ │ │ └── other/ │ │ │ │ └── mixed-channels.opus │ │ │ ├── fonts/ │ │ │ │ ├── Aeonik-Bold.otf │ │ │ │ ├── Aeonik-Medium.otf │ │ │ │ └── Aeonik-Regular.otf │ │ │ └── signalsmithStretch.mjs │ │ ├── tsconfig.json │ │ └── types.d.ts │ ├── custom-node-generator/ │ │ ├── README.md │ │ ├── bin/ │ │ │ └── cli.js │ │ ├── lib/ │ │ │ └── generator.js │ │ ├── package.json │ │ └── templates/ │ │ └── basic/ │ │ ├── shared/ │ │ │ ├── MyProcessorNode.cpp │ │ │ ├── MyProcessorNode.h │ │ │ ├── MyProcessorNodeHostObject.h │ │ │ ├── NativeAudioProcessingModule.cpp │ │ │ └── NativeAudioProcessingModule.h │ │ └── specs/ │ │ └── NativeAudioProcessingModule.ts │ ├── react-native-audio-api/ │ │ ├── .clang-format │ │ ├── .clang-tidy │ │ ├── .clangd │ │ ├── .eslintrc.js │ │ ├── .prettierignore │ │ ├── .watchmanconfig │ │ ├── RNAudioAPI.podspec │ │ ├── android/ │ │ │ ├── CMakeLists.txt │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── AndroidManifestNew.xml │ │ │ │ ├── cpp/ │ │ │ │ │ └── audioapi/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ └── android/ │ │ │ │ │ ├── AudioAPIModule.cpp │ │ │ │ │ ├── AudioAPIModule.h │ │ │ │ │ ├── OnLoad.cpp │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── AndroidAudioRecorder.cpp │ │ │ │ │ │ ├── AndroidAudioRecorder.h │ │ │ │ │ │ ├── AudioPlayer.cpp │ │ │ │ │ │ ├── AudioPlayer.h │ │ │ │ │ │ ├── NativeAudioPlayer.hpp │ │ │ │ │ │ ├── NativeAudioRecorder.hpp │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── AndroidFileWriterBackend.cpp │ │ │ │ │ │ ├── AndroidFileWriterBackend.h │ │ │ │ │ │ ├── AndroidRecorderCallback.cpp │ │ │ │ │ │ ├── AndroidRecorderCallback.h │ │ │ │ │ │ ├── AndroidRotatingFileWriter.cpp │ │ │ │ │ │ ├── AndroidRotatingFileWriter.h │ │ │ │ │ │ ├── FileOptions.cpp │ │ │ │ │ │ ├── FileOptions.h │ │ │ │ │ │ ├── ffmpegBackend/ │ │ │ │ │ │ │ ├── FFmpegFileWriter.cpp │ │ │ │ │ │ │ ├── FFmpegFileWriter.h │ │ │ │ │ │ │ ├── ptrs.hpp │ │ │ │ │ │ │ ├── utils.cpp │ │ │ │ │ │ │ └── utils.h │ │ │ │ │ │ └── miniaudioBackend/ │ │ │ │ │ │ ├── MiniAudioFileWriter.cpp │ │ │ │ │ │ └── MiniAudioFileWriter.h │ │ │ │ │ └── system/ │ │ │ │ │ └── NativeFileInfo.hpp │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── swmansion/ │ │ │ │ │ └── audioapi/ │ │ │ │ │ ├── AudioAPIModule.kt │ │ │ │ │ ├── AudioAPIPackage.kt │ │ │ │ │ └── system/ │ │ │ │ │ ├── AudioEvent.kt │ │ │ │ │ ├── AudioFocusListener.kt │ │ │ │ │ ├── CentralizedForegroundService.kt │ │ │ │ │ ├── ForegroundServiceManager.kt │ │ │ │ │ ├── MediaSessionManager.kt │ │ │ │ │ ├── NativeFileInfo.kt │ │ │ │ │ ├── PermissionRequestListener.kt │ │ │ │ │ ├── VolumeChangeListener.kt │ │ │ │ │ └── notification/ │ │ │ │ │ ├── BaseNotification.kt │ │ │ │ │ ├── NotificationRegistry.kt │ │ │ │ │ ├── PlaybackNotification.kt │ │ │ │ │ ├── PlaybackNotificationReceiver.kt │ │ │ │ │ ├── RecordingNotification.kt │ │ │ │ │ ├── RecordingNotificationReceiver.kt │ │ │ │ │ └── state/ │ │ │ │ │ └── RecordingNotificationState.kt │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ ├── logo.xml │ │ │ │ │ ├── next.xml │ │ │ │ │ ├── pause.xml │ │ │ │ │ ├── play.xml │ │ │ │ │ ├── previous.xml │ │ │ │ │ ├── skip_backward_15.xml │ │ │ │ │ ├── skip_forward_15.xml │ │ │ │ │ └── stop.xml │ │ │ │ └── layout/ │ │ │ │ ├── btn_round_ripple.xml │ │ │ │ ├── notification_collapsed.xml │ │ │ │ └── notification_expanded.xml │ │ │ └── oldarch/ │ │ │ └── NativeAudioAPIModuleSpec.java │ │ ├── app.plugin.js │ │ ├── babel.config.js │ │ ├── common/ │ │ │ └── cpp/ │ │ │ ├── audioapi/ │ │ │ │ ├── AudioAPIModuleInstaller.h │ │ │ │ ├── HostObjects/ │ │ │ │ │ ├── AudioContextHostObject.cpp │ │ │ │ │ ├── AudioContextHostObject.h │ │ │ │ │ ├── AudioNodeHostObject.cpp │ │ │ │ │ ├── AudioNodeHostObject.h │ │ │ │ │ ├── AudioParamHostObject.cpp │ │ │ │ │ ├── AudioParamHostObject.h │ │ │ │ │ ├── BaseAudioContextHostObject.cpp │ │ │ │ │ ├── BaseAudioContextHostObject.h │ │ │ │ │ ├── OfflineAudioContextHostObject.cpp │ │ │ │ │ ├── OfflineAudioContextHostObject.h │ │ │ │ │ ├── analysis/ │ │ │ │ │ │ ├── AnalyserNodeHostObject.cpp │ │ │ │ │ │ └── AnalyserNodeHostObject.h │ │ │ │ │ ├── destinations/ │ │ │ │ │ │ └── AudioDestinationNodeHostObject.h │ │ │ │ │ ├── effects/ │ │ │ │ │ │ ├── BiquadFilterNodeHostObject.cpp │ │ │ │ │ │ ├── BiquadFilterNodeHostObject.h │ │ │ │ │ │ ├── ConvolverNodeHostObject.cpp │ │ │ │ │ │ ├── ConvolverNodeHostObject.h │ │ │ │ │ │ ├── DelayNodeHostObject.cpp │ │ │ │ │ │ ├── DelayNodeHostObject.h │ │ │ │ │ │ ├── GainNodeHostObject.cpp │ │ │ │ │ │ ├── GainNodeHostObject.h │ │ │ │ │ │ ├── IIRFilterNodeHostObject.cpp │ │ │ │ │ │ ├── IIRFilterNodeHostObject.h │ │ │ │ │ │ ├── PeriodicWaveHostObject.h │ │ │ │ │ │ ├── StereoPannerNodeHostObject.cpp │ │ │ │ │ │ ├── StereoPannerNodeHostObject.h │ │ │ │ │ │ ├── WaveShaperNodeHostObject.cpp │ │ │ │ │ │ ├── WaveShaperNodeHostObject.h │ │ │ │ │ │ ├── WorkletNodeHostObject.h │ │ │ │ │ │ └── WorkletProcessingNodeHostObject.h │ │ │ │ │ ├── events/ │ │ │ │ │ │ ├── AudioEventHandlerRegistryHostObject.cpp │ │ │ │ │ │ └── AudioEventHandlerRegistryHostObject.h │ │ │ │ │ ├── inputs/ │ │ │ │ │ │ ├── AudioRecorderHostObject.cpp │ │ │ │ │ │ └── AudioRecorderHostObject.h │ │ │ │ │ ├── sources/ │ │ │ │ │ │ ├── AudioBufferBaseSourceNodeHostObject.cpp │ │ │ │ │ │ ├── AudioBufferBaseSourceNodeHostObject.h │ │ │ │ │ │ ├── AudioBufferHostObject.cpp │ │ │ │ │ │ ├── AudioBufferHostObject.h │ │ │ │ │ │ ├── AudioBufferQueueSourceNodeHostObject.cpp │ │ │ │ │ │ ├── AudioBufferQueueSourceNodeHostObject.h │ │ │ │ │ │ ├── AudioBufferSourceNodeHostObject.cpp │ │ │ │ │ │ ├── AudioBufferSourceNodeHostObject.h │ │ │ │ │ │ ├── AudioFileSourceNodeHostObject.cpp │ │ │ │ │ │ ├── AudioFileSourceNodeHostObject.h │ │ │ │ │ │ ├── AudioScheduledSourceNodeHostObject.cpp │ │ │ │ │ │ ├── AudioScheduledSourceNodeHostObject.h │ │ │ │ │ │ ├── ConstantSourceNodeHostObject.cpp │ │ │ │ │ │ ├── ConstantSourceNodeHostObject.h │ │ │ │ │ │ ├── OscillatorNodeHostObject.cpp │ │ │ │ │ │ ├── OscillatorNodeHostObject.h │ │ │ │ │ │ ├── RecorderAdapterNodeHostObject.h │ │ │ │ │ │ ├── StreamerNodeHostObject.h │ │ │ │ │ │ └── WorkletSourceNodeHostObject.h │ │ │ │ │ └── utils/ │ │ │ │ │ ├── AudioDecoderHostObject.cpp │ │ │ │ │ ├── AudioDecoderHostObject.h │ │ │ │ │ ├── AudioStretcherHostObject.cpp │ │ │ │ │ ├── AudioStretcherHostObject.h │ │ │ │ │ ├── JsEnumParser.cpp │ │ │ │ │ ├── JsEnumParser.h │ │ │ │ │ └── NodeOptionsParser.h │ │ │ │ ├── core/ │ │ │ │ │ ├── AudioContext.cpp │ │ │ │ │ ├── AudioContext.h │ │ │ │ │ ├── AudioNode.cpp │ │ │ │ │ ├── AudioNode.h │ │ │ │ │ ├── AudioParam.cpp │ │ │ │ │ ├── AudioParam.h │ │ │ │ │ ├── BaseAudioContext.cpp │ │ │ │ │ ├── BaseAudioContext.h │ │ │ │ │ ├── OfflineAudioContext.cpp │ │ │ │ │ ├── OfflineAudioContext.h │ │ │ │ │ ├── analysis/ │ │ │ │ │ │ ├── AnalyserNode.cpp │ │ │ │ │ │ └── AnalyserNode.h │ │ │ │ │ ├── destinations/ │ │ │ │ │ │ ├── AudioDestinationNode.cpp │ │ │ │ │ │ └── AudioDestinationNode.h │ │ │ │ │ ├── effects/ │ │ │ │ │ │ ├── BiquadFilterNode.cpp │ │ │ │ │ │ ├── BiquadFilterNode.h │ │ │ │ │ │ ├── ConvolverNode.cpp │ │ │ │ │ │ ├── ConvolverNode.h │ │ │ │ │ │ ├── DelayNode.cpp │ │ │ │ │ │ ├── DelayNode.h │ │ │ │ │ │ ├── GainNode.cpp │ │ │ │ │ │ ├── GainNode.h │ │ │ │ │ │ ├── IIRFilterNode.cpp │ │ │ │ │ │ ├── IIRFilterNode.h │ │ │ │ │ │ ├── PeriodicWave.cpp │ │ │ │ │ │ ├── PeriodicWave.h │ │ │ │ │ │ ├── StereoPannerNode.cpp │ │ │ │ │ │ ├── StereoPannerNode.h │ │ │ │ │ │ ├── WaveShaperNode.cpp │ │ │ │ │ │ ├── WaveShaperNode.h │ │ │ │ │ │ ├── WorkletNode.cpp │ │ │ │ │ │ ├── WorkletNode.h │ │ │ │ │ │ ├── WorkletProcessingNode.cpp │ │ │ │ │ │ └── WorkletProcessingNode.h │ │ │ │ │ ├── inputs/ │ │ │ │ │ │ ├── AudioRecorder.cpp │ │ │ │ │ │ └── AudioRecorder.h │ │ │ │ │ ├── sources/ │ │ │ │ │ │ ├── AudioBufferBaseSourceNode.cpp │ │ │ │ │ │ ├── AudioBufferBaseSourceNode.h │ │ │ │ │ │ ├── AudioBufferQueueSourceNode.cpp │ │ │ │ │ │ ├── AudioBufferQueueSourceNode.h │ │ │ │ │ │ ├── AudioBufferSourceNode.cpp │ │ │ │ │ │ ├── AudioBufferSourceNode.h │ │ │ │ │ │ ├── AudioFileSourceNode.cpp │ │ │ │ │ │ ├── AudioFileSourceNode.h │ │ │ │ │ │ ├── AudioScheduledSourceNode.cpp │ │ │ │ │ │ ├── AudioScheduledSourceNode.h │ │ │ │ │ │ ├── ConstantSourceNode.cpp │ │ │ │ │ │ ├── ConstantSourceNode.h │ │ │ │ │ │ ├── OscillatorNode.cpp │ │ │ │ │ │ ├── OscillatorNode.h │ │ │ │ │ │ ├── RecorderAdapterNode.cpp │ │ │ │ │ │ ├── RecorderAdapterNode.h │ │ │ │ │ │ ├── StreamerNode.cpp │ │ │ │ │ │ ├── StreamerNode.h │ │ │ │ │ │ ├── WorkletSourceNode.cpp │ │ │ │ │ │ └── WorkletSourceNode.h │ │ │ │ │ ├── types/ │ │ │ │ │ │ ├── AudioFormat.h │ │ │ │ │ │ ├── BiquadFilterType.h │ │ │ │ │ │ ├── ChannelCountMode.h │ │ │ │ │ │ ├── ChannelInterpretation.h │ │ │ │ │ │ ├── ContextState.h │ │ │ │ │ │ ├── OscillatorType.h │ │ │ │ │ │ ├── OverSampleType.h │ │ │ │ │ │ └── ParamEventType.h │ │ │ │ │ └── utils/ │ │ │ │ │ ├── AudioDecoder.cpp │ │ │ │ │ ├── AudioDecoder.h │ │ │ │ │ ├── AudioDestructor.hpp │ │ │ │ │ ├── AudioFileWriter.cpp │ │ │ │ │ ├── AudioFileWriter.h │ │ │ │ │ ├── AudioGraphManager.cpp │ │ │ │ │ ├── AudioGraphManager.h │ │ │ │ │ ├── AudioRecorderCallback.cpp │ │ │ │ │ ├── AudioRecorderCallback.h │ │ │ │ │ ├── AudioStretcher.cpp │ │ │ │ │ ├── AudioStretcher.h │ │ │ │ │ ├── Constants.h │ │ │ │ │ ├── Locker.h │ │ │ │ │ ├── RotatingFileWriter.cpp │ │ │ │ │ ├── RotatingFileWriter.h │ │ │ │ │ ├── graph/ │ │ │ │ │ │ ├── AudioGraph.hpp │ │ │ │ │ │ ├── Disposer.hpp │ │ │ │ │ │ ├── Graph.hpp │ │ │ │ │ │ ├── HostGraph.hpp │ │ │ │ │ │ ├── HostNode.hpp │ │ │ │ │ │ ├── InputPool.hpp │ │ │ │ │ │ ├── NodeHandle.hpp │ │ │ │ │ │ └── README.md │ │ │ │ │ ├── param/ │ │ │ │ │ │ ├── ParamControlQueue.cpp │ │ │ │ │ │ ├── ParamControlQueue.h │ │ │ │ │ │ ├── ParamEvent.h │ │ │ │ │ │ ├── ParamQueueBase.hpp │ │ │ │ │ │ ├── ParamRenderEventFactory.hpp │ │ │ │ │ │ ├── ParamRenderQueue.cpp │ │ │ │ │ │ ├── ParamRenderQueue.h │ │ │ │ │ │ └── RenderParamEvent.h │ │ │ │ │ └── worklets/ │ │ │ │ │ ├── SafeIncludes.h │ │ │ │ │ ├── WorkletsRunner.cpp │ │ │ │ │ └── WorkletsRunner.h │ │ │ │ ├── dsp/ │ │ │ │ │ ├── AudioUtils.hpp │ │ │ │ │ ├── Convolver.cpp │ │ │ │ │ ├── Convolver.h │ │ │ │ │ ├── FFT.cpp │ │ │ │ │ ├── FFT.h │ │ │ │ │ ├── VectorMath.cpp │ │ │ │ │ ├── VectorMath.h │ │ │ │ │ ├── WaveShaper.cpp │ │ │ │ │ ├── WaveShaper.h │ │ │ │ │ └── r8brain/ │ │ │ │ │ ├── CDSPBlockConvolver.h │ │ │ │ │ ├── CDSPFIRFilter.h │ │ │ │ │ ├── CDSPFracInterpolator.h │ │ │ │ │ ├── CDSPHBDownsampler.h │ │ │ │ │ ├── CDSPHBDownsampler.inc │ │ │ │ │ ├── CDSPHBUpsampler.h │ │ │ │ │ ├── CDSPHBUpsampler.inc │ │ │ │ │ ├── CDSPProcessor.h │ │ │ │ │ ├── CDSPRealFFT.h │ │ │ │ │ ├── CDSPResampler.h │ │ │ │ │ ├── CDSPSincFilterGen.h │ │ │ │ │ ├── Resampler.hpp │ │ │ │ │ ├── fft/ │ │ │ │ │ │ ├── fft4g.h │ │ │ │ │ │ ├── pffft.h │ │ │ │ │ │ ├── pffft_double.c │ │ │ │ │ │ ├── pffft_double.h │ │ │ │ │ │ ├── pffft_priv_impl.h │ │ │ │ │ │ └── simd/ │ │ │ │ │ │ ├── pf_avx_double.h │ │ │ │ │ │ ├── pf_double.h │ │ │ │ │ │ ├── pf_neon_double.h │ │ │ │ │ │ ├── pf_neon_double_from_avx.h │ │ │ │ │ │ ├── pf_scalar_double.h │ │ │ │ │ │ └── pf_sse2_double.h │ │ │ │ │ ├── r8bbase.h │ │ │ │ │ ├── r8bconf.h │ │ │ │ │ └── r8butil.h │ │ │ │ ├── events/ │ │ │ │ │ ├── AudioEvent.h │ │ │ │ │ ├── AudioEventHandlerRegistry.cpp │ │ │ │ │ ├── AudioEventHandlerRegistry.h │ │ │ │ │ └── IAudioEventHandlerRegistry.h │ │ │ │ ├── external/ │ │ │ │ │ ├── include/ │ │ │ │ │ │ ├── ogg/ │ │ │ │ │ │ │ ├── config_types.h │ │ │ │ │ │ │ ├── ogg.h │ │ │ │ │ │ │ └── os_types.h │ │ │ │ │ │ ├── opus/ │ │ │ │ │ │ │ ├── opus.h │ │ │ │ │ │ │ ├── opus_defines.h │ │ │ │ │ │ │ ├── opus_multistream.h │ │ │ │ │ │ │ ├── opus_projection.h │ │ │ │ │ │ │ └── opus_types.h │ │ │ │ │ │ ├── opusfile/ │ │ │ │ │ │ │ └── opusfile.h │ │ │ │ │ │ └── vorbis/ │ │ │ │ │ │ ├── codec.h │ │ │ │ │ │ ├── vorbisenc.h │ │ │ │ │ │ └── vorbisfile.h │ │ │ │ │ └── include_ffmpeg/ │ │ │ │ │ ├── libavcodec/ │ │ │ │ │ │ ├── ac3_parser.h │ │ │ │ │ │ ├── adts_parser.h │ │ │ │ │ │ ├── avcodec.h │ │ │ │ │ │ ├── avdct.h │ │ │ │ │ │ ├── bsf.h │ │ │ │ │ │ ├── codec.h │ │ │ │ │ │ ├── codec_desc.h │ │ │ │ │ │ ├── codec_id.h │ │ │ │ │ │ ├── codec_par.h │ │ │ │ │ │ ├── d3d11va.h │ │ │ │ │ │ ├── defs.h │ │ │ │ │ │ ├── dirac.h │ │ │ │ │ │ ├── dv_profile.h │ │ │ │ │ │ ├── dxva2.h │ │ │ │ │ │ ├── jni.h │ │ │ │ │ │ ├── mediacodec.h │ │ │ │ │ │ ├── packet.h │ │ │ │ │ │ ├── qsv.h │ │ │ │ │ │ ├── smpte_436m.h │ │ │ │ │ │ ├── vdpau.h │ │ │ │ │ │ ├── version.h │ │ │ │ │ │ ├── version_major.h │ │ │ │ │ │ ├── videotoolbox.h │ │ │ │ │ │ └── vorbis_parser.h │ │ │ │ │ ├── libavformat/ │ │ │ │ │ │ ├── avformat.h │ │ │ │ │ │ ├── avio.h │ │ │ │ │ │ ├── version.h │ │ │ │ │ │ └── version_major.h │ │ │ │ │ ├── libavutil/ │ │ │ │ │ │ ├── adler32.h │ │ │ │ │ │ ├── aes.h │ │ │ │ │ │ ├── aes_ctr.h │ │ │ │ │ │ ├── ambient_viewing_environment.h │ │ │ │ │ │ ├── attributes.h │ │ │ │ │ │ ├── audio_fifo.h │ │ │ │ │ │ ├── avassert.h │ │ │ │ │ │ ├── avconfig.h │ │ │ │ │ │ ├── avstring.h │ │ │ │ │ │ ├── avutil.h │ │ │ │ │ │ ├── base64.h │ │ │ │ │ │ ├── blowfish.h │ │ │ │ │ │ ├── bprint.h │ │ │ │ │ │ ├── bswap.h │ │ │ │ │ │ ├── buffer.h │ │ │ │ │ │ ├── camellia.h │ │ │ │ │ │ ├── cast5.h │ │ │ │ │ │ ├── channel_layout.h │ │ │ │ │ │ ├── common.h │ │ │ │ │ │ ├── container_fifo.h │ │ │ │ │ │ ├── cpu.h │ │ │ │ │ │ ├── crc.h │ │ │ │ │ │ ├── csp.h │ │ │ │ │ │ ├── des.h │ │ │ │ │ │ ├── detection_bbox.h │ │ │ │ │ │ ├── dict.h │ │ │ │ │ │ ├── display.h │ │ │ │ │ │ ├── dovi_meta.h │ │ │ │ │ │ ├── downmix_info.h │ │ │ │ │ │ ├── encryption_info.h │ │ │ │ │ │ ├── error.h │ │ │ │ │ │ ├── eval.h │ │ │ │ │ │ ├── executor.h │ │ │ │ │ │ ├── ffversion.h │ │ │ │ │ │ ├── fifo.h │ │ │ │ │ │ ├── file.h │ │ │ │ │ │ ├── film_grain_params.h │ │ │ │ │ │ ├── frame.h │ │ │ │ │ │ ├── hash.h │ │ │ │ │ │ ├── hdr_dynamic_metadata.h │ │ │ │ │ │ ├── hdr_dynamic_vivid_metadata.h │ │ │ │ │ │ ├── hmac.h │ │ │ │ │ │ ├── hwcontext.h │ │ │ │ │ │ ├── hwcontext_amf.h │ │ │ │ │ │ ├── hwcontext_cuda.h │ │ │ │ │ │ ├── hwcontext_d3d11va.h │ │ │ │ │ │ ├── hwcontext_d3d12va.h │ │ │ │ │ │ ├── hwcontext_drm.h │ │ │ │ │ │ ├── hwcontext_dxva2.h │ │ │ │ │ │ ├── hwcontext_mediacodec.h │ │ │ │ │ │ ├── hwcontext_oh.h │ │ │ │ │ │ ├── hwcontext_opencl.h │ │ │ │ │ │ ├── hwcontext_qsv.h │ │ │ │ │ │ ├── hwcontext_vaapi.h │ │ │ │ │ │ ├── hwcontext_vdpau.h │ │ │ │ │ │ ├── hwcontext_videotoolbox.h │ │ │ │ │ │ ├── hwcontext_vulkan.h │ │ │ │ │ │ ├── iamf.h │ │ │ │ │ │ ├── imgutils.h │ │ │ │ │ │ ├── intfloat.h │ │ │ │ │ │ ├── intreadwrite.h │ │ │ │ │ │ ├── lfg.h │ │ │ │ │ │ ├── log.h │ │ │ │ │ │ ├── lzo.h │ │ │ │ │ │ ├── macros.h │ │ │ │ │ │ ├── mastering_display_metadata.h │ │ │ │ │ │ ├── mathematics.h │ │ │ │ │ │ ├── md5.h │ │ │ │ │ │ ├── mem.h │ │ │ │ │ │ ├── motion_vector.h │ │ │ │ │ │ ├── murmur3.h │ │ │ │ │ │ ├── opt.h │ │ │ │ │ │ ├── parseutils.h │ │ │ │ │ │ ├── pixdesc.h │ │ │ │ │ │ ├── pixelutils.h │ │ │ │ │ │ ├── pixfmt.h │ │ │ │ │ │ ├── random_seed.h │ │ │ │ │ │ ├── rational.h │ │ │ │ │ │ ├── rc4.h │ │ │ │ │ │ ├── refstruct.h │ │ │ │ │ │ ├── replaygain.h │ │ │ │ │ │ ├── ripemd.h │ │ │ │ │ │ ├── samplefmt.h │ │ │ │ │ │ ├── sha.h │ │ │ │ │ │ ├── sha512.h │ │ │ │ │ │ ├── spherical.h │ │ │ │ │ │ ├── stereo3d.h │ │ │ │ │ │ ├── tdrdi.h │ │ │ │ │ │ ├── tea.h │ │ │ │ │ │ ├── threadmessage.h │ │ │ │ │ │ ├── timecode.h │ │ │ │ │ │ ├── timestamp.h │ │ │ │ │ │ ├── tree.h │ │ │ │ │ │ ├── twofish.h │ │ │ │ │ │ ├── tx.h │ │ │ │ │ │ ├── uuid.h │ │ │ │ │ │ ├── version.h │ │ │ │ │ │ ├── video_enc_params.h │ │ │ │ │ │ ├── video_hint.h │ │ │ │ │ │ └── xtea.h │ │ │ │ │ └── libswresample/ │ │ │ │ │ ├── swresample.h │ │ │ │ │ ├── version.h │ │ │ │ │ └── version_major.h │ │ │ │ ├── jsi/ │ │ │ │ │ ├── JsiHostObject.cpp │ │ │ │ │ ├── JsiHostObject.h │ │ │ │ │ ├── JsiPromise.cpp │ │ │ │ │ ├── JsiPromise.h │ │ │ │ │ ├── JsiUtils.cpp │ │ │ │ │ ├── JsiUtils.h │ │ │ │ │ ├── RuntimeAwareCache.h │ │ │ │ │ ├── RuntimeLifecycleMonitor.cpp │ │ │ │ │ └── RuntimeLifecycleMonitor.h │ │ │ │ ├── libs/ │ │ │ │ │ ├── audio-stretch/ │ │ │ │ │ │ ├── stretch.c │ │ │ │ │ │ └── stretch.h │ │ │ │ │ ├── base64/ │ │ │ │ │ │ └── base64.h │ │ │ │ │ ├── decoding/ │ │ │ │ │ │ └── IncrementalAudioDecoder.h │ │ │ │ │ ├── ffmpeg/ │ │ │ │ │ │ ├── FFmpegDecoding.cpp │ │ │ │ │ │ ├── FFmpegDecoding.h │ │ │ │ │ │ └── relinking.md │ │ │ │ │ ├── miniaudio/ │ │ │ │ │ │ ├── MiniAudioDecoding.cpp │ │ │ │ │ │ ├── MiniAudioDecoding.h │ │ │ │ │ │ ├── decoders/ │ │ │ │ │ │ │ ├── libopus/ │ │ │ │ │ │ │ │ ├── miniaudio_libopus.c │ │ │ │ │ │ │ │ └── miniaudio_libopus.h │ │ │ │ │ │ │ └── libvorbis/ │ │ │ │ │ │ │ ├── miniaudio_libvorbis.c │ │ │ │ │ │ │ └── miniaudio_libvorbis.h │ │ │ │ │ │ └── miniaudio.h │ │ │ │ │ ├── pffft/ │ │ │ │ │ │ ├── pffft.c │ │ │ │ │ │ └── pffft.h │ │ │ │ │ └── signalsmith-stretch/ │ │ │ │ │ ├── fft-pffft.h │ │ │ │ │ ├── fft.h │ │ │ │ │ ├── signalsmith-stretch.h │ │ │ │ │ └── stft.h │ │ │ │ ├── types/ │ │ │ │ │ └── NodeOptions.h │ │ │ │ └── utils/ │ │ │ │ ├── AlignedAllocator.hpp │ │ │ │ ├── AudioArray.hpp │ │ │ │ ├── AudioArrayBuffer.hpp │ │ │ │ ├── AudioBuffer.hpp │ │ │ │ ├── AudioFileProperties.cpp │ │ │ │ ├── AudioFileProperties.h │ │ │ │ ├── Benchmark.hpp │ │ │ │ ├── BoundedPriorityQueue.hpp │ │ │ │ ├── CircularArray.hpp │ │ │ │ ├── CircularOverflowableAudioArray.cpp │ │ │ │ ├── CircularOverflowableAudioArray.h │ │ │ │ ├── CrossThreadEventScheduler.hpp │ │ │ │ ├── FatFunction.hpp │ │ │ │ ├── Macros.h │ │ │ │ ├── MiniaudioImplementation.cpp │ │ │ │ ├── MoveOnlyFunction.hpp │ │ │ │ ├── Result.hpp │ │ │ │ ├── SpscChannel.hpp │ │ │ │ ├── TaskOffloader.hpp │ │ │ │ ├── ThreadPool.hpp │ │ │ │ ├── TripleBuffer.hpp │ │ │ │ └── UnitConversion.h │ │ │ ├── clangd/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── SETUP.md │ │ │ │ └── generate-and-copy.sh │ │ │ └── test/ │ │ │ ├── CMakeLists.txt │ │ │ ├── Dockerfile │ │ │ ├── RunTests.sh │ │ │ ├── RunTestsGraph.sh │ │ │ ├── RunTestsGraphDocker.sh │ │ │ ├── graph_tests_docs.md │ │ │ └── src/ │ │ │ ├── FatFunctionTest.cpp │ │ │ ├── MockAudioEventHandlerRegistry.h │ │ │ ├── core/ │ │ │ │ ├── AudioParamTest.cpp │ │ │ │ ├── effects/ │ │ │ │ │ ├── DelayTest.cpp │ │ │ │ │ ├── GainTest.cpp │ │ │ │ │ ├── IIRFilterTest.cpp │ │ │ │ │ ├── StereoPannerTest.cpp │ │ │ │ │ ├── WaveShaperNodeTest.cpp │ │ │ │ │ └── biquad/ │ │ │ │ │ ├── BiquadFilterChromium.cpp │ │ │ │ │ ├── BiquadFilterChromium.h │ │ │ │ │ ├── BiquadFilterTest.cpp │ │ │ │ │ └── BiquadFilterTest.h │ │ │ │ └── sources/ │ │ │ │ ├── AudioScheduledSourceTest.cpp │ │ │ │ ├── ConstantSourceTest.cpp │ │ │ │ └── OscillatorTest.cpp │ │ │ ├── graph/ │ │ │ │ ├── AudioGraphFuzzTest.cpp │ │ │ │ ├── AudioGraphTest.cpp │ │ │ │ ├── AudioThreadGuard.cpp │ │ │ │ ├── AudioThreadGuard.h │ │ │ │ ├── GraphCycleDebugTest.cpp │ │ │ │ ├── GraphFuzzTest.cpp │ │ │ │ ├── GraphTest.cpp │ │ │ │ ├── HostGraphTest.cpp │ │ │ │ ├── MockGraphProcessor.h │ │ │ │ ├── TestGraphUtils.cpp │ │ │ │ └── TestGraphUtils.h │ │ │ └── utils/ │ │ │ ├── AudioArrayTest.cpp │ │ │ ├── AudioBufferTest.cpp │ │ │ └── TripleBufferTest.cpp │ │ ├── development/ │ │ │ └── react/ │ │ │ └── package.json │ │ ├── ios/ │ │ │ └── audioapi/ │ │ │ └── ios/ │ │ │ ├── AudioAPIModule.h │ │ │ ├── AudioAPIModule.mm │ │ │ ├── core/ │ │ │ │ ├── IOSAudioPlayer.h │ │ │ │ ├── IOSAudioPlayer.mm │ │ │ │ ├── IOSAudioRecorder.h │ │ │ │ ├── IOSAudioRecorder.mm │ │ │ │ ├── NativeAudioPlayer.h │ │ │ │ ├── NativeAudioPlayer.m │ │ │ │ ├── NativeAudioRecorder.h │ │ │ │ ├── NativeAudioRecorder.m │ │ │ │ └── utils/ │ │ │ │ ├── FileOptions.h │ │ │ │ ├── FileOptions.mm │ │ │ │ ├── IOSFileWriter.h │ │ │ │ ├── IOSFileWriter.mm │ │ │ │ ├── IOSRecorderCallback.h │ │ │ │ ├── IOSRecorderCallback.mm │ │ │ │ ├── IOSRotatingFileWriter.h │ │ │ │ └── IOSRotatingFileWriter.mm │ │ │ └── system/ │ │ │ ├── AudioEngine.h │ │ │ ├── AudioEngine.mm │ │ │ ├── AudioSessionManager.h │ │ │ ├── AudioSessionManager.mm │ │ │ ├── SystemNotificationManager.h │ │ │ ├── SystemNotificationManager.mm │ │ │ └── notification/ │ │ │ ├── BaseNotification.h │ │ │ ├── NotificationRegistry.h │ │ │ ├── NotificationRegistry.mm │ │ │ ├── PlaybackNotification.h │ │ │ └── PlaybackNotification.mm │ │ ├── mock/ │ │ │ └── package.json │ │ ├── package.json │ │ ├── scripts/ │ │ │ ├── check-audio-events-sync.sh │ │ │ ├── cpplint.sh │ │ │ ├── create-package.sh │ │ │ ├── download-prebuilt-binaries.sh │ │ │ ├── rnaa_utils.rb │ │ │ ├── setup-rn-audio-api-web.js │ │ │ └── validate-worklets-version.js │ │ ├── src/ │ │ │ ├── AudioAPIModule/ │ │ │ │ ├── AudioAPIModule.ts │ │ │ │ ├── AudioAPIModule.web.ts │ │ │ │ ├── ModuleInterfaces.ts │ │ │ │ ├── globals.d.ts │ │ │ │ └── index.ts │ │ │ ├── api.ts │ │ │ ├── api.web.ts │ │ │ ├── core/ │ │ │ │ ├── AnalyserNode.ts │ │ │ │ ├── AudioBuffer.ts │ │ │ │ ├── AudioBufferBaseSourceNode.ts │ │ │ │ ├── AudioBufferQueueSourceNode.ts │ │ │ │ ├── AudioBufferSourceNode.ts │ │ │ │ ├── AudioContext.ts │ │ │ │ ├── AudioDecoder.ts │ │ │ │ ├── AudioDestinationNode.ts │ │ │ │ ├── AudioNode.ts │ │ │ │ ├── AudioParam.ts │ │ │ │ ├── AudioRecorder.ts │ │ │ │ ├── AudioScheduledSourceNode.ts │ │ │ │ ├── AudioStretcher.ts │ │ │ │ ├── BaseAudioContext.ts │ │ │ │ ├── BiquadFilterNode.ts │ │ │ │ ├── ConstantSourceNode.ts │ │ │ │ ├── ConvolverNode.ts │ │ │ │ ├── DelayNode.ts │ │ │ │ ├── GainNode.ts │ │ │ │ ├── IIRFilterNode.ts │ │ │ │ ├── OfflineAudioContext.ts │ │ │ │ ├── OscillatorNode.ts │ │ │ │ ├── PeriodicWave.ts │ │ │ │ ├── RecorderAdapterNode.ts │ │ │ │ ├── StereoPannerNode.ts │ │ │ │ ├── StreamerNode.ts │ │ │ │ ├── WaveShaperNode.ts │ │ │ │ ├── WorkletNode.ts │ │ │ │ ├── WorkletProcessingNode.ts │ │ │ │ └── WorkletSourceNode.ts │ │ │ ├── development/ │ │ │ │ └── react/ │ │ │ │ ├── Audio/ │ │ │ │ │ ├── Audio.tsx │ │ │ │ │ ├── Audio.web.tsx │ │ │ │ │ ├── AudioFileSourceNode.ts │ │ │ │ │ ├── AudioTagContext.ts │ │ │ │ │ ├── controls/ │ │ │ │ │ │ ├── AudioControls.tsx │ │ │ │ │ │ └── audioControlUtils.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.d.ts │ │ │ ├── errors/ │ │ │ │ ├── AudioApiError.ts │ │ │ │ ├── IndexSizeError.ts │ │ │ │ ├── InvalidAccessError.ts │ │ │ │ ├── InvalidStateError.ts │ │ │ │ ├── NotSupportedError.ts │ │ │ │ ├── RangeError.ts │ │ │ │ └── index.ts │ │ │ ├── events/ │ │ │ │ ├── AudioEventEmitter.ts │ │ │ │ ├── AudioEventSubscription.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── hooks/ │ │ │ │ ├── index.ts │ │ │ │ ├── useAudioInput.ts │ │ │ │ └── useSystemVolume.ts │ │ │ ├── index.ts │ │ │ ├── interfaces.ts │ │ │ ├── mock/ │ │ │ │ └── index.ts │ │ │ ├── options-validators.ts │ │ │ ├── plugin/ │ │ │ │ └── withAudioAPI.ts │ │ │ ├── specs/ │ │ │ │ ├── NativeAudioAPIModule.ts │ │ │ │ ├── NativeAudioAPIModule.web.ts │ │ │ │ └── index.ts │ │ │ ├── system/ │ │ │ │ ├── AudioManager.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── index.ts │ │ │ │ ├── notification/ │ │ │ │ │ ├── PlaybackNotificationManager.ts │ │ │ │ │ ├── RecordingNotificationManager.ios.ts │ │ │ │ │ ├── RecordingNotificationManager.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── types.ts │ │ │ ├── types.ts │ │ │ ├── utils/ │ │ │ │ ├── filePresets.ts │ │ │ │ ├── index.ts │ │ │ │ └── paths.ts │ │ │ ├── web-core/ │ │ │ │ ├── AnalyserNode.tsx │ │ │ │ ├── AudioBuffer.tsx │ │ │ │ ├── AudioBufferSourceNode.tsx │ │ │ │ ├── AudioContext.tsx │ │ │ │ ├── AudioDestinationNode.tsx │ │ │ │ ├── AudioNode.tsx │ │ │ │ ├── AudioParam.tsx │ │ │ │ ├── AudioScheduledSourceNode.tsx │ │ │ │ ├── BaseAudioContext.tsx │ │ │ │ ├── BiquadFilterNode.tsx │ │ │ │ ├── ConstantSourceNode.tsx │ │ │ │ ├── ConvolverNode.tsx │ │ │ │ ├── ConvolverNodeOptions.tsx │ │ │ │ ├── DelayNode.tsx │ │ │ │ ├── GainNode.tsx │ │ │ │ ├── IIRFilterNode.tsx │ │ │ │ ├── OfflineAudioContext.tsx │ │ │ │ ├── OscillatorNode.tsx │ │ │ │ ├── PeriodicWave.tsx │ │ │ │ ├── StereoPannerNode.tsx │ │ │ │ ├── WaveShaperNode.tsx │ │ │ │ └── custom/ │ │ │ │ ├── LoadCustomWasm.ts │ │ │ │ ├── index.ts │ │ │ │ └── signalsmithStretch/ │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── README.md │ │ │ │ └── SignalsmithStretch.mjs │ │ │ └── web-system/ │ │ │ ├── AudioManager.ts │ │ │ ├── index.ts │ │ │ └── notification/ │ │ │ ├── PlaybackNotificationManager.ts │ │ │ ├── RecordingNotificationManager.ts │ │ │ └── index.ts │ │ ├── tests/ │ │ │ ├── CLAUDE.md │ │ │ ├── integration.test.ts │ │ │ ├── jest.config.json │ │ │ ├── mock.test.ts │ │ │ └── setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.test.json │ │ └── turbo.json │ └── test-app-screen/ │ ├── .gitignore │ ├── index.ts │ ├── package.json │ ├── src/ │ │ ├── AudioBufferTest.ts │ │ ├── OscillatorTest.ts │ │ ├── RecorderTest.ts │ │ ├── StreamingTest.ts │ │ ├── Test.tsx │ │ ├── WorkletsTest.ts │ │ └── constants.ts │ └── tsconfig.json ├── prettier.config.js ├── scripts/ │ └── collect-knowledge-changes.sh └── tsconfig.json