- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在玩弄 AVAudioFile 和 AVAudioPlayerNode。
我已经实现了一个自定义流媒体协议(protocol)来接收音频 block 并处理所有缓冲部分,但是我无法在不使用文件系统的情况下播放第一个 block (我不想在这里使用 FS时间)。
这是:当我将数据写入临时文件并使用 AVAudioFile
加载它时它工作正常(然后我初始化一个 AVAudioBuffer
并使用 AVAudioFile. readIntoBuffer
& 最后 AVAudioPlayerNode.scheduleBuffer
)。但是我无法直接从第一个 block (NSData) 加载缓冲区。
我是否应该实现自定义 NSURLProtocol 并尝试从自定义 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 )
}
最佳答案
来自documentation :
To play streamed audio content, such as from a network connection, use Audio File Stream Services in concert with Audio Queue Services. Audio File Stream Services parses audio packets and metadata from common audio file container formats in a network bitstream. You can also use it to parse packets and metadata from on-disk files.
这里的关键点是使用音频文件服务将数据放入缓冲区并使用音频队列服务将其排队。网络部分通常使用 CFNetwork
API 完成,它比 NSURLProtocol
低得多。
Apple 示例代码“AudioFileStreamExample”说明了音频流的客户端和服务器实现。这将是一个有效的起点。
关于ios - 内存中的 AVAudioFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34988078/
我正在玩弄 AVAudioFile 和 AVAudioPlayerNode。 我已经实现了一个自定义流媒体协议(protocol)来接收音频 block 并处理所有缓冲部分,但是我无法在不使用文件系统
我想构建一个 iOS 应用程序(使用 Swift 3 和 Xcode 8.2.1)从 iPhone 的麦克风录音并将录音保存到 .caf 文件。 首先,我将以下行添加到我项目的 Info.plist
假设我有一个持续时间为 10 秒的 AVAudioFile。我想将该文件加载到 AVAudioPCMBuffer 中,但我只想加载特定秒数/毫秒后或特定 AVAudioFramePosition 后出
我正在尝试使用 AVAudioEngine 播放 AVAudioFile。代码大部分取自苹果开发者在线视频,但没有回放。花了一些时间浏览论坛,但似乎没有任何线索。 我有两种方法。第一个调用标准的打开文
我们正在开发一个记录和保留麦克风输入的应用程序。 AVAudioRecorder 的使用不是一个选项,因为需要实时音频处理。 AVAudioEngine 之所以被使用是因为它提供了对输入音频的低级访问
我一直在AVAudioPlayer中工作并画一个波浪。我正在使用AudioArmada在 AudioArmada Pods 的帮助下,Github pods 绘制波浪。但某些情况下 AVAudioFi
我正在尝试使用 AVAudioEngine 在背景音频文件之上播放多个音频文件。当我尝试初始化 backgroundAudioFile 时,应用程序崩溃并显示 :Thread 1: Fatal err
我正在创建一个用于将声音写入声音文件的 AVAudioFile。如果文件已经存在,我想将 framePosition 移动到文件末尾,以便在末尾继续写入,而不是替换现有文件。 我做了一些测试,试图从文
我正在尝试录制来自麦克风的音频 + 然后将其与来自多个位置的视频组合以创建带有来自麦克风的音频的单个视频。 使用 AVCaptureDevice + AVCaptureSession 有点断断续续,我
我决定在 Swift Playground 中玩 AVAudioPlayer。以下代码在普通 Swift 项目中运行良好,但在 Playground 中(在辅助编辑器中)运行时返回以下错误: 2015
我尝试在进行一些处理后写出一个音频文件,但出现错误。我已将错误减少到这个简单的独立案例: import Foundation import AVFoundation do { let inpu
我正在尝试在 Swift Playground (下面的代码)中设置一个基本示例,但我也尝试过使用 Objective-C,结果相同。 import AVFoundation let fileURL
我在使用 iOS 8 beta 中新的 AVFoundation 框架使用 AVAudioEngine 和 AVAudioFile 写入数据时遇到问题。 我想使用 m4a 格式在输入节点上使用点击写入
我是一名优秀的程序员,十分优秀!