xamarin-macios/tests/monotouch-test/AudioUnit/AUGraphTestMac.cs

110 строки
3.1 KiB
C#
Исходник Обычный вид История

#if __MACOS__
2016-05-26 16:06:52 +03:00
using System;
using System.Threading;
2016-05-26 16:06:52 +03:00
using NUnit.Framework;
using AppKit;
using AudioUnit;
using AudioToolbox;
using Foundation;
2016-05-26 16:06:52 +03:00
namespace Xamarin.Mac.Tests {
2016-05-26 16:06:52 +03:00
[TestFixture]
[Preserve (AllMembers = true)]
public class AUGraphTests {
2016-05-26 16:06:52 +03:00
int graphRenderCallbackCount = 0;
int mixerRenderCallbackCount = 0;
AUGraph graph;
AudioUnit.AudioUnit mMixer;
void SetupAUGraph ()
{
graph = new AUGraph ();
AudioComponentDescription mixerDescription = new AudioComponentDescription ();
mixerDescription.ComponentType = AudioComponentType.Mixer;
#if NET
mixerDescription.ComponentSubType = (AudioUnitSubType) AudioTypeMixer.MultiChannel;
#else
2016-05-26 16:06:52 +03:00
mixerDescription.ComponentSubType = (int)AudioTypeMixer.MultiChannel;
#endif
2016-05-26 16:06:52 +03:00
mixerDescription.ComponentFlags = 0;
mixerDescription.ComponentFlagsMask = 0;
mixerDescription.ComponentManufacturer = AudioComponentManufacturerType.Apple;
AudioComponentDescription outputDesciption = new AudioComponentDescription ();
outputDesciption.ComponentType = AudioComponentType.Output;
#if NET
outputDesciption.ComponentSubType = (AudioUnitSubType) AudioTypeOutput.System;
#else
2016-05-26 16:06:52 +03:00
outputDesciption.ComponentSubType = (int)AudioTypeOutput.System;
#endif
2016-05-26 16:06:52 +03:00
outputDesciption.ComponentFlags = 0;
outputDesciption.ComponentFlagsMask = 0;
outputDesciption.ComponentManufacturer = AudioComponentManufacturerType.Apple;
int mixerNode = graph.AddNode (mixerDescription);
int outputNode = graph.AddNode (outputDesciption);
AUGraphError error = graph.ConnnectNodeInput (mixerNode, 0, outputNode, 0);
Assert.AreEqual (AUGraphError.OK, error);
graph.Open ();
mMixer = graph.GetNodeInfo (mixerNode);
AudioUnitStatus status = mMixer.SetElementCount (AudioUnitScopeType.Input, 0);
Assert.AreEqual (AudioUnitStatus.OK, status);
}
[Test]
public void DoTest ()
2016-05-26 16:06:52 +03:00
{
[monotouch-test] Ignore a few audio-related tests when we're running on a VM. (#11744) Fixes these failures when on a VM: Xamarin.Mac.Tests.AudioUnitTests [FAIL] GetCurrentDevice_Test : Expected: True But was: False at Xamarin.Mac.Tests.AudioUnitTests.GetCurrentDevice_Test () [0x00011] in /Users/builder/azdo/_work/1/s/xamarin-macios/tests/monotouch-test/AudioUnit/AudioUnit.cs:37 Xamarin.Mac.Tests.AudioUnitTests : 13 ms Xamarin.Mac.Tests.AUGraphTests [FAIL] DoTest : Did not see events after 1 second at Xamarin.Mac.Tests.AUGraphTests.WaitOnGraphAndMixerCallbacks () [0x00050] in /Users/builder/azdo/_work/1/s/xamarin-macios/tests/monotouch-test/AudioUnit/AUGraphTestMac.cs:93 at Xamarin.Mac.Tests.AUGraphTests.DoTest () [0x0004c] in /Users/builder/azdo/_work/1/s/xamarin-macios/tests/monotouch-test/AudioUnit/AUGraphTestMac.cs:66 Xamarin.Mac.Tests.AUGraphTests : 3113 ms Xamarin.Mac.Tests.AVAudioIONodeTests [FAIL] AVAudioIONodeTests_AudioUnitTest : Foundation.ObjCException : com.apple.coreaudio.avfaudio: error -10879 at (wrapper managed-to-native) ObjCRuntime.Messaging.IntPtr_objc_msgSend(intptr,intptr) at AVFoundation.AVAudioEngine.get_OutputNode () [0x00030] in /Users/builder/azdo/_work/1/s/xamarin-macios/src/build/mac/mobile/AVFoundation/AVAudioEngine.g.cs:1099 at Xamarin.Mac.Tests.AVAudioIONodeTests.AVAudioIONodeTests_AudioUnitTest () [0x0000d] in /Users/builder/azdo/_work/1/s/xamarin-macios/tests/monotouch-test/AVFoundation/AVAudioIONode.cs:23 at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&) at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/src/Xamarin.Mac/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs:395 Xamarin.Mac.Tests.AVAudioIONodeTests : 7 ms
2021-05-31 16:25:08 +03:00
TestRuntime.AssertNotVirtualMachine ();
2016-05-26 16:06:52 +03:00
SetupAUGraph ();
// One of these has to be commented out depending on old\new build
graph.AddRenderNotify (GraphRenderCallback);
//graph.RenderCallback += HandleRenderCallback;
AudioUnitStatus status = mMixer.SetRenderCallback (MixerRenderCallback);
Assert.AreEqual (AudioUnitStatus.OK, status);
2016-05-26 16:06:52 +03:00
WaitOnGraphAndMixerCallbacks ();
2016-05-26 16:06:52 +03:00
}
AudioUnitStatus GraphRenderCallback (AudioUnitRenderActionFlags actionFlags, AudioTimeStamp timeStamp, uint busNumber, uint numberFrames, AudioBuffers data)
{
graphRenderCallbackCount++;
return AudioUnitStatus.NoError;
}
AudioUnitStatus MixerRenderCallback (AudioUnitRenderActionFlags actionFlags, AudioTimeStamp timeStamp, uint busNumber, uint numberFrames, AudioBuffers data)
{
mixerRenderCallbackCount++;
return AudioUnitStatus.NoError;
}
void WaitOnGraphAndMixerCallbacks ()
2016-05-26 16:06:52 +03:00
{
graph.Initialize ();
graph.Start ();
// Wait for 1 second, then give up
try {
for (int i = 0; i < 100; ++i) {
if (graphRenderCallbackCount > 0 && mixerRenderCallbackCount > 0)
return;
Thread.Sleep (10);
2016-05-26 16:06:52 +03:00
}
Assert.Fail ("Did not see events after 1 second");
} finally {
2016-05-26 16:06:52 +03:00
graph.Stop ();
}
}
}
}
#endif // __MACOS__