【问题标题】:What stream format should iOS5 Effect Units useiOS5 Effect Units应该使用什么流格式
【发布时间】:2012-01-29 20:35:33
【问题描述】:

我正在尝试使用低通滤波器 AU。将流格式设置为过滤器单元时,我不断收到 kAudioUnitErr_FormatNotSupported (-10868) 错误,但如果我只使用远程 IO 单元,则没有错误。

我使用的流格式是(更新):

myASBD.mSampleRate = hardwareSampleRate;
myASBD.mFormatID = kAudioFormatLinearPCM;      
myASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger;
myASBD.mBitsPerChannel = 8 * sizeof(float);
myASBD.mFramesPerPacket = 1;                                          
myASBD.mChannelsPerFrame = 1;           
myASBD.mBytesPerPacket = sizeof(float) * myASBD.mFramesPerPacket;                                                                            
myASBD.mBytesPerFrame = sizeof(float) * myASBD.mChannelsPerFrame;  

我正在像这样设置过滤器流:

 // Sets input stream type to ASBD
 setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &myASBD, sizeof(myASBD));
 NSLog(@"Filter in: %i", setupErr);

 //NSAssert(setupErr == noErr, @"No ASBD on Finput");


//Sets output stream type to ASBD
setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &myASBD, sizeof(myASBD));
NSLog(@"Filter out: %i", setupErr);
NSAssert(setupErr == noErr, @"No ASBD on Foutput");

【问题讨论】:

    标签: ios signal-processing core-audio audiounit


    【解决方案1】:

    iOS 过滤器音频单元的规范格式是 8.24 定点(线性 PCM),即每声道 32 位,而不是 16 位。

    【讨论】:

    • 我已经尝试使用 32 位通道,但仍然遇到流格式错误。我在其他地方被告知,iOS5 中的内置 AU 效果也不使用规范格式。我尝试使用 AudioUnitGetProperty 从过滤器单元获取流格式,但每次尝试时都会收到错误消息。使用渲染回调并只使用当前的 ASBD 会更好吗?
    • 你设置的类型是定点还是浮点?这是 Mac 上的规范格式与 iOS 上的一个区别。
    • 我已经更改了它,所以我没有使用浮点数,但我仍然收到错误。我不确定我是否正确设置了过滤器 ASBD,因为这是我得到错误的地方。
    【解决方案2】:

    混响单元使用什么格式???我在尝试记录缓冲区时遇到奇怪的错误......关于这个主题的任何消息?

    【讨论】:

      【解决方案3】:

      试试这个规范格式。

      size_t bytesPerSample = sizeof (AudioUnitSampleType); //Default is 4 bytes
      myASBD.mSampleRate        = hardwareSampleRate;
      myASBD.mFormatID          = kAudioFormatLinearPCM;
      myASBD.mFormatFlags       = kAudioFormatFlagsAudioUnitCanonical; //Canonical AU format
      myASBD.mBytesPerPacket    = bytesPerSample;
      myASBD.mFramesPerPacket   = 1;
      myASBD.mBytesPerFrame     = bytesPerSample;
      myASBD.mChannelsPerFrame  = 2;  //Stereo
      myASBD.mBitsPerChannel    = 8 * bytesPerSample;  //32bit integer
      

      您需要确保统一配置所有 AudioUnits ASBD。

      如果您正在进行繁重的音频处理,浮动(iOS5 支持)也不是一个坏主意。

      size_t bytesPerSample     = sizeof (float); //float is 4 bytes
      myASBD.mSampleRate        = hardwareSampleRate;
      myASBD.mFormatID          = kAudioFormatLinearPCM;
      myASBD.mFormatFlags       = kAudioFormatFlagIsFloat;
      myASBD.mBytesPerPacket    = bytesPerSample;
      myASBD.mFramesPerPacket   = 1;
      myASBD.mBytesPerFrame     = bytesPerSample;
      myASBD.mChannelsPerFrame  = 2;
      myASBD.mBitsPerChannel    = 8 * bytesPerSample;  //32bit float
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-18
        • 2015-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多