Das Festlegen des Audio-Eingabeknotens für AVAudioEngine führt dazu, dass externes Audio gestoppt wirdIOS

Programmierung für iOS
Anonymous
 Das Festlegen des Audio-Eingabeknotens für AVAudioEngine führt dazu, dass externes Audio gestoppt wird

Post by Anonymous »

Ich baue eine App, mit der Benutzer Sprachnotizen aufzeichnen können. Die Funktionalität von allem funktioniert großartig; Ich versuche jetzt, Änderungen an der AudioSession umzusetzen, um mögliche Audiostreams von anderen Apps zu verwalten. Ich möchte es so, dass, wenn Audio von einer anderen App abgespielt wird und der Benutzer meine App öffnet; Der Ton läuft weiter. Wenn wir mit der Aufnahme beginnen, sollte die Audiowiedergabe aller Drittanbieter-Apps gestoppt werden und kann dann wieder fortgesetzt werden, wenn wir die Aufnahme beenden.
Dies ist mein Haupt-Audio-Setup-Code:

Code: Select all

    private var audioEngine: AVAudioEngine!
private var inputNode: AVAudioInputNode!

func setupAudioEngine() {
audioEngine = AVAudioEngine()
inputNode = audioEngine.inputNode
audioPlayerNode = AVAudioPlayerNode()
audioEngine.attach(audioPlayerNode)

let format = AVAudioFormat(standardFormatWithSampleRate: AUDIO_SESSION_SAMPLE_RATE, channels: 1)
audioEngine.connect(audioPlayerNode, to: audioEngine.mainMixerNode, format: format)
}

private func setupAudioSession() {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth])
try audioSession.setPreferredSampleRate(AUDIO_SESSION_SAMPLE_RATE)
try audioSession.setPreferredIOBufferDuration(0.005) // 5ms buffer for lower latency
try audioSession.setActive(true)

// Add observers
setupInterruptionObserver()
} catch {
audioErrorMessage = "Failed to set up audio session: \(error)"
}
}
Dies alles wird beim Start der App aufgerufen, sodass wir zur Aufnahme bereit sind, wann immer der Benutzer die Aufnahmetaste drückt.
Wenn dies jedoch geschieht, stoppt derzeit die Wiedergabe jeglicher externer Audiodaten.
Ich habe das Problem auf diese Zeile eingegrenzt:

Code: Select all

inputNode = audioEngine.inputNode
Wenn das auskommentiert ist, wird der Ton abgespielt – aber ich benötige ihn natürlich für die Aufnahmefunktion.
Ist das ein Fehler? Erwartetes Verhalten?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post