User Tools

Site Tools


This is an old revision of the document!

Things to do for v1.8.0

Remaining blocker bugs for 1.8.0 final

  • Scaling ASSERTs
  • EngineBufferScaleLinear audio degradation (dropped samples?)
  • EngineBufferScaleST repeated buffers, sync loss
  • “scratch” control is asymmetric - - fixed in fixes_scratch
  • fixes_scratch merge<del> Very important remaining tasks for beta2: * Merge sadness_ssplugin and <del>build plugins for each platform
  • Merge features_sqlite into trunk
  • Merge features_scriptTimers (with its MIDI thread fixes)
  • M4A Plugin + Downloader (done)
  • Update LibraryTableModel's rows when TrackDAO is accessed, without resetting it. - in features_sqlite branch
  • Deferred to 1.8.0 final or beta3:
    • Use autopointers for TIOs…
    • Featured Artists agreement + stats

Very important remaining tasks for beta1:

  • Missing columns in playlist/crate/autodj views
  • Schema versioning
  • 1.7.0 to 1.8.0 XML→DB Library importer (Patch from Zach)
  • Playlist blurb
  • Crate image blurb
  • Fix as many crashes as possible
  • Crate/Playlist/MissingTracks need working location column.
  • Analyze view text is not readable on dark skins.
  • Escape Prepare view searches, use fetchMore(), search in the GUI thread


Complete the rewrite for basic – but stable – functionality

  • Track DB
    • Needs blacklisting of removed songs.
  • 1.7.0 to 1.8.0 XML→DB Library importer (Zach)
  • Searching across library features
    • Make sure search is case-insensitive everywhere
    • Search is saved and restored per-model
    • Playlist models store the search per-playlist
    • Searches occur in background thread.
  • Drag-n-drop across library features
    • Make sure you can drop tracks from any place (browse, external track source, mixxx library) into a Mixxx playlist and the play queue Auto DJ queue
    • Win/Mac/Linux drag of files from OS file browser into Mixxx?
    • Make explicit the cases in which a file outside the Mixxx library is added to the Mixxx library.
    • Show an indicator of where you are about to drop a file in the track-table or sidebar. This is a bug in Qt:
  • Context menus across the whole library
    • Make sure context choices for tracks are appropriate to current state.
    • Menus for sidebar items
  • UI Feedback
    • When a track is missing from the library (Missing Songs model done)
    • When a track failed to load
    • When your results are filtered (i.e. a search is active)
    • When you are about to add a track to your Mixxx library. Make any warnings disable-able via mixxx.cfg.
  • Browse Mode
    • Use a file-system model that polls in a background thread
    • Searches and sorting for the filesystem view
    • Always show .. as a choice
    • Always sort folders before files
    • Needs header that shows you your current path
    • Sorting doesn't work in Size column (kb/mb treated as the same)
  • Playlists
    • Playlist table headers show raw column names
    • Playlists need duration delegate
    • Dragging a file thats in a playlist to its own playlist results in many added copies.
    • Drag-and-drop reordering
    • Invisible playlists so that e.g. the Auto-DJ playlist do not show under playlists.
  • Play Queue/AutoDJ
    • Make enable/disable button change text when its on/off so you know its state.
    • Make 95% crossfade threshold configurable via preferences.
  • Library Rescan
    • Basic fast hashing rescan
    • Modify Library table to make orphan detection easier later (add extra track_locations table)
    • Add mixxx_deleted to Libray table and fs_deleted cols to track_locations table
    • Use mixxx_deleted to blacklist files “removed” from the Mixxx library.
    • Cancel rescan functionality (just needs to be fixed)
  • Tagging (not file metadata tagging)
    • DAO for tags
    • Feature for tags
    • Drag-n-drop to sidebar
    • Tag table model
    • Context menu for track table
    • Context menus for tags in sidebar
    • Feature overview page
    • Prepare view
    • Delegate for showing tags in library table
  • Track Sources
    • iTunes playlist TrackModel
    • iTunes needs duration delegate
    • Rhythmbox Need Date delegate
    • Sorting doesn't work in XML-sourced Playlists
  • Polish
    • Sidebar icons for each feature
    • Tooltips for sidebar items
  • MIDI Control of Library
  • Track-table column header context menu to show/hide columns
  • Cue/Loop Storage in the DB - (this is really a mini-project in itself)
    • Write a CueDAO/Cue service.
    • Make TIO's have a list of Cue's
    • Make TrackCollection save a TIO's Cue's on track save (via CueDAO)
    • Ditch EngineBufferCue
    • Extend EngineBuffer to allow outside addition of EngineControls
    • Write CueControl, created by Player, added to EngineBuffer as an EngineControl
    • Restore track-editor, make it show hotcues
    • Add custom widgets for hotcues – not happening: skins will have to have hacked buttons instead
    • Waveform / waveform overview loops and cues
    • Update skins
  • Minor Bugs
    • Duration Delegate should format seconds as %02d.
    • Sorting is not case insensitive (e.g. on Title)


  • Complete the looping feature, merge to trunk.
  • Update controller mappings with hot cue and looping controls
    • SCS.3d - done


  • Solve packaging issues
  • Solve Windows X64 libfaad2 dll building issues (embedded asm vs intrinsics) - may be able to split the assembly code into its own file and assemble that separately - Successfully worked around it by disabling the (5 lines (!) of) assembly code and using the supplied C/C++ code
  • Fix SoundSourceM4A decoder issues


  • Collect enhanced controller mappings from forum posts for wider testing
  • Fix compilation on Windows x64 to correctly use SoundTouch optimizations (or not depending on optimize flag) - Sean
  • Update user manual
  • Can someone with some pull PLEASE tell C-Net to update their Mixxx download page?! 82 downloads a week for Mixxx does not make us look good. - Adam took care of it
  • Upload 1.8.0 final to C-Net and update our home page link there (still points to SF)

