当前位置: 首页 > 知识库问答 >
问题:

音频队列录制错误:AudioQueueNew中的AudioConverterNew返回“FMT?”

呼延曜灿
2023-03-14
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)
    }

代码在行处产生错误

AudioQueueNewInput(&aqData.mDataFormat, handleInputBuffer, &aqData, nil, kCFRunLoopCommonModes, 0, &aqData.mQueue)

而错误消息

AudioConverterNew from AudioQueueNew returned 'fmt?'

IO:1 ch,44100 Hz,Float32客户机:1 ch,44100 Hz,“AAC”(0x00000003)16位/通道,2字节/包,1帧/包,2字节/帧

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

共有1个答案

路裕
2023-03-14

CoreAudioTypes.h头文件中,我们收集到以下内容:

kAudioFormatMPEG4AAC MPEG-4低复杂度AAC音频对象,没有标志。

aqData.mDataFormat.mBitsPerChannel       = 0
aqData.mDataFormat.mBytesPerPacket       = 0
aqData.mDataFormat.mBytesPerFrame        = 0
aqData.mDataFormat.mFramesPerPacket      = 1024
aqData.mDataFormat.mFormatFlags          = 0
 类似资料:
  • 我有以下记录是通过一个带有几个连接的查询得到的: 现在,当我尝试检索不在结果中的特定列时: 其中生成具有以下详细信息的静态编程语言代码: 我希望得到null。但是,返回了错误的id值(zkn_zaak.id)。 我错过了什么?jOOQ不应该有足够的信息(表和字段名)来从记录中检索正确的列吗? =======更新============= 从代码来看,这似乎是预期的行为,并且已经在例如。https:

  • 问题内容: 有谁知道我在哪里可以找到有关如何在Swift应用程序中录制音频的信息?我一直在看一些音频播放示例,但是在实现音频记录方面似乎找不到任何东西。谢谢 问题答案: 这是代码。您可以轻松地进行记录。将此代码写在上。它将按名称保存记录

  • 问题内容: 我注意到了另一种执行答案的方法。使用AudioSystem.getAudioFileTypes()返回指定文件夹中的所有受支持的音频文件。我是一个经验不足的编码人员,无法在给定的答案中集成此方法 谁能告诉我该怎么做? 问题答案: 以下资源将显示特定于Java Sound可以理解的文件类型的。用户选择任何声音剪辑后,即可使用该应用程序。将获得该目录中所有剪辑的列表,并以组合方式显示它们。

  • 问题内容: 我一直在尝试通过以下代码调整音频片段的音调: http://developer.android.com/guide/topics/media/audio- capture.html 我的猜测是应该使用进行此调整。 http://developer.android.com/reference/android/media/MediaRecorder.html 但是,我不确定调用哪种方法来改

  • 我试图简单地使用Azure创建一个新的存储队列,但它一直崩溃而没有解释,创建表工作正常,这是相关代码: 行< code>healingQueue中的代码崩溃。CreateIfNotExists();以及< code>(400)错误请求的说明 表创建得很好,所以我假设存储帐户没有问题,知道我能做什么吗?

  • 问题内容: 我正在尝试建立一个程序来录制一部分互联网音频流,并将其保存到文件(最好是mp3或wav)。我到处都看过,找不到任何合适的方法来做到这一点。我找到了两个似乎可以工作的不同库(NativeBass和Xuggle),但我都不支持64位Windows。 有谁知道使用Java保存一部分互联网音频流的任何简单方法?(如果重要,则为“音频/ mpeg”流)。 编辑:好的,我发现了一种可行的方法。但是