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: u8Datatype’s version ID//
unknown: u8Unknown data
tempo: u32Tempo is always the machine UI’s BPM multiplied by 24
trim_len: u32Number 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: u32Number of bars for the sample loop length marker. By default, loop length should be equal to trim length for sample chains.
stretch: u32Default timestrech algorithm applied to the sample.
See the ot_sample::options::SampleTimestrechModes enum for suitable choices.
loop_mode: u32Default loop mode applied to the sample.
See the ot_sample::options::SampleLoopModes enum for suitable choices.
gain: u16Gain 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: u8Default trig quantization mode applied to the sample.
See the ot_sample::options::SampleTrigQuantizationModes enum for suitable choices.
trim_start: u32Where 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: u32Where 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: u32Start 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: u32Number of usuable Slices in this sample.
Used by the Octatrack to ignore zero-valued Slices in the slices array when loading the sample.
checksum: u16Checksum 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
impl SampleSettingsFile
Sourcepub fn new(
tempo: &u32,
stretch: &TimestrechMode,
quantization: &TrigQuantizationMode,
gain: &u16,
trim_config: &TrimConfig,
loop_config: &LoopConfig,
slices: &Slices,
) -> Result<Self, Box<dyn Error>>
pub fn new( tempo: &u32, stretch: &TimestrechMode, quantization: &TrigQuantizationMode, gain: &u16, trim_config: &TrimConfig, loop_config: &LoopConfig, slices: &Slices, ) -> Result<Self, Box<dyn Error>>
Create a new SampleSettingsFile
Values like tempo and gain need to be normalised 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 CheckChecksum for SampleSettingsFile
impl CheckChecksum for SampleSettingsFile
Source§impl CheckHeader for SampleSettingsFile
impl CheckHeader for SampleSettingsFile
fn check_header(&self) -> bool
Source§impl CheckIntegrity for SampleSettingsFile
impl CheckIntegrity for SampleSettingsFile
Source§impl Clone for SampleSettingsFile
impl Clone for SampleSettingsFile
Source§fn clone(&self) -> SampleSettingsFile
fn clone(&self) -> SampleSettingsFile
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SampleSettingsFile
impl Debug for SampleSettingsFile
Source§impl Decode for SampleSettingsFile
impl Decode for SampleSettingsFile
Source§impl<'de> Deserialize<'de> for SampleSettingsFile
impl<'de> Deserialize<'de> for SampleSettingsFile
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 Encode for SampleSettingsFile
impl Encode for SampleSettingsFile
Source§impl Hash for SampleSettingsFile
impl Hash for SampleSettingsFile
Source§impl OctatrackFileIO for SampleSettingsFile
impl OctatrackFileIO for SampleSettingsFile
Source§fn repr(&self, newlines: Option<bool>) -> Result<(), Box<dyn Error>>where
Self: Debug,
fn repr(&self, newlines: Option<bool>) -> Result<(), Box<dyn Error>>where
Self: Debug,
Source§fn from_data_file(path: &Path) -> Result<Self, Box<dyn Error>>
fn from_data_file(path: &Path) -> Result<Self, Box<dyn Error>>
Source§fn to_data_file(&self, path: &Path) -> Result<(), Box<dyn Error>>
fn to_data_file(&self, path: &Path) -> Result<(), Box<dyn Error>>
Source§fn from_yaml_file(path: &Path) -> Result<Self, Box<dyn Error>>
fn from_yaml_file(path: &Path) -> Result<Self, Box<dyn Error>>
Source§fn from_yaml_str(yaml: &str) -> Result<Self, Box<dyn Error>>
fn from_yaml_str(yaml: &str) -> Result<Self, Box<dyn Error>>
Source§fn to_yaml_file(&self, path: &Path) -> Result<(), Box<dyn Error>>
fn to_yaml_file(&self, path: &Path) -> Result<(), Box<dyn Error>>
Source§fn to_yaml_string(&self) -> Result<String, Box<dyn Error>>
fn to_yaml_string(&self) -> Result<String, Box<dyn Error>>
Source§fn from_json_file(path: &Path) -> Result<Self, Box<dyn Error>>
fn from_json_file(path: &Path) -> Result<Self, Box<dyn Error>>
Source§fn from_json_str(json: &str) -> Result<Self, Box<dyn Error>>
fn from_json_str(json: &str) -> Result<Self, Box<dyn Error>>
Source§impl PartialEq for SampleSettingsFile
impl PartialEq for SampleSettingsFile
Source§impl Serialize for SampleSettingsFile
impl Serialize for SampleSettingsFile
Source§impl SwapBytes for SampleSettingsFile
impl SwapBytes for SampleSettingsFile
impl StructuralPartialEq for SampleSettingsFile
Auto Trait Implementations§
impl Freeze for SampleSettingsFile
impl RefUnwindSafe for SampleSettingsFile
impl Send for SampleSettingsFile
impl Sync for SampleSettingsFile
impl Unpin for SampleSettingsFile
impl UnwindSafe for SampleSettingsFile
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<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