ios Chirp.io SDK и AVSoundEngine, как использовать вместе? - PullRequest
0 голосов
/ 23 октября 2018

Я разрабатываю приложение, которое генерирует звуки с помощью фреймворка AVFoundation.Теперь я хотел бы добавить Chirp.io SDK для кодирования некоторой информации в звуки в качестве дополнения к моему коду.

Если я использую свой звуковой код или только Chirp SDK, все работает нормально.Когда я делаю звук со своим кодом и затем запускаю Chirp, он работает только один раз, а затем дает сбой с ошибками со второй попытки:

2018-10-23 19:32:55.188460+0300 FieldApp[2243:1408580] [avae] AVAEInternal.h:70:_AVAE_Check: required condition is false: [AVAudioPlayerNode.mm:536:StartImpl: (_engine->IsRunning())]
2018-10-23 19:32:55.191931+0300 FieldApp[2243:1408580] *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: _engine->IsRunning()'

Возможно ли совместить использование AVAudioEngine и Chirp.io SDK?

Вот пример из моего кода:

  // ... init part of my sound code ....
  let engine: AVAudioEngine = AVAudioEngine()
  let playerNode: AVAudioPlayerNode = AVAudioPlayerNode()
  let audioFormat = AVAudioFormat(standardFormatWithSampleRate: 44100.0, channels: 2)
  engine.attach(playerNode)
  engine.connect(playerNode, to: engine.mainMixerNode, format: audioFormat)

  // ... Chirp init code ...
  let connect: ChirpConnect! = ChirpConnect(appKey: "xXx", andSecret: "xXx")
  connect.setConfig("xXxxx")
  connect.start()

  // ... do this in a loop ....

  do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault)
      try AVAudioSession.sharedInstance().setActive(true)
      try engine.start()
      started = true
  }
  catch {
      LogManager.shared.post("Error starting sound engine: \(error.localizedDescription)")
  }

  playerNode.play()

  //.... wait until playing ends ....

  playerNode.stop()
  engine.stop()

  //.... Chirp SDK sounds ....
  let buf: Data = ..... some data to send
  connect.send(buf)

  //... end of pseudo-loop

Поэтому, когда я запускаю код в цикле во второй раз, я получаю исключение, но я не получаю исключение вengine.start (), он выполняется нормально ...

1 Ответ

0 голосов
/ 30 октября 2018

Конечно, можно комбинировать AVAudioEngine с Chirp iOS SDK.

Возникшая проблема возникает из-за того, что Chirp SDK работает на том же общем экземпляре AVAudioSession, что и ваш аудиоплеер, когда вы устанавливаете категорию, в которой вы находитесь.переопределение настроек, установленных в Chirp SDK.

Я бы посоветовал вам удалить строку, по которой вы звоните setCategory, и это будет работать - настроек, установленных в Chirp SDK, будет достаточно, поправьте меня, если яздесь не так.

Другие сообщили, что видели предупреждения «Неизвестный выбранный источник данных» в журналах. Я считаю, что это проблема с iOS 12. См. https://forums.developer.apple.com/thread/108785

...