使用蓝牙端点时,iOS multimixer au的格式设置

时间:2017-03-27 17:32:09

标签: audio core-audio audiounit ios-bluetooth

Hi Core Audio / Au社区,

我在开发过程中遇到过障碍。我目前的AUGraph在iOS平台上设置为2个Mono流 - > Mixer unit-> remoteIO单元。我正在使用调音台将两个单声道流混合成立体声交错。然而,需要的是单声道流不需要一直混合,同时以立体声播放,即交错立体声输出应该由以下组成:左耳中的第一单声道流和右耳中的第二单声道流。我可以使用Multichannel混音器上的kAudioUnitProperty_MatrixLevels属性来完成此操作。

       //Left out              //right out
    matrixVolumes[0][0]=1;      matrixVolumes[0][1]=0.001;
    matrixVolumes[1][0]=0.001;  matrixVolumes[1][1]=0.001;


    result = AudioUnitSetProperty(mAumixer, kAudioUnitProperty_MatrixLevels, kAudioUnitScope_Input, 0,matrixVolumes , matrixPropSize);

    if (result) {

        printf("Error while setting  kAudioUnitProperty_MatrixLevels from mixer on bus 0 %ld %08X %4.4s\n", result, (unsigned int)result, (char*)&result);

        return -1;

    }

    printf("setting matrix levels kAudioUnitProperty_MatrixLevels on bus 1 \n");

        //Left out              //right out
    matrixVolumes[0][0]=0.001;  matrixVolumes[0][1]=1;
    matrixVolumes[1][0]=0.001;  matrixVolumes[1][1]=0.001;


    result = AudioUnitSetProperty(mAumixer, kAudioUnitProperty_MatrixLevels, kAudioUnitScope_Input, 1,matrixVolumes , matrixPropSize);

    if (result) {

        printf("Error while setting  kAudioUnitProperty_MatrixLevels from mixer on bus 1 %ld %08X %4.4s\n", result, (unsigned int)result, (char*)&result);

        return -1;

    }

如上所示,我使用音量控制来控制分别作为未混合立体声交错播放的流。当我使用有线耳机播放音频时,此功能正常;第一单声道流在左耳上播放,第二单声道流在右耳上播放。但是当我切换到蓝牙耳机时,音频输出是左右声道上播放的单声道流的混合。因此,矩阵级别似乎不适用于那里。用于混频器的i / p和o / p的格式如下:

printf(“create Input ASBD \ n”);

    // client format audio goes into the mixer
    obj->mInputFormat.mFormatID = kAudioFormatLinearPCM;
    int sampleSize = ((UInt32)sizeof(AudioSampleType));
    obj->mInputFormat.mFormatFlags = kAudioFormatFlagsCanonical;
    obj->mInputFormat.mBitsPerChannel = 8 * sampleSize;
    obj->mInputFormat.mChannelsPerFrame = 1; //mono
    obj->mInputFormat.mFramesPerPacket = 1;
    obj->mInputFormat.mBytesPerPacket = obj->mInputFormat.mBytesPerFrame = sampleSize;
    obj->mInputFormat.mFormatFlags |= kAudioFormatFlagIsNonInterleaved;

    //    obj->mInputFormat.mSampleRate = obj->mGlobalSampleRate;(// set later while initializing audioStreamer or from the client app)




    printf("create output ASBD\n");

    // output format for the mixer unit output bus

    obj->mOutputFormat.mFormatID = kAudioFormatLinearPCM;
    obj->mOutputFormat.mFormatFlags = kAudioFormatFlagsCanonical | (kAudioUnitSampleFractionBits << kLinearPCMFormatFlagsSampleFractionShift);
    obj->mOutputFormat.mChannelsPerFrame = 2;//stereo
    obj->mOutputFormat.mFramesPerPacket = 1;
    obj->mOutputFormat.mBitsPerChannel = 8 * ((UInt32)sizeof(AudioUnitSampleType));

    obj->mOutputFormat.mBytesPerPacket = obj->mOutputFormat.mBytesPerFrame = 2 * ((UInt32)sizeof(AudioUnitSampleType));


    //  obj->mOutputFormat.mSampleRate = obj->mGlobalSampleRate; (// set later while initializing)

N.B:我将采样率与应用分开设置。调音台的i / p和o / p采样率与单声道音频文件的采样率相同。

提前感谢您查看此问题......:)

0 个答案:

没有答案