94 строки
2.7 KiB
C#
94 строки
2.7 KiB
C#
//
|
|
// Unit tests for AudioQueue
|
|
//
|
|
// Authors:
|
|
// Marek Safar (marek.safar@gmail.com)
|
|
//
|
|
// Copyright 2012 Xamarin Inc. All rights reserved.
|
|
//
|
|
|
|
#if !__WATCHOS__
|
|
|
|
using System.Collections.Generic;
|
|
using Foundation;
|
|
using AudioToolbox;
|
|
using NUnit.Framework;
|
|
|
|
namespace MonoTouchFixtures.AudioToolbox {
|
|
|
|
[TestFixture]
|
|
[Preserve (AllMembers = true)]
|
|
public class AudioQueueTest {
|
|
#if !MONOMAC && !__MACCATALYST__ // HardwareCodecPolicy and SetChannelAssignments are iOS only
|
|
[Test]
|
|
public void Properties ()
|
|
{
|
|
TestRuntime.RequestMicrophonePermission ();
|
|
|
|
var b = new InputAudioQueue (AudioStreamBasicDescription.CreateLinearPCM ());
|
|
|
|
b.HardwareCodecPolicy = AudioQueueHardwareCodecPolicy.UseSoftwareOnly;
|
|
|
|
Assert.That (b.HardwareCodecPolicy, Is.EqualTo (AudioQueueHardwareCodecPolicy.UseSoftwareOnly), "#1");
|
|
}
|
|
|
|
[Test]
|
|
public void ChannelAssignments ()
|
|
{
|
|
var aq = new OutputAudioQueue (AudioStreamBasicDescription.CreateLinearPCM ());
|
|
|
|
var route = global::AVFoundation.AVAudioSession.SharedInstance ().CurrentRoute;
|
|
var outputs = route.Outputs;
|
|
if (outputs.Length > 0) {
|
|
var port = outputs [0];
|
|
var assignments = new List<AudioQueueChannelAssignment> ();
|
|
var id = port.UID;
|
|
for (int i = 0; i < aq.AudioStreamDescription.ChannelsPerFrame; i++) {
|
|
assignments.Add (new AudioQueueChannelAssignment (id, (uint) i));
|
|
}
|
|
Assert.AreEqual (AudioQueueStatus.Ok, aq.SetChannelAssignments (assignments.ToArray ()));
|
|
} else {
|
|
Assert.Ignore ("No outputs in the current route ({0})", route.Description);
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
[Test]
|
|
[Ignore ("Fails on some machines with undefined error code 5")]
|
|
public void ProcessingTap ()
|
|
{
|
|
var aq = new InputAudioQueue (AudioStreamBasicDescription.CreateLinearPCM ());
|
|
AudioQueueStatus ret;
|
|
bool called = false;
|
|
|
|
using (var tap = aq.CreateProcessingTap (
|
|
delegate (AudioQueueProcessingTap audioQueueTap, uint numberOfFrames, ref AudioTimeStamp timeStamp, ref AudioQueueProcessingTapFlags flags, AudioBuffers data)
|
|
{
|
|
called = true;
|
|
return 33;
|
|
}, AudioQueueProcessingTapFlags.PreEffects, out ret)) {
|
|
Assert.AreEqual (AudioQueueStatus.Ok, ret, "#1");
|
|
|
|
unsafe {
|
|
AudioQueueBuffer* buffer;
|
|
Assert.AreEqual (AudioQueueStatus.Ok, aq.AllocateBuffer (5000, out buffer), "#2");
|
|
Assert.AreEqual (AudioQueueStatus.Ok, aq.EnqueueBuffer (buffer), "#3");
|
|
//Assert.AreEqual (AudioQueueStatus.Ok, aq.Start (), "#4");
|
|
}
|
|
}
|
|
|
|
//Assert.That (called, Is.True, "#10");
|
|
}
|
|
|
|
[Test]
|
|
public void InvalidAudioBasicDescription ()
|
|
{
|
|
TestRuntime.RequestMicrophonePermission ();
|
|
Assert.Throws<AudioQueueException> (() => new InputAudioQueue (new AudioStreamBasicDescription ()), "A");
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // !__WATCHOS__
|