Звук воспроизводится в симуляторе, но не на устройстве - PullRequest
1 голос
/ 07 мая 2019

Я разрабатываю приложение, которое воспроизводит аудиофайлы и может заставить файлы воспроизводиться с экземпляром AVPlayer в симуляторе xcode (v10.2), но при попытке воспроизвести его на моем устройстве аудиофайл не воспроизводится.

Я прочитал ответы на ту же проблему и проверил:

  • , что выключатель звука на устройстве не включен
  • , который я не создалAVPlayer в viewDidLoad
  • , что имя аудиофайла в коде совпадает с регистром файла

Ниже приведен код, в котором я настроил рекордер:

func setUpRecorder(storyItem : StoryItem) {

    // Generate unique ID for recording for the StoryItem
    let uuid = UUID().uuidString + ".m4a"

    let audioFileName = getDocumentDirectory().appendingPathComponent(uuid)

    do {
        try self.realm.write {
            // storyItem.recording = audioFileName.absoluteString
            storyItem.recording = uuid
        }
    } catch {
        print("Error saving recording \(error)")
    }
    self.createStoryTableView.reloadData()

    let recordSettings = [AVFormatIDKey : kAudioFormatAppleLossless,
                          AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue,
                          AVEncoderBitRateKey : 320000,
                          AVNumberOfChannelsKey : 2,
                          AVSampleRateKey : 44100.0 ] as [String : Any]

    do {
        audioRecorder = try AVAudioRecorder(url: audioFileName, settings: recordSettings)
        audioRecorder.delegate = self
        audioRecorder.prepareToRecord()
    } catch {
        print(error)
    }
}

Способ воспроизведения аудиофайла здесь:

func setUpPlayer (storyItem: StoryItem) {

    let audioFileName = getDocumentDirectory().appendingPathComponent(storyItem.recording)

    getAudioDuration(audioFileName: audioFileName)

    if storyItem.recording == "" {

        let alert = UIAlertController(title: "There's no recording", message: "", preferredStyle: .alert)
        let action = UIAlertAction(title: "Cancel", style: .default) { (action) in
        }
        // This is what happens when cancel is pressed

        alert.addAction(action)

        self.present(alert, animated: true, completion: nil)
    } else {

    player = AVPlayer(url: audioFileName)
    player.volume = 1.0

    }
}

Буду благодарен за любые предложения.Может ли это быть использование уникального идентификатора (UUID) в качестве имени аудиофайла?

1 Ответ

1 голос
/ 07 мая 2019

Попробуйте настроить общий экземпляр AVAudioSession перед записью.

Примерно так:

// Configure AVAudioSession
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
} catch {
    assertionFailure("Failed to configure `AVAAudioSession`: \(error.localizedDescription)")
}
...