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 – can sometimes be 1, usually 0.
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 time-stretch algorithm applied to the sample.
See the TimeStretchMode enum for suitable choices.
loop_mode: u32Default loop mode applied to the sample.
See the LoopMode 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 TrigQuantizationMode 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).
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.
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 usable 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: &TimeStretchMode,
quantization: &TrigQuantizationMode,
gain: &u16,
trim_config: &TrimConfig,
loop_config: &LoopConfig,
slices: &Slices,
) -> Result<Self, SampleSettingsError>
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
impl CheckFileIntegrity for SampleSettingsFile
Source§fn check_integrity(&self) -> Result<bool, OtToolsIoError>
fn check_integrity(&self) -> Result<bool, OtToolsIoError>
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<'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 From<&SampleSettingsFile> for LoopConfig
impl From<&SampleSettingsFile> for LoopConfig
Source§fn from(decoded: &SampleSettingsFile) -> Self
fn from(decoded: &SampleSettingsFile) -> Self
Source§impl From<&SampleSettingsFile> for TrimConfig
impl From<&SampleSettingsFile> for TrimConfig
Source§fn from(decoded: &SampleSettingsFile) -> Self
fn from(decoded: &SampleSettingsFile) -> Self
Source§impl From<(&SlotAttributes, &SlotMarkers)> for SampleSettingsFile
impl From<(&SlotAttributes, &SlotMarkers)> for SampleSettingsFile
Source§fn from(value: (&SlotAttributes, &SlotMarkers)) -> Self
fn from(value: (&SlotAttributes, &SlotMarkers)) -> Self
Source§impl From<(SlotAttributes, SlotMarkers)> for SampleSettingsFile
impl From<(SlotAttributes, SlotMarkers)> for SampleSettingsFile
Source§fn from(value: (SlotAttributes, SlotMarkers)) -> Self
fn from(value: (SlotAttributes, SlotMarkers)) -> Self
Source§impl From<SampleSettingsFile> for LoopConfig
impl From<SampleSettingsFile> for LoopConfig
Source§fn from(decoded: SampleSettingsFile) -> Self
fn from(decoded: SampleSettingsFile) -> Self
Source§impl From<SampleSettingsFile> for TrimConfig
impl From<SampleSettingsFile> for TrimConfig
Source§fn from(decoded: SampleSettingsFile) -> Self
fn from(decoded: SampleSettingsFile) -> Self
Source§impl HasChecksumField for SampleSettingsFile
impl HasChecksumField for SampleSettingsFile
Source§fn calculate_checksum(&self) -> Result<u16, OtToolsIoError>
fn calculate_checksum(&self) -> Result<u16, OtToolsIoError>
Source§fn check_checksum(&self) -> Result<bool, OtToolsIoError>
fn check_checksum(&self) -> Result<bool, OtToolsIoError>
Source§impl HasFileVersionField for SampleSettingsFile
impl HasFileVersionField for SampleSettingsFile
Source§fn check_file_version(&self) -> Result<bool, OtToolsIoError>
fn check_file_version(&self) -> Result<bool, OtToolsIoError>
Source§impl HasHeaderField for SampleSettingsFile
impl HasHeaderField for SampleSettingsFile
Source§fn check_header(&self) -> Result<bool, OtToolsIoError>
fn check_header(&self) -> Result<bool, OtToolsIoError>
Source§impl Hash for SampleSettingsFile
impl Hash for SampleSettingsFile
Source§impl OctatrackFileIO for SampleSettingsFile
impl OctatrackFileIO for SampleSettingsFile
Source§fn encode(&self) -> Result<Vec<u8>, OtToolsIoError>
fn encode(&self) -> Result<Vec<u8>, OtToolsIoError>
Encodes struct data to binary representation, after some pre-processing.
Before serializing, will:
- modify tempo and gain values to machine ranges
- swaps bytes of values (when current system is little-endian)
- generate checksum value
Source§fn decode(bytes: &[u8]) -> Result<Self, OtToolsIoError>
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,
fn repr(&self, newlines: Option<bool>)where
Self: Debug,
Source§fn from_data_file(path: &Path) -> Result<Self, OtToolsIoError>
fn from_data_file(path: &Path) -> Result<Self, OtToolsIoError>
Source§fn from_bytes(bytes: &[u8]) -> Result<Self, OtToolsIoError>
fn from_bytes(bytes: &[u8]) -> Result<Self, OtToolsIoError>
Source§fn to_data_file(&self, path: &Path) -> Result<(), OtToolsIoError>
fn to_data_file(&self, path: &Path) -> Result<(), OtToolsIoError>
Source§fn from_yaml_file(path: &Path) -> Result<Self, OtToolsIoError>
fn from_yaml_file(path: &Path) -> Result<Self, OtToolsIoError>
Source§fn from_yaml_str(yaml: &str) -> Result<Self, OtToolsIoError>
fn from_yaml_str(yaml: &str) -> Result<Self, OtToolsIoError>
Source§fn to_yaml_file(&self, path: &Path) -> Result<(), OtToolsIoError>
fn to_yaml_file(&self, path: &Path) -> Result<(), OtToolsIoError>
Source§fn to_yaml_string(&self) -> Result<String, OtToolsIoError>
fn to_yaml_string(&self) -> Result<String, OtToolsIoError>
Source§fn from_json_file(path: &Path) -> Result<Self, OtToolsIoError>
fn from_json_file(path: &Path) -> Result<Self, OtToolsIoError>
Source§fn from_json_str(json: &str) -> Result<Self, OtToolsIoError>
fn from_json_str(json: &str) -> Result<Self, OtToolsIoError>
Source§fn to_json_file(&self, path: &Path) -> Result<(), OtToolsIoError>
fn to_json_file(&self, path: &Path) -> Result<(), OtToolsIoError>
Source§fn to_json_string(&self) -> Result<String, OtToolsIoError>
fn to_json_string(&self) -> Result<String, OtToolsIoError>
Source§impl PartialEq for SampleSettingsFile
impl PartialEq for SampleSettingsFile
Source§impl Serialize for SampleSettingsFile
impl Serialize 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