1

MonoTouch/Xamarin のオーディオ ユニットに問題があります。

再生だけで、録音時にコールバックを取得できないようです。この例を使用しました: https://github.com/xamarin/monotouch-samples/blob/master/AUSoundTriggeredPlayingSoundMemoryBased/ExtAudioBufferPlayer.cs

Obj Cの例を探しました。Obj C の例は私のコードとほとんど同じなので、このことについて少し混乱しています。

私の例を実行した場合の出力は次のとおりです。

INPUT0

出力用のバス番号です。

したがって、予想される出力は次のようになります。

入力1

私の質問は、録音コールバックと再生コールバックを同時に実行する方法、または録音コールバックを取得する方法です。

私のコード:

void prepareAudioUnit()
{
    // AudioSession
    AudioSession.Initialize();
    AudioSession.Category = AudioSessionCategory.PlayAndRecord;
    AudioSession.PreferredHardwareIOBufferDuration = Config.packetLength;
    AudioSession.PreferredHardwareSampleRate = Format.samplingRate;
    //AudioSession.SetActive (false);
    AudioSession.SetActive(true);
    Logger.log("HWSR:" + AudioSession.CurrentHardwareSampleRate);

    // Getting AudioComponent Remote output 
    _audioComponent = AudioComponent.FindComponent(AudioTypeOutput.VoiceProcessingIO);

    // creating an audio unit instanc
    _audioUnit = new AudioUnit(_audioComponent);

    // turning on microphone
    _audioUnit.SetEnableIO(true,
                            AudioUnitScopeType.Input,
                            1 // Remote Input
                            );
    _audioUnit.SetEnableIO(true,
                            AudioUnitScopeType.Output,
                            0 // Remote output
                            );

    // setting audio format
    _audioUnit.SetAudioFormat(Format.AudioStreamBasicDescription,
                               AudioUnitScopeType.Output,
                               1
                               );
    _audioUnit.SetAudioFormat(Format.AudioStreamBasicDescription,
                               AudioUnitScopeType.Input,
                               0
                               );

    // setting callback method
    _audioUnit.SetRenderCallback(_audioUnit_OutputCallback, AudioUnitScopeType.Global, 0);
    _audioUnit.SetRenderCallback(_audioUnit_InputCallback, AudioUnitScopeType.Global, 1);
}

AudioUnitStatus _audioUnit_OutputCallback(AudioUnitRenderActionFlags actionFlags, AudioTimeStamp timeStamp, uint busNumber, uint numberFrames, AudioBuffers data)
{
    Logger.log("OUTPUT" + busNumber);
    return AudioUnitStatus.NoError;
}

AudioUnitStatus _audioUnit_InputCallback(AudioUnitRenderActionFlags actionFlags, AudioTimeStamp timeStamp, uint busNumber, uint numberFrames, AudioBuffers data)
{
    Logger.log("INPUT" + busNumber);
    return AudioUnitStatus.NoError;
}
4

1 に答える 1