Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 音频队列录制错误:从AudioQueueNew返回的AudioConverterNew';fmt?&x27;_Ios_Audio - Fatal编程技术网

Ios 音频队列录制错误:从AudioQueueNew返回的AudioConverterNew';fmt?&x27;

Ios 音频队列录制错误:从AudioQueueNew返回的AudioConverterNew';fmt?&x27;,ios,audio,Ios,Audio,以下是我设置音频队列服务的代码: aqData = AQRecorderState() aqData.mDataFormat.mFormatID = kAudioFormatMPEG4AAC aqData.mDataFormat.mSampleRate = 16000.0 aqData.mDataFormat.mChannelsPerFrame = 1 aqData.mDataFormat.mBitsPerCha

以下是我设置音频队列服务的代码:

aqData = AQRecorderState()
    aqData.mDataFormat.mFormatID             = kAudioFormatMPEG4AAC
    aqData.mDataFormat.mSampleRate           = 16000.0
    aqData.mDataFormat.mChannelsPerFrame     = 1
    aqData.mDataFormat.mBitsPerChannel       = 16
    aqData.mDataFormat.mBytesPerPacket       = aqData.mDataFormat.mChannelsPerFrame * UInt32(sizeof(UInt16))
    aqData.mDataFormat.mBytesPerFrame        = aqData.mDataFormat.mChannelsPerFrame * UInt32(sizeof(UInt16))
    aqData.mDataFormat.mFramesPerPacket      = 1
    aqData.mDataFormat.mFormatFlags          = kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsBigEndian
    aqData.mQueue                            = AudioQueueRef()
    fileType                                 = kAudioFileM4AType

    // create new input for audio queue
    AudioQueueNewInput(&aqData.mDataFormat, handleInputBuffer, &aqData, nil, kCFRunLoopCommonModes, 0, &aqData.mQueue)
    var dataFormatSize:UInt32 = UInt32(sizeof(aqData.mDataFormat.dynamicType))
    AudioQueueGetProperty(aqData.mQueue, kAudioQueueProperty_StreamDescription, &aqData.mDataFormat, &dataFormatSize)

    // create file to store audio
    let data = recordUrl.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
    let audioFileURL: CFURLRef = CFURLCreateFromFileSystemRepresentation(nil, UnsafePointer(data.bytes), data.length, false)
    AudioFileCreateWithURL(audioFileURL, fileType, &aqData.mDataFormat, AudioFileFlags.EraseFile, &aqData.mAudioFile)

    // set magic cookie for file if needed
    setMegicCookieForFile(aqData.mQueue, inFile: aqData.mAudioFile)

    // derive buffer size
    deriveBufferSize(aqData.mQueue, ASBDescription: &aqData.mDataFormat, seconds: kBufferLengthInSecond, outbufferSize: &aqData.bufferByteSize)

    // allocate and enqueue each buffer
    for i in 0..<Record.kNumberBuffers {
        AudioQueueAllocateBuffer(aqData.mQueue, aqData.bufferByteSize, &aqData.mBuffers[i])
        AudioQueueEnqueueBuffer(aqData.mQueue, aqData.mBuffers[i], 0, nil)
    }
错误消息是

AudioConverterNew from AudioQueueNew returned 'fmt?'
io:1通道,44100赫兹,浮动32 客户端:1通道,44100 Hz,'aac'(0x00000003)16位/通道,2字节/数据包,1帧/数据包,2字节/帧


我尝试了不同的音频格式设置,但似乎没有人修复这个错误。有人能帮忙吗?

CoreAudioTypes.h
头文件中,我们收集到:

考迪奥福曼MPEG4AAC MPEG-4低复杂度AAC音频对象,没有标志

在同一个文件中,上面的
AudioStreamBasicDescription
评论说:

在压缩音频中,数据包是不可分割的压缩数据块,例如,AAC数据包将包含1024个样本帧

由于AAC可以是可变比特率的(这在和的注释中有所暗示) 对于变量mBytesPerPacket )
mBitsPerChannel
mBytesPerPacket
mFramesPerPacket
应为零

因此,我会尝试更改您的
AudioStreamBasicDescription
的这些字段:

aqData.mDataFormat.mBitsPerChannel       = 0
aqData.mDataFormat.mBytesPerPacket       = 0
aqData.mDataFormat.mBytesPerFrame        = 0
aqData.mDataFormat.mFramesPerPacket      = 1024
aqData.mDataFormat.mFormatFlags          = 0

CoreAudioTypes.h
头文件中,我们收集到:

考迪奥福曼MPEG4AAC MPEG-4低复杂度AAC音频对象,没有标志

在同一个文件中,上面的
AudioStreamBasicDescription
评论说:

在压缩音频中,数据包是不可分割的压缩数据块,例如,AAC数据包将包含1024个样本帧

由于AAC可以是可变比特率的(这在和的注释中有所暗示) 对于变量mBytesPerPacket )
mBitsPerChannel
mBytesPerPacket
mFramesPerPacket
应为零

因此,我会尝试更改您的
AudioStreamBasicDescription
的这些字段:

aqData.mDataFormat.mBitsPerChannel       = 0
aqData.mDataFormat.mBytesPerPacket       = 0
aqData.mDataFormat.mBytesPerFrame        = 0
aqData.mDataFormat.mFramesPerPacket      = 1024
aqData.mDataFormat.mFormatFlags          = 0

嗨,节奏,谢谢你的回复,这解决了我的问题。但是现在我的audioqueueinputcallback没有被调用。你知道原因吗?你在打电话给
AudioQueueStart
?Hi Rhymatic,谢谢你的回复,这解决了我的问题。但是现在我的audioqueueinputcallback没有被调用。您知道原因吗?您正在呼叫
AudioQueueStart