Ошибка чтения аудиофайла, записанного с помощью AudioKit, в экземпляр AVPlayer - PullRequest
0 голосов
/ 10 ноября 2018

Я нахожусь в ситуации, когда мне нужно экспортировать аудиофайл, записанный с помощью AudioKit, а затем повторно импортировать его для дальнейшей обработки с помощью AVAudioPCMBuffer.

Ниже приведен код, который я использую для экспорта из AudioKit:

    tape = recorder.audioFile!
    player.load(audioFile: tape)


    if let _ = player.audioFile?.duration {
        recorder.stop()
        tape.exportAsynchronously(name: "TempTestFile",
                                  baseDir: .documents,
                                  exportFormat: .caf) {_, exportError in
                                    if let error = exportError {
                                        AKLog("Export Failed \(error)")
                                    } else {
                                        AKLog("Export succeeded")
                                    }
        }

    }

И здесь я пытаюсь позже прочитать этот аудиофайл в мое приложение macOS и заполнить AVAudioPCMBuffer (где file - аудиофайл, который я пытаюсь прочитать):

            let format = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: Double(sampleRate), channels: AVAudioChannelCount(channels), interleaved: interleaved)

            if let buffer = AVAudioPCMBuffer(pcmFormat: format!, frameCapacity: AVAudioFrameCount(file.length)){
                if ((try? file.read(into: buffer)) != nil) {

                    let arraySize = Int(buffer.frameLength)

                    switch type {
                    case is Double.Type:
                        let doublePointer = UnsafeMutablePointer<Double>.allocate(capacity: arraySize)
                        vDSP_vspdp(buffer.floatChannelData![0], 1, doublePointer, 1, vDSP_Length(arraySize))
                        return Array(UnsafeBufferPointer(start: doublePointer, count:arraySize)) as? [T]
                    case is Float.Type:
                        return Array(UnsafeBufferPointer(start: buffer.floatChannelData![0], count:arraySize)) as? [T]
                    default: return nil
                    }
                }
            }

Тем не менее, я постоянно получаю сообщение об ошибке:

ИСКЛЮЧЕНИЕ (-50): «неправильное количество буферов»

[avae] AVAEInternal.h: 103: _AVAE_CheckNoErr: [AVAudioFile.mm:445:-[AVAudioFile readIntoBuffer: frameCount: error:]: (ExtAudioFileRead (_imp -> _ extAudioFile, & ioFrames, buffer.mutableAudioBufferList)): ошибка -50

Это не зависит от формата файла, используемого при экспорте и импорте аудио.

Тем не менее, он работает нормально, если я использую этот файл .wav , который читается непосредственно из приложения.

Кто-нибудь знает, почему я не могу прочитать данные из аудиофайла в AVPCMBuffer.

...