2010-06-24 47 views
0

它只能在耳麦中播放!播放iphone音频中的“ipod”麦克风

我使用远程IO播放

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); // Enable IO for recording UInt32 flag = 1; status = AudioUnitSetProperty(audioUnit, 
      kAudioOutputUnitProperty_EnableIO, 
      kAudioUnitScope_Input, 
      kInputBus, 
      &flag, 
      sizeof(flag)); // Enable IO for playback status = AudioUnitSetProperty(audioUnit, 
      kAudioOutputUnitProperty_EnableIO, 
      kAudioUnitScope_Output, 
      kOutputBus, 
      &flag, 
      sizeof(flag)); // Describe format audioFormat.mSampleRate = 44100; 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, 
      kAudioUnitScope_Output, 
      kInputBus, 
      &audioFormat, 
      sizeof(audioFormat)); 
    status = AudioUnitSetProperty(audioUnit, 
      kAudioUnitProperty_StreamFormat, 
      kAudioUnitScope_Input, 
      kOutputBus, 
      &audioFormat, 
      sizeof(audioFormat)); AURenderCallbackStruct callbackStruct; // Set output callback callbackStruct.inputProc = playbackCallback; callbackStruct.inputProcRefCon = self; status = AudioUnitSetProperty(audioUnit, 
      kAudioUnitProperty_SetRenderCallback, 
      //kAudioUnitScope_Global, 
      kAudioUnitScope_Output, 
      kOutputBus, 
      &callbackStruct, 
      sizeof(callbackStruct)); // Set input callback 

    callbackStruct.inputProc = recordingCallback; callbackStruct.inputProcRefCon = self; status = AudioUnitSetProperty(audioUnit, 
      kAudioOutputUnitProperty_SetInputCallback, 

      //kAudioUnitScope_Global, 
      kAudioUnitScope_Input, 
      kInputBus, 
      &callbackStruct, 
      sizeof(callbackStruct)); 
    // Disable buffer allocation for the recorder (optional - do this if we want to pass in our own) flag = 0; status = AudioUnitSetProperty(audioUnit, 
      kAudioUnitProperty_ShouldAllocateBuffer, 
      kAudioUnitScope_Output, 
      kInputBus, 
      &flag, 
      sizeof(flag)); /* // TODO: Allocate our own buffers if we want 
*/ // Initialise status = AudioUnitInitialize(audioUnit); AudioUnitSetParameter(audioUnit, kHALOutputParam_Volume, 
     kAudioUnitScope_Input, kInputBus, 
     1, 0); 
+0

我不知道你在问什么。考虑重新处理你的问题。并提供有关实际问题的更多细节。代码很棒,但没有上下文或解释,它是无用的。 – Jasarien 2010-06-24 15:45:47

回答

0

播放音频文件之前,设置AVAudioSession到AVAudioSessionCategoryPlayback

AVAudioSession * audioSession; 
[audioSession setCategory:AVAudioSessionCategoryPlayback error: &error]; 
//Activate the session 
[audioSession setActive:YES error: &error]; 
相关问题