diff --git a/src/AudioToolbox/AudioServices.cs b/src/AudioToolbox/AudioServices.cs index 918e2a04ee..c50a4ebb3e 100644 --- a/src/AudioToolbox/AudioServices.cs +++ b/src/AudioToolbox/AudioServices.cs @@ -61,12 +61,12 @@ namespace AudioToolbox { //static extern AudioServicesError AudioServicesGetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, IntPtr specifier, out uint propertyDataSize, IntPtr propertyData); [DllImport (Constants.AudioToolboxLibrary)] - public static extern AudioServicesError AudioServicesGetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, ref uint specifier, out uint propertyDataSize, out uint propertyData); + public unsafe static extern AudioServicesError AudioServicesGetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, uint* specifier, uint* propertyDataSize, uint* propertyData); //[DllImport (Constants.AudioToolboxLibrary)] //static extern AudioServicesError AudioServicesSetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, IntPtr specifier, uint propertyDataSize, IntPtr propertyData); [DllImport (Constants.AudioToolboxLibrary)] - public static extern AudioServicesError AudioServicesSetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, ref uint specifier, uint propertyDataSize, ref uint propertyData); + public unsafe static extern AudioServicesError AudioServicesSetProperty (AudioServicesPropertyKey propertyId, uint specifierSize, uint* specifier, uint propertyDataSize, uint* propertyData); } } diff --git a/src/AudioToolbox/SystemSound.cs b/src/AudioToolbox/SystemSound.cs index 23fbca9a36..70295f4cb8 100644 --- a/src/AudioToolbox/SystemSound.cs +++ b/src/AudioToolbox/SystemSound.cs @@ -101,8 +101,12 @@ namespace AudioToolbox { get { uint out_size = sizeof (uint); uint data; + AudioServicesError res; + var soundId = this.soundId; - var res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), ref soundId, out out_size, out data); + unsafe { + res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), &soundId, &out_size, &data); + } if (res != AudioServicesError.None) throw new ArgumentException (res.ToString ()); @@ -111,8 +115,12 @@ namespace AudioToolbox { set { uint data = value ? (uint) 1 : 0; + AudioServicesError res; + var soundId = this.soundId; - var res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), ref soundId, sizeof (uint), ref data); + unsafe { + res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.IsUISound, sizeof (AudioServicesPropertyKey), &soundId, sizeof (uint), &data); + } if (res != AudioServicesError.None) throw new ArgumentException (res.ToString ()); } @@ -122,8 +130,11 @@ namespace AudioToolbox { get { uint out_size = sizeof (uint); uint data; - - var res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), ref soundId, out out_size, out data); + AudioServicesError res; + var soundId = this.soundId; + unsafe { + res = AudioServices.AudioServicesGetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), &soundId, &out_size, &data); + } if (res != AudioServicesError.None) throw new ArgumentException (res.ToString ()); @@ -132,8 +143,11 @@ namespace AudioToolbox { set { uint data = value ? (uint) 1 : 0; - - var res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), ref soundId, sizeof (uint), ref data); + AudioServicesError res; + var soundId = this.soundId; + unsafe { + res = AudioServices.AudioServicesSetProperty (AudioServicesPropertyKey.CompletePlaybackIfAppDies, sizeof (AudioServicesPropertyKey), &soundId, sizeof (uint), &data); + } if (res != AudioServicesError.None) throw new ArgumentException (res.ToString ()); } diff --git a/tests/cecil-tests/BlittablePInvokes.KnownFailures.cs b/tests/cecil-tests/BlittablePInvokes.KnownFailures.cs index 89b5572cd0..90b2fadc70 100644 --- a/tests/cecil-tests/BlittablePInvokes.KnownFailures.cs +++ b/tests/cecil-tests/BlittablePInvokes.KnownFailures.cs @@ -76,8 +76,6 @@ namespace Cecil.Tests { "AudioToolbox.AudioQueueStatus AudioToolbox.AudioQueueProcessingTap::AudioQueueProcessingTapGetSourceAudio(System.IntPtr,System.UInt32,AudioToolbox.AudioTimeStamp&,AudioToolbox.AudioQueueProcessingTapFlags&,System.UInt32&,System.IntPtr)", "AudioToolbox.AudioQueueStatus AudioToolbox.OutputAudioQueue::AudioQueueOfflineRender(System.IntPtr,AudioToolbox.AudioTimeStamp&,AudioToolbox.AudioQueueBuffer*,System.Int32)", "AudioToolbox.AudioQueueStatus AudioToolbox.OutputAudioQueue::AudioQueueSetOfflineRenderFormat(System.IntPtr,AudioToolbox.AudioStreamBasicDescription&,System.IntPtr)", - "AudioToolbox.AudioServicesError AudioToolbox.AudioServices::AudioServicesGetProperty(AudioToolbox.AudioServicesPropertyKey,System.UInt32,System.UInt32&,System.UInt32&,System.UInt32&)", - "AudioToolbox.AudioServicesError AudioToolbox.AudioServices::AudioServicesSetProperty(AudioToolbox.AudioServicesPropertyKey,System.UInt32,System.UInt32&,System.UInt32,System.UInt32&)", "AudioToolbox.MusicPlayerStatus AudioToolbox.MusicSequence::MusicSequenceBarBeatTimeToBeats(System.IntPtr,AudioToolbox.CABarBeatTime,System.Double&)", "AudioToolbox.MusicPlayerStatus AudioToolbox.MusicSequence::MusicSequenceBeatsToBarBeatTime(System.IntPtr,System.Double,System.Int32,AudioToolbox.CABarBeatTime&)", "AudioToolbox.MusicPlayerStatus AudioToolbox.MusicSequence::MusicSequenceFileCreateData(System.IntPtr,AudioToolbox.MusicSequenceFileTypeID,AudioToolbox.MusicSequenceFileFlags,System.UInt16,System.IntPtr&)", diff --git a/tests/monotouch-test/AudioToolbox/SystemSoundTest.cs b/tests/monotouch-test/AudioToolbox/SystemSoundTest.cs index 59c8df597c..eed2ea1c39 100644 --- a/tests/monotouch-test/AudioToolbox/SystemSoundTest.cs +++ b/tests/monotouch-test/AudioToolbox/SystemSoundTest.cs @@ -53,6 +53,16 @@ namespace MonoTouchFixtures.AudioToolbox { using (var ss = SystemSound.FromFile (NSUrl.FromFilename (path))) { Assert.That (ss.IsUISound, Is.True, "#1"); Assert.That (ss.CompletePlaybackIfAppDies, Is.False, "#2"); + + ss.CompletePlaybackIfAppDies = true; + ss.IsUISound = false; + Assert.That (ss.IsUISound, Is.False, "#1 B"); + Assert.That (ss.CompletePlaybackIfAppDies, Is.True, "#2 B"); + + ss.CompletePlaybackIfAppDies = false; + ss.IsUISound = true; + Assert.That (ss.IsUISound, Is.True, "#1 C"); + Assert.That (ss.CompletePlaybackIfAppDies, Is.False, "#2 C"); } }