pyrekordbox 0.2.1__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.github/workflows/pypi-publish.yml +9 -7
  2. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.github/workflows/tests.yml +2 -1
  3. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.pre-commit-config.yaml +1 -1
  4. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.readthedocs.yaml +1 -0
  5. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/CHANGELOG.md +38 -1
  6. {pyrekordbox-0.2.1/pyrekordbox.egg-info → pyrekordbox-0.2.2}/PKG-INFO +12 -11
  7. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/README.md +9 -3
  8. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/formats/anlz.md +178 -7
  9. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/formats/db6.md +1 -1
  10. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/index.md +2 -6
  11. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/quickstart.md +68 -45
  12. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyproject.toml +4 -10
  13. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/__init__.py +1 -1
  14. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/_version.py +2 -2
  15. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/anlz/file.py +39 -0
  16. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/anlz/structs.py +3 -5
  17. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/config.py +71 -27
  18. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/db6/database.py +260 -33
  19. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/db6/registry.py +22 -0
  20. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/db6/tables.py +3 -4
  21. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2/pyrekordbox.egg-info}/PKG-INFO +12 -11
  22. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox.egg-info/SOURCES.txt +1 -1
  23. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox.egg-info/requires.txt +2 -8
  24. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox.egg-info/top_level.txt +0 -1
  25. pyrekordbox-0.2.2/setup.cfg +4 -0
  26. pyrekordbox-0.2.2/tests/test_config.py +175 -0
  27. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/tests/test_db6.py +78 -0
  28. pyrekordbox-0.2.1/setup.cfg +0 -9
  29. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.github/ISSUE_TEMPLATE/config.yaml +0 -0
  31. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  32. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.github/workflows/codeql.yml +0 -0
  33. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.gitignore +0 -0
  34. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/DEVSETTING.DAT +0 -0
  35. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/DJMMYSETTING.DAT +0 -0
  36. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/MYSETTING.DAT +0 -0
  37. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/MYSETTING2.DAT +0 -0
  38. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.2EX +0 -0
  39. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.DAT +0 -0
  40. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P016/0000875E/ANLZ0000.EXT +0 -0
  41. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.2EX +0 -0
  42. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.DAT +0 -0
  43. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P017/00009B77/ANLZ0000.EXT +0 -0
  44. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.2EX +0 -0
  45. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.DAT +0 -0
  46. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P019/00020AA9/ANLZ0000.EXT +0 -0
  47. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.2EX +0 -0
  48. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.DAT +0 -0
  49. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P021/00006D2B/ANLZ0000.EXT +0 -0
  50. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.2EX +0 -0
  51. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.DAT +0 -0
  52. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P043/00011517/ANLZ0000.EXT +0 -0
  53. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.2EX +0 -0
  54. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.DAT +0 -0
  55. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/USBANLZ/P053/0001D21F/ANLZ0000.EXT +0 -0
  56. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/rekordbox/export.pdb +0 -0
  57. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/export/PIONEER/rekordbox/exportExt.pdb +0 -0
  58. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/DEVSETTING.DAT +0 -0
  59. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/DJMMYSETTING.DAT +0 -0
  60. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/MYSETTING.DAT +0 -0
  61. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/MYSETTING2.DAT +0 -0
  62. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/beat_fx_quantize/off/DJMMYSETTING.DAT +0 -0
  63. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/beat_fx_quantize/on/DJMMYSETTING.DAT +0 -0
  64. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/channel_fader_curve/linear/DJMMYSETTING.DAT +0 -0
  65. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_bottom/DJMMYSETTING.DAT +0 -0
  66. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/channel_fader_curve/steep_top/DJMMYSETTING.DAT +0 -0
  67. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/exponential/DJMMYSETTING.DAT +0 -0
  68. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/linear/DJMMYSETTING.DAT +0 -0
  69. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/channel_fader_curve_long/smooth/DJMMYSETTING.DAT +0 -0
  70. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/cross_fader_curve/constant/DJMMYSETTING.DAT +0 -0
  71. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/cross_fader_curve/fast_cut/DJMMYSETTING.DAT +0 -0
  72. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/cross_fader_curve/slow_cut/DJMMYSETTING.DAT +0 -0
  73. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/display_brightness/five/DJMMYSETTING.DAT +0 -0
  74. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/display_brightness/four/DJMMYSETTING.DAT +0 -0
  75. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/display_brightness/one/DJMMYSETTING.DAT +0 -0
  76. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/display_brightness/three/DJMMYSETTING.DAT +0 -0
  77. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/display_brightness/two/DJMMYSETTING.DAT +0 -0
  78. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/display_brightness/white/DJMMYSETTING.DAT +0 -0
  79. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/headphones_mono_split/mono_split/DJMMYSETTING.DAT +0 -0
  80. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/headphones_mono_split/stereo/DJMMYSETTING.DAT +0 -0
  81. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/headphones_pre_eq/post_eq/DJMMYSETTING.DAT +0 -0
  82. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/headphones_pre_eq/pre_eq/DJMMYSETTING.DAT +0 -0
  83. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/indicator_brightness/one/DJMMYSETTING.DAT +0 -0
  84. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/indicator_brightness/three/DJMMYSETTING.DAT +0 -0
  85. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/indicator_brightness/two/DJMMYSETTING.DAT +0 -0
  86. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/mic_low_cut/off/DJMMYSETTING.DAT +0 -0
  87. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/mic_low_cut/on/DJMMYSETTING.DAT +0 -0
  88. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_button_type/toggle/DJMMYSETTING.DAT +0 -0
  89. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_button_type/trigger/DJMMYSETTING.DAT +0 -0
  90. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/eight/DJMMYSETTING.DAT +0 -0
  91. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/eleven/DJMMYSETTING.DAT +0 -0
  92. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/fifteen/DJMMYSETTING.DAT +0 -0
  93. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/five/DJMMYSETTING.DAT +0 -0
  94. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/four/DJMMYSETTING.DAT +0 -0
  95. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/fourteen/DJMMYSETTING.DAT +0 -0
  96. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/nine/DJMMYSETTING.DAT +0 -0
  97. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/one/DJMMYSETTING.DAT +0 -0
  98. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/seven/DJMMYSETTING.DAT +0 -0
  99. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/six/DJMMYSETTING.DAT +0 -0
  100. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/sixteen/DJMMYSETTING.DAT +0 -0
  101. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/ten/DJMMYSETTING.DAT +0 -0
  102. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/thirteen/DJMMYSETTING.DAT +0 -0
  103. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/three/DJMMYSETTING.DAT +0 -0
  104. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/twelve/DJMMYSETTING.DAT +0 -0
  105. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/midi_channel/two/DJMMYSETTING.DAT +0 -0
  106. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_12db/DJMMYSETTING.DAT +0 -0
  107. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_18db/DJMMYSETTING.DAT +0 -0
  108. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_24db/DJMMYSETTING.DAT +0 -0
  109. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/talk_over_level/minus_6db/DJMMYSETTING.DAT +0 -0
  110. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/talk_over_mode/advanced/DJMMYSETTING.DAT +0 -0
  111. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/djmmysetting/talk_over_mode/normal/DJMMYSETTING.DAT +0 -0
  112. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue/off/MYSETTING.DAT +0 -0
  113. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue/on/MYSETTING.DAT +0 -0
  114. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/memory/MYSETTING.DAT +0 -0
  115. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_36db/MYSETTING.DAT +0 -0
  116. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_42db/MYSETTING.DAT +0 -0
  117. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_48db/MYSETTING.DAT +0 -0
  118. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_54db/MYSETTING.DAT +0 -0
  119. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_60db/MYSETTING.DAT +0 -0
  120. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_66db/MYSETTING.DAT +0 -0
  121. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_72db/MYSETTING.DAT +0 -0
  122. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/auto_cue_level/minus_78db/MYSETTING.DAT +0 -0
  123. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/disc_slot_illumination/bright/MYSETTING.DAT +0 -0
  124. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/disc_slot_illumination/dark/MYSETTING.DAT +0 -0
  125. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/disc_slot_illumination/off/MYSETTING.DAT +0 -0
  126. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/eject_lock/lock/MYSETTING.DAT +0 -0
  127. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/eject_lock/unlock/MYSETTING.DAT +0 -0
  128. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/hotcue_autoload/off/MYSETTING.DAT +0 -0
  129. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/hotcue_autoload/on/MYSETTING.DAT +0 -0
  130. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/hotcue_autoload/rekordbox/MYSETTING.DAT +0 -0
  131. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/hotcue_color/off/MYSETTING.DAT +0 -0
  132. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/hotcue_color/on/MYSETTING.DAT +0 -0
  133. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_mode/cdj/MYSETTING.DAT +0 -0
  134. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_mode/vinyl/MYSETTING.DAT +0 -0
  135. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_ring_brightness/bright/MYSETTING.DAT +0 -0
  136. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_ring_brightness/dark/MYSETTING.DAT +0 -0
  137. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_ring_brightness/off/MYSETTING.DAT +0 -0
  138. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_ring_indicator/off/MYSETTING.DAT +0 -0
  139. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/jog_ring_indicator/on/MYSETTING.DAT +0 -0
  140. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/chinese_simplified/MYSETTING.DAT +0 -0
  141. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/chinese_traditional/MYSETTING.DAT +0 -0
  142. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/czech/MYSETTING.DAT +0 -0
  143. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/danish/MYSETTING.DAT +0 -0
  144. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/dutch/MYSETTING.DAT +0 -0
  145. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/english/MYSETTING.DAT +0 -0
  146. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/french/MYSETTING.DAT +0 -0
  147. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/german/MYSETTING.DAT +0 -0
  148. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/greek/MYSETTING.DAT +0 -0
  149. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/hungarian/MYSETTING.DAT +0 -0
  150. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/italian/MYSETTING.DAT +0 -0
  151. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/japanese/MYSETTING.DAT +0 -0
  152. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/korean/MYSETTING.DAT +0 -0
  153. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/portuguese/MYSETTING.DAT +0 -0
  154. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/russian/MYSETTING.DAT +0 -0
  155. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/spanish/MYSETTING.DAT +0 -0
  156. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/swedish/MYSETTING.DAT +0 -0
  157. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/language/turkish/MYSETTING.DAT +0 -0
  158. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/lcd_brightness/five/MYSETTING.DAT +0 -0
  159. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/lcd_brightness/four/MYSETTING.DAT +0 -0
  160. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/lcd_brightness/one/MYSETTING.DAT +0 -0
  161. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/lcd_brightness/three/MYSETTING.DAT +0 -0
  162. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/lcd_brightness/two/MYSETTING.DAT +0 -0
  163. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/master_tempo/off/MYSETTING.DAT +0 -0
  164. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/master_tempo/on/MYSETTING.DAT +0 -0
  165. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/needle_lock/lock/MYSETTING.DAT +0 -0
  166. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/needle_lock/unlock/MYSETTING.DAT +0 -0
  167. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/on_air_display/off/MYSETTING.DAT +0 -0
  168. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/on_air_display/on/MYSETTING.DAT +0 -0
  169. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/phase_meter/type1/MYSETTING.DAT +0 -0
  170. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/phase_meter/type2/MYSETTING.DAT +0 -0
  171. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/play_mode/continue_/MYSETTING.DAT +0 -0
  172. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/play_mode/single/MYSETTING.DAT +0 -0
  173. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/quantize/off/MYSETTING.DAT +0 -0
  174. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/quantize/on/MYSETTING.DAT +0 -0
  175. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/quantize_beat_value/eighth/MYSETTING.DAT +0 -0
  176. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/quantize_beat_value/half/MYSETTING.DAT +0 -0
  177. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/quantize_beat_value/one/MYSETTING.DAT +0 -0
  178. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/quantize_beat_value/quarter/MYSETTING.DAT +0 -0
  179. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/slip_flashing/off/MYSETTING.DAT +0 -0
  180. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/slip_flashing/on/MYSETTING.DAT +0 -0
  181. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/sync/off/MYSETTING.DAT +0 -0
  182. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/sync/on/MYSETTING.DAT +0 -0
  183. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/tempo_range/six/MYSETTING.DAT +0 -0
  184. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/tempo_range/sixteen/MYSETTING.DAT +0 -0
  185. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/tempo_range/ten/MYSETTING.DAT +0 -0
  186. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/tempo_range/wide/MYSETTING.DAT +0 -0
  187. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/time_mode/elapsed/MYSETTING.DAT +0 -0
  188. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting/time_mode/remain/MYSETTING.DAT +0 -0
  189. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/eight/MYSETTING2.DAT +0 -0
  190. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/four/MYSETTING2.DAT +0 -0
  191. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/half/MYSETTING2.DAT +0 -0
  192. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/one/MYSETTING2.DAT +0 -0
  193. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixteen/MYSETTING2.DAT +0 -0
  194. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/sixtyfour/MYSETTING2.DAT +0 -0
  195. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/thirtytwo/MYSETTING2.DAT +0 -0
  196. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/beat_jump_beat_value/two/MYSETTING2.DAT +0 -0
  197. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_display_mode/artwork/MYSETTING2.DAT +0 -0
  198. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_display_mode/auto/MYSETTING2.DAT +0 -0
  199. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_display_mode/info/MYSETTING2.DAT +0 -0
  200. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_display_mode/simple/MYSETTING2.DAT +0 -0
  201. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/five/MYSETTING2.DAT +0 -0
  202. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/four/MYSETTING2.DAT +0 -0
  203. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/one/MYSETTING2.DAT +0 -0
  204. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/three/MYSETTING2.DAT +0 -0
  205. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/jog_lcd_brightness/two/MYSETTING2.DAT +0 -0
  206. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/pad_button_brightness/four/MYSETTING2.DAT +0 -0
  207. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/pad_button_brightness/one/MYSETTING2.DAT +0 -0
  208. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/pad_button_brightness/three/MYSETTING2.DAT +0 -0
  209. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/pad_button_brightness/two/MYSETTING2.DAT +0 -0
  210. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/release/MYSETTING2.DAT +0 -0
  211. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch/MYSETTING2.DAT +0 -0
  212. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/vinyl_speed_adjust/touch_release/MYSETTING2.DAT +0 -0
  213. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/waveform/phase_meter/MYSETTING2.DAT +0 -0
  214. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/waveform/waveform/MYSETTING2.DAT +0 -0
  215. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/waveform_divisions/phrase/MYSETTING2.DAT +0 -0
  216. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/mysettings/mysetting2/waveform_divisions/time_scale/MYSETTING2.DAT +0 -0
  217. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/DEVSETTING.DAT +0 -0
  218. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/ExtData.edb +0 -0
  219. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/MYSETTING.DAT +0 -0
  220. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.DAT +0 -0
  221. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P002/00009C2E/ANLZ0000.EXT +0 -0
  222. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.DAT +0 -0
  223. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P02B/00023587/ANLZ0000.EXT +0 -0
  224. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.DAT +0 -0
  225. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P035/00027763/ANLZ0000.EXT +0 -0
  226. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.DAT +0 -0
  227. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P038/0002AAA0/ANLZ0000.EXT +0 -0
  228. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.DAT +0 -0
  229. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P068/00012CA2/ANLZ0000.EXT +0 -0
  230. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.DAT +0 -0
  231. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/PIONEER/USBANLZ/P076/00013B6E/ANLZ0000.EXT +0 -0
  232. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/datafile.edb +0 -0
  233. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/backup/masterPlaylists3.xml +0 -0
  234. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/database.xml +0 -0
  235. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 5/datafile.edb +0 -0
  236. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/DEVSETTING.DAT +0 -0
  237. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/DJMMYSETTING.DAT +0 -0
  238. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/MYSETTING.DAT +0 -0
  239. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/MYSETTING2.DAT +0 -0
  240. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/masterPlaylists3.xml +0 -0
  241. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/masterPlaylists6.xml +0 -0
  242. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.2EX +0 -0
  243. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.DAT +0 -0
  244. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/003/c9538-33bc-4ca7-b6c7-e63ebf9a96f8/ANLZ0000.EXT +0 -0
  245. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.2EX +0 -0
  246. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.DAT +0 -0
  247. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/104/c82cc-661c-4f30-ab60-51ce1effeeed/ANLZ0000.EXT +0 -0
  248. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.2EX +0 -0
  249. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.DAT +0 -0
  250. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/36d/ad2b4-5d4e-4b94-9a5d-a5bb241aee4b/ANLZ0000.EXT +0 -0
  251. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.2EX +0 -0
  252. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.DAT +0 -0
  253. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/731/0104f-53cb-453e-8b83-e0dfd5cff825/ANLZ0000.EXT +0 -0
  254. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.2EX +0 -0
  255. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.DAT +0 -0
  256. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/c8b/ac74a-bbfc-4fce-8fb8-50aa4e974273/ANLZ0000.EXT +0 -0
  257. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.2EX +0 -0
  258. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.DAT +0 -0
  259. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/backup/share/PIONEER/USBANLZ/e35/fa187-3f34-47e2-9880-2b33cb8d1304/ANLZ0000.EXT +0 -0
  260. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/database.xml +0 -0
  261. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/masterPlaylists6_template.xml +0 -0
  262. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/master_locked.db +0 -0
  263. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/.testdata/rekordbox 6/master_unlocked.db +0 -0
  264. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/CONTRIBUTING.md +0 -0
  265. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/INSTALLATION.md +0 -0
  266. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/LICENSE +0 -0
  267. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/Makefile +0 -0
  268. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/make.bat +0 -0
  269. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_beat.svg +0 -0
  270. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_file.svg +0 -0
  271. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pco2.svg +0 -0
  272. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pcob.svg +0 -0
  273. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pcp2.svg +0 -0
  274. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pcpt.svg +0 -0
  275. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_ppth.svg +0 -0
  276. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pqt2.svg +0 -0
  277. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pqt2_2.svg +0 -0
  278. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pqtz.svg +0 -0
  279. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pssi.svg +0 -0
  280. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pssi_entry.svg +0 -0
  281. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pvbr.svg +0 -0
  282. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwav.svg +0 -0
  283. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwv3.svg +0 -0
  284. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwv4.svg +0 -0
  285. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwv5.svg +0 -0
  286. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwv5_entry.svg +0 -0
  287. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwv6.svg +0 -0
  288. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwv7.svg +0 -0
  289. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_pwvc.svg +0 -0
  290. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/images/anlz_tag.svg +0 -0
  291. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/logos/dark/logo_primary.svg +0 -0
  292. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/logos/light/logo_primary.svg +0 -0
  293. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_static/logos/mid/logo_primary.svg +0 -0
  294. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_templates/apidoc/module.rst_t +0 -0
  295. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_templates/apidoc/package.rst_t +0 -0
  296. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_templates/apidoc/toc.rst_t +0 -0
  297. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_templates/autosummary/class.rst +0 -0
  298. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/_templates/autosummary/module.rst +0 -0
  299. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/api.md +0 -0
  300. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/conf.py +0 -0
  301. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/development/changes.md +0 -0
  302. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/development/contributing.md +0 -0
  303. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/formats/mysetting.md +0 -0
  304. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/formats/xml.md +0 -0
  305. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/installation.md +0 -0
  306. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/requirements.txt +0 -0
  307. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/tutorial/anlz.md +0 -0
  308. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/tutorial/configuration.md +0 -0
  309. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/tutorial/db6.md +0 -0
  310. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/tutorial/index.md +1 -1
  311. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/tutorial/mysetting.md +0 -0
  312. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/docs/source/tutorial/xml.md +0 -0
  313. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/__main__.py +0 -0
  314. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/anlz/__init__.py +0 -0
  315. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/anlz/tags.py +0 -0
  316. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/db6/__init__.py +0 -0
  317. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/db6/aux_files.py +0 -0
  318. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/logger.py +0 -0
  319. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/mysettings/__init__.py +0 -0
  320. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/mysettings/file.py +0 -0
  321. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/mysettings/structs.py +0 -0
  322. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/utils.py +0 -0
  323. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox/xml.py +0 -0
  324. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox.egg-info/dependency_links.txt +0 -0
  325. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/pyrekordbox.egg-info/not-zip-safe +0 -0
  326. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/requirements.txt +0 -0
  327. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/setup.py +0 -0
  328. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/tests/__init__.py +0 -0
  329. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/tests/test_anlz.py +0 -0
  330. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/tests/test_mysetting.py +0 -0
  331. {pyrekordbox-0.2.1 → pyrekordbox-0.2.2}/tests/test_xml.py +0 -0
