2010-06-24 73 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]; 
相關問題