HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS输入麦克风输出蓝牙设备大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试从Mic获取输入并使用audioRouteOverride将其输出到我的蓝牙设备.但没有运气. iphone麦克风输出仍然是 iphone内置扬声器.我期待kAudioSessionOutputRoute_BluetoothA2DP是这里的关键.
但它没有按预期工作.

以下是我使用的代码

- (id) init {
    self = [super init];

    OSStatus status;

    // Describe audio component
    AudioComponentDescription desc;
    desc.componentType = kAudioUnitType_Output;
    desc.componentSubType = kAudioUnitSubType_RemoteIO;
    desc.componentFlags = 0;
    desc.componentFlagsmask = 0;
    desc.componentManufacturer = kAudioUnitManufacturer_Apple;

    // Get component
    AudioComponent inputComponent = AudioComponentFindNext(NULL,&desc);

    // Get audio units
    status = AudioComponenTinstanceNew(inputComponent,&audioUnit);
    checkStatus(status);

    // Enable IO for recording
    UInt32 flag = 1;
    status = AudioUnitSetProperty(audioUnit,kAudioOutputUnitProperty_EnableIO,kAudioUnitScope_Input,kInputBus,&flag,sizeof(flag));
    checkStatus(status);

    // Enable IO for playBACk
    status = AudioUnitSetProperty(audioUnit,kAudioUnitScope_Output,kOutputBus,sizeof(flag));
    checkStatus(status);

    // Describe format
    AudioStreamBasicDescription audioFormat;
    audioFormat.mSampleRate         = 44100.00;
    audioFormat.mFormatID           = kAudioFormatLinearPCM;
    audioFormat.mFormatFlags        = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    audioFormat.mFramesPerPacket    = 1;
    audioFormat.mChAnnelsPerFrame   = 1;
    audioFormat.mBitsPerChAnnel     = 16;
    audioFormat.mBytesPerPacket     = 2;
    audioFormat.mBytesPerFrame      = 2;

    // Apply format
    status = AudioUnitSetProperty(audioUnit,kAudioUnitProperty_StreamFormat,&audioFormat,sizeof(audioFormat));
    checkStatus(status);
    status = AudioUnitSetProperty(audioUnit,sizeof(audioFormat));
    checkStatus(status);


    // Set input callBACk
    AURenderCallBACkStruct callBACkStruct;
    callBACkStruct.inputProc = recordingCallBACk;
    callBACkStruct.inputProcRefCon = self;
    status = AudioUnitSetProperty(audioUnit,kAudioOutputUnitProperty_SeTinputCallBACk,kAudioUnitScope_Global,&callBACkStruct,sizeof(callBACkStruct));
    checkStatus(status);

    // Set output callBACk
    callBACkStruct.inputProc = playBACkCallBACk;
    callBACkStruct.inputProcRefCon = self;
    status = AudioUnitSetProperty(audioUnit,kAudioUnitProperty_SetRenderCallBACk,sizeof(callBACkStruct));
    checkStatus(status);

    // Disable buffer alLOCATIOn for the recorder (optional - do this if we want to pass in our own)
    flag = 0;
    status = AudioUnitSetProperty(audioUnit,kAudioUnitProperty_ShouldAllocateBuffer,sizeof(flag));

    NSLog(@"%ld",(long)status);
    // Allocate our own buffers (1 chAnnel,16 bits per sample,thus 16 bits per frame,thus 2 bytes per framE).
    // Practice learns the buffers used contain 512 frames,if this changes it will be fixed in processAudio.
    tempBuffer.mnumberChAnnels = 1;
    tempBuffer.mDataByteSize = 512 * 2;
    tempBuffer.mData = malloc( 512 * 2 );

    UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
    status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,sizeof(audioCategory),&audioCategory);
    NSLog(@"%ld",(long)status);


    UInt32 allowmixing = true;
    status = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategorymixWithOthers,sizeof(allowmixing),&allowmixing);

    UInt32 audioRouteOverride = kAudioSessionOutputRoute_BluetoothA2DP; //kAudioSessionOverrideAudioRoute_Speaker;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverridE),&audioRouteOverridE);

    status = AudioUniTinitialize(audioUnit);
    checkStatus(status);

    return self;
}

解决方法

@H_674_15@ ust用Apple确认了.这是不可能实现的.蓝牙总是成对出现麦克风和麦克风.扬声器在一起;)

大佬总结

以上是大佬教程为你收集整理的iOS输入麦克风输出蓝牙设备全部内容,希望文章能够帮你解决iOS输入麦克风输出蓝牙设备所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。