@@ -34,26 +34,28 @@ jobs:
34
34
  - name: Set up Python
35
35
  uses: actions/setup-python@v4
36
36
  with:
37
- python-version: "3.9"
37
+ python-version: "3.11"
38
38
 
39
39
  - name: Install dependencies
40
40
  run: |
41
41
  python -m pip install --upgrade pip
42
- pip install twine
43
- pip install .[build]
42
+ pip install --upgrade build
43
+ pip install --upgrade twine
44
44
 
45
- - name: Build and publish distribution 📦 to Test PyPI
45
+ - name: Build distribution 📦
46
+ run: |
47
+ python -m build
48
+
49
+ - name: Publish distribution 📦 to Test PyPI
46
50
  env:
47
51
  TWINE_USERNAME: ${{ secrets.TEST_PYPI_USERNAME }}
48
52
  TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }}
49
53
  run: |
50
- python setup.py sdist bdist_wheel
51
54
  twine upload --repository testpypi dist/*
52
55
 
53
- - name: Build and publish distribution 📦 to PyPI
56
+ - name: Publish distribution 📦 to PyPI
54
57
  env:
55
58
  TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
56
59
  TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
57
60
  run: |
58
- python setup.py sdist bdist_wheel
59
61
  twine upload dist/*
@@ -43,7 +43,7 @@ jobs:
43
43
  strategy:
44
44
  matrix:
45
45
  os: [windows-latest, macos-latest]
46
- python-version: ["3.7", "3.11"] # check oldest and latest supported version
46
+ python-version: ["3.7", "3.12"] # check oldest and latest supported version
47
47
  other-os: [true]
48
48
 
49
49
  runs-on: ${{ matrix.os }}
@@ -66,6 +66,7 @@ jobs:
66
66
  - name: Build and install
67
67
  run: |
68
68
  python -m pip install --upgrade pip
69
+ pip install setuptools
69
70
  pip install .[test]
70
71
 
71
72
  - name: Get package version
@@ -13,7 +13,7 @@ repos:
13
13
  - id: check-yaml
14
14
 
15
15
  - repo: https://github.com/psf/black
16
- rev: 23.9.1
16
+ rev: 23.10.0
17
17
  hooks:
18
18
  - id: black
19
19
  args: [ --safe ]
@@ -10,6 +10,7 @@ build:
10
10
 
11
11
  sphinx:
12
12
  builder: html
13
+ configuration: docs/source/conf.py
13
14
 
14
15
  python:
15
16
  install:
@@ -1,6 +1,42 @@
1
1
  # What's New
2
2
 
3
3
 
4
+ <a name="0.2.2"></a>
5
+ ## [0.2.2] - 2023-10-26
6
+
7
+ ### New Features
8
+
9
+ - **add new albums to the RBv6 db**
10
+ New entries can now be added to the `DjmdAlbum` table.
11
+ - **add new genres to the RBv6 db**
12
+ New entries can now be added to the `DjmdGenre` table.
13
+ - **add new artists to the RBv6 db**
14
+ New entries can now be added to the `DjmdArtist` table.
15
+ - **add new labels to the RBv6 db**
16
+ New entries can now be added to the `DjmdLabel` table.
17
+ - **support renamed Rekordbox application directory**
18
+ The user can now specify the directory name of the Rekordbox application directory.
19
+ This supports multiple Rekordbox installations of the same major version.
20
+
21
+ ### Improvements/Bug Fixes
22
+
23
+ - **don't raise error if key is in cache**
24
+ This fixes an issue when using the database handler for Rekordbox>6.6.5 with the cached key.
25
+ - **de-obfuscate PSSI tag data on exported ANLZ files**
26
+ The PSSI tag data of ANLZ files that rekordbox 6 *exports* is garbled with an XOR mask.
27
+ If the first few known fields of the PSSI tag are not valid values this indicates a garbled tag
28
+ and the data is de-obfuscated.
29
+ Thank you [@troyhacks](https://github.com/troyhacks) for the de-obfuscation.
30
+ - **add disabled context manager to the RBv6 `RekordboxAgentRegistry`**
31
+ - **only re-enable RBV6 USN tracking if it was enabled**
32
+
33
+ ### Documentation
34
+
35
+ - **add missing documentation of the PSSI tag of ANLZ files**
36
+ - **Fix typo in djmdCue table documentation**
37
+ - **update quickstart documentation**
38
+
39
+
4
40
  <a name="0.2.1"></a>
5
41
  ## [0.2.1] - 2023-10-20
6
42
 
@@ -430,7 +466,8 @@ This release contains documentation fixes.
430
466
  - **add missing djmd tables to `master.db` database documentation**
431
467
 
432
468
 
433
- [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/0.2.1...HEAD
469
+ [Unreleased]: https://github.com/dylanljones/pyrekordbox/compare/0.2.2...HEAD
470
+ [0.2.2]: https://github.com/dylanljones/pyrekordbox/compare/0.2.1...0.2.2
434
471
  [0.2.1]: https://github.com/dylanljones/pyrekordbox/compare/0.2.0...0.2.1
435
472
  [0.2.0]: https://github.com/dylanljones/pyrekordbox/compare/0.1.8...0.2.0
436
473
  [0.1.8]: https://github.com/dylanljones/pyrekordbox/compare/0.1.7...0.1.8
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyrekordbox
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Inofficial Python package for interacting with the library of Pioneers Rekordbox DJ software.
5
5
  Author-email: Dylan Jones <dylanljones94@gmail.com>
6
6
  License: MIT License
@@ -50,19 +50,14 @@ License-File: LICENSE
50
50
  Requires-Dist: bidict>=0.21.0
51
51
  Requires-Dist: blowfish>=0.6.0
52
52
  Requires-Dist: construct>=2.10.0
53
- Requires-Dist: hypothesis>=6.0.0
54
53
  Requires-Dist: numpy>=1.19.0
55
54
  Requires-Dist: packaging
56
- Requires-Dist: pytest>=6.2.0
57
55
  Requires-Dist: psutil>=5.9.0
58
- Requires-Dist: setuptools>=60.0.0
59
- Requires-Dist: setuptools-scm[toml]>=4
60
56
  Requires-Dist: sqlalchemy>=2.0.0
61
- Provides-Extra: build
62
- Requires-Dist: wheel>=0.37.0; extra == "build"
63
57
  Provides-Extra: test
58
+ Requires-Dist: hypothesis>=6.0.0; extra == "test"
59
+ Requires-Dist: pytest>=6.2.0; extra == "test"
64
60
  Requires-Dist: pytest-cov; extra == "test"
65
- Requires-Dist: wheel>=0.37.0; extra == "test"
66
61
 
67
62
 
68
63
  <p align="center">
@@ -88,7 +83,7 @@ Pioneers Rekordbox DJ Software. It currently supports
88
83
  - Analysis files (ANLZ)
89
84
  - My-Setting files
90
85
 
91
- Tested Rekordbox versions: ``5.8.6 | 6.5.3``
86
+ Tested Rekordbox versions: ``5.8.6 | 6.5.3 | 6.7.7``
92
87
 
93
88
 
94
89
  |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. |
@@ -112,7 +107,7 @@ where `VERSION` is a release, tag or branch name.
112
107
 
113
108
  Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
114
109
  Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
115
- pure Python package - whereas the SQLCipher/pysqlcipher3 installation is
110
+ pure Python package - whereas the SQLCipher/sqlcipher3 installation is
116
111
  platform-dependent and can not be installed via ``pip``.
117
112
 
118
113
  #### Windows
@@ -205,7 +200,7 @@ So far only a few tables support adding or deleting entries:
205
200
  - ``DjmdSongPlaylist``: Songs in a playlist
206
201
 
207
202
  Starting from Rekordbox version ``6.6.5`` Pioneer obfuscated the ``app.asar`` file
208
- contents, breaking the key extraction (see [this issue](https://github.com/dylanljones/pyrekordbox/issues/64) for more details).
203
+ contents, breaking the key extraction (see [this discussion](https://github.com/dylanljones/pyrekordbox/discussions/97) for more details).
209
204
  If you are using a later version of Rekorbox and have no cached key from a previous
210
205
  version, the database can not be unlocked automatically.
211
206
  The command line interface of ``pyrekordbox`` provides a command for downloading
@@ -304,6 +299,8 @@ sync = mysett.get("sync")
304
299
  quant = mysett.get("quantize")
305
300
  ````
306
301
 
302
+ The `DEVSETTING.DAT` file is still not supported
303
+
307
304
 
308
305
  ## 💡 File formats
309
306
 
@@ -323,6 +320,9 @@ If you encounter an issue or want to contribute to pyrekordbox, please feel free
323
320
  `pyrekordbox` and the commit-message style can be found in
324
321
  [CONTRIBUTING].
325
322
 
323
+ For general questions or discussions about Rekordbox, please use [GitHub Discussions][discussions]
324
+ instead of opening an issue.
325
+
326
326
  Pyrekordbox is tested on Windows and MacOS, however some features can't be tested in
327
327
  the CI setup since it requires a working Rekordbox installation.
328
328
 
@@ -374,6 +374,7 @@ the CI setup since it requires a working Rekordbox installation.
374
374
  [mysettings-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/mysetting.html
375
375
 
376
376
  [new-issue]: https://github.com/dylanljones/pyrekordbox/issues/new/choose
377
+ [discussions]: https://github.com/dylanljones/pyrekordbox/discussions
377
378
  [CONTRIBUTING]: https://github.com/dylanljones/pyrekordbox/blob/master/CONTRIBUTING.md
378
379
  [CHANGELOG]: https://github.com/dylanljones/pyrekordbox/blob/master/CHANGELOG.md
379
380
  [INSTALLATION]: https://github.com/dylanljones/pyrekordbox/blob/master/INSTALLATION.md
@@ -22,7 +22,7 @@ Pioneers Rekordbox DJ Software. It currently supports
22
22
  - Analysis files (ANLZ)
23
23
  - My-Setting files
24
24
 
25
- Tested Rekordbox versions: ``5.8.6 | 6.5.3``
25
+ Tested Rekordbox versions: ``5.8.6 | 6.5.3 | 6.7.7``
26
26
 
27
27
 
28
28
  |⚠️| This project is still under development and might contain bugs or have breaking API changes in the future. |
@@ -46,7 +46,7 @@ where `VERSION` is a release, tag or branch name.
46
46
 
47
47
  Unlocking the new Rekordbox 6 `master.db` database file requires [SQLCipher][sqlcipher].
48
48
  Pyrekordbox makes no attempt to download/install SQLCipher, as it is a
49
- pure Python package - whereas the SQLCipher/pysqlcipher3 installation is
49
+ pure Python package - whereas the SQLCipher/sqlcipher3 installation is
50
50
  platform-dependent and can not be installed via ``pip``.
51
51
 
52
52
  #### Windows
@@ -139,7 +139,7 @@ So far only a few tables support adding or deleting entries:
139
139
  - ``DjmdSongPlaylist``: Songs in a playlist
140
140
 
141
141
  Starting from Rekordbox version ``6.6.5`` Pioneer obfuscated the ``app.asar`` file
142
- contents, breaking the key extraction (see [this issue](https://github.com/dylanljones/pyrekordbox/issues/64) for more details).
142
+ contents, breaking the key extraction (see [this discussion](https://github.com/dylanljones/pyrekordbox/discussions/97) for more details).
143
143
  If you are using a later version of Rekorbox and have no cached key from a previous
144
144
  version, the database can not be unlocked automatically.
145
145
  The command line interface of ``pyrekordbox`` provides a command for downloading
@@ -238,6 +238,8 @@ sync = mysett.get("sync")
238
238
  quant = mysett.get("quantize")
239
239
  ````
240
240
 
241
+ The `DEVSETTING.DAT` file is still not supported
242
+
241
243
 
242
244
  ## 💡 File formats
243
245
 
@@ -257,6 +259,9 @@ If you encounter an issue or want to contribute to pyrekordbox, please feel free
257
259
  `pyrekordbox` and the commit-message style can be found in
258
260
  [CONTRIBUTING].
259
261
 
262
+ For general questions or discussions about Rekordbox, please use [GitHub Discussions][discussions]
263
+ instead of opening an issue.
264
+
260
265
  Pyrekordbox is tested on Windows and MacOS, however some features can't be tested in
261
266
  the CI setup since it requires a working Rekordbox installation.
262
267
 
@@ -308,6 +313,7 @@ the CI setup since it requires a working Rekordbox installation.
308
313
  [mysettings-doc]: https://pyrekordbox.readthedocs.io/en/stable/formats/mysetting.html
309
314
 
310
315
  [new-issue]: https://github.com/dylanljones/pyrekordbox/issues/new/choose
316
+ [discussions]: https://github.com/dylanljones/pyrekordbox/discussions
311
317
  [CONTRIBUTING]: https://github.com/dylanljones/pyrekordbox/blob/master/CONTRIBUTING.md
312
318
  [CHANGELOG]: https://github.com/dylanljones/pyrekordbox/blob/master/CHANGELOG.md
313
319
  [INSTALLATION]: https://github.com/dylanljones/pyrekordbox/blob/master/INSTALLATION.md
@@ -247,7 +247,7 @@ Rekordbox Performance Mode, but starting with Rekordbox version 6 it also gets
247
247
  exported to external media so CDJ-3000 players can use it to control lighting looks.
248
248
 
249
249
  ```{note}
250
- The version that Rekordbox 6 exports is garbled with an XOR mask to make it
250
+ The version that Rekordbox 6 **exports** is garbled with an XOR mask to make it
251
251
  more difficult to access the data. All bytes after `len_e` are XOR-masked with a
252
252
  pattern that is generated by adding the value of `len_e` to each byte of the following
253
253
  base pattern:
@@ -270,14 +270,16 @@ entries are present in the tag. Each entry represents one recognized phrase.
270
270
 
271
271
  The value `mood` specifies the overall type of phrase structure that rekordbox chose to
272
272
  represent the song, based on its analysis of the audio.
273
- The value 1 is a “high” mood
274
- where the phrase types consist of “Intro”, “Up”, “Down”, “Chorus”, and “Outro”.
275
- Other values in each phrase entry cause the intro, chorus, and outro phrases to have
276
- their labels subdivided into styes “1” or “2” (for example, “Intro 1”), and “up” is
277
- subdivided into style “Up 1”, “Up 2”, or “Up 3”. See the table below for an expanded
278
- version of this description.
273
+
274
+ The value 1 is a “high” mood where the phrase types consist of “Intro”, “Up”, “Down”,
275
+ “Chorus”, and “Outro”. Other values in each phrase entry cause the intro, chorus, and
276
+ outro phrases to have their labels subdivided into styes “1” or “2”
277
+ (for example, “Intro 1”), and “up” is subdivided into style “Up 1”, “Up 2”, or “Up 3”.
278
+ See the table below for an expanded version of this description.
279
+
279
280
  The value 2 is a “mid” mood where the phrase types are labeled “Intro”, “Verse 1”
280
281
  through “Verse 6”, “Chorus”, “Bridge”, and “Outro”.
282
+
281
283
  And value 3 is a “low” mood where the phrase types are labeled “Intro”, “Verse 1”,
282
284
  “Verse 2”, “Chorus”, “Bridge”, and “Outro”. There are three different phrase type
283
285
  values for each of “Verse 1” and “Verse 2”, but rekordbox makes no distinction between
@@ -301,6 +303,175 @@ Each phrase entry has the structure shown below:
301
303
  Song structure entry.
302
304
  ```
303
305
 
306
+ The first two bytes of each song structure entry hold `index`, which numbers each phrase,
307
+ starting at one and incrementing with each entry. That is followed by beat,
308
+ a two-byte value that specifies the beat at which this phrase begins in the track.
309
+ It continues until either the beat number of the next phrase, or the beat identified
310
+ by end in the tag header if this is the last entry.
311
+
312
+ `kind` specifies what kind of phrase rekordbox has identified here.
313
+ The interpretation depends on the value of mood in the tag header, as is detailed the
314
+ table below. In the case of the “high” mood, there are numbered variations for some
315
+ of the phrases displayed in rekordbox that are not reflected in kind, but depend on the
316
+ values of three flag bytes `k1` through `k3` in a complicated way shown in its own table.
317
+
318
+ We also noticed that when `mood`, `kind` and the `k` flags indicate a phrase of type
319
+ “Up 3”, additional beat numbers (which all fall within the phrase) are present in the
320
+ entry. These may indicate points within the phrase at which lighting changes would look good;
321
+ more investigation is required to make sense of them.
322
+ The number of beats that will be listed seems to depend on the value of the flag `b`:
323
+ if this has the value 0, there will be a single beat found in `beat2`, and if `b` has
324
+ the value 1 there will be three different beat numbers present, with increasing values,
325
+ in `beat2`, `beat3` and `beat4`.
326
+
327
+ `fill` is a flag that indicates whether there are fill (non-phrase) beats at the end of
328
+ the phrase. If it is non-zero, then ``beat fill`` holds the beat number at which the
329
+ fill begins. When fill-in is present, it is indicated in rekordbox by little dots on the
330
+ full waveform. The manual says:
331
+
332
+
333
+ [Fill in] is a section that provides improvisational changes at the end of phrase.
334
+ [Fill in] is detected at the end of Intro, Up, and Chorus (up to 4 beats).
335
+
336
+
337
+
338
+ ```{eval-rst}
339
+ .. list-table:: Phrase labels in each mood.
340
+ :header-rows: 1
341
+
342
+ * - Phrase ID
343
+ - Low Label
344
+ - Mid Label
345
+ - High Label
346
+ * - 1
347
+ - Intro
348
+ - Intro
349
+ - Intro n
350
+ * - 2
351
+ - Verse 1
352
+ - Verse 1
353
+ - Up n
354
+ * - 3
355
+ - Verse 1
356
+ - Verse 2
357
+ - Down
358
+ * - 4
359
+ - Verse 1
360
+ - Verse 3
361
+ -
362
+ * - 5
363
+ - Verse 2
364
+ - Verse 4
365
+ - Chorus n
366
+ * - 6
367
+ - Verse 2
368
+ - Verse 5
369
+ - Outro n
370
+ * - 7
371
+ - Verse 2
372
+ - Verse 6
373
+ -
374
+ * - 8
375
+ - Bridge
376
+ - Bridge
377
+ -
378
+ * - 9
379
+ - Chorus
380
+ - Chorus
381
+ -
382
+ * - 10
383
+ - Outro
384
+ - Outro
385
+ -
386
+ ```
387
+
388
+ ```{eval-rst}
389
+ .. list-table:: High mood phrase variants.
390
+ :header-rows: 1
391
+
392
+ * - Phrase ID
393
+ - k1
394
+ - k2
395
+ - k3
396
+ - Expanded Label
397
+ * - 1
398
+ - 1
399
+ -
400
+ -
401
+ - Intro 1
402
+ * - 1
403
+ - 0
404
+ -
405
+ -
406
+ - Intro 2
407
+ * - 2
408
+ -
409
+ - 0
410
+ - 0
411
+ - Up 1
412
+ * - 2
413
+ -
414
+ - 0
415
+ - 1
416
+ - Up 2
417
+ * - 2
418
+ -
419
+ - 1
420
+ - 0
421
+ - Up 3
422
+ * - 3
423
+ -
424
+ -
425
+ -
426
+ - Down 1
427
+ * - 5
428
+ - 1
429
+ -
430
+ -
431
+ - Chorus 2
432
+ * - 5
433
+ - 0
434
+ -
435
+ -
436
+ - Chorus 1
437
+ * - 6
438
+ - 1
439
+ -
440
+ -
441
+ - Outro 1
442
+ * - 6
443
+ - 0
444
+ -
445
+ -
446
+ - Outro 2
447
+ ```
448
+
449
+ ```{eval-rst}
450
+ .. list-table:: Track banks.
451
+ :header-rows: 1
452
+
453
+ * - Bank ID
454
+ - Label
455
+ * - 0
456
+ - Default (treated as Cool)
457
+ * - 1
458
+ - Cool
459
+ * - 2
460
+ - Natural
461
+ * - 3
462
+ - Hot
463
+ * - 4
464
+ - Subtle
465
+ * - 5
466
+ - Warm
467
+ * - 6
468
+ - Vivid
469
+ * - 7
470
+ - Club 1
471
+ * - 8
472
+ - Club 2
473
+ ```
474
+
304
475
  ### PWAV: Waveform Preview Tag
305
476
 
306
477
  Seen in `.DAT` analysis files. This kind of section holds a fixed-width monochrome
@@ -489,7 +489,7 @@ around 1/75th of a second (13.333ms) per frame, i.e. about half the granularity
489
489
  - `0` if not a loop or VBR/ABR MPEG file
490
490
  * - `Kind`
491
491
  - Type of cue point
492
- - Cue= `0` , Fade-In= `0` , Fade-Out= `0` , Load= `3` , Loop= `4`
492
+ - Cue= `0` , Fade-In= `1` , Fade-Out= `2` , Load= `3` , Loop= `4`
493
493
  * - `Color`
494
494
  - The color ID of the cue point
495
495
  - `-1` if no color
@@ -28,11 +28,7 @@ Pioneer's Rekordbox DJ Software. It currently supports
28
28
  - Analysis files (ANLZ)
29
29
  - My-Settings files
30
30
 
31
- Tested Rekordbox versions: `5.8.6 | 6.5.3`
32
-
33
- Starting from version `6.6.5` Pioneer obfuscated the `app.asar` file contents, breaking
34
- the key extraction (see [this issue][issue] and the Rekordbox 6 database section for
35
- more details).
31
+ Tested Rekordbox versions: `5.8.6 | 6.5.3 | 6.7.7`
36
32
 
37
33
  ```{warning}
38
34
  This project is still under development and might contain bugs or
@@ -59,10 +55,10 @@ maxdepth: 2
59
55
  caption: File formats
60
56
  ---
61
57
 
58
+ formats/db6
62
59
  formats/xml
63
60
  formats/anlz
64
61
  formats/mysetting
65
- formats/db6
66
62
  ```
67
63
 
68
64
  ```{toctree}
@@ -25,18 +25,6 @@ from pyrekordbox import show_config
25
25
 
26
26
  show_config()
27
27
  ````
28
-
29
- which, for example, will print
30
- ````
31
- Pioneer:
32
- app_dir = C:\Users\user\AppData\Roaming\Pioneer
33
- install_dir = C:\Program Files\Pioneer
34
- Rekordbox 5:
35
- app_dir = C:\Users\user\AppData\Roaming\Pioneer\rekordbox
36
- install_dir = C:\Program Files\Pioneer\rekordbox 5.8.6
37
- ...
38
- ````
39
-
40
28
  If for some reason the configuration fails the values can be updated by providing the
41
29
  paths to the directory where Pioneer applications are installed (`pioneer_install_dir`)
42
30
  and to the directory where Pioneer stores the application data (`pioneer_app_dir`)
@@ -45,12 +33,65 @@ from pyrekordbox.config import update_config
45
33
 
46
34
  update_config("<pioneer_install_dir>", "<pioneer_app_dir>")
47
35
  ````
48
-
49
36
  Alternatively the two paths can be specified in a configuration file under the section
50
37
  `rekordbox`. Supported configuration files are pyproject.toml, setup.cfg, pyrekordbox.toml,
51
38
  pyrekordbox.cfg and pyrekordbox.yaml.
52
39
 
53
40
 
41
+ ## Rekordbox 6 database
42
+
43
+ Rekordbox 6 now uses a SQLite database for storing the collection content.
44
+ Unfortunatly, the new `master.db` SQLite database is encrypted using
45
+ [SQLCipher][sqlcipher], which means it can't be used without the encryption key.
46
+ However, since your data is stored and used locally, the key must be present on the
47
+ machine running Rekordbox.
48
+
49
+ Pyrekordbox can unlock the new Rekordbox `master.db` SQLite database and provides
50
+ an easy interface for accessing the data stored in it:
51
+
52
+ ````python
53
+ from pyrekordbox import Rekordbox6Database
54
+
55
+ db = Rekordbox6Database()
56
+
57
+ for content in db.get_content():
58
+ print(content.Title, content.Artist.Name)
59
+
60
+ playlist = db.get_playlist()[0]
61
+ for song in playlist.Songs:
62
+ content = song.Content
63
+ print(content.Title, content.Artist.Name)
64
+ ````
65
+ Fields in the Rekordbox database that are stored without linking to other tables
66
+ can be changed via the corresponding property of the object:
67
+ ````python
68
+ content = db.get_content()[0]
69
+ content.Title = "New Title"
70
+ ````
71
+ Some fields are stored as references to other tables, for example the artist of a track.
72
+ Check the [documentation](#db6-format) of the corresponding object for more information.
73
+ So far only a few tables support adding or deleting entries:
74
+ - ``DjmdPlaylist``: Playlists/Playlist Folders
75
+ - ``DjmdSongPlaylist``: Songs in a playlist
76
+
77
+ ````{important}
78
+ Starting from Rekordbox version ``6.6.5`` Pioneer obfuscated the ``app.asar`` file
79
+ contents, breaking the key extraction (see [this discussion](https://github.com/dylanljones/pyrekordbox/discussions/97) for more details).
80
+ If you are using a later version of Rekorbox and have no cached key from a previous
81
+ version, the database can not be unlocked automatically.
82
+ The command line interface of ``pyrekordbox`` provides a command for downloading
83
+ the key from known sources and writing it to the cache file:
84
+ ```shell
85
+ python -m pyrekordbox download-key
86
+ ```
87
+ Once the key is cached the database can be opened without providing the key.
88
+ The key can also be provided manually:
89
+ ```python
90
+ db = Rekordbox6Database(key="<insert key here>")
91
+ ```
92
+ ````
93
+
94
+
54
95
  ## Rekordbox XML
55
96
 
56
97
  The Rekordbox XML database is used for importing (and exporting) Rekordbox collections
@@ -107,6 +148,17 @@ Changing and creating the Rekordbox analysis files is planned as well, but for t
107
148
  full structure of the analysis files has to be understood.
108
149
 
109
150
 
151
+ ```{note}
152
+ Some ANLZ tags are still unsupported:
153
+ - PCOB
154
+ - PCO2
155
+ - PSSI
156
+ - PWV6
157
+ - PWV7
158
+ - PWVC
159
+ ```
160
+
161
+
110
162
  ## Rekordbox My-Settings
111
163
 
112
164
  Rekordbox stores the user settings in `*SETTING.DAT` files, which get exported to USB
@@ -126,37 +178,8 @@ sync = mysett.get("sync")
126
178
  quant = mysett.get("quantize")
127
179
  ````
128
180
 
129
-
130
- ## Rekordbox 6 database
131
-
132
- Rekordbox 6 now uses a SQLite database for storing the collection content.
133
- Unfortunatly, the new `master.db` SQLite database is encrypted using
134
- [SQLCipher][sqlcipher], which means it can't be used without the encryption key.
135
- However, since your data is stored and used locally, the key must be present on the
136
- machine running Rekordbox.
137
-
138
- Pyrekordbox can unlock the new Rekordbox `master.db` SQLite database and provides
139
- an easy interface for accessing the data stored in it:
140
-
141
- ````python
142
- from pyrekordbox import Rekordbox6Database
143
-
144
- db = Rekordbox6Database()
145
-
146
- for content in db.get_content():
147
- print(content.Title, content.Artist.Name)
148
-
149
- playlist = db.get_playlist()[0]
150
- for song in playlist.Songs:
151
- content = song.Content
152
- print(content.Title, content.Artist.Name)
153
- ````
154
- Adding new rows to the tables of the database is not supported since it is not yet known
155
- how Rekordbox generates the UUID/ID's. Using wrong values for new database entries
156
- could corrupt the library. This feature will be added after some testing.
157
- Changing existing entries like the title, artist or file path of a track in the database
158
- should work as expected.
159
-
160
-
181
+ ```{note}
182
+ The `DEVSETTING.DAT` file is still not supported
183
+ ```
161
184
 
162
185
  [sqlcipher]: https://www.zetetic.net/sqlcipher/open-source/
@@ -32,23 +32,17 @@ dependencies = [
32
32
  "bidict>=0.21.0",
33
33
  "blowfish>=0.6.0",
34
34
  "construct>=2.10.0",
35
- "hypothesis>=6.0.0",
36
35
  "numpy>=1.19.0",
37
36
  "packaging",
38
- "pytest>=6.2.0",
39
37
  "psutil>=5.9.0",
40
- "setuptools>=60.0.0",
41
- "setuptools-scm[toml]>=4",
42
38
  "sqlalchemy>=2.0.0",
43
39
  ]
44
40
 
45
41
  [project.optional-dependencies]
46
- build = [
47
- "wheel>=0.37.0",
48
- ]
49
42
  test = [
43
+ "hypothesis>=6.0.0",
44
+ "pytest>=6.2.0",
50
45
  "pytest-cov",
51
- "wheel>=0.37.0",
52
46
  ]
53
47
 
54
48
  [project.urls]
@@ -61,8 +55,8 @@ Tracker = "https://github.com/dylanljones/pyrekordbox/issues"
61
55
 
62
56
  [build-system]
63
57
  requires = [
64
- "setuptools >= 60.0.0",
65
- "setuptools_scm[toml] >= 4, <6",
58
+ "setuptools >= 61.0.0",
59
+ "setuptools_scm[toml] >= 4",
66
60
  "setuptools_scm_git_archive",
67
61
  "wheel >= 0.37.0",
68
62
  ]