Dive into the technical aspects of audio on your device, including codecs, format support, and customization options.

Audio Documentation

Posts under Audio subtopic

Post

Replies

Boosts

Views

Activity

_MPRemoteCommandEventDispatch crashes on iOS 26.x devices.
I'm seeing crashes in _MPRemoteCommandEventDispatch on iOS 26.x devices in 3 apps. According to Bugsnag logs they are: NSInternalInconsistencyException: event dispatch <_MPRemoteCommandEventDispatch: <MPRemoteCommandEvent: 0x11c049500 commandID=THV0 command=<MPRemoteCommand: 0x109ad1ea0 type=Play (0) enabled=YES handlers=[0x109b6a310]> sourceID=(null) ([HostedRoutingSessionDataSource] handleControlSendingCommand<2W5E>)> state:201> deallocated without calling continuation I attached a log from Xcode organizer matching Bugsnag crash. mpr_remote_command_event.crash When I set the brakpoint on the -[_MPRemoteCommandEventDispatch dealloc] I can see it it's hit every time I tap play or pause on locked screen play button. Thread 0 Crashed: 0 libsystem_kernel.dylib 0x00000002370420cc __pthread_kill + 8 (:-1) 1 libsystem_pthread.dylib 0x00000001e975c810 pthread_kill + 268 (pthread.c:1721) 2 libsystem_c.dylib 0x0000000198f8ff64 abort + 124 (abort.c:122) 3 libc++abi.dylib 0x000000018a7cf808 __abort_message + 132 (abort_message.cpp:66) 4 libc++abi.dylib 0x000000018a7be484 demangling_terminate_handler() + 304 (cxa_default_handlers.cpp:76) 5 libobjc.A.dylib 0x000000018a6cff78 _objc_terminate() + 156 (objc-exception.mm:496) 6 xxxxxxxxxxxxxx 0x00000001003a7db8 CPPExceptionTerminate() + 416 (BSG_KSCrashSentry_CPPException.mm:156) 7 libc++abi.dylib 0x000000018a7cebdc std::__terminate(void (*)()) + 16 (cxa_handlers.cpp:59) 8 libc++abi.dylib 0x000000018a7ceb80 std::terminate() + 108 (cxa_handlers.cpp:88) 9 CoreFoundation 0x000000018d7341c4 __CFRunLoopPerCalloutARPEnd + 256 (CFRunLoop.c:769) 10 CoreFoundation 0x000000018d70bb5c __CFRunLoopRun + 1976 (CFRunLoop.c:3179) 11 CoreFoundation 0x000000018d70aa6c _CFRunLoopRunSpecificWithOptions + 532 (CFRunLoop.c:3462) 12 GraphicsServices 0x000000022e31c498 GSEventRunModal + 120 (GSEvent.c:2049) 13 UIKitCore 0x00000001930ceba4 -[UIApplication _run] + 792 (UIApplication.m:3902) 14 UIKitCore 0x0000000193077a78 UIApplicationMain + 336 (UIApplication.m:5577) 15 xxxxxxxxxxxxxx 0x00000001000c0134 main + 308 (main.swift:15) 16 dyld 0x000000018a722e28 start + 7116 (dyldMain.cpp:1477) Is the crash happening when the app is being terminated? Thank you!
8
3
1.7k
8h
Can an iOS app analyze audio being played by another app?
Hello, I'm in the early planning stages of an iOS app and I'm trying to determine what's technically possible before designing around assumptions. Is it possible for a third-party iOS app, with the user's permission, to access or analyze audio that is being played by another app (for example Apple Podcasts, Spotify, Audible, or YouTube) in real time? Or is microphone input the only supported way for an app to analyze audio that is audible in the user's environment? I'm not asking about recording the screen or capturing video. I'm specifically trying to understand whether another app's audio output is ever available to third-party apps, or whether iOS intentionally isolates apps from each other's audio. If the answer depends on the audio source (for example Apple Podcasts versus Spotify versus audio coming through the microphone), I'd appreciate understanding those distinctions as well. Thank you.
0
0
90
4d
CarPlay audio continues playing for approximately one second after the music is paused.
When my app is connected to CarPlay and music is playing, pausing playback from the device updates the playback state immediately. However, the audio continues to play for approximately one second before stopping. This issue only occurs with wireless CarPlay; playback pauses immediately with wired CarPlay. Is this expected behavior?
0
0
49
5d
MusicKit JS authorize() returns AUTHORIZATION_ERROR "Unauthorized" (no Music User Token) — catalog works
Hi all — hoping someone has hit this. Our MusicKit JS (v3) web app calls authorize() and it rejects with AUTHORIZATION_ERROR / "Unauthorized" (no Music User Token is issued), even though the same developer token returns HTTP 200 for catalog requests (/v1/catalog/us/search) — so the token itself is valid. Setup (all verified): MusicKit JS v3 from js-cdn.music.apple.com/musickit/v3/musickit.js; MusicKit.configure() succeeds, storefront resolves to "us". Developer token is ES256, valid, and includes the origin claim for our exact site origin. Our MusicKit key is enabled for Media Services and tied to a Media ID that has MusicKit enabled. Referrer-Policy: strict-origin-when-cross-origin. Repro: sign in with an active Apple Music subscriber and tap Allow -> authorize() rejects. Reproduces for two subscriber Apple IDs, in Chrome and Edge, with third-party cookies allowed. Error object: { name: "AUTHORIZATION_ERROR", message: "Unauthorized", isMKError: true }, thrown inside musickit.js during the authorize() flow. The served MusicKit build is a prerelease (3.2526.0-prerelease.x). We've ruled out the usual suspects on our side (origin claim, referrer policy, token validity, API version, cookies, and portal provisioning). Has anyone resolved this, or is there an additional server-side enablement needed for a team/Media ID to issue web user tokens? Also filed as FB23587284. Thanks!
1
0
122
1w
AVPlayer Reverse Audio Scrubbing?
Hey all, here seeking some perspective. I have an audio player app on macOS built on top of AVPlayer, I want to add the ability to scrub the audio, and hear the audio frames based on the playhead's position whether going forwards or backwards. When going backwards, the audio frame should be played in reverse as well. The audio tracks live online and are streamed. I tried playing with AVPlayer.rate, but the time pitch algos built in (.spectral, .varispeed, .timeDomain) all only guarantee up to 32x rate decoding accuracy. So technically, if the user scrubs fast enough, the audio rendered would not necessarily match the playhead's position. My current solution that works is to cache the raw audio bytes and play the appropriate frame when the user starts scrubbing. I decode the audio data manually using AudioToolbox's AudioFileOpenWithCallbacks into an AVAudioPCMBuffer, then pass it into AVAudioEngine+AVAudioPlayerNode combo. The problem with that is that means I need to cache this audio data myself (remember this is a stream), and since I don't have access to AVPlayer's own cache I need to also download it myself... which means two downloads for the same track which is less than ideal. This lead me to take it a step further and hijack AVPlayer's download process by implementing AVAssetResourceLoaderDelegate, that way AVPlayer and my audio scrubbing cache are both fed from the same source. Now... I feel like I went down a bit of a rabbit hole here. At the end of the day I simply want accurate audio scrubbing in both directions, while keeping in mind I want the audio snippets to play in reverse when the user goes backwards. Is there really no way to do this that's more "vanilla"? Am I missing something obvious? Genuinely open to any and all suggestions. Thanks.
0
0
151
1w
Is preview-only playback (no user authentication) permitted for a web game?
I'm building a free web-based music trivia game (guess the release year of a song). I'd like to use the Apple Music API in the following way and want to confirm it complies with the Apple Music API / MusicKit terms: The app requests only 30-second preview clips (previews[].url from the Catalog API), played through a standard HTML element. No user ever signs in with an Apple ID — there is no Music User Token; only my developer token is used, server-side, to query the catalog. The app is free, does not gate playback behind any payment, and displays "Music previews via Apple Music" attribution. Full-track playback and user subscriptions are not used at all. The Apple Music API terms describe the purpose as facilitating access to end users' Apple Music subscriptions — since a preview-only integration never touches a subscription, I want to make sure this usage is sanctioned before launching publicly. Is preview-only, unauthenticated playback of catalog previews permitted in this scenario?
0
0
148
1w
CarPlay: iPhone media does not reliably resume after short SFSpeechRecognizer capture with AVAudioSession record/measurement
Post Title: CarPlay: iPhone-origin media does not reliably resume after short SFSpeechRecognizer capture Post Body: We are testing short, user-initiated speech recognition in a CarPlay driving-task app. The capture is started by an explicit button tap, lasts up to about 4 seconds, and uses SFSpeechRecognizer, SFSpeechAudioBufferRecognitionRequest, and AVAudioEngine. There is no wake word, no continuous recording, and no background listening. Test setup: iPhone: iPhone 17 iOS: 26.5.2 CarPlay: wireless Vehicle / head unit: Volkswagen Discover Media Also tested in a second vehicle with wireless CarPlay Media tested: Apple Music and online radio through CarPlay Also tested: vehicle DAB+ / normal car radio Observed behavior: Native speech recognition succeeds. Speech is recognized correctly. There is no loud playback through the vehicle speakers. During the short capture, the audio route changes to CarPlay / CarAudio input. After capture, vehicle DAB+ / normal car radio resumes correctly. iPhone-origin media, including Apple Music and online radio apps playing through CarPlay, does not reliably resume. In Apple Music, playback may appear to advance or change tracks, but no audio is actually played until the user intervenes. Online radio through CarPlay remains stopped after capture. This behavior was reproduced in two vehicles with wireless CarPlay. Current AVAudioSession configuration during capture: category: AVAudioSession.Category.record mode: AVAudioSession.Mode.measurement options: [.mixWithOthers] During capture, diagnostics show approximately: category: AVAudioSessionCategoryRecord mode: AVAudioSessionModeMeasurement inputNumberOfChannels: 1 outputNumberOfChannels: 0 currentRoute.inputs: CarPlay / CarAudio currentRoute.outputs: none After capture, the app stops and releases audio resources: Stops AVAudioEngine Removes the input tap Ends the recognition request Cancels the recognition task Calls setActive(false, options: [.notifyOthersOnDeactivation]) Restores a passive configuration using .ambient / .default Relevant Swift extract: try session.setCategory( .record, mode: .measurement, options: [.mixWithOthers] ) try session.setActive(true, options: []) if audioEngine.isRunning { audioEngine.stop() } audioEngine.inputNode.removeTap(onBus: 0) recognitionRequest?.endAudio() recognitionRequest = nil recognitionTask?.cancel() recognitionTask = nil try session.setActive( false, options: [.notifyOthersOnDeactivation] ) try session.setCategory(.ambient, mode: .default, options: []) Primary question: Is there a supported AVAudioSession / CarPlay / Speech configuration for short, user-initiated speech recognition in a CarPlay driving-task app that reliably allows previous iPhone-origin CarPlay media playback to resume after capture? Additional question: Is it expected that vehicle DAB+ / normal radio resumes correctly while iPhone-origin CarPlay media does not reliably resume after the same short recording session? Any guidance on the supported approach would be appreciated. Best regards, Guido
0
0
135
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). We also found two existing threads describing what looks like the same symptom: https://developer.apple.com/forums/thread/834950 https://developer.apple.com/forums/thread/808072 Both of those are PushToTalk apps where the system activates the audio session, and an Apple engineer notes it may be related to a CallKit issue (r.157725305). For context on our side: we do use CallKit, but only CXCallObserver — purely to detect whether a phone call comes in while a recording is in progress, so we can pause and resume around it. We do not use CXProvider or PushToTalk, and we activate our own AVAudioSession ourselves with setActive(true). I'm trying to understand whether there are other scenarios or device states that could leave a running AVAudioEngine tap returning all-zero buffers like this, and whether this is the same underlying CallKit issue (r.157725305) from those threads . And since nothing throws an error, any guidance on how to detect this at runtime and recover from it would be really helpful.
0
0
147
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). Questions: What other device states or scenarios can cause a running AVAudioEngine input tap to deliver all-zero buffers with a valid format and no error? (e.g. another process/system feature holding the mic, Continuity Camera/Mic, CallKit/PushToTalk session ownership, etc.) Since this surfaces with no error and a valid format, what is the recommended way to detect it at runtime? Is monitoring the input level / PCM energy the only signal, or is there a supported API to know the input isn't actually live? What's the recommended recovery once detected — is a full session deactivate/reactivate re-handshake sufficient, or is recreating the engine required?
1
0
156
2w
AUv3 extension icon cannot be resolved on one iPad across all host applications
I am developing an iOS/iPadOS application containing an AUv3 Audio Unit extension. The standalone application icon displays correctly on the affected iPad. However, the AUv3 extension icon is not displayed correctly by any tested host on that device: AUM displays a red-X placeholder icon. Cubasis displays a small generic Swift-style placeholder icon. apeMatrix displays a generic AUv3 placeholder icon. The same TestFlight build displays the correct AUv3 icon on another iPad, and the icon also displays correctly on my iPhone. This therefore appears to be device-specific AUv3 extension icon registration or resolution failure rather than missing icon artwork in the submitted application. Troubleshooting already performed: Deleted and reinstalled the application. Deleted and reinstalled host applications. Restarted the iPad. Installed both local development and TestFlight builds. Confirmed the AUv3 extension contains its compiled asset catalog and icon metadata. Renamed the primary icon set from AppIcon to AppIconV2 and verified that both generated bundles used AppIconV2. Temporarily changed the AudioComponent subtype from Vped to Vpe2 and verified the generated extension plist contained Vpe2. Installed the newly identified component successfully. The AUv3 icon still failed in every tested host. The unchanged TestFlight build displays correctly on another iPad. Expected result: The AUv3 extension icon should display consistently in host applications, as it does on the comparison iPad and iPhone. Actual result: Every host on the affected iPad receives or displays a fallback placeholder instead of the AUv3 extension icon. TLDR - The key questions: Is there is a supported way to rebuild or clear the iPadOS AUv3 extension registration database without erasing the device? Is there any useful information available on Audio Unit extension registration, LaunchServices/icon-services database, or related iPadOS component-icon resolution on an affected device? Thanks.
1
0
322
2w
Channel Mapping with AUHAL
Hi, our Mac app uses AUHAL for audio output. The data we’re playing has channels laid out in the WAVE default ordering (this is the same order as Core Audio’s AudioChannelBitmap). Playing this data usually results in the correct channel playing through the correct speaker, but there are cases where it does not: Outputting audio over HDMI usually results in the Center and LFE channels being swapped Or “Configure Speakers” in Audio MIDI Setup.app can be used to change the speaker<->channel mapping (i.e. even swapping L/R on a 2ch stereo setup), but this does not affect our app’s audio I’ve found that getting kAudioUnitProperty_AudioChannelLayout on an output unit returns the speaker<->channel mapping as set up in Audio MIDI Setup (i.e. it shows that Center/LFE swap, or if L/R are swapped). My question: is it possible to have Core Audio do the channel remapping between the WAVE default ordering, and the speaker<->channel mapping as returned by kAudioUnitProperty_AudioChannelLayout? I have tried setting kAudioUnitProperty_AudioChannelLayout on the input unit, and didn’t see a change. I’ve also tried to set kAudioOutputUnitProperty_ChannelMap on the output unit but cannot get it to work. Or do I need to remap the channels myself before giving samples to Core Audio?
6
0
437
2w
AVAudioSession microphone recording changes Bluetooth audio route in vehicle
Title AVAudioSession microphone recording changes Bluetooth audio route in vehicle Hi everyone, I’m developing an iOS app called HearSave to help drivers safely remember and save songs they hear while driving. The app performs a very simple task: the user presses a button, the app records a short audio sample for music recognition, then immediately stops recording. I’m trying to understand whether the behaviour I’m seeing is an expected limitation of iOS audio routing or whether there is a better AVAudioSession configuration. Test setup iPhone connected to a vehicle via Bluetooth. Vehicle playing DAB radio. App requests microphone access and starts recording. Recording lasts approximately 7 seconds. Behaviour observed As soon as recording begins: The vehicle changes into a voice-call style audio route. DAB audio becomes muted. The vehicle’s volume control changes to voice volume. When recording finishes, the radio does not automatically recover until the user manually changes the audio source away from DAB and back again. I’ve experimented with several Expo Audio / AVAudioSession configurations, including releasing the audio session immediately after recording and adjusting audio session options, but the behaviour remains the same. My questions Is this expected behaviour when an iOS app starts microphone recording while connected to a vehicle over Bluetooth? Is there an AVAudioSession configuration that allows brief microphone capture without causing the vehicle to switch audio routes? Is it possible to explicitly use the iPhone’s built-in microphone while remaining connected to the vehicle via Bluetooth? If this behaviour is unavoidable over Bluetooth, is this also expected behaviour for native CarPlay apps, or are different audio routing capabilities available to CarPlay applications? Any guidance or documentation would be greatly appreciated. Thank you.
0
0
266
2w
CNAssetSpatialAudioInfo / Audio Mix rejects ProRes spatial captures (LPCM FOA) — only HEVC (APAC) is eligible. Intended? And how can Audio Mix coexist with ProRes recording?
On iOS/macOS 26, CNAssetSpatialAudioInfo(asset:) and CNAssetSpatialAudioInfo.assetContainsSpatialAudio(asset:) accept a spatial capture only when its spatial track is APAC-encoded which AVCaptureMovieFileOutput produces when the video codec is HEVC. An otherwise-identical ProRes capture, whose spatial track is LPCM (4-channel First-Order Ambisonics, kAudioChannelLayoutTag_HOA_ACN_SN3D | 4), is rejected with CNCinematicErrorDomain code 3 (CNCinematicErrorCodeIncomplete) "no eligible audio tracks in asset". This reproduces with Apple's own SpatialAudioCLI sample run on Apple's own stock iPhone captures, so it appears to be a property of the format/API rather than my code. I'd like to confirm whether this is intended, and find a supported way to obtain Audio-Mix-eligible spatial audio while still recording ProRes video (we use Apple Log/ProRes for color grading). Respectively, is wiring a manual AVAssetWriter setup the only way to manage spatial audio and ProRes video? Eligibility appears to require an APAC-encoded, exactly-4-channel FOA track. Because AVCaptureMovieFileOutput only writes APAC audio for HEVC (ProRes forces LPCM), ProRes spatial captures are never eligible — including Apple's own ProRes stock captures, which SpatialAudioCLI also rejects. Key finding: eligibility seems baked into the native APAC bitstream Starting from an eligible HEVC/APAC file, I used AVAssetReader/AVAssetWriter to re-encode only the FOA track (APAC → LPCM → APAC), leaving the AAC stereo track, the HEVC video, and the timed-metadata track untouched. The structurally-identical output is then rejected (code 3). Preserving the cinematic-audio metadata track is not sufficient. Re-encoding the APAC itself loses eligibility. This suggests the mix metadata that gates eligibility is carried inside the APAC bitstream and is produced only at capture time. Questions Is it intended that ProRes (LPCM FOA) spatial captures are not Audio-Mix-eligible via CNAssetSpatialAudioInfo, while HEVC (APAC FOA) captures are? Is this documented? Where exactly is the eligibility metadata stored — in the APAC bitstream, or in the cinematic-audio timed-metadata track (Re-encoding the APAC while preserving that metadata track still loses eligibility)? Is there any supported way to make an existing LPCM/ProRes FOA capture eligible after the fact (a transcode/encode path that produces the required APAC), or is native capture the only source? Any guidance, or a pointer to documentation, would be greatly appreciated. Thank you. Environment iPhone 16 Pro Max, iOS 26.x; macOS 26.2; Xcode 26.2.
1
0
342
2w
Logic Pro 12 crashes when AudioUnit takes too long to load
Note: This issue has also been reported using feedback assistant: FB23098465 We observed that with Logic Pro version 12, the Logic Pro application process crashes systematically if an audio unit takes more than 20~30 seconds to initialize. The audio unit is loaded from AUHostingServiceXPC process, which does not crash, only the Logic Pro process crashes. As a plugin developper we are trying to do our best to reduce the Audio Unit initialization duration in order to avoid this crash, but we do think that Logic should not crash in this scenario. The Feedback Assistant report contains detailed information including: the Logic Pro process crashlog A basic test plugin that triggers the crash to help you reproduce the issue detailed analysis of the issue, system profile, ... Since we did not get any answer on feeedback assistant so far, any feedback will be very much appreciated :) Thank you for your help
0
0
229
3w
Does Android MusicKit work offline?
On the MusicKit page it says This library prompts the user to sign in to Apple Music and, if Apple Music isn’t installed on the device, helps the user download it before returning to your app. Does this mean it plays the music through the Apple Music app so it will work offline if the songs have been downloaded in the Apple Music app? I would test this myself, but it's insane that I have to pay $142 AUD for a developer account just to see if it works! Absolutely insane. Hopefully someone else can test it for me.
0
0
184
3w
HomePod OS 27
Hello everyone, I am trying to get my HomePod minis on the OS 27. But it is only showing that I have a public beta of 26.5. Does anyone know how to get OS 27 to show up as an option under Betas in Home App? I am a paid member of the developer program. Any information would be great!
0
4
618
3w
Slow MusicKit library performance in Golden Gate beta 1
Hello friends! Happy WWDC. Thanks very much for all your work on MusicKit this year! I figure I’ll start things off with a bug report (sorry!). I filed a Feedback earlier today that music library operations in MusicKit are significantly slower in macOS Golden Gate beta 1 than in Tahoe. For example, a .with([.tracks]) operation on an Album takes 4-5 seconds rather than the 95ms it did in Tahoe. Sample project, traces, and sysdiagnoses in FB23037115.
2
1
306
3w
AVSpeechSynthesizer occasionally doesn't speak
I've written an exercise application that uses AVSpeechSynthesizer to produce audio countdowns during user workouts: "5" "4" "3" "2" "1" "GO", where each individual digit utterance is spoken one second apart from the previous one. These countdowns are played anywhere between 30 seconds to 30 minutes apart from one another. Additionally, to allow users to play music during their workouts, the entirety of each countdown is performed with the "duckOthers" session category being active. Here is the sequence of events: set "duckOthers" session category, wait 1 second speak "5", wait 1 second speak "4", wait 1 second speak "3", wait 1 second speak "2", wait 1 second speak "1", wait 1 second speak "GO", wait 1 second set "mixWithOthers" session category For the majority of the time, each countdown is performed correctly, each digit is spoken one second apart. Occasionally though, either the "5" digit or "1" digit is not spoken, but the other digits of the countdown are, at their correct times. Using the "speechSynthesizer:didStart" and "speechSynthesizer:didFinish" functions, I can see that a spoken "1" takes 0.5 seconds to perform, and an unspoken "1" takes 0.1 seconds or less. So my questions are: Why is AVSpeechSynthesizer failing to speak an utterance? Can I do anything to prevent this from happening? FYI, I'm currently running my application on an iPhone 17 Pro running iOS 26.5.1, but the problem has occurred on older iOS versions too. Thanks in advance.
0
0
204
3w
_MPRemoteCommandEventDispatch crashes on iOS 26.x devices.
I'm seeing crashes in _MPRemoteCommandEventDispatch on iOS 26.x devices in 3 apps. According to Bugsnag logs they are: NSInternalInconsistencyException: event dispatch <_MPRemoteCommandEventDispatch: <MPRemoteCommandEvent: 0x11c049500 commandID=THV0 command=<MPRemoteCommand: 0x109ad1ea0 type=Play (0) enabled=YES handlers=[0x109b6a310]> sourceID=(null) ([HostedRoutingSessionDataSource] handleControlSendingCommand<2W5E>)> state:201> deallocated without calling continuation I attached a log from Xcode organizer matching Bugsnag crash. mpr_remote_command_event.crash When I set the brakpoint on the -[_MPRemoteCommandEventDispatch dealloc] I can see it it's hit every time I tap play or pause on locked screen play button. Thread 0 Crashed: 0 libsystem_kernel.dylib 0x00000002370420cc __pthread_kill + 8 (:-1) 1 libsystem_pthread.dylib 0x00000001e975c810 pthread_kill + 268 (pthread.c:1721) 2 libsystem_c.dylib 0x0000000198f8ff64 abort + 124 (abort.c:122) 3 libc++abi.dylib 0x000000018a7cf808 __abort_message + 132 (abort_message.cpp:66) 4 libc++abi.dylib 0x000000018a7be484 demangling_terminate_handler() + 304 (cxa_default_handlers.cpp:76) 5 libobjc.A.dylib 0x000000018a6cff78 _objc_terminate() + 156 (objc-exception.mm:496) 6 xxxxxxxxxxxxxx 0x00000001003a7db8 CPPExceptionTerminate() + 416 (BSG_KSCrashSentry_CPPException.mm:156) 7 libc++abi.dylib 0x000000018a7cebdc std::__terminate(void (*)()) + 16 (cxa_handlers.cpp:59) 8 libc++abi.dylib 0x000000018a7ceb80 std::terminate() + 108 (cxa_handlers.cpp:88) 9 CoreFoundation 0x000000018d7341c4 __CFRunLoopPerCalloutARPEnd + 256 (CFRunLoop.c:769) 10 CoreFoundation 0x000000018d70bb5c __CFRunLoopRun + 1976 (CFRunLoop.c:3179) 11 CoreFoundation 0x000000018d70aa6c _CFRunLoopRunSpecificWithOptions + 532 (CFRunLoop.c:3462) 12 GraphicsServices 0x000000022e31c498 GSEventRunModal + 120 (GSEvent.c:2049) 13 UIKitCore 0x00000001930ceba4 -[UIApplication _run] + 792 (UIApplication.m:3902) 14 UIKitCore 0x0000000193077a78 UIApplicationMain + 336 (UIApplication.m:5577) 15 xxxxxxxxxxxxxx 0x00000001000c0134 main + 308 (main.swift:15) 16 dyld 0x000000018a722e28 start + 7116 (dyldMain.cpp:1477) Is the crash happening when the app is being terminated? Thank you!
Replies
8
Boosts
3
Views
1.7k
Activity
8h
iOS27 Callkit's didActivateAudioSession not being called sometimes
I have not seen any issues with didActivateAudioSession not getting called by iOS in many many years with many thousands of devices. However with iOS27 beta code I have seen a few times that when making an outgoing call it never gets called. All subsequent outgoing calls fail until I dismiss and relaunch the App.
Replies
11
Boosts
0
Views
251
Activity
1d
Can an iOS app analyze audio being played by another app?
Hello, I'm in the early planning stages of an iOS app and I'm trying to determine what's technically possible before designing around assumptions. Is it possible for a third-party iOS app, with the user's permission, to access or analyze audio that is being played by another app (for example Apple Podcasts, Spotify, Audible, or YouTube) in real time? Or is microphone input the only supported way for an app to analyze audio that is audible in the user's environment? I'm not asking about recording the screen or capturing video. I'm specifically trying to understand whether another app's audio output is ever available to third-party apps, or whether iOS intentionally isolates apps from each other's audio. If the answer depends on the audio source (for example Apple Podcasts versus Spotify versus audio coming through the microphone), I'd appreciate understanding those distinctions as well. Thank you.
Replies
0
Boosts
0
Views
90
Activity
4d
CarPlay audio continues playing for approximately one second after the music is paused.
When my app is connected to CarPlay and music is playing, pausing playback from the device updates the playback state immediately. However, the audio continues to play for approximately one second before stopping. This issue only occurs with wireless CarPlay; playback pauses immediately with wired CarPlay. Is this expected behavior?
Replies
0
Boosts
0
Views
49
Activity
5d
Phonetic pronunciations are broken in iOS 27 beta 1
Playing the same IPA pronunciations using AVSpeechSynthesisIPANotationAttribute on iOS 26.5 and iOS 27.0 beta 1 yield very different results. It appears as if iOS is ignoring the IPA symbols. FB23041286 Sample app is here: https://github.com/ryanlintott/SpeechSynthesisIPAExample
Replies
2
Boosts
0
Views
185
Activity
6d
MusicKit JS authorize() returns AUTHORIZATION_ERROR "Unauthorized" (no Music User Token) — catalog works
Hi all — hoping someone has hit this. Our MusicKit JS (v3) web app calls authorize() and it rejects with AUTHORIZATION_ERROR / "Unauthorized" (no Music User Token is issued), even though the same developer token returns HTTP 200 for catalog requests (/v1/catalog/us/search) — so the token itself is valid. Setup (all verified): MusicKit JS v3 from js-cdn.music.apple.com/musickit/v3/musickit.js; MusicKit.configure() succeeds, storefront resolves to "us". Developer token is ES256, valid, and includes the origin claim for our exact site origin. Our MusicKit key is enabled for Media Services and tied to a Media ID that has MusicKit enabled. Referrer-Policy: strict-origin-when-cross-origin. Repro: sign in with an active Apple Music subscriber and tap Allow -> authorize() rejects. Reproduces for two subscriber Apple IDs, in Chrome and Edge, with third-party cookies allowed. Error object: { name: "AUTHORIZATION_ERROR", message: "Unauthorized", isMKError: true }, thrown inside musickit.js during the authorize() flow. The served MusicKit build is a prerelease (3.2526.0-prerelease.x). We've ruled out the usual suspects on our side (origin claim, referrer policy, token validity, API version, cookies, and portal provisioning). Has anyone resolved this, or is there an additional server-side enablement needed for a team/Media ID to issue web user tokens? Also filed as FB23587284. Thanks!
Replies
1
Boosts
0
Views
122
Activity
1w
AVPlayer Reverse Audio Scrubbing?
Hey all, here seeking some perspective. I have an audio player app on macOS built on top of AVPlayer, I want to add the ability to scrub the audio, and hear the audio frames based on the playhead's position whether going forwards or backwards. When going backwards, the audio frame should be played in reverse as well. The audio tracks live online and are streamed. I tried playing with AVPlayer.rate, but the time pitch algos built in (.spectral, .varispeed, .timeDomain) all only guarantee up to 32x rate decoding accuracy. So technically, if the user scrubs fast enough, the audio rendered would not necessarily match the playhead's position. My current solution that works is to cache the raw audio bytes and play the appropriate frame when the user starts scrubbing. I decode the audio data manually using AudioToolbox's AudioFileOpenWithCallbacks into an AVAudioPCMBuffer, then pass it into AVAudioEngine+AVAudioPlayerNode combo. The problem with that is that means I need to cache this audio data myself (remember this is a stream), and since I don't have access to AVPlayer's own cache I need to also download it myself... which means two downloads for the same track which is less than ideal. This lead me to take it a step further and hijack AVPlayer's download process by implementing AVAssetResourceLoaderDelegate, that way AVPlayer and my audio scrubbing cache are both fed from the same source. Now... I feel like I went down a bit of a rabbit hole here. At the end of the day I simply want accurate audio scrubbing in both directions, while keeping in mind I want the audio snippets to play in reverse when the user goes backwards. Is there really no way to do this that's more "vanilla"? Am I missing something obvious? Genuinely open to any and all suggestions. Thanks.
Replies
0
Boosts
0
Views
151
Activity
1w
Is preview-only playback (no user authentication) permitted for a web game?
I'm building a free web-based music trivia game (guess the release year of a song). I'd like to use the Apple Music API in the following way and want to confirm it complies with the Apple Music API / MusicKit terms: The app requests only 30-second preview clips (previews[].url from the Catalog API), played through a standard HTML element. No user ever signs in with an Apple ID — there is no Music User Token; only my developer token is used, server-side, to query the catalog. The app is free, does not gate playback behind any payment, and displays "Music previews via Apple Music" attribution. Full-track playback and user subscriptions are not used at all. The Apple Music API terms describe the purpose as facilitating access to end users' Apple Music subscriptions — since a preview-only integration never touches a subscription, I want to make sure this usage is sanctioned before launching publicly. Is preview-only, unauthenticated playback of catalog previews permitted in this scenario?
Replies
0
Boosts
0
Views
148
Activity
1w
CarPlay: iPhone media does not reliably resume after short SFSpeechRecognizer capture with AVAudioSession record/measurement
Post Title: CarPlay: iPhone-origin media does not reliably resume after short SFSpeechRecognizer capture Post Body: We are testing short, user-initiated speech recognition in a CarPlay driving-task app. The capture is started by an explicit button tap, lasts up to about 4 seconds, and uses SFSpeechRecognizer, SFSpeechAudioBufferRecognitionRequest, and AVAudioEngine. There is no wake word, no continuous recording, and no background listening. Test setup: iPhone: iPhone 17 iOS: 26.5.2 CarPlay: wireless Vehicle / head unit: Volkswagen Discover Media Also tested in a second vehicle with wireless CarPlay Media tested: Apple Music and online radio through CarPlay Also tested: vehicle DAB+ / normal car radio Observed behavior: Native speech recognition succeeds. Speech is recognized correctly. There is no loud playback through the vehicle speakers. During the short capture, the audio route changes to CarPlay / CarAudio input. After capture, vehicle DAB+ / normal car radio resumes correctly. iPhone-origin media, including Apple Music and online radio apps playing through CarPlay, does not reliably resume. In Apple Music, playback may appear to advance or change tracks, but no audio is actually played until the user intervenes. Online radio through CarPlay remains stopped after capture. This behavior was reproduced in two vehicles with wireless CarPlay. Current AVAudioSession configuration during capture: category: AVAudioSession.Category.record mode: AVAudioSession.Mode.measurement options: [.mixWithOthers] During capture, diagnostics show approximately: category: AVAudioSessionCategoryRecord mode: AVAudioSessionModeMeasurement inputNumberOfChannels: 1 outputNumberOfChannels: 0 currentRoute.inputs: CarPlay / CarAudio currentRoute.outputs: none After capture, the app stops and releases audio resources: Stops AVAudioEngine Removes the input tap Ends the recognition request Cancels the recognition task Calls setActive(false, options: [.notifyOthersOnDeactivation]) Restores a passive configuration using .ambient / .default Relevant Swift extract: try session.setCategory( .record, mode: .measurement, options: [.mixWithOthers] ) try session.setActive(true, options: []) if audioEngine.isRunning { audioEngine.stop() } audioEngine.inputNode.removeTap(onBus: 0) recognitionRequest?.endAudio() recognitionRequest = nil recognitionTask?.cancel() recognitionTask = nil try session.setActive( false, options: [.notifyOthersOnDeactivation] ) try session.setCategory(.ambient, mode: .default, options: []) Primary question: Is there a supported AVAudioSession / CarPlay / Speech configuration for short, user-initiated speech recognition in a CarPlay driving-task app that reliably allows previous iPhone-origin CarPlay media playback to resume after capture? Additional question: Is it expected that vehicle DAB+ / normal radio resumes correctly while iPhone-origin CarPlay media does not reliably resume after the same short recording session? Any guidance on the supported approach would be appreciated. Best regards, Guido
Replies
0
Boosts
0
Views
135
Activity
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). We also found two existing threads describing what looks like the same symptom: https://developer.apple.com/forums/thread/834950 https://developer.apple.com/forums/thread/808072 Both of those are PushToTalk apps where the system activates the audio session, and an Apple engineer notes it may be related to a CallKit issue (r.157725305). For context on our side: we do use CallKit, but only CXCallObserver — purely to detect whether a phone call comes in while a recording is in progress, so we can pause and resume around it. We do not use CXProvider or PushToTalk, and we activate our own AVAudioSession ourselves with setActive(true). I'm trying to understand whether there are other scenarios or device states that could leave a running AVAudioEngine tap returning all-zero buffers like this, and whether this is the same underlying CallKit issue (r.157725305) from those threads . And since nothing throws an error, any guidance on how to detect this at runtime and recover from it would be really helpful.
Replies
0
Boosts
0
Views
147
Activity
1w
AVAudioEngine input tap intermittently delivers all-zero buffers — valid format, no error thrown
We have a long-form audio recording app built on AVAudioEngine. We install a tap on inputNode, accumulate the PCM buffers, and encode them to AAC in ~60-second chunks. Setup is essentially: let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP]) try session.setActive(true) let engine = AVAudioEngine() let input = engine.inputNode let format = input.inputFormat(forBus: 0) // valid, e.g. 48 kHz, 1 ch input.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in // In the failure case, buffer.floatChannelData is entirely 0.0 // (accumulate + encode to AAC) } engine.prepare() try engine.start() Intermittently — and so far only reported from the field, never reproduced in normal testing — a recording comes out completely silent. When we decode the resulting AAC and inspect the raw PCM, every sample is exactly 0.0. The signature is very specific: The engine is running and the tap keeps firing for the full duration (normal number of buffers / full-length chunks). inputFormat is valid (sampleRate ≠ 0, e.g. 48 kHz). No error is thrown anywhere — setCategory, setActive, start(), and the tap callback all succeed. The PCM is literally all zeros (not low-level noise / room tone — exact 0.0). Two separate silent recordings decode to byte-identical AAC, confirming pure digital silence rather than corruption. So as far as our error handling, format checks, and tap-liveness are concerned, everything looks healthy — yet the microphone is delivering pure silence. One way we can reproduce it: recording while the iPhone is being driven via macOS iPhone Mirroring (the iPhone stays locked, the mic is effectively unavailable from the device, but our session still activates with a valid format and the tap fires zero-filled buffers for the whole recording — with no error at any point). What we've ruled out: microphone permission is granted; it's not truncation or short capture (full-length, full frame count); it's not our encoding step (the input buffers themselves are zero); it's not a quiet/obstructed mic (that would be low noise, not exact 0.0). Questions: What other device states or scenarios can cause a running AVAudioEngine input tap to deliver all-zero buffers with a valid format and no error? (e.g. another process/system feature holding the mic, Continuity Camera/Mic, CallKit/PushToTalk session ownership, etc.) Since this surfaces with no error and a valid format, what is the recommended way to detect it at runtime? Is monitoring the input level / PCM energy the only signal, or is there a supported API to know the input isn't actually live? What's the recommended recovery once detected — is a full session deactivate/reactivate re-handshake sufficient, or is recreating the engine required?
Replies
1
Boosts
0
Views
156
Activity
2w
AUv3 extension icon cannot be resolved on one iPad across all host applications
I am developing an iOS/iPadOS application containing an AUv3 Audio Unit extension. The standalone application icon displays correctly on the affected iPad. However, the AUv3 extension icon is not displayed correctly by any tested host on that device: AUM displays a red-X placeholder icon. Cubasis displays a small generic Swift-style placeholder icon. apeMatrix displays a generic AUv3 placeholder icon. The same TestFlight build displays the correct AUv3 icon on another iPad, and the icon also displays correctly on my iPhone. This therefore appears to be device-specific AUv3 extension icon registration or resolution failure rather than missing icon artwork in the submitted application. Troubleshooting already performed: Deleted and reinstalled the application. Deleted and reinstalled host applications. Restarted the iPad. Installed both local development and TestFlight builds. Confirmed the AUv3 extension contains its compiled asset catalog and icon metadata. Renamed the primary icon set from AppIcon to AppIconV2 and verified that both generated bundles used AppIconV2. Temporarily changed the AudioComponent subtype from Vped to Vpe2 and verified the generated extension plist contained Vpe2. Installed the newly identified component successfully. The AUv3 icon still failed in every tested host. The unchanged TestFlight build displays correctly on another iPad. Expected result: The AUv3 extension icon should display consistently in host applications, as it does on the comparison iPad and iPhone. Actual result: Every host on the affected iPad receives or displays a fallback placeholder instead of the AUv3 extension icon. TLDR - The key questions: Is there is a supported way to rebuild or clear the iPadOS AUv3 extension registration database without erasing the device? Is there any useful information available on Audio Unit extension registration, LaunchServices/icon-services database, or related iPadOS component-icon resolution on an affected device? Thanks.
Replies
1
Boosts
0
Views
322
Activity
2w
Channel Mapping with AUHAL
Hi, our Mac app uses AUHAL for audio output. The data we’re playing has channels laid out in the WAVE default ordering (this is the same order as Core Audio’s AudioChannelBitmap). Playing this data usually results in the correct channel playing through the correct speaker, but there are cases where it does not: Outputting audio over HDMI usually results in the Center and LFE channels being swapped Or “Configure Speakers” in Audio MIDI Setup.app can be used to change the speaker<->channel mapping (i.e. even swapping L/R on a 2ch stereo setup), but this does not affect our app’s audio I’ve found that getting kAudioUnitProperty_AudioChannelLayout on an output unit returns the speaker<->channel mapping as set up in Audio MIDI Setup (i.e. it shows that Center/LFE swap, or if L/R are swapped). My question: is it possible to have Core Audio do the channel remapping between the WAVE default ordering, and the speaker<->channel mapping as returned by kAudioUnitProperty_AudioChannelLayout? I have tried setting kAudioUnitProperty_AudioChannelLayout on the input unit, and didn’t see a change. I’ve also tried to set kAudioOutputUnitProperty_ChannelMap on the output unit but cannot get it to work. Or do I need to remap the channels myself before giving samples to Core Audio?
Replies
6
Boosts
0
Views
437
Activity
2w
AVAudioSession microphone recording changes Bluetooth audio route in vehicle
Title AVAudioSession microphone recording changes Bluetooth audio route in vehicle Hi everyone, I’m developing an iOS app called HearSave to help drivers safely remember and save songs they hear while driving. The app performs a very simple task: the user presses a button, the app records a short audio sample for music recognition, then immediately stops recording. I’m trying to understand whether the behaviour I’m seeing is an expected limitation of iOS audio routing or whether there is a better AVAudioSession configuration. Test setup iPhone connected to a vehicle via Bluetooth. Vehicle playing DAB radio. App requests microphone access and starts recording. Recording lasts approximately 7 seconds. Behaviour observed As soon as recording begins: The vehicle changes into a voice-call style audio route. DAB audio becomes muted. The vehicle’s volume control changes to voice volume. When recording finishes, the radio does not automatically recover until the user manually changes the audio source away from DAB and back again. I’ve experimented with several Expo Audio / AVAudioSession configurations, including releasing the audio session immediately after recording and adjusting audio session options, but the behaviour remains the same. My questions Is this expected behaviour when an iOS app starts microphone recording while connected to a vehicle over Bluetooth? Is there an AVAudioSession configuration that allows brief microphone capture without causing the vehicle to switch audio routes? Is it possible to explicitly use the iPhone’s built-in microphone while remaining connected to the vehicle via Bluetooth? If this behaviour is unavoidable over Bluetooth, is this also expected behaviour for native CarPlay apps, or are different audio routing capabilities available to CarPlay applications? Any guidance or documentation would be greatly appreciated. Thank you.
Replies
0
Boosts
0
Views
266
Activity
2w
CNAssetSpatialAudioInfo / Audio Mix rejects ProRes spatial captures (LPCM FOA) — only HEVC (APAC) is eligible. Intended? And how can Audio Mix coexist with ProRes recording?
On iOS/macOS 26, CNAssetSpatialAudioInfo(asset:) and CNAssetSpatialAudioInfo.assetContainsSpatialAudio(asset:) accept a spatial capture only when its spatial track is APAC-encoded which AVCaptureMovieFileOutput produces when the video codec is HEVC. An otherwise-identical ProRes capture, whose spatial track is LPCM (4-channel First-Order Ambisonics, kAudioChannelLayoutTag_HOA_ACN_SN3D | 4), is rejected with CNCinematicErrorDomain code 3 (CNCinematicErrorCodeIncomplete) "no eligible audio tracks in asset". This reproduces with Apple's own SpatialAudioCLI sample run on Apple's own stock iPhone captures, so it appears to be a property of the format/API rather than my code. I'd like to confirm whether this is intended, and find a supported way to obtain Audio-Mix-eligible spatial audio while still recording ProRes video (we use Apple Log/ProRes for color grading). Respectively, is wiring a manual AVAssetWriter setup the only way to manage spatial audio and ProRes video? Eligibility appears to require an APAC-encoded, exactly-4-channel FOA track. Because AVCaptureMovieFileOutput only writes APAC audio for HEVC (ProRes forces LPCM), ProRes spatial captures are never eligible — including Apple's own ProRes stock captures, which SpatialAudioCLI also rejects. Key finding: eligibility seems baked into the native APAC bitstream Starting from an eligible HEVC/APAC file, I used AVAssetReader/AVAssetWriter to re-encode only the FOA track (APAC → LPCM → APAC), leaving the AAC stereo track, the HEVC video, and the timed-metadata track untouched. The structurally-identical output is then rejected (code 3). Preserving the cinematic-audio metadata track is not sufficient. Re-encoding the APAC itself loses eligibility. This suggests the mix metadata that gates eligibility is carried inside the APAC bitstream and is produced only at capture time. Questions Is it intended that ProRes (LPCM FOA) spatial captures are not Audio-Mix-eligible via CNAssetSpatialAudioInfo, while HEVC (APAC FOA) captures are? Is this documented? Where exactly is the eligibility metadata stored — in the APAC bitstream, or in the cinematic-audio timed-metadata track (Re-encoding the APAC while preserving that metadata track still loses eligibility)? Is there any supported way to make an existing LPCM/ProRes FOA capture eligible after the fact (a transcode/encode path that produces the required APAC), or is native capture the only source? Any guidance, or a pointer to documentation, would be greatly appreciated. Thank you. Environment iPhone 16 Pro Max, iOS 26.x; macOS 26.2; Xcode 26.2.
Replies
1
Boosts
0
Views
342
Activity
2w
Logic Pro 12 crashes when AudioUnit takes too long to load
Note: This issue has also been reported using feedback assistant: FB23098465 We observed that with Logic Pro version 12, the Logic Pro application process crashes systematically if an audio unit takes more than 20~30 seconds to initialize. The audio unit is loaded from AUHostingServiceXPC process, which does not crash, only the Logic Pro process crashes. As a plugin developper we are trying to do our best to reduce the Audio Unit initialization duration in order to avoid this crash, but we do think that Logic should not crash in this scenario. The Feedback Assistant report contains detailed information including: the Logic Pro process crashlog A basic test plugin that triggers the crash to help you reproduce the issue detailed analysis of the issue, system profile, ... Since we did not get any answer on feeedback assistant so far, any feedback will be very much appreciated :) Thank you for your help
Replies
0
Boosts
0
Views
229
Activity
3w
Does Android MusicKit work offline?
On the MusicKit page it says This library prompts the user to sign in to Apple Music and, if Apple Music isn’t installed on the device, helps the user download it before returning to your app. Does this mean it plays the music through the Apple Music app so it will work offline if the songs have been downloaded in the Apple Music app? I would test this myself, but it's insane that I have to pay $142 AUD for a developer account just to see if it works! Absolutely insane. Hopefully someone else can test it for me.
Replies
0
Boosts
0
Views
184
Activity
3w
HomePod OS 27
Hello everyone, I am trying to get my HomePod minis on the OS 27. But it is only showing that I have a public beta of 26.5. Does anyone know how to get OS 27 to show up as an option under Betas in Home App? I am a paid member of the developer program. Any information would be great!
Replies
0
Boosts
4
Views
618
Activity
3w
Slow MusicKit library performance in Golden Gate beta 1
Hello friends! Happy WWDC. Thanks very much for all your work on MusicKit this year! I figure I’ll start things off with a bug report (sorry!). I filed a Feedback earlier today that music library operations in MusicKit are significantly slower in macOS Golden Gate beta 1 than in Tahoe. For example, a .with([.tracks]) operation on an Album takes 4-5 seconds rather than the 95ms it did in Tahoe. Sample project, traces, and sysdiagnoses in FB23037115.
Replies
2
Boosts
1
Views
306
Activity
3w
AVSpeechSynthesizer occasionally doesn't speak
I've written an exercise application that uses AVSpeechSynthesizer to produce audio countdowns during user workouts: "5" "4" "3" "2" "1" "GO", where each individual digit utterance is spoken one second apart from the previous one. These countdowns are played anywhere between 30 seconds to 30 minutes apart from one another. Additionally, to allow users to play music during their workouts, the entirety of each countdown is performed with the "duckOthers" session category being active. Here is the sequence of events: set "duckOthers" session category, wait 1 second speak "5", wait 1 second speak "4", wait 1 second speak "3", wait 1 second speak "2", wait 1 second speak "1", wait 1 second speak "GO", wait 1 second set "mixWithOthers" session category For the majority of the time, each countdown is performed correctly, each digit is spoken one second apart. Occasionally though, either the "5" digit or "1" digit is not spoken, but the other digits of the countdown are, at their correct times. Using the "speechSynthesizer:didStart" and "speechSynthesizer:didFinish" functions, I can see that a spoken "1" takes 0.5 seconds to perform, and an unspoken "1" takes 0.1 seconds or less. So my questions are: Why is AVSpeechSynthesizer failing to speak an utterance? Can I do anything to prevent this from happening? FYI, I'm currently running my application on an iPhone 17 Pro running iOS 26.5.1, but the problem has occurred on older iOS versions too. Thanks in advance.
Replies
0
Boosts
0
Views
204
Activity
3w