c# - Xamarin Monotouch音频单元回调

标签 c# ios audio xamarin.ios xamarin

我在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;
}

最佳答案

这个问题是Xamarin中的错误,他们忘记为InputCallbacks添加方法。

我报告了该错误,但对于需要相同的人来说:

http://nopaste.info/8d0aca98d9.html

它不是很好,但是它显示了如何解决问题,直到Xamarin更新此为止,自己编写一个修复程序。

关于c# - Xamarin Monotouch音频单元回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802825/

相关文章:

c# - 如何将 ODP.NET 集成到存储库类中?

C# MVC Mock Model 通过接口(interface)打破了 Controller

ios - 格式字符串未使用数据参数,但它工作正常

ios - 使用 NSMutableParagraphStyle 会导致表情符号出现问题

c# - 指定的 EntityFramework 架构无效。错误:

c# - 通过命令行将 2 个带空格的文件路径传递给 C# 应用程序

iphone - NSNumberFormatter-Decimal Style-value 当我们再次进入那个文本字段时发生变化,有或没有编辑

audio - PCM/WAV文件样本到实际声音/频率

java - 编译时音频剪辑不播放

c# - N Audio中AudioFileReader.Length和AudioFileReader.TotalTime有什么关系?