Установка узла аудиовхода для AVAudioEngine приводит к остановке внешнего звукаIOS

Программируем под IOS
Ответить
Anonymous
 Установка узла аудиовхода для AVAudioEngine приводит к остановке внешнего звука

Сообщение Anonymous »

Я создаю приложение, которое позволит пользователям записывать голосовые заметки. Функционал всего этого работает отлично; Сейчас я пытаюсь внести изменения в AudioSession для управления возможными аудиопотоками из других приложений. Я хочу, чтобы если из другого приложения воспроизводится звук, и пользователь открывает мое приложение; звук продолжает воспроизводиться. Когда мы начинаем запись, звук любого стороннего приложения должен прекратиться, а затем может возобновиться снова, когда мы остановим запись.
Это мой основной код настройки звука:

Код: Выделить всё

    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)"
}
}
Это все вызывается при запуске приложения, поэтому мы готовы записывать каждый раз, когда пользователь нажимает кнопку записи.
Однако в настоящее время, когда это происходит, любой внешний звук перестает воспроизводиться.
Я изолировал проблему в этой строке:

Код: Выделить всё

inputNode = audioEngine.inputNode
Когда это закомментировано, звук будет воспроизводиться, но мне это явно нужно для записи.
Это ошибка? Ожидаемое поведение?

Подробнее здесь: https://stackoverflow.com/questions/787 ... io-to-stop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»