Как использовать Spotify iOS SDK tryToDeliverAudioFrames: ofCount: streamDescription function? - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь применить магию к аудиопотоку Spotify на основе this .У меня подкласс SPTCoreAudioController.

Кажется, указатель Spotify, который передается в переопределенную функцию, указывает на 16-разрядное целое число.Я попытался создать AVAudioPCMBuffer на основе audioFrames и audioDescription и передать его playerNode.Узел проигрывателя, который является узлом в Audio Engine, работает правильно, если я использую аудиофайл.

    override func attempt(toDeliverAudioFrames audioFrames: UnsafeRawPointer!, ofCount frameCount: Int, streamDescription audioDescription: AudioStreamBasicDescription) -> Int {
        let ptr = audioFrames.bindMemory(to: Int16.self, capacity: frameCount)
        let framePtr = UnsafeBufferPointer(start: ptr, count: frameCount)
        let frames = Array(framePtr)

        var newAudioDescription = audioDescription
        let audioFormat = AVAudioFormat(streamDescription: &newAudioDescription)!
        let audioPCMBuffer = AVAudioPCMBuffer(pcmFormat: audioFormat, frameCapacity: AVAudioFrameCount(frameCount))!
        audioPCMBuffer.frameLength = audioPCMBuffer.frameCapacity

        let channelCount = Int(audioDescription.mChannelsPerFrame)
        if let int16ChannelData = audioPCMBuffer.int16ChannelData {
            for channel in 0..<channelCount {
                for sampleIndex in 0..<frameLength {
                    int16ChannelData[channel][Int(sampleIndex)] = frames[Int(sampleIndex)]
                }
            }
        }

        didReceive(pcmBuffer: audioPCMBuffer)

        return super.attempt(toDeliverAudioFrames: audioFrames, ofCount: frameCount, streamDescription: audioDescription)
    }

    func didReceive(pcmBuffer: AVAudioPCMBuffer)  {
        playerNode.scheduleBuffer(pcmBuffer) {
        }
    }

Я получаю AURemoteIO :: IOThread (19): EXC_BAD_ACCESS (code = 1, address = 0x92e370f25cc0) ошибку, которая, по моему мнению, перемещается перед тем, как я могу скопировать ее в буфер pcm.

Мне было интересно, знает ли кто-нибудь, как правильно использовать tryToDeliverAudioFrames: ofCount: streamDescription: функция?

...