Struct SampleAttributes

Source
pub struct SampleAttributes {
Show 16 fields pub header: [u8; 21], pub datatype_version: u8, pub unknown: u8, pub tempo: u32, pub trim_len: u32, pub loop_len: u32, pub stretch: u32, pub loop_mode: u32, pub gain: u16, pub quantization: u8, pub trim_start: u32, pub trim_end: u32, pub loop_start: u32, pub slices: [Slice; 64], pub slices_len: u32, pub checksum: u16,
}
Expand description

Struct to create a valid Octatrack .ot file. General metadata for the sample’s configuration on the OT and the slice array with pointer positions for the sliced WAV.

Fields§

§header: [u8; 21]

Header

§datatype_version: u8

Datatype’s version ID//

§unknown: u8

Unknown data

§tempo: u32

Tempo is always the machine UI’s BPM multiplied by 24

§trim_len: u32

Number of bars for the sample trim length marker. By default, trim length should be equal to trim end, and probably loop length too for drum hit sample chains.

§loop_len: u32

Number of bars for the sample loop length marker. By default, loop length should be equal to trim length for sample chains.

§stretch: u32

Default timestrech algorithm applied to the sample. See the ot_sample::options::SampleTimestrechModes enum for suitable choices.

§loop_mode: u32

Default loop mode applied to the sample. See the ot_sample::options::SampleLoopModes enum for suitable choices.

§gain: u16

Gain of the sample. -24.0 db <= x <= +24 db range in the machine’s UI, with increments of 0.5 db changes. 0 <= x <= 96 range in binary data file.

§quantization: u8

Default trig quantization mode applied to the sample. See the ot_sample::options::SampleTrigQuantizationModes enum for suitable choices.

§trim_start: u32

Where the trim start marker is placed for the sample, measured in bars. Default is 0 (start of sample). TODO: measured in bars? or samples?

§trim_end: u32

Where the trim end marker is placed for the sample. When the sample is being played in normal mode (i.e. not using slices), the Octatrack will not play samples past this point. By default, trim length should be equal to trim end, and probably loop length too for drum hit sample chains. TODO: measured in bars? or samples?

§loop_start: u32

Start position for any loops. Default should be the same as trim start. Measured in bars. A note from the Octatrack manual on loop point/start behaviour:

If a loop point is set, the sample will play from the start point to the end point, then loop from the loop point to the end point

§slices: [Slice; 64]

64 length array containing Slices. See the Slice struct for more details. Any empty slice positions should have zero-valued struct fields.

§slices_len: u32

Number of usuable Slices in this sample. Used by the Octatrack to ignore zero-valued Slices in the slices array when loading the sample.

§checksum: u16

Checksum value for the struct. This must be calculated after the struct is created on little-endian systems (requires byte swapping all struct fields to get the correct checksum value).

Implementations§

Source§

impl SampleAttributes

Source

pub fn new( tempo: &f32, stretch: &SampleAttributeTimestrechMode, quantization: &SampleAttributeTrigQuantizationMode, gain: &f32, trim_config: &SampleTrimConfig, loop_config: &SampleLoopConfig, slices: &Slices, ) -> Result<Self, Box<dyn Error>>

Create a new SampleAttributesFile struct. ‘Human-readable’ f32 values for gain and tempo are converted to proper u8 values in this method.

let x = SampleAttributes::new(
    &120.0,
    // ...
    &0.0,
    // ...
).unwrap();
assert_eq!(x.tempo, 2880);
assert_eq!(x.gain, 48);

Trait Implementations§

Source§

impl CalculateChecksum for SampleAttributes

Source§

impl CheckChecksum for SampleAttributes

Source§

impl CheckHeader for SampleAttributes

Source§

impl CheckIntegrity for SampleAttributes

Source§

impl Clone for SampleAttributes

Source§

fn clone(&self) -> SampleAttributes

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SampleAttributes

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Decode for SampleAttributes

Source§

fn decode(bytes: &[u8]) -> Result<Self, Box<dyn Error>>

Decode raw bytes of a .ot data file into a new struct, swap byte values if system is little-endian then do some minor post-processing to get user-friendly settings values.

Source§

impl<'de> Deserialize<'de> for SampleAttributes

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Encode for SampleAttributes

Source§

fn encode(&self) -> Result<Vec<u8>, Box<dyn Error>>

Encodes struct data to binary representation, after some pre-processing.

Before serializing, will:

  1. modify tempo and gain values to machine ranges
  2. swaps bytes of values (when current system is little-endian)
  3. generate checksum value
Source§

impl PartialEq for SampleAttributes

Source§

fn eq(&self, other: &SampleAttributes) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for SampleAttributes

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl SwapBytes for SampleAttributes

Source§

type T = SampleAttributes

Swaps the bytes on all struct fields. MUST BE CALLED BEFORE SERIALISATION WHEN SYSTEM IS LITTLE ENDIAN!

Source§

fn swap_bytes(self) -> Result<Self::T, Box<dyn Error>>

Swap the bytes of all struct fields. Must be applied to the SampleAttributes file to deal with litle-endian/big-endian systems.

Source§

impl StructuralPartialEq for SampleAttributes

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,