【发布时间】:2017-09-17 01:28:21
【问题描述】:
我正在开发一个应用程序,它通过内置麦克风录制语音并将其实时发送到服务器。所以我需要在录制时从麦克风获取字节流。
在谷歌搜索和堆栈溢出很长一段时间后,我想我知道它应该如何工作,但它没有。我认为使用音频队列可能是要走的路。
这是我目前尝试过的:
func test() {
func callback(_ a :UnsafeMutableRawPointer?, _ b : AudioQueueRef, _ c :AudioQueueBufferRef, _ d :UnsafePointer<AudioTimeStamp>, _ e :UInt32, _ f :UnsafePointer<AudioStreamPacketDescription>?) {
print("test")
}
var inputQueue: AudioQueueRef? = nil
var aqData = AQRecorderState(
mDataFormat: AudioStreamBasicDescription(
mSampleRate: 16000,
mFormatID: kAudioFormatLinearPCM,
mFormatFlags: 0,
mBytesPerPacket: 2,
mFramesPerPacket: 1, // Must be set to 1 for uncomressed formats
mBytesPerFrame: 2,
mChannelsPerFrame: 1, // Mono recording
mBitsPerChannel: 2 * 8, // 2 Bytes
mReserved: 0), // Must be set to 0 according to https://developer.apple.com/reference/coreaudio/audiostreambasicdescription
mQueue: inputQueue!,
mBuffers: [AudioQueueBufferRef](),
bufferByteSize: 32,
mCurrentPacket: 0,
mIsRunning: true)
var error = AudioQueueNewInput(&aqData.mDataFormat,
callback,
nil,
nil,
nil,
0,
&inputQueue)
AudioQueueStart(inputQueue!, nil)
}
它编译并且应用程序启动,但是一旦我调用 test() 我得到一个异常:
致命错误:在展开可选值时意外发现 nil
异常是由
引起的mQueue: inputQueue!
我明白为什么会发生这种情况(inputQueue 没有价值),但我不知道如何正确初始化 inputQueue。问题是 Swift 用户对音频队列的记录非常差,我在互联网上没有找到任何可行的示例。
谁能告诉我我做错了什么?
【问题讨论】:
-
error中有什么内容? -
什么都没有,因为异常发生在错误定义之前
-
是的,你是对的。我没有找到任何示例如何执行此操作,并且文档没有帮助
标签: ios swift audio-recording audioqueue