Ios 记忆中的音频文件?

Ios 记忆中的音频文件?,ios,objective-c,swift,avfoundation,avaudioengine,Ios,Objective C,Swift,Avfoundation,Avaudioengine,我在玩AVAudioFile和AVAudioPlayerNode 我已经实现了一个自定义流协议,它接收音频块并处理所有缓冲部分,但是如果不使用文件系统,我无法播放第一个块(我现在不想使用FS) 这是:当我将数据写入一个临时文件并使用AVAudioFile加载它时(然后我初始化一个AVAudioBuffer并使用AVAudioFile.readIntoBuffer&最后AVAudioPlayerNode.scheduleBuffer)。但是我不能直接从第一个块(NSData)加载缓冲区 我应该实现

我在玩AVAudioFile和AVAudioPlayerNode

我已经实现了一个自定义流协议,它接收音频块并处理所有缓冲部分,但是如果不使用文件系统,我无法播放第一个块(我现在不想使用FS)

这是:当我将数据写入一个临时文件并使用
AVAudioFile
加载它时(然后我初始化一个
AVAudioBuffer
并使用
AVAudioFile.readIntoBuffer
&最后
AVAudioPlayerNode.scheduleBuffer
)。但是我不能直接从第一个块(NSData)加载缓冲区

我应该实现自定义NSURL协议并尝试从自定义NSURL初始化AVAudioFile吗

func play( data: NSData ) {
var audioFile: AVAudioFile
var audioBuffer: AVAudioPCMBuffer
// writing the data
let destPath = NSTemporaryDirectory() + "chunk.mp3"
data.writeToFile( destPath, atomically: true )
// initializing the AVAudioFile
audioFile = AVAudioFile( forReading: NSURL(string: destPath)!)
// initializing the AVAudioPCMBuffer
audioBuffer = AVAudioPCMBuffer(PCMFormat: audioFile.processingFormat,
                               frameCapacity: UInt32(data.length))
audioFile.readIntoBuffer( audioBuffer )
/*
    I didn't put any AVAudioPlayerNode/AVAudioEngine in this code to keep it simple and describe the situation,
    anyway this works fine when everything's properly initialized:
*/
player.scheduleBuffer( audioBuffer, completionHandler: nil )
}
从:

要播放流式音频内容(例如来自网络连接),请将音频文件流服务与音频队列服务配合使用。音频文件流服务解析网络位流中常见音频文件容器格式的音频数据包和元数据。您还可以使用它来解析磁盘文件中的数据包和元数据

这里的关键点是使用音频文件服务将数据放入缓冲区,并使用音频队列服务将其排队。网络部分通常使用
CFNetwork
api完成,这比
NSURLProtocol
低得多


Apple示例代码“AudioFileStreamExample”演示了流式传输音频的客户端和服务器实现。这将是一个有效的起点。

谢谢,我来看看!