playdate_sound/player/sp/
api.rs1use core::ffi::c_void;
2use core::ffi::c_float;
3use core::ffi::c_int;
4use core::ptr::NonNull;
5
6use sys::ffi::AudioSample;
7use sys::ffi::SamplePlayer;
8use sys::ffi::sndCallbackProc;
9use sys::ffi::playdate_sound_sampleplayer;
10
11
12#[derive(Debug, Clone, Copy, core::default::Default)]
16pub struct Default;
17impl Api for Default {}
18
19
20#[derive(Clone, Copy)]
26#[cfg_attr(feature = "bindings-derive-debug", derive(Debug))]
27pub struct Cache(&'static playdate_sound_sampleplayer);
28
29impl core::default::Default for Cache {
30 fn default() -> Self { Self(sys::api!(sound.sampleplayer)) }
31}
32
33impl From<*const playdate_sound_sampleplayer> for Cache {
34 #[inline(always)]
35 fn from(ptr: *const playdate_sound_sampleplayer) -> Self { Self(unsafe { ptr.as_ref() }.expect("sp")) }
36}
37
38impl From<&'static playdate_sound_sampleplayer> for Cache {
39 #[inline(always)]
40 fn from(r: &'static playdate_sound_sampleplayer) -> Self { Self(r) }
41}
42
43impl From<NonNull<playdate_sound_sampleplayer>> for Cache {
44 #[inline(always)]
45 fn from(ptr: NonNull<playdate_sound_sampleplayer>) -> Self { Self(unsafe { ptr.as_ref() }) }
46}
47
48impl From<&'_ NonNull<playdate_sound_sampleplayer>> for Cache {
49 #[inline(always)]
50 fn from(ptr: &NonNull<playdate_sound_sampleplayer>) -> Self { Self(unsafe { ptr.as_ref() }) }
51}
52
53
54impl Api for Cache {
55 fn new_player(&self) -> FnNewPlayer { self.0.newPlayer.expect("newPlayer") }
56 fn free_player(&self) -> FnFreePlayer { self.0.freePlayer.expect("freePlayer") }
57 fn set_sample(&self) -> FnSetSample { self.0.setSample.expect("setSample") }
58 fn play(&self) -> FnPlay { self.0.play.expect("play") }
59 fn is_playing(&self) -> FnIsPlaying { self.0.isPlaying.expect("isPlaying") }
60 fn stop(&self) -> FnStop { self.0.stop.expect("stop") }
61 fn set_volume(&self) -> FnSetVolume { self.0.setVolume.expect("setVolume") }
62 fn get_volume(&self) -> FnGetVolume { self.0.getVolume.expect("getVolume") }
63 fn get_length(&self) -> FnGetLength { self.0.getLength.expect("getLength") }
64 fn set_offset(&self) -> FnSetOffset { self.0.setOffset.expect("setOffset") }
65 fn set_rate(&self) -> FnSetRate { self.0.setRate.expect("setRate") }
66 fn set_play_range(&self) -> FnSetPlayRange { self.0.setPlayRange.expect("setPlayRange") }
67 fn set_finish_callback(&self) -> FnSetFinishCallback { self.0.setFinishCallback.expect("setFinishCallback") }
68 fn set_loop_callback(&self) -> FnSetLoopCallback { self.0.setLoopCallback.expect("setLoopCallback") }
69 fn get_offset(&self) -> FnGetOffset { self.0.getOffset.expect("getOffset") }
70 fn get_rate(&self) -> FnGetRate { self.0.getRate.expect("getRate") }
71 fn set_paused(&self) -> FnSetPaused { self.0.setPaused.expect("setPaused") }
72}
73
74
75pub trait Api {
76 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::newPlayer")]
78 fn new_player(&self) -> FnNewPlayer { *sys::api!(sound.sampleplayer.newPlayer) }
79
80 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::freePlayer")]
82 fn free_player(&self) -> FnFreePlayer { *sys::api!(sound.sampleplayer.freePlayer) }
83
84 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setSample")]
86 fn set_sample(&self) -> FnSetSample { *sys::api!(sound.sampleplayer.setSample) }
87
88 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::play")]
90 fn play(&self) -> FnPlay { *sys::api!(sound.sampleplayer.play) }
91
92 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::isPlaying")]
94 fn is_playing(&self) -> FnIsPlaying { *sys::api!(sound.sampleplayer.isPlaying) }
95
96 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::stop")]
98 fn stop(&self) -> FnStop { *sys::api!(sound.sampleplayer.stop) }
99
100 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setVolume")]
102 fn set_volume(&self) -> FnSetVolume { *sys::api!(sound.sampleplayer.setVolume) }
103
104 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::getVolume")]
106 fn get_volume(&self) -> FnGetVolume { *sys::api!(sound.sampleplayer.getVolume) }
107
108 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::getLength")]
110 fn get_length(&self) -> FnGetLength { *sys::api!(sound.sampleplayer.getLength) }
111
112 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setOffset")]
114 fn set_offset(&self) -> FnSetOffset { *sys::api!(sound.sampleplayer.setOffset) }
115
116 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setRate")]
118 fn set_rate(&self) -> FnSetRate { *sys::api!(sound.sampleplayer.setRate) }
119
120 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setPlayRange")]
122 fn set_play_range(&self) -> FnSetPlayRange { *sys::api!(sound.sampleplayer.setPlayRange) }
123
124 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setFinishCallback")]
126 fn set_finish_callback(&self) -> FnSetFinishCallback { *sys::api!(sound.sampleplayer.setFinishCallback) }
127
128 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setLoopCallback")]
130 fn set_loop_callback(&self) -> FnSetLoopCallback { *sys::api!(sound.sampleplayer.setLoopCallback) }
131
132 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::getOffset")]
134 fn get_offset(&self) -> FnGetOffset { *sys::api!(sound.sampleplayer.getOffset) }
135
136 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::getRate")]
138 fn get_rate(&self) -> FnGetRate { *sys::api!(sound.sampleplayer.getRate) }
139
140 #[doc(alias = "sys::ffi::playdate_sound_sampleplayer::setPaused")]
142 fn set_paused(&self) -> FnSetPaused { *sys::api!(sound.sampleplayer.setPaused) }
143}
144
145
146type FnNewPlayer = unsafe extern "C" fn() -> *mut SamplePlayer;
147type FnFreePlayer = unsafe extern "C" fn(player: *mut SamplePlayer);
148type FnSetSample = unsafe extern "C" fn(player: *mut SamplePlayer, sample: *mut AudioSample);
149type FnPlay = unsafe extern "C" fn(player: *mut SamplePlayer, repeat: c_int, rate: c_float) -> c_int;
150type FnIsPlaying = unsafe extern "C" fn(player: *mut SamplePlayer) -> c_int;
151type FnStop = unsafe extern "C" fn(player: *mut SamplePlayer);
152type FnSetVolume = unsafe extern "C" fn(player: *mut SamplePlayer, left: c_float, right: c_float);
153type FnGetVolume = unsafe extern "C" fn(player: *mut SamplePlayer, left: *mut c_float, right: *mut c_float);
154type FnGetLength = unsafe extern "C" fn(player: *mut SamplePlayer) -> c_float;
155type FnSetOffset = unsafe extern "C" fn(player: *mut SamplePlayer, offset: c_float);
156type FnSetRate = unsafe extern "C" fn(player: *mut SamplePlayer, rate: c_float);
157type FnSetPlayRange = unsafe extern "C" fn(player: *mut SamplePlayer, start: c_int, end: c_int);
158type FnSetFinishCallback =
159 unsafe extern "C" fn(player: *mut SamplePlayer, callback: sndCallbackProc, userdata: *mut c_void);
160type FnSetLoopCallback =
161 unsafe extern "C" fn(player: *mut SamplePlayer, callback: sndCallbackProc, userdata: *mut c_void);
162type FnGetOffset = unsafe extern "C" fn(player: *mut SamplePlayer) -> c_float;
163type FnGetRate = unsafe extern "C" fn(player: *mut SamplePlayer) -> c_float;
164type FnSetPaused = unsafe extern "C" fn(player: *mut SamplePlayer, flag: c_int);