SpeechAnalyzer.start(inputSequence:) fails with _GenericObjCError nilError, while the same WAV succeeds with start(inputAudioFile:)

I'm trying to use the new Speech framework for streaming transcription on macOS 26.3, and I can reproduce a failure with SpeechAnalyzer.start(inputSequence:).

What is working:

  • SpeechAnalyzer + SpeechTranscriber
  • offline path using start(inputAudioFile:finishAfterFile:)
  • same Spanish WAV file transcribes successfully and returns a coherent final result

What is not working:

  • SpeechAnalyzer + SpeechTranscriber

  • stream path using start(inputSequence:)

  • same WAV, replayed as AnalyzerInput(buffer:bufferStartTime:)

  • fails once replay starts with:

    _GenericObjCError domain=Foundation._GenericObjCError code=0 detail=nilError

I also tried:

  • DictationTranscriber instead of SpeechTranscriber
  • no realtime pacing during replay

Both still fail in stream mode with the same error.

So this does not currently look like a ScreenCaptureKit issue or a Python integration issue. I reduced it to a pure Swift CLI repro.

Environment:

  • macOS 26.3 (25D122)
  • Xcode 26.3
  • Swift 6.2.4
  • Apple Silicon Mac

Has anyone here gotten SpeechAnalyzer.start(inputSequence:) working reliably on macOS 26.x?

If so, I'd be interested in any workaround or any detail that differs from the obvious setup:

  • prepareToAnalyze(in:)
  • bestAvailableAudioFormat(...)
  • AnalyzerInput(buffer:bufferStartTime:)
  • replaying a known-good WAV in chunks

I already filed Feedback Assistant: FB22149971

I've been working with SpeechAnalyzer.start(inputSequence:) on macOS 26 and got streaming transcription working. A few things that might help: Make sure the AVAudioFormat you use to create AnalyzerInput buffers exactly matches what bestAvailableAudioFormat() returns. Even subtle mismatches (e.g., interleaved vs non-interleaved, different channel layouts) can cause the nilError without a descriptive message. I found that feeding buffers that are too small (< 4096 frames) occasionally triggers this error. Try using larger chunks — I settled on 8192 frames per buffer. The bufferStartTime parameter needs to be monotonically increasing and consistent with the actual audio duration. If there are gaps or overlaps in the timestamps, the stream mode can fail silently or throw nilError. Instead of replaying a WAV file as chunked buffers, I'd suggest testing with live audio from AVCaptureSession first. In my experience, live capture → AnalyzerInput works more reliably than simulated streaming from a file, possibly because the timing is naturally correct. Worth noting that DictationTranscriber handles streaming input differently from SpeechTranscriber. If your use case allows it, try switching to DictationTranscriber — it also supports AnalysisContext for contextual vocabulary biasing (which SpeechTranscriber currently does not, per an Apple engineer's response in ). The macOS 26 Speech framework is still quite new and under-documented. Filing the Feedback Assistant report was the right call.

SpeechAnalyzer.start(inputSequence:) fails with _GenericObjCError nilError, while the same WAV succeeds with start(inputAudioFile:)
 
 
Q