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