pub struct SlotAttributes {
pub slot_type: SlotType,
pub slot_id: u8,
pub path: Option<PathBuf>,
pub timestrech_mode: TimeStretchMode,
pub loop_mode: LoopMode,
pub trig_quantization_mode: TrigQuantizationMode,
pub gain: u8,
pub bpm: u16,
}Expand description
A sample slot’s global playback settings – trig quantization, bpm, timestrech mode … anything applied to the sample globally . The Octatrack only stores data when an audio file has been assigned to a sample slot.
§Naming
The Octatrack manual specifically refers to
SAVE SAMPLE SETTINGS will save the trim, slice and attribute settings in a separate file and link it to the sample currently being edited. – page 87
So … these are the SLOT ATTRIBUTES which are saved to a SETTINGS FILE.
§Non-Copy
This type is non-Copy becaue of the path field (PathBuf).
It is super frustrating in downstream applications, but I can’t really do much about it without
- abandonding the ability to transcode into YAML and JSON
- doing a hefty work-around where we decode into array data for the rust type
That last option is quite a lot of work as it is basically re-implementing OsString using
fixed array sizes, then writing abstractions for all path methods that we might want to use
on this “path that is really some fixed arrays, but we want everyone to think is a path”.
§No-Default trait
It doesn’t make sense to have default field values for slot_type, slot_id or path.
Fields§
§slot_type: SlotTypeType of sample: STATIC or FLEX
slot_id: u8String ID Number of the slot the sample is assigned to e.g. 001, 002, 003… Maximum of 128 entries for STATIC sample slots, but can be up to 136 for flex slots as there are 8 recorders + 128 flex slots.
path: Option<PathBuf>Relative path to the file on the card from the project directory.
Recording buffer flex slots by default have an empty path attribute, which basically means ‘no path’. In idiomatic rust that’s an option.
timestrech_mode: TimeStretchModeCurrent TimestrechModes setting for the specific slot. Example: TSMODE=2
See TimeStretchMode.
loop_mode: LoopModeCurrent LoopMode setting for the specific slot.
See LoopMode.
trig_quantization_mode: TrigQuantizationModeCurrent TrigQuantizationModes setting for this specific slot.
This is not used for recording buffer ‘flex’ tracks.
See TrigQuantizationMode.
gain: u8Sample gain. 48 is default as per sample attributes file. maximum 96, minimum 0.
bpm: u16BPM of the sample in this slot. The stored representation is the ‘real’ bpm (float to 2 decimal places) multiplied by 24. Default value is 2880 (120 BPM). Max value is 7200 (300 BPM). Min value is 720 (30 BPM).
Implementations§
Source§impl SlotAttributes
impl SlotAttributes
pub fn new( slot_type: SlotType, slot_id: u8, path: Option<PathBuf>, timestretch_mode: Option<TimeStretchMode>, loop_mode: Option<LoopMode>, trig_quantization_mode: Option<TrigQuantizationMode>, gain: Option<u8>, bpm: Option<u16>, ) -> Result<Self, OtToolsIoError>
Sourcepub fn new_no_opts(
slot_type: SlotType,
slot_id: u8,
path: Option<PathBuf>,
) -> Result<Self, OtToolsIoError>
pub fn new_no_opts( slot_type: SlotType, slot_id: u8, path: Option<PathBuf>, ) -> Result<Self, OtToolsIoError>
“I don’t care about optional arguments, just let me create a SlotAttributes”
Trait Implementations§
Source§impl AsMut<SlotAttributes> for SlotAttributes
impl AsMut<SlotAttributes> for SlotAttributes
Source§fn as_mut(&mut self) -> &mut SlotAttributes
fn as_mut(&mut self) -> &mut SlotAttributes
Source§impl AsRef<SlotAttributes> for SlotAttributes
impl AsRef<SlotAttributes> for SlotAttributes
Source§fn as_ref(&self) -> &SlotAttributes
fn as_ref(&self) -> &SlotAttributes
Source§impl Clone for SlotAttributes
impl Clone for SlotAttributes
Source§fn clone(&self) -> SlotAttributes
fn clone(&self) -> SlotAttributes
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SlotAttributes
impl Debug for SlotAttributes
Source§impl<'de> Deserialize<'de> for SlotAttributes
impl<'de> Deserialize<'de> for SlotAttributes
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl Display for SlotAttributes
impl Display for SlotAttributes
impl Eq for SlotAttributes
Source§impl FromStr for SlotAttributes
impl FromStr for SlotAttributes
Source§impl Hash for SlotAttributes
impl Hash for SlotAttributes
Source§impl Ord for SlotAttributes
impl Ord for SlotAttributes
Source§fn cmp(&self, other: &SlotAttributes) -> Ordering
fn cmp(&self, other: &SlotAttributes) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for SlotAttributes
impl PartialEq for SlotAttributes
Source§impl PartialOrd for SlotAttributes
impl PartialOrd for SlotAttributes
Source§impl Serialize for SlotAttributes
impl Serialize for SlotAttributes
impl StructuralPartialEq for SlotAttributes
Auto Trait Implementations§
impl Freeze for SlotAttributes
impl RefUnwindSafe for SlotAttributes
impl Send for SlotAttributes
impl Sync for SlotAttributes
impl Unpin for SlotAttributes
impl UnsafeUnpin for SlotAttributes
impl UnwindSafe for SlotAttributes
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more