rekordcrate/setting.rs
1// Copyright (c) 2025 Jan Holthuis <jan.holthuis@rub.de>
2//
3// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy
4// of the MPL was not distributed with this file, You can obtain one at
5// http://mozilla.org/MPL/2.0/.
6//
7// SPDX-License-Identifier: MPL-2.0
8
9//! Parser for Rekordbox `*SETTING.DAT` files.
10//!
11//! These files either in the `PIONEER` directory of a USB drive (device exports), but are also
12//! present for on local installations of Rekordbox 6 in `%APPDATA%\Pioneer\rekordbox6`.
13//!
14//! The settings files store the settings found on the "DJ System" > "My Settings" page of the
15//! Rekordbox preferences. These includes language, LCD brightness, tempo fader range, crossfader
16//! curve, etc.
17//!
18//! The exact format still has to be reverse-engineered.
19//!
20//! # Defaults
21//!
22//! The `SettingData` structs implement the `Default` trait and allows you to create objects that
23//! use the same default values as found in Rekordbox 6.6.1.
24
25use binrw::{binrw, io::Cursor, BinWrite, Endian, NullString};
26use parse_display::Display;
27
28#[binrw]
29#[derive(Debug, PartialEq, Eq, Clone)]
30#[brw(little)]
31#[bw(import(no_checksum: bool))]
32/// Represents a setting file.
33pub struct Setting {
34 /// Size of the string data field (should be always 96).
35 #[br(temp, assert(len_stringdata == 0x60))]
36 #[bw(calc = 0x60)]
37 len_stringdata: u32,
38 /// Name of the brand.
39 ///
40 /// The value seems to depend on the kind of file:
41 ///
42 /// | File | Value |
43 /// | ------------------ | ------------ |
44 /// | `DEVSETTING.DAT` | `PIONEER DJ` |
45 /// | `DJMMYSETTING.DAT` | `PioneerDJ` |
46 /// | `MYSETTING.DAT` | `PIONEER` |
47 /// | `MYSETTING2.DAT` | `PIONEER` |
48 #[brw(pad_size_to = 0x20, assert(brand.len() <= (0x20 - 1)))]
49 pub brand: NullString,
50 /// Name of the software ("rekordbox").
51 #[brw(pad_size_to = 0x20, assert(software.len() <= (0x20 - 1)))]
52 pub software: NullString,
53 /// Some kind of version number.
54 #[brw(pad_size_to = 0x20, assert(version.len() <= (0x20 - 1)))]
55 pub version: NullString,
56 /// Size of the `data` data in bytes.
57 #[br(temp)]
58 #[bw(calc = data.size())]
59 len_data: u32,
60 /// The actual settings data.
61 #[br(args(len_data))]
62 pub data: SettingData,
63 /// CRC16 XMODEM checksum. The checksum is calculated over the contents of the `data`
64 /// field, except for `DJMSETTING.DAT` files where the checksum is calculated over all
65 /// preceding bytes including the length fields.
66 ///
67 /// See <https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-16-xmodem> for
68 /// details.
69 #[br(temp)]
70 #[bw(calc = if no_checksum { 0 } else { self.calculate_checksum() })]
71 _checksum: u16,
72 /// Unknown field (apparently always `0000`).
73 #[br(temp)]
74 #[br(assert(unknown == 0))]
75 #[bw(calc = 0u16)]
76 unknown: u16,
77}
78
79impl Setting {
80 /// Create a new object containing with the given brand string and data.
81 #[must_use]
82 fn default_with_brand_and_data(brand: NullString, data: SettingData) -> Self {
83 Self {
84 brand,
85 software: "rekordbox".into(),
86 version: "6.6.1".into(),
87 data,
88 }
89 }
90
91 /// Create a new object containing the default values of a `DEVSETTING.DAT` file.
92 #[must_use]
93 pub fn default_devsetting() -> Self {
94 Self::default_with_brand_and_data(
95 "PIONEER DJ".into(),
96 SettingData::DevSetting(DevSetting::default()),
97 )
98 }
99
100 /// Create a new object containing the default values of a `DJMMYSETTING.DAT` file.
101 #[must_use]
102 pub fn default_djmmysetting() -> Self {
103 Self::default_with_brand_and_data(
104 "PioneerDJ".into(),
105 SettingData::DJMMySetting(DJMMySetting::default()),
106 )
107 }
108
109 /// Create a new object containing the default values of a `MYSETTING.DAT` file.
110 #[must_use]
111 pub fn default_mysetting() -> Self {
112 Self::default_with_brand_and_data(
113 "PIONEER".into(),
114 SettingData::MySetting(MySetting::default()),
115 )
116 }
117
118 /// Create a new object containing the default values of a `MYSETTING2.DAT` file.
119 #[must_use]
120 pub fn default_mysetting2() -> Self {
121 Self::default_with_brand_and_data(
122 "PIONEER".into(),
123 SettingData::MySetting2(MySetting2::default()),
124 )
125 }
126}
127
128impl Setting
129where
130 Setting: BinWrite,
131{
132 /// Calculate the CRC16 checksum.
133 ///
134 /// This is horribly inefficient and basically serializes the whole data structure twice, but
135 /// there seems to be no other way to achieve this.
136 ///
137 /// Upstream issue: https://github.com/jam1garner/binrw/issues/102
138 fn calculate_checksum(&self) -> u16 {
139 let mut data = Vec::<u8>::with_capacity(156);
140 let mut writer = Cursor::new(&mut data);
141 self.write_options(&mut writer, Endian::Little, (true,))
142 .unwrap();
143 let start = match self.data {
144 // In `DJMMYSETTING.DAT`, the checksum is calculated over all previous bytes, including
145 // the section lengths and string data.
146 SettingData::DJMMySetting(_) => 0,
147 // In all other files`, the checksum is calculated just over the data section which
148 // starts at offset 104,
149 _ => 104,
150 };
151
152 let end = data.len() - 4;
153 crc16::State::<crc16::XMODEM>::calculate(&data[start..end])
154 }
155}
156
157/// Data section of a `*SETTING.DAT` file.
158#[binrw]
159#[derive(Debug, PartialEq, Eq, Clone)]
160#[brw(little)]
161#[br(import(len: u32))]
162pub enum SettingData {
163 /// Payload of a `DEVSETTING.DAT` file (32 bytes).
164 #[br(pre_assert(len == 32))]
165 DevSetting(DevSetting),
166 /// Payload of a `DJMMYSETTING.DAT` file (52 bytes).
167 #[br(pre_assert(len == 52))]
168 DJMMySetting(DJMMySetting),
169 /// Payload of a `MYSETTING.DAT` file (40 bytes).
170 #[br(pre_assert(len == 40))]
171 MySetting(MySetting),
172 /// Payload of a `MYSETTING2.DAT` file (40 bytes).
173 #[br(pre_assert(len == 40))]
174 MySetting2(MySetting2),
175}
176
177impl SettingData {
178 fn size(&self) -> u32 {
179 match &self {
180 Self::DevSetting(_) => 32,
181 Self::DJMMySetting(_) => 52,
182 Self::MySetting(_) => 40,
183 Self::MySetting2(_) => 40,
184 }
185 }
186}
187
188/// Payload of a `DEVSETTING.DAT` file (32 bytes).
189#[binrw]
190#[derive(Debug, PartialEq, Eq, Clone)]
191#[brw(little)]
192pub struct DevSetting {
193 /// Unknown field.
194 #[br(assert(unknown1 == [0x78, 0x56, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01]))]
195 unknown1: [u8; 9],
196 /// "Type of the overview Waveform" setting.
197 pub overview_waveform_type: OverviewWaveformType,
198 /// "Waveform color" setting.
199 pub waveform_color: WaveformColor,
200 /// Unknown field.
201 #[br(assert(unknown2 == 0x01))]
202 unknown2: u8,
203 /// "Key display format" setting.
204 pub key_display_format: KeyDisplayFormat,
205 /// "Waveform Current Position" setting.
206 pub waveform_current_position: WaveformCurrentPosition,
207 /// Unknown field.
208 #[br(assert(unknown3 == [0x00; 18]))]
209 unknown3: [u8; 18],
210}
211
212impl Default for DevSetting {
213 fn default() -> Self {
214 Self {
215 unknown1: [0x78, 0x56, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00, 0x01],
216 overview_waveform_type: OverviewWaveformType::default(),
217 waveform_color: WaveformColor::default(),
218 key_display_format: KeyDisplayFormat::default(),
219 unknown2: 0x01,
220 waveform_current_position: WaveformCurrentPosition::default(),
221 unknown3: [0x00; 18],
222 }
223 }
224}
225
226/// Payload of a `DJMMYSETTING.DAT` file (52 bytes).
227#[binrw]
228#[derive(Debug, PartialEq, Eq, Clone)]
229#[brw(little)]
230pub struct DJMMySetting {
231 /// Unknown field.
232 unknown1: [u8; 12],
233 /// "CH FADER CURVE" setting.
234 pub channel_fader_curve: ChannelFaderCurve,
235 /// "CROSSFADER CURVE" setting.
236 pub crossfader_curve: CrossfaderCurve,
237 /// "HEADPHONES PRE EQ" setting.
238 pub headphones_pre_eq: HeadphonesPreEQ,
239 /// "HEADPHONES MONO SPLIT" setting.
240 pub headphones_mono_split: HeadphonesMonoSplit,
241 /// "BEAT FX QUANTIZE" setting.
242 pub beat_fx_quantize: BeatFXQuantize,
243 /// "MIC LOW CUT" setting.
244 pub mic_low_cut: MicLowCut,
245 /// "TALK OVER MODE" setting.
246 pub talk_over_mode: TalkOverMode,
247 /// "TALK OVER LEVEL" setting.
248 pub talk_over_level: TalkOverLevel,
249 /// "MIDI CH" setting.
250 pub midi_channel: MidiChannel,
251 /// "MIDI BUTTON TYPE" setting.
252 pub midi_button_type: MidiButtonType,
253 /// "BRIGHTNESS > DISPLAY" setting.
254 pub display_brightness: MixerDisplayBrightness,
255 /// "BRIGHTNESS > INDICATOR" setting.
256 pub indicator_brightness: MixerIndicatorBrightness,
257 /// "CH FADER CURVE (LONG FADER)" setting.
258 pub channel_fader_curve_long_fader: ChannelFaderCurveLongFader,
259 /// Unknown field (apparently always 0).
260 #[br(assert(unknown2 == [0; 27]))]
261 unknown2: [u8; 27],
262}
263
264impl Default for DJMMySetting {
265 fn default() -> Self {
266 Self {
267 unknown1: [
268 0x78, 0x56, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
269 ],
270 channel_fader_curve: ChannelFaderCurve::default(),
271 crossfader_curve: CrossfaderCurve::default(),
272 headphones_pre_eq: HeadphonesPreEQ::default(),
273 headphones_mono_split: HeadphonesMonoSplit::default(),
274 beat_fx_quantize: BeatFXQuantize::default(),
275 mic_low_cut: MicLowCut::default(),
276 talk_over_mode: TalkOverMode::default(),
277 talk_over_level: TalkOverLevel::default(),
278 midi_channel: MidiChannel::default(),
279 midi_button_type: MidiButtonType::default(),
280 display_brightness: MixerDisplayBrightness::default(),
281 indicator_brightness: MixerIndicatorBrightness::default(),
282 channel_fader_curve_long_fader: ChannelFaderCurveLongFader::default(),
283 unknown2: [0; 27],
284 }
285 }
286}
287
288/// Payload of a `MYSETTING.DAT` file (40 bytes).
289#[binrw]
290#[derive(Debug, PartialEq, Eq, Clone)]
291#[brw(little)]
292pub struct MySetting {
293 /// Unknown field.
294 unknown1: [u8; 8],
295 /// "ON AIR DISPLAY" setting.
296 pub on_air_display: OnAirDisplay,
297 /// "LCD BRIGHTNESS" setting.
298 pub lcd_brightness: LCDBrightness,
299 /// "QUANTIZE" setting.
300 pub quantize: Quantize,
301 /// "AUTO CUE LEVEL" setting.
302 pub auto_cue_level: AutoCueLevel,
303 /// "LANGUAGE" setting.
304 pub language: Language,
305 /// Unknown field.
306 unknown2: u8,
307 /// "JOG RING BRIGHTNESS" setting.
308 pub jog_ring_brightness: JogRingBrightness,
309 /// "JOG RING INDICATOR" setting.
310 pub jog_ring_indicator: JogRingIndicator,
311 /// "SLIP FLASHING" setting.
312 pub slip_flashing: SlipFlashing,
313 /// Unknown field.
314 unknown3: [u8; 3],
315 /// "DISC SLOT ILLUMINATION" setting.
316 pub disc_slot_illumination: DiscSlotIllumination,
317 /// "EJECT/LOAD LOCK" setting.
318 pub eject_lock: EjectLock,
319 /// "SYNC" setting.
320 pub sync: Sync,
321 /// "PLAY MODE / AUTO PLAY MODE" setting.
322 pub play_mode: PlayMode,
323 /// Quantize Beat Value setting.
324 pub quantize_beat_value: QuantizeBeatValue,
325 /// "HOT CUE AUTO LOAD" setting.
326 pub hotcue_autoload: HotCueAutoLoad,
327 /// "HOT CUE COLOR" setting.
328 pub hotcue_color: HotCueColor,
329 /// Unknown field (apparently always 0).
330 #[br(assert(unknown4 == 0))]
331 unknown4: u16,
332 /// "NEEDLE LOCK" setting.
333 pub needle_lock: NeedleLock,
334 /// Unknown field (apparently always 0).
335 #[br(assert(unknown5 == 0))]
336 unknown5: u16,
337 /// "TIME MODE" setting.
338 pub time_mode: TimeMode,
339 /// "TIME MODE" setting.
340 pub jog_mode: JogMode,
341 /// "AUTO CUE" setting.
342 pub auto_cue: AutoCue,
343 /// "MASTER TEMPO" setting.
344 pub master_tempo: MasterTempo,
345 /// "TEMPO RANGE" setting.
346 pub tempo_range: TempoRange,
347 /// "PHASE METER" setting.
348 pub phase_meter: PhaseMeter,
349 /// Unknown field (apparently always 0).
350 #[br(assert(unknown6 == 0))]
351 unknown6: u16,
352}
353
354impl Default for MySetting {
355 fn default() -> Self {
356 Self {
357 unknown1: [0x78, 0x56, 0x34, 0x12, 0x02, 0x00, 0x00, 0x00],
358 on_air_display: OnAirDisplay::default(),
359 lcd_brightness: LCDBrightness::default(),
360 quantize: Quantize::default(),
361 auto_cue_level: AutoCueLevel::default(),
362 language: Language::default(),
363 unknown2: 0x01,
364 jog_ring_brightness: JogRingBrightness::default(),
365 jog_ring_indicator: JogRingIndicator::default(),
366 slip_flashing: SlipFlashing::default(),
367 unknown3: [0x01, 0x01, 0x01],
368 disc_slot_illumination: DiscSlotIllumination::default(),
369 eject_lock: EjectLock::default(),
370 sync: Sync::default(),
371 play_mode: PlayMode::default(),
372 quantize_beat_value: QuantizeBeatValue::default(),
373 hotcue_autoload: HotCueAutoLoad::default(),
374 hotcue_color: HotCueColor::default(),
375 unknown4: 0x0000,
376 needle_lock: NeedleLock::default(),
377 unknown5: 0x0000,
378 time_mode: TimeMode::default(),
379 jog_mode: JogMode::default(),
380 auto_cue: AutoCue::default(),
381 master_tempo: MasterTempo::default(),
382 tempo_range: TempoRange::default(),
383 phase_meter: PhaseMeter::default(),
384 unknown6: 0x0000,
385 }
386 }
387}
388
389/// Payload of a `MYSETTING2.DAT` file (40 bytes).
390#[binrw]
391#[derive(Debug, PartialEq, Eq, Clone)]
392#[brw(little)]
393pub struct MySetting2 {
394 /// "VINYL SPEED ADJUST" setting.
395 pub vinyl_speed_adjust: VinylSpeedAdjust,
396 /// "JOG DISPLAY MODE" setting.
397 pub jog_display_mode: JogDisplayMode,
398 /// "PAD/BUTTON BRIGHTNESS" setting.
399 pub pad_button_brightness: PadButtonBrightness,
400 /// "JOG LCD BRIGHTNESS" setting.
401 pub jog_lcd_brightness: JogLCDBrightness,
402 /// "WAVEFORM DIVISIONS" setting.
403 pub waveform_divisions: WaveformDivisions,
404 /// Unknown field (apparently always 0).
405 #[br(assert(unknown1 == [0; 5]))]
406 unknown1: [u8; 5],
407 /// "WAVEFORM / PHASE METER" setting.
408 pub waveform: Waveform,
409 /// Unknown field.
410 unknown2: u8,
411 /// "BEAT JUMP BEAT VALUE" setting.
412 pub beat_jump_beat_value: BeatJumpBeatValue,
413 /// Unknown field (apparently always 0).
414 #[br(assert(unknown3 == [0; 27]))]
415 unknown3: [u8; 27],
416}
417
418impl Default for MySetting2 {
419 fn default() -> Self {
420 Self {
421 vinyl_speed_adjust: VinylSpeedAdjust::default(),
422 jog_display_mode: JogDisplayMode::default(),
423 pad_button_brightness: PadButtonBrightness::default(),
424 jog_lcd_brightness: JogLCDBrightness::default(),
425 waveform_divisions: WaveformDivisions::default(),
426 unknown1: [0; 5],
427 waveform: Waveform::default(),
428 unknown2: 0x81,
429 beat_jump_beat_value: BeatJumpBeatValue::default(),
430 unknown3: [0; 27],
431 }
432 }
433}
434
435/// Found at "PLAYER > DJ SETTING > PLAY MODE / AUTO PLAY MODE" of the "My Settings" page in the
436/// Rekordbox preferences.
437#[binrw]
438#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
439#[brw(repr = u8)]
440pub enum PlayMode {
441 /// Named "CONTINUE / ON" in the Rekordbox preferences.
442 #[display("Continue / On")]
443 Continue = 0x80,
444 /// Named "SINGLE / OFF" in the Rekordbox preferences.
445 #[display("Single / Off")]
446 #[default]
447 Single,
448}
449
450/// Found at "PLAYER > DJ SETTING > EJECT/LOAD LOCK" of the "My Settings" page in the Rekordbox
451/// preferences.
452#[binrw]
453#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
454#[brw(repr = u8)]
455pub enum EjectLock {
456 /// Named "UNLOCK" in the Rekordbox preferences.
457 #[default]
458 Unlock = 0x80,
459 /// Named "LOCK" in the Rekordbox preferences.
460 Lock,
461}
462
463/// Found at "PLAYER > DJ SETTING > NEEDLE LOCK" of the "My Settings" page in the Rekordbox
464/// preferences.
465#[binrw]
466#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
467#[brw(repr = u8)]
468pub enum NeedleLock {
469 /// Named "UNLOCK" in the Rekordbox preferences.
470 Unlock = 0x80,
471 /// Named "LOCK" in the Rekordbox preferences.
472 #[default]
473 Lock,
474}
475
476/// Found at "PLAYER > DJ SETTING > QUANTIZE BEAT VALUE" of the "My Settings" page in the Rekordbox
477/// preferences.
478#[binrw]
479#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
480#[brw(repr = u8)]
481pub enum QuantizeBeatValue {
482 /// Named "1/8 Beat" in the Rekordbox preferences.
483 #[display("1/8 Beat")]
484 EighthBeat = 0x83,
485 /// Named "1/4 Beat" in the Rekordbox preferences.
486 #[display("1/4 Beat")]
487 QuarterBeat = 0x82,
488 /// Named "1/2 Beat" in the Rekordbox preferences.
489 #[display("1/2 Beat")]
490 HalfBeat = 0x81,
491 /// Named "1 Beat" in the Rekordbox preferences.
492 #[default]
493 #[display("1 Beat")]
494 FullBeat = 0x80,
495}
496
497/// Found at "PLAYER > DJ SETTING > HOT CUE AUTO LOAD" of the "My Settings" page in the Rekordbox
498/// preferences.
499#[binrw]
500#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
501#[brw(repr = u8)]
502pub enum HotCueAutoLoad {
503 /// Named "OFF" in the Rekordbox preferences.
504 Off = 0x80,
505 /// Named "rekordbox SETTING" in the Rekordbox preferences.
506 #[display("rekordbox SETTING")]
507 RekordboxSetting = 0x82,
508 /// Named "On" in the Rekordbox preferences.
509 #[default]
510 On = 0x81,
511}
512
513/// Found at "PLAYER > DJ SETTING > HOT CUE COLOR" of the "My Settings" page in the Rekordbox
514/// preferences.
515#[binrw]
516#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
517#[brw(repr = u8)]
518pub enum HotCueColor {
519 /// Named "OFF" in the Rekordbox preferences.
520 #[default]
521 Off = 0x80,
522 /// Named "On" in the Rekordbox preferences.
523 On,
524}
525
526/// Found at "PLAYER > DJ SETTING > AUTO CUE LEVEL" of the "My Settings" page in the Rekordbox
527/// preferences.
528#[binrw]
529#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
530#[brw(repr = u8)]
531pub enum AutoCueLevel {
532 /// Named "-78dB" in the Rekordbox preferences.
533 #[display("-78dB")]
534 Minus78dB = 0x87,
535 /// Named "-72dB" in the Rekordbox preferences.
536 #[display("-72dB")]
537 Minus72dB = 0x86,
538 /// Named "-66dB" in the Rekordbox preferences.
539 #[display("-66dB")]
540 Minus66dB = 0x85,
541 /// Named "-60dB" in the Rekordbox preferences.
542 #[display("-60dB")]
543 Minus60dB = 0x84,
544 /// Named "-54dB" in the Rekordbox preferences.
545 #[display("-54dB")]
546 Minus54dB = 0x83,
547 /// Named "-48dB" in the Rekordbox preferences.
548 #[display("-48dB")]
549 Minus48dB = 0x82,
550 /// Named "-42dB" in the Rekordbox preferences.
551 #[display("-42dB")]
552 Minus42dB = 0x81,
553 /// Named "-36dB" in the Rekordbox preferences.
554 #[display("-36dB")]
555 Minus36dB = 0x80,
556 /// Named "MEMORY" in the Rekordbox preferences.
557 #[default]
558 Memory = 0x88,
559}
560
561/// Found at "PLAYER > DJ SETTING > TIME MODE" of the "My Settings" page in the Rekordbox
562/// preferences.
563#[binrw]
564#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
565#[brw(repr = u8)]
566pub enum TimeMode {
567 /// Named "Elapsed" in the Rekordbox preferences.
568 Elapsed = 0x80,
569 /// Named "REMAIN" in the Rekordbox preferences.
570 #[default]
571 Remain,
572}
573
574/// Found at "PLAYER > DJ SETTING > AUTO CUE" of the "My Settings" page in the Rekordbox
575/// preferences.
576#[binrw]
577#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
578#[brw(repr = u8)]
579pub enum AutoCue {
580 /// Named "OFF" in the Rekordbox preferences.
581 Off = 0x80,
582 /// Named "ON" in the Rekordbox preferences.
583 #[default]
584 On,
585}
586
587/// Found at "PLAYER > DJ SETTING > JOG MODE" of the "My Settings" page in the Rekordbox
588/// preferences.
589#[binrw]
590#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
591#[brw(repr = u8)]
592pub enum JogMode {
593 /// Named "VINYL" in the Rekordbox preferences.
594 #[default]
595 Vinyl = 0x81,
596 /// Named "CDJ" in the Rekordbox preferences.
597 CDJ = 0x80,
598}
599
600/// Found at "PLAYER > DJ SETTING > TEMPO RANGE" of the "My Settings" page in the Rekordbox
601/// preferences.
602#[binrw]
603#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
604#[brw(repr = u8)]
605pub enum TempoRange {
606 /// Named "±6" in the Rekordbox preferences.
607 #[display("±6%")]
608 SixPercent = 0x80,
609 /// Named "±10" in the Rekordbox preferences.
610 #[display("±10%")]
611 #[default]
612 TenPercent,
613 /// Named "±16" in the Rekordbox preferences.
614 #[display("±16%")]
615 SixteenPercent,
616 /// Named "WIDE" in the Rekordbox preferences.
617 Wide,
618}
619
620/// Found at "PLAYER > DJ SETTING > MASTER TEMPO" of the "My Settings" page in the Rekordbox
621/// preferences.
622#[binrw]
623#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
624#[brw(repr = u8)]
625pub enum MasterTempo {
626 /// Named "OFF" in the Rekordbox preferences.
627 #[default]
628 Off = 0x80,
629 /// Named "ON" in the Rekordbox preferences.
630 On,
631}
632
633/// Found at "PLAYER > DJ SETTING > QUANTIZE" of the "My Settings" page in the Rekordbox
634/// preferences.
635#[binrw]
636#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
637#[brw(repr = u8)]
638pub enum Quantize {
639 /// Named "OFF" in the Rekordbox preferences.
640 Off = 0x80,
641 /// Named "ON" in the Rekordbox preferences.
642 #[default]
643 On,
644}
645
646/// Found at "PLAYER > DJ SETTING > SYNC" of the "My Settings" page in the Rekordbox
647/// preferences.
648#[binrw]
649#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
650#[brw(repr = u8)]
651pub enum Sync {
652 /// Named "OFF" in the Rekordbox preferences.
653 #[default]
654 Off = 0x80,
655 /// Named "ON" in the Rekordbox preferences.
656 On,
657}
658
659/// Found at "PLAYER > DJ SETTING > PHASE METER" of the "My Settings" page in the Rekordbox
660/// preferences.
661#[binrw]
662#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
663#[brw(repr = u8)]
664pub enum PhaseMeter {
665 /// Named "TYPE 1" in the Rekordbox preferences.
666 #[default]
667 #[display("Type 1")]
668 Type1 = 0x80,
669 /// Named "TYPE 2" in the Rekordbox preferences.
670 #[display("Type 2")]
671 Type2,
672}
673
674/// Found at "PLAYER > DJ SETTING > WAVEFORM / PHASE METER" of the "My Settings" page in the Rekordbox
675/// preferences.
676#[binrw]
677#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
678#[brw(repr = u8)]
679pub enum Waveform {
680 /// Named "WAVEFORM" in the Rekordbox preferences.
681 #[default]
682 Waveform = 0x80,
683 /// Named "PHASE METER" in the Rekordbox preferences.
684 #[display("Phase Meter")]
685 PhaseMeter,
686}
687
688/// Found at "PLAYER > DJ SETTING > WAVEFORM DIVISIONS" of the "My Settings" page in the Rekordbox
689/// preferences.
690#[binrw]
691#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
692#[brw(repr = u8)]
693pub enum WaveformDivisions {
694 /// Named "TIME SCALE" in the Rekordbox preferences.
695 #[display("Time Scale")]
696 TimeScale = 0x80,
697 /// Named "PHRASE" in the Rekordbox preferences.
698 #[default]
699 Phrase,
700}
701
702/// Found at "PLAYER > DJ SETTING > VINYL SPEED ADJUST" of the "My Settings" page in the Rekordbox
703/// preferences.
704#[binrw]
705#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
706#[brw(repr = u8)]
707pub enum VinylSpeedAdjust {
708 /// Named "TOUCH & RELEASE" in the Rekordbox preferences.
709 #[display("Touch & Release")]
710 TouchRelease = 0x80,
711 /// Named "TOUCH" in the Rekordbox preferences.
712 #[default]
713 Touch,
714 /// Named "RELEASE" in the Rekordbox preferences.
715 Release,
716}
717
718/// Found at "PLAYER > DJ SETTING > BEAT JUMP BEAT VALUE" of the "My Settings" page in the Rekordbox
719/// preferences.
720#[binrw]
721#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
722#[brw(repr = u8)]
723pub enum BeatJumpBeatValue {
724 /// Named "1/2 BEAT" in the Rekordbox preferences.
725 #[display("1/2 Beat")]
726 HalfBeat = 0x80,
727 /// Named "1 BEAT" in the Rekordbox preferences.
728 #[display("1 Beat")]
729 OneBeat,
730 /// Named "2 BEAT" in the Rekordbox preferences.
731 #[display("2 Beat")]
732 TwoBeat,
733 /// Named "4 BEAT" in the Rekordbox preferences.
734 #[display("4 Beat")]
735 FourBeat,
736 /// Named "8 BEAT" in the Rekordbox preferences.
737 #[display("8 Beat")]
738 EightBeat,
739 /// Named "16 BEAT" in the Rekordbox preferences.
740 #[display("16 Beat")]
741 #[default]
742 SixteenBeat,
743 /// Named "32 BEAT" in the Rekordbox preferences.
744 #[display("32 Beat")]
745 ThirtytwoBeat,
746 /// Named "64 BEAT" in the Rekordbox preferences.
747 #[display("64 Beat")]
748 SixtyfourBeat,
749}
750
751/// Found at "PLAYER > DISPLAY(LCD) > LANGUAGE" of the "My Settings" page in the Rekordbox
752/// preferences.
753#[binrw]
754#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
755#[brw(repr = u8)]
756pub enum Language {
757 /// Named "English" in the Rekordbox preferences.
758 #[default]
759 English = 0x81,
760 /// Named "Français" in the Rekordbox preferences.
761 #[display("Français")]
762 French,
763 /// Named "Deutsch" in the Rekordbox preferences.
764 #[display("Deutsch")]
765 German,
766 /// Named "Italiano" in the Rekordbox preferences.
767 #[display("Italiano")]
768 Italian,
769 /// Named "Nederlands" in the Rekordbox preferences.
770 #[display("Nederlands")]
771 Dutch,
772 /// Named "Español" in the Rekordbox preferences.
773 #[display("Español")]
774 Spanish,
775 /// Named "Русский" in the Rekordbox preferences.
776 #[display("Русский")]
777 Russian,
778 /// Named "한국어" in the Rekordbox preferences.
779 #[display("한국어")]
780 Korean,
781 /// Named "简体中文" in the Rekordbox preferences.
782 ChineseSimplified,
783 #[display("简体中文")]
784 /// Named "繁體中文" in the Rekordbox preferences.
785 #[display("繁體中文")]
786 ChineseTraditional,
787 /// Named "日本語" in the Rekordbox preferences.
788 #[display("日本語")]
789 Japanese,
790 /// Named "Português" in the Rekordbox preferences.
791 #[display("Português")]
792 Portuguese,
793 /// Named "Svenska" in the Rekordbox preferences.
794 #[display("Svenska")]
795 Swedish,
796 /// Named "Čeština" in the Rekordbox preferences.
797 #[display("Čeština")]
798 Czech,
799 /// Named "Magyar" in the Rekordbox preferences.
800 #[display("Magyar")]
801 Hungarian,
802 /// Named "Dansk" in the Rekordbox preferences.
803 #[display("Dansk")]
804 Danish,
805 /// Named "Ελληνικά" in the Rekordbox preferences.
806 #[display("Ελληνικά")]
807 Greek,
808 /// Named "Türkçe" in the Rekordbox preferences.
809 #[display("Türkçe")]
810 Turkish,
811}
812
813/// Found at "PLAYER > DISPLAY(LCD) > LCD BRIGHTNESS" of the "My Settings" page in the Rekordbox
814/// preferences.
815#[binrw]
816#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
817#[brw(repr = u8)]
818pub enum LCDBrightness {
819 /// Named "1" in the Rekordbox preferences.
820 #[display("1")]
821 One = 0x81,
822 /// Named "2" in the Rekordbox preferences.
823 #[display("2")]
824 Two,
825 /// Named "3" in the Rekordbox preferences.
826 #[display("3")]
827 #[default]
828 Three,
829 /// Named "4" in the Rekordbox preferences.
830 #[display("4")]
831 Four,
832 /// Named "5" in the Rekordbox preferences.
833 #[display("5")]
834 Five,
835}
836
837/// Found at "PLAYER > DISPLAY(LCD) > JOG LCD BRIGHTNESS" of the "My Settings" page in the Rekordbox
838/// preferences.
839#[binrw]
840#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
841#[brw(repr = u8)]
842pub enum JogLCDBrightness {
843 /// Named "1" in the Rekordbox preferences.
844 #[display("1")]
845 One = 0x81,
846 /// Named "2" in the Rekordbox preferences.
847 #[display("2")]
848 Two,
849 /// Named "3" in the Rekordbox preferences.
850 #[display("3")]
851 #[default]
852 Three,
853 /// Named "4" in the Rekordbox preferences.
854 #[display("4")]
855 Four,
856 /// Named "5" in the Rekordbox preferences.
857 #[display("5")]
858 Five,
859}
860
861/// Found at "PLAYER > DISPLAY(LCD) > JOG DISPLAY MODE" of the "My Settings" page in the Rekordbox
862/// preferences.
863#[binrw]
864#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
865#[brw(repr = u8)]
866pub enum JogDisplayMode {
867 /// Named "AUTO" in the Rekordbox preferences.
868 #[default]
869 Auto = 0x80,
870 /// Named "INFO" in the Rekordbox preferences.
871 Info,
872 /// Named "SIMPLE" in the Rekordbox preferences.
873 Simple,
874 /// Named "ARTWORK" in the Rekordbox preferences.
875 Artwork,
876}
877
878/// Found at "PLAYER > DISPLAY(INDICATOR) > SLIP FLASHING" of the "My Settings" page in the Rekordbox
879/// preferences.
880#[binrw]
881#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
882#[brw(repr = u8)]
883pub enum SlipFlashing {
884 /// Named "OFF" in the Rekordbox preferences.
885 Off = 0x80,
886 /// Named "ON" in the Rekordbox preferences.
887 #[default]
888 On,
889}
890
891/// Found at "PLAYER > DISPLAY(INDICATOR) > ON AIR DISPLAY" of the "My Settings" page in the Rekordbox
892/// preferences.
893#[binrw]
894#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
895#[brw(repr = u8)]
896pub enum OnAirDisplay {
897 /// Named "OFF" in the Rekordbox preferences.
898 Off = 0x80,
899 /// Named "ON" in the Rekordbox preferences.
900 #[default]
901 On,
902}
903
904/// Found at "PLAYER > DISPLAY(INDICATOR) > JOG RING BRIGHTNESS" of the "My Settings" page in the Rekordbox
905/// preferences.
906#[binrw]
907#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
908#[brw(repr = u8)]
909pub enum JogRingBrightness {
910 /// Named "OFF" in the Rekordbox preferences.
911 Off = 0x80,
912 /// Named "1 (Dark)" in the Rekordbox preferences.
913 #[display("1 (Dark)")]
914 Dark,
915 /// Named "2 (Bright)" in the Rekordbox preferences.
916 #[display("2 (Bright)")]
917 #[default]
918 Bright,
919}
920
921/// Found at "PLAYER > DISPLAY(INDICATOR) > JOG RING INDICATOR" of the "My Settings" page in the Rekordbox
922/// preferences.
923#[binrw]
924#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
925#[brw(repr = u8)]
926pub enum JogRingIndicator {
927 /// Named "OFF" in the Rekordbox preferences.
928 Off = 0x80,
929 /// Named "ON" in the Rekordbox preferences.
930 #[default]
931 On,
932}
933
934/// Found at "PLAYER > DISPLAY(INDICATOR) > DISC SLOT ILLUMINATION" of the "My Settings" page in the Rekordbox
935/// preferences.
936#[binrw]
937#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
938#[brw(repr = u8)]
939pub enum DiscSlotIllumination {
940 /// Named "OFF" in the Rekordbox preferences.
941 Off = 0x80,
942 /// Named "1 (Dark)" in the Rekordbox preferences.
943 #[display("1 (Dark)")]
944 Dark,
945 /// Named "2 (Bright)" in the Rekordbox preferences.
946 #[display("2 (Bright)")]
947 #[default]
948 Bright,
949}
950
951/// Found at "PLAYER > DISPLAY(INDICATOR) > PAD/BUTTON BRIGHTNESS" of the "My Settings" page in the Rekordbox
952/// preferences.
953#[binrw]
954#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
955#[brw(repr = u8)]
956pub enum PadButtonBrightness {
957 /// Named "1" in the Rekordbox preferences.
958 #[display("1")]
959 One = 0x81,
960 /// Named "2" in the Rekordbox preferences.
961 #[display("2")]
962 Two,
963 /// Named "3" in the Rekordbox preferences.
964 #[display("3")]
965 #[default]
966 Three,
967 /// Named "4" in the Rekordbox preferences.
968 #[display("4")]
969 Four,
970}
971
972/// Found at "MIXER > DJ SETTING > CH FADER CURVE" of the "My Settings" page in the Rekordbox
973/// preferences.
974#[binrw]
975#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
976#[brw(repr = u8)]
977pub enum ChannelFaderCurve {
978 /// Steep volume raise when the fader is moved near the top.
979 #[display("Steep Top")]
980 SteepTop = 0x80,
981 /// Linear volume raise when the fader is moved.
982 #[display("Linear")]
983 #[default]
984 Linear,
985 /// Steep volume raise when the fader is moved near the bottom.
986 #[display("Steep Bottom")]
987 SteepBottom,
988}
989
990/// Found at "MIXER > DJ SETTING > CROSSFADER CURVE" of the "My Settings" page in the Rekordbox
991/// preferences.
992#[binrw]
993#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
994#[brw(repr = u8)]
995pub enum CrossfaderCurve {
996 /// Logarithmic volume raise of the other channel near the edges of the fader.
997 #[display("Constant Power")]
998 ConstantPower = 0x80,
999 /// Steep linear volume raise of the other channel near the edges of the fader, no volume
1000 /// change in the center.
1001 #[display("Slow Cut")]
1002 SlowCut,
1003 /// Steep linear volume raise of the other channel near the edges of the fader, no volume
1004 /// change in the center.
1005 #[display("Fast Cut")]
1006 #[default]
1007 FastCut,
1008}
1009
1010/// Found at "MIXER > DJ SETTING > CH FADER CURVE (LONG FADER)" of the "My Settings" page in the
1011/// Rekordbox preferences.
1012#[binrw]
1013#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1014#[brw(repr = u8)]
1015pub enum ChannelFaderCurveLongFader {
1016 /// Very steep volume raise when the fader is moved the near the top (e.g. y = x⁵).
1017 #[default]
1018 Exponential = 0x80,
1019 /// Steep volume raise when the fader is moved the near the top (e.g. y = x²).
1020 Smooth,
1021 /// Linear volume raise when the fader is moved (e.g. y = k * x).
1022 Linear,
1023}
1024
1025/// Found at "MIXER > DJ SETTING > HEADPHONES PRE EQ" of the "My Settings" page in the
1026/// Rekordbox preferences.
1027#[binrw]
1028#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1029#[brw(repr = u8)]
1030pub enum HeadphonesPreEQ {
1031 /// Named "POST EQ" in the Rekordbox preferences.
1032 #[default]
1033 #[display("Post EQ")]
1034 PostEQ = 0x80,
1035 /// Named "PRE EQ" in the Rekordbox preferences.
1036 #[display("Pre EQ")]
1037 PreEQ,
1038}
1039
1040/// Found at "MIXER > DJ SETTING > HEADPHONES MONO SPLIT" of the "My Settings" page in the
1041/// Rekordbox preferences.
1042#[binrw]
1043#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1044#[brw(repr = u8)]
1045pub enum HeadphonesMonoSplit {
1046 /// Named "MONO SPLIT" in the Rekordbox preferences.
1047 #[display("Mono Split")]
1048 MonoSplit = 0x81,
1049 /// Named "STEREO" in the Rekordbox preferences.
1050 #[default]
1051 Stereo = 0x80,
1052}
1053
1054/// Found at "MIXER > DJ SETTING > BEAT FX QUANTIZE" of the "My Settings" page in the
1055/// Rekordbox preferences.
1056#[binrw]
1057#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1058#[brw(repr = u8)]
1059pub enum BeatFXQuantize {
1060 /// Named "OFF" in the Rekordbox preferences.
1061 Off = 0x80,
1062 /// Named "ON" in the Rekordbox preferences.
1063 #[default]
1064 On,
1065}
1066
1067/// Found at "MIXER > DJ SETTING > MIC LOW CUT" of the "My Settings" page in the
1068/// Rekordbox preferences.
1069#[binrw]
1070#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1071#[brw(repr = u8)]
1072pub enum MicLowCut {
1073 /// Named "OFF" in the Rekordbox preferences.
1074 Off = 0x80,
1075 /// Named "ON(for MC)" in the Rekordbox preferences.
1076 #[default]
1077 On,
1078}
1079
1080/// Found at "MIXER > DJ SETTING > TALK OVER MODE" of the "My Settings" page in the Rekordbox
1081/// preferences.
1082#[binrw]
1083#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1084#[brw(repr = u8)]
1085pub enum TalkOverMode {
1086 /// Named "ADVANCED" in the Rekordbox preferences.
1087 #[default]
1088 Advanced = 0x80,
1089 /// Named "NORMAL" in the Rekordbox preferences.
1090 Normal,
1091}
1092
1093/// Found at "MIXER > DJ SETTING > TALK OVER LEVEL" of the "My Settings" page in the Rekordbox
1094/// preferences.
1095#[binrw]
1096#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1097#[brw(repr = u8)]
1098pub enum TalkOverLevel {
1099 /// Named "-24dB" in the Rekordbox preferences.
1100 #[display("-24dB")]
1101 Minus24dB = 0x80,
1102 /// Named "-18dB" in the Rekordbox preferences.
1103 #[default]
1104 #[display("-18dB")]
1105 Minus18dB,
1106 /// Named "-12dB" in the Rekordbox preferences.
1107 #[display("-12dB")]
1108 Minus12dB,
1109 /// Named "-6dB" in the Rekordbox preferences.
1110 #[display("-6dB")]
1111 Minus6dB,
1112}
1113
1114/// Found at "MIXER > DJ SETTING > MIDI CH" of the "My Settings" page in the Rekordbox
1115/// preferences.
1116#[binrw]
1117#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1118#[brw(repr = u8)]
1119pub enum MidiChannel {
1120 /// Named "1" in the Rekordbox preferences.
1121 #[default]
1122 #[display("1")]
1123 One = 0x80,
1124 /// Named "2" in the Rekordbox preferences.
1125 #[display("2")]
1126 Two,
1127 /// Named "3" in the Rekordbox preferences.
1128 #[display("3")]
1129 Three,
1130 /// Named "4" in the Rekordbox preferences.
1131 #[display("4")]
1132 Four,
1133 /// Named "5" in the Rekordbox preferences.
1134 #[display("5")]
1135 Five,
1136 /// Named "6" in the Rekordbox preferences.
1137 #[display("6")]
1138 Six,
1139 /// Named "7" in the Rekordbox preferences.
1140 #[display("7")]
1141 Seven,
1142 /// Named "8" in the Rekordbox preferences.
1143 #[display("8")]
1144 Eight,
1145 /// Named "9" in the Rekordbox preferences.
1146 #[display("9")]
1147 Nine,
1148 /// Named "10" in the Rekordbox preferences.
1149 #[display("10")]
1150 Ten,
1151 /// Named "11" in the Rekordbox preferences.
1152 #[display("11")]
1153 Eleven,
1154 /// Named "12" in the Rekordbox preferences.
1155 #[display("12")]
1156 Twelve,
1157 /// Named "13" in the Rekordbox preferences.
1158 #[display("13")]
1159 Thirteen,
1160 /// Named "14" in the Rekordbox preferences.
1161 #[display("14")]
1162 Fourteen,
1163 /// Named "15" in the Rekordbox preferences.
1164 #[display("15")]
1165 Fifteen,
1166 /// Named "16" in the Rekordbox preferences.
1167 #[display("16")]
1168 Sixteen,
1169}
1170
1171/// Found at "MIXER > DJ SETTING > MIDI BUTTON TYPE" of the "My Settings" page in the Rekordbox
1172/// preferences.
1173#[binrw]
1174#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1175#[brw(repr = u8)]
1176pub enum MidiButtonType {
1177 #[default]
1178 /// Named "TOGGLE" in the Rekordbox preferences.
1179 Toggle = 0x80,
1180 /// Named "TRIGGER" in the Rekordbox preferences.
1181 Trigger,
1182}
1183
1184/// Found at "MIXER > BRIGHTNESS > DISPLAY" of the "My Settings" page in the Rekordbox
1185/// preferences.
1186#[binrw]
1187#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1188#[brw(repr = u8)]
1189pub enum MixerDisplayBrightness {
1190 /// Named "WHITE" in the Rekordbox preferences.
1191 White = 0x80,
1192 /// Named "1" in the Rekordbox preferences.
1193 #[display("1")]
1194 One,
1195 /// Named "2" in the Rekordbox preferences.
1196 #[display("2")]
1197 Two,
1198 /// Named "3" in the Rekordbox preferences.
1199 #[display("3")]
1200 Three,
1201 /// Named "4" in the Rekordbox preferences.
1202 #[display("4")]
1203 Four,
1204 /// Named "5" in the Rekordbox preferences.
1205 #[default]
1206 #[display("5")]
1207 Five,
1208}
1209
1210/// Found at "MIXER > BRIGHTNESS > INDICATOR" of the "My Settings" page in the Rekordbox
1211/// preferences.
1212#[binrw]
1213#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1214#[brw(repr = u8)]
1215pub enum MixerIndicatorBrightness {
1216 /// Named "1" in the Rekordbox preferences.
1217 #[display("1")]
1218 One = 0x80,
1219 /// Named "2" in the Rekordbox preferences.
1220 #[display("2")]
1221 Two,
1222 /// Named "3" in the Rekordbox preferences.
1223 #[display("3")]
1224 #[default]
1225 Three,
1226}
1227
1228/// Waveform color displayed on the CDJ.
1229///
1230/// Found on the "General" page in the Rekordbox preferences.
1231#[binrw]
1232#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1233#[brw(repr = u8)]
1234pub enum WaveformColor {
1235 /// Named "BLUE" in the Rekordbox preferences.
1236 #[default]
1237 Blue = 0x01,
1238 /// Named "RGB" in the Rekordbox preferences.
1239 #[display("RGB")]
1240 Rgb = 0x03,
1241 /// Named "3Band" in the Rekordbox preferences.
1242 #[display("3Band")]
1243 TriBand = 0x04,
1244}
1245
1246/// Waveform Current Position displayed on the CDJ.
1247///
1248/// Found on the "General" page in the Rekordbox preferences.
1249#[binrw]
1250#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1251#[brw(repr = u8)]
1252pub enum WaveformCurrentPosition {
1253 /// Named "LEFT" in the Rekordbox preferences.
1254 Left = 0x02,
1255 /// Named "CENTER" in the Rekordbox preferences.
1256 #[default]
1257 Center = 0x01,
1258}
1259
1260/// Type of the Overview Waveform displayed on the CDJ.
1261///
1262/// Found on the "General" page in the Rekordbox preferences.
1263#[binrw]
1264#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1265#[brw(repr = u8)]
1266pub enum OverviewWaveformType {
1267 /// Named "Half Waveform" in the Rekordbox preferences.
1268 #[default]
1269 #[display("Half Waveform")]
1270 HalfWaveform = 0x01,
1271 /// Named "Full Waveform" in the Rekordbox preferences.
1272 #[display("Full Waveform")]
1273 FullWaveform,
1274}
1275
1276/// The key display format displayed on the CDJ.
1277///
1278/// Found on the "General" page in the Rekordbox preferences.
1279#[binrw]
1280#[derive(Display, Debug, PartialEq, Eq, Default, Clone, Copy)]
1281#[brw(repr = u8)]
1282pub enum KeyDisplayFormat {
1283 /// Named "Classic" in the Rekordbox preferences.
1284 #[default]
1285 Classic = 0x01,
1286 /// Named "Alphanumeric" in the Rekordbox preferences.
1287 Alphanumeric,
1288}