MIDI Sub-system tasks

Remaining tasks here are just polish and are not required for release.

  • Move all PortMIDI calls to one thread (the script engines can not directly call send*Msg anymore.) See this.
  • Save multiple device files correctly, deleting previous .midi.xml files in .mixxx/
    • Save the meta-data (controller ID, author, description, etc…)
      • First make a GUI object that lets the user modify the author and description
    • Find a more appropriate place to save the files other than the MidiDeviceManager destructor Now done (only) when OK is clicked in the prefs
    • Need a way to keep track of duplicate devices so separate files can be saved: Have DlgPreferences::slotApply() call MidiDeviceManager::saveMappings() which does them all in one shot (and can thereby keep track of them)
  • Load those files correctly
    • Load files for attached devices regardless of if they're activated or not.
  • Replace MidiCategory with MidiStatusByte permanently (see mididevice.cpp line 195.)
  • MIDI Scripting: Pass the <group> value from the XML to the script as an additional parameter (at the end of the list so existing scripts are not affected.) - Done by Phil
  • Add MIDI script timers
  • GUI changes:
    • Replace “Activate” button with an “Enabled” check box
    • Display enabled devices in the tree in bold text
    • Auto-change “Output” drop-down based on auto-selected output device in MidiDevice(Manager) when the device is enabled - Albert
    • Make “Output” drop-down take effect when changed - not happening in 1.8. Output drop-down is disabled for now.
    • Persistent mapping preset drop-down (don't return to “…” unless Clear All is pressed. If the user tweaks the mapping, say “<custom>” or something.)
    • Also clear the list of MIDI scripts when Clear All is pressed
    • Do not commit changes to the MIDI mapping tables unless OK is pressed in the preferences window. (I.e. allow pressing the Cancel button or the X on the preferences window to restore the MIDI mappings to their previous states.)

Deferred to 1.9


  • Make a user interface that lets you connect to/disconnect from the server. Show some UI feedback if the connection drops.
  • Figure out how to stop Mixxx from crashing (libshout's fault) when the server crashes.

Vinyl control

  • Integrate the latest xwax release code - This is deferred because there are easy-to-mess-up hacks in the xwax code to get it to build on Windows and it would require much more testing than we have time for 1.8.

MIDI scripting

  • Add a way to pass extra parameters from the MIDI mapping to the script function ?
  • MIDI script cross-communication (via custom Control[Objects] the scripts can create via special ScriptEngine functions)


  • Sample accurate scratching: Script use cases:
    1. Tell the Engine to move to absolute sample #X (and/or Y elapsed seconds) over Z seconds of real time, and the Engine will play all the samples between the current and target in the specified time (and fire a signal when it's there) without affecting play status, optionally holding at the target sample until given further instruction
    2. Tell the Engine to move X samples (or Y seconds) forward/backward over Z seconds of real time
    • Implement alpha-beta smoothing filter in the Engine (currently in scratch.* functions in the common script file) with fixed-interval updates. (I.e. if no new data arrives in the interval, assume the control is stopped and feed that data to the smoothing function.)
    • xwax code will be very useful for this. From Mark Hills:
Well I think the xwax source code is your friend here.
Your MIDI stuff is the equivalent of timecoder.c ... operating in one clock.
Your playback engine is the equivalent of player.c ... operating in another clock.
And then pitch.h is what links them together.
You should find everything you need in there.
Search for pitch_dt_observation() in timecoder.c.
Translations of this page:
1.8.0_to_do_list.1273090456.txt.gz · Last modified: 2010/05/05 16:14 by gamegod