【发布时间】:2013-09-14 14:34:15
【问题描述】:
我对 MonoTouch/Xamarin 中的音频单元有疑问。
我似乎无法在录制时收到回调,只能播放。 我用了这个例子: https://github.com/xamarin/monotouch-samples/blob/master/AUSoundTriggeredPlayingSoundMemoryBased/ExtAudioBufferPlayer.cs
并寻找 Obj C 示例。 Obj C 示例与我的代码几乎相同,所以我对这件事有点困惑。
如果运行我的示例,输出是:
输入0
输出的总线号是什么。
所以预期的输出应该是:
输入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;
}
【问题讨论】:
-
也许发布一个指向 Objective-C 示例的链接,以尝试重现和理解差异。
-
@miguel.de.icaza 这个例子 100% 有效 atastypixel.com/blog/using-remoteio-audio-unit/comment-page-1 我试图打开一张票,但不知何故你的票务系统忽略了我的电子邮件。
-
你有没有得到这个工作,我有同样的问题。
标签: c# ios audio xamarin.ios xamarin