Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/AudioToolbox/AudioServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ static class AudioServices {
//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);
}
}
26 changes: 20 additions & 6 deletions src/AudioToolbox/SystemSound.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,12 @@ public bool IsUISound {
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 ());

Expand All @@ -111,8 +115,12 @@ public bool IsUISound {

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 ());
}
Expand All @@ -122,8 +130,11 @@ public bool CompletePlaybackIfAppDies {
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 ());

Expand All @@ -132,8 +143,11 @@ public bool CompletePlaybackIfAppDies {

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 ());
}
Expand Down
2 changes: 0 additions & 2 deletions tests/cecil-tests/BlittablePInvokes.KnownFailures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,6 @@ public partial class BlittablePInvokes {
"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&)",
Expand Down
10 changes: 10 additions & 0 deletions tests/monotouch-test/AudioToolbox/SystemSoundTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ public void Properties ()
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");
}
}

Expand Down