Skip to content

FCE-3503: Local audio extraction#60

Merged
MiloszFilimowski merged 3 commits into
masterfrom
add-local-audio-input
Jun 29, 2026
Merged

FCE-3503: Local audio extraction#60
MiloszFilimowski merged 3 commits into
masterfrom
add-local-audio-input

Conversation

@MiloszFilimowski

@MiloszFilimowski MiloszFilimowski commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Description

  • Local audio extraction: extract raw audio from local tracks to JS, mirroring the existing remote-audio path.
    • Android: new AudioExtractionController encapsulating extraction logic, with WebRTCModule slimmed down to delegate to it.
    • iOS: extended WebRTCModule+AudioSink.mm to support local audio sinks/extraction.
  • CI fix (ios_ci.yml): pin the iOS job to Xcode 26.3. The macos-26 runner's new default Xcode 26.5 fails to compile RN 0.71.4's bundled Yoga log.cpp; 26.3 (also on the image) builds cleanly.

Motivation and Context

Enables consuming local microphone audio from JS, completing the audio-extraction feature (FCE-3503). The CI pin unbreaks the iOS compile job, which was failing on master after a GitHub runner Xcode bump.

Documentation impact

  • Documentation update required
  • Documentation updated in another PR
  • No documentation update required

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to
    not work as expected)

@linear

linear Bot commented Jun 24, 2026

Copy link
Copy Markdown

FCE-3503

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds “local microphone” audio extraction to the existing audio-sink pipeline so JS can receive raw audio from local tracks, and updates iOS CI to work around an Xcode toolchain regression affecting RN 0.71.4.

Changes:

  • iOS: extend WebRTCModule+AudioSink to support local extraction via a shared AVAudioEngine input tap, alongside existing remote track extraction.
  • Android: introduce AudioExtractionController to centralize remote + local extraction logic; WebRTCModule delegates to it and wires the local mic path via JavaAudioDeviceModule’s samples-ready callback.
  • CI: attempt to pin the iOS workflow to Xcode 26.3 to restore buildability on updated GitHub macOS runners.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
ios/RCTWebRTC/WebRTCModule+AudioSink.mm Adds local mic audio extraction path (AVAudioEngine tap) and refactors extraction entrypoints to route local vs remote.
android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java Delegates audio extraction to a new controller and wires local mic callback into the ADM builder.
android/src/main/java/com/oney/WebRTCModule/AudioExtractionController.java New controller implementing local + remote extraction, JSI installer lifecycle, and option parsing.
.github/workflows/ios_ci.yml Adds an Xcode selection step intended to pin the build to Xcode 26.3.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ios/RCTWebRTC/WebRTCModule+AudioSink.mm
Comment thread .github/workflows/ios_ci.yml

@Magmusacy Magmusacy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good at a high level, I would just take a look at those 2 comments form copilot I left unresolved because they seem like cheap fixes

@MiloszFilimowski MiloszFilimowski merged commit 2950203 into master Jun 29, 2026
8 checks passed
@MiloszFilimowski MiloszFilimowski deleted the add-local-audio-input branch June 29, 2026 10:07
MiloszFilimowski added a commit that referenced this pull request Jul 7, 2026
Resolve conflicts in src/index.ts (dedupe audio-extraction exports that
landed on master via #60, keep custom-video-track exports alphabetized)
and WebRTCModule.java (drop MA_MAX_FILTER_ORDER, now owned by
AudioExtractionController on master).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants