playdate_sound/player/fp/
api.rs1use core::ffi::c_char;
2use core::ffi::c_float;
3use core::ffi::c_int;
4use core::ffi::c_void;
5use core::ptr::NonNull;
6
7use sys::ffi::FilePlayer;
8use sys::ffi::sndCallbackProc;
9use sys::ffi::playdate_sound_fileplayer;
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_fileplayer);
28
29impl core::default::Default for Cache {
30 fn default() -> Self { Self(sys::api!(sound.fileplayer)) }
31}
32
33impl From<*const playdate_sound_fileplayer> for Cache {
34 #[inline(always)]
35 fn from(ptr: *const playdate_sound_fileplayer) -> Self { Self(unsafe { ptr.as_ref() }.expect("sp")) }
36}
37
38impl From<&'static playdate_sound_fileplayer> for Cache {
39 #[inline(always)]
40 fn from(r: &'static playdate_sound_fileplayer) -> Self { Self(r) }
41}
42
43impl From<NonNull<playdate_sound_fileplayer>> for Cache {
44 #[inline(always)]
45 fn from(ptr: NonNull<playdate_sound_fileplayer>) -> Self { Self(unsafe { ptr.as_ref() }) }
46}
47
48impl From<&'_ NonNull<playdate_sound_fileplayer>> for Cache {
49 #[inline(always)]
50 fn from(ptr: &NonNull<playdate_sound_fileplayer>) -> 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 load_into_player(&self) -> FnLoadIntoPlayer { self.0.loadIntoPlayer.expect("loadIntoPlayer") }
58 fn set_buffer_length(&self) -> FnSetBufferLength { self.0.setBufferLength.expect("setBufferLength") }
59 fn play(&self) -> FnPlay { self.0.play.expect("play") }
60 fn is_playing(&self) -> FnIsPlaying { self.0.isPlaying.expect("isPlaying") }
61 fn stop(&self) -> FnStop { self.0.stop.expect("stop") }
62 fn set_volume(&self) -> FnSetVolume { self.0.setVolume.expect("setVolume") }
63 fn get_volume(&self) -> FnGetVolume { self.0.getVolume.expect("getVolume") }
64 fn get_length(&self) -> FnGetLength { self.0.getLength.expect("getLength") }
65 fn set_offset(&self) -> FnSetOffset { self.0.setOffset.expect("setOffset") }
66 fn set_rate(&self) -> FnSetRate { self.0.setRate.expect("setRate") }
67 fn set_loop_range(&self) -> FnSetLoopRange { self.0.setLoopRange.expect("setLoopRange") }
68 fn did_underrun(&self) -> FnDidUnderrun { self.0.didUnderrun.expect("didUnderrun") }
69 fn set_stop_on_underrun(&self) -> FnSetStopOnUnderrun { self.0.setStopOnUnderrun.expect("setStopOnUnderrun") }
70 fn set_finish_callback(&self) -> FnSetFinishCallback { self.0.setFinishCallback.expect("setFinishCallback") }
71 fn set_loop_callback(&self) -> FnSetLoopCallback { self.0.setLoopCallback.expect("setLoopCallback") }
72 fn get_offset(&self) -> FnGetOffset { self.0.getOffset.expect("getOffset") }
73 fn get_rate(&self) -> FnGetRate { self.0.getRate.expect("getRate") }
74 fn fade_volume(&self) -> FnFadeVolume { self.0.fadeVolume.expect("fadeVolume") }
75 fn set_mp3_stream_source(&self) -> FnSetMP3StreamSource {
76 self.0.setMP3StreamSource.expect("setMP3StreamSource")
77 }
78}
79
80
81pub trait Api {
82 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::newPlayer")]
84 fn new_player(&self) -> FnNewPlayer { *sys::api!(sound.fileplayer.newPlayer) }
85
86 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::freePlayer")]
88 fn free_player(&self) -> FnFreePlayer { *sys::api!(sound.fileplayer.freePlayer) }
89
90 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::loadIntoPlayer")]
92 fn load_into_player(&self) -> FnLoadIntoPlayer { *sys::api!(sound.fileplayer.loadIntoPlayer) }
93
94 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setBufferLength")]
96 fn set_buffer_length(&self) -> FnSetBufferLength { *sys::api!(sound.fileplayer.setBufferLength) }
97
98 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::play")]
100 fn play(&self) -> FnPlay { *sys::api!(sound.fileplayer.play) }
101
102 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::isPlaying")]
104 fn is_playing(&self) -> FnIsPlaying { *sys::api!(sound.fileplayer.isPlaying) }
105
106 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::stop")]
108 fn stop(&self) -> FnStop { *sys::api!(sound.fileplayer.stop) }
109
110 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setVolume")]
112 fn set_volume(&self) -> FnSetVolume { *sys::api!(sound.fileplayer.setVolume) }
113
114 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::getVolume")]
116 fn get_volume(&self) -> FnGetVolume { *sys::api!(sound.fileplayer.getVolume) }
117
118 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::getLength")]
120 fn get_length(&self) -> FnGetLength { *sys::api!(sound.fileplayer.getLength) }
121
122 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setOffset")]
124 fn set_offset(&self) -> FnSetOffset { *sys::api!(sound.fileplayer.setOffset) }
125
126 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setRate")]
128 fn set_rate(&self) -> FnSetRate { *sys::api!(sound.fileplayer.setRate) }
129
130 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setLoopRange")]
132 fn set_loop_range(&self) -> FnSetLoopRange { *sys::api!(sound.fileplayer.setLoopRange) }
133
134 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::didUnderrun")]
136 fn did_underrun(&self) -> FnDidUnderrun { *sys::api!(sound.fileplayer.didUnderrun) }
137
138 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setStopOnUnderrun")]
140 fn set_stop_on_underrun(&self) -> FnSetStopOnUnderrun { *sys::api!(sound.fileplayer.setStopOnUnderrun) }
141
142 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setFinishCallback")]
144 fn set_finish_callback(&self) -> FnSetFinishCallback { *sys::api!(sound.fileplayer.setFinishCallback) }
145
146 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setLoopCallback")]
148 fn set_loop_callback(&self) -> FnSetLoopCallback { *sys::api!(sound.fileplayer.setLoopCallback) }
149
150 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::getOffset")]
152 fn get_offset(&self) -> FnGetOffset { *sys::api!(sound.fileplayer.getOffset) }
153
154 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::getRate")]
156 fn get_rate(&self) -> FnGetRate { *sys::api!(sound.fileplayer.getRate) }
157
158 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::fadeVolume")]
160 fn fade_volume(&self) -> FnFadeVolume { *sys::api!(sound.fileplayer.fadeVolume) }
161
162 #[doc(alias = "sys::ffi::playdate_sound_fileplayer::setMP3StreamSource")]
164 fn set_mp3_stream_source(&self) -> FnSetMP3StreamSource { *sys::api!(sound.fileplayer.setMP3StreamSource) }
165}
166
167
168type FnNewPlayer = unsafe extern "C" fn() -> *mut FilePlayer;
169type FnFreePlayer = unsafe extern "C" fn(player: *mut FilePlayer);
170
171type FnLoadIntoPlayer = unsafe extern "C" fn(player: *mut FilePlayer, path: *const c_char) -> c_int;
172type FnSetBufferLength = unsafe extern "C" fn(player: *mut FilePlayer, bufferLen: c_float);
173
174type FnPlay = unsafe extern "C" fn(player: *mut FilePlayer, repeat: c_int) -> c_int;
175type FnIsPlaying = unsafe extern "C" fn(player: *mut FilePlayer) -> c_int;
176type FnStop = unsafe extern "C" fn(player: *mut FilePlayer);
177type FnSetVolume = unsafe extern "C" fn(player: *mut FilePlayer, left: c_float, right: c_float);
178type FnGetVolume = unsafe extern "C" fn(player: *mut FilePlayer, left: *mut c_float, right: *mut c_float);
179type FnGetLength = unsafe extern "C" fn(player: *mut FilePlayer) -> c_float;
180type FnSetOffset = unsafe extern "C" fn(player: *mut FilePlayer, offset: c_float);
181type FnSetRate = unsafe extern "C" fn(player: *mut FilePlayer, rate: c_float);
182type FnSetLoopRange = unsafe extern "C" fn(player: *mut FilePlayer, start: c_float, end: c_float);
183type FnDidUnderrun = unsafe extern "C" fn(player: *mut FilePlayer) -> c_int;
184type FnSetStopOnUnderrun = unsafe extern "C" fn(player: *mut FilePlayer, flag: c_int);
185type FnSetFinishCallback =
186 unsafe extern "C" fn(player: *mut FilePlayer, callback: sndCallbackProc, userdata: *mut c_void);
187type FnSetLoopCallback =
188 unsafe extern "C" fn(player: *mut FilePlayer, callback: sndCallbackProc, userdata: *mut c_void);
189type FnGetOffset = unsafe extern "C" fn(player: *mut FilePlayer) -> c_float;
190type FnGetRate = unsafe extern "C" fn(player: *mut FilePlayer) -> c_float;
191type FnFadeVolume = unsafe extern "C" fn(player: *mut FilePlayer,
192 left: c_float,
193 right: c_float,
194 len: i32,
195 finishCallback: sndCallbackProc,
196 userdata: *mut c_void);
197type FnSetMP3StreamSource = unsafe extern "C" fn(player: *mut FilePlayer,
198 dataSource: Option<FnDataSource>,
199 userdata: *mut c_void,
200 bufferLen: c_float);
201type FnDataSource = unsafe extern "C" fn(data: *mut u8, bytes: c_int, userdata: *mut c_void) -> c_int;