SampleSettingsFile

Struct SampleSettingsFile 

Source
pub struct SampleSettingsFile {
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 a.k.a. a sample settings file. General metadata for the sample’s configuration on the OT and the slice array with pointer positions for the sliced WAV.

NOTE: On the naming for this – 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 … this is the SETTINGS file.

Fields§

§header: [u8; 21]

Header

§datatype_version: u8

Datatype’s version ID//

§unknown: u8

Unknown data – can sometimes be 1, usually 0.

§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 time-stretch algorithm applied to the sample. See the TimeStretchMode enum for suitable choices.

§loop_mode: u32

Default loop mode applied to the sample. See the LoopMode 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 TrigQuantizationMode 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).

§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.

§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 usable 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 SampleSettingsFile

Source

pub fn new( tempo: &u32, stretch: &TimeStretchMode, quantization: &TrigQuantizationMode, gain: &u16, trim_config: &TrimConfig, loop_config: &LoopConfig, slices: &Slices, ) -> Result<Self, SampleSettingsError>

Create a new SampleSettingsFile

Values like tempo and gain need to be normalized to relevant OT bounds before using this method.

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

Trait Implementations§

Source§

impl CheckFileIntegrity for SampleSettingsFile

Source§

impl Clone for SampleSettingsFile

Source§

fn clone(&self) -> SampleSettingsFile

Returns a duplicate 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 SampleSettingsFile

Source§

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

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

impl<'de> Deserialize<'de> for SampleSettingsFile

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 From<&SampleSettingsFile> for LoopConfig

Source§

fn from(decoded: &SampleSettingsFile) -> Self

Converts to this type from the input type.
Source§

impl From<&SampleSettingsFile> for TrimConfig

Source§

fn from(decoded: &SampleSettingsFile) -> Self

Converts to this type from the input type.
Source§

impl From<(&SlotAttributes, &SlotMarkers)> for SampleSettingsFile

Source§

fn from(value: (&SlotAttributes, &SlotMarkers)) -> Self

Converts to this type from the input type.
Source§

impl From<(SlotAttributes, SlotMarkers)> for SampleSettingsFile

Source§

fn from(value: (SlotAttributes, SlotMarkers)) -> Self

Converts to this type from the input type.
Source§

impl From<SampleSettingsFile> for LoopConfig

Source§

fn from(decoded: SampleSettingsFile) -> Self

Converts to this type from the input type.
Source§

impl From<SampleSettingsFile> for TrimConfig

Source§

fn from(decoded: SampleSettingsFile) -> Self

Converts to this type from the input type.
Source§

impl HasChecksumField for SampleSettingsFile

Source§

fn calculate_checksum(&self) -> Result<u16, OtToolsIoError>

Method for calculating the checksum value for types that have a checksum field Read more
Source§

fn check_checksum(&self) -> Result<bool, OtToolsIoError>

Method to verify if checksum is valid in some data type. See this thread. Read more
Source§

impl HasFileVersionField for SampleSettingsFile

Source§

fn check_file_version(&self) -> Result<bool, OtToolsIoError>

Method to verify if the data file version field is valid for the given type. Read more
Source§

impl HasHeaderField for SampleSettingsFile

Source§

fn check_header(&self) -> Result<bool, OtToolsIoError>

Method to verify if header(s) are valid in some data. See this thread. Read more
Source§

impl Hash for SampleSettingsFile

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl OctatrackFileIO for SampleSettingsFile

Source§

fn encode(&self) -> Result<Vec<u8>, OtToolsIoError>

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§

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

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§

fn repr(&self, newlines: Option<bool>)
where Self: Debug,

Read type from an Octatrack data file at path Read more
Source§

fn from_data_file(path: &Path) -> Result<Self, OtToolsIoError>

Read type from an Octatrack data file at path Read more
Source§

fn from_bytes(bytes: &[u8]) -> Result<Self, OtToolsIoError>

Read type from bytes Read more
Source§

fn to_data_file(&self, path: &Path) -> Result<(), OtToolsIoError>

Write type to an Octatrack data file at path Read more
Source§

fn to_bytes(&self) -> Result<Vec<u8>, OtToolsIoError>

Create bytes from type Read more
Source§

fn from_yaml_file(path: &Path) -> Result<Self, OtToolsIoError>

Read type from a YAML file at path Read more
Source§

fn from_yaml_str(yaml: &str) -> Result<Self, OtToolsIoError>

Read type from YAML string Read more
Source§

fn to_yaml_file(&self, path: &Path) -> Result<(), OtToolsIoError>

Write type to a YAML file at path Read more
Source§

fn to_yaml_string(&self) -> Result<String, OtToolsIoError>

Create YAML string from type Read more
Source§

fn from_json_file(path: &Path) -> Result<Self, OtToolsIoError>

Read type from a JSON file at path
Source§

fn from_json_str(json: &str) -> Result<Self, OtToolsIoError>

Create type from JSON string Read more
Source§

fn to_json_file(&self, path: &Path) -> Result<(), OtToolsIoError>

Write type to a JSON file at path Read more
Source§

fn to_json_string(&self) -> Result<String, OtToolsIoError>

Create JSON string from type Read more
Source§

impl PartialEq for SampleSettingsFile

Source§

fn eq(&self, other: &SampleSettingsFile) -> 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 SampleSettingsFile

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 StructuralPartialEq for SampleSettingsFile

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>,