User Tools

Site Tools


looping

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
looping [2009/05/25 11:49]
pegasus Moved elysion's thought from features page
looping [2009/10/13 20:18] (current)
rryan
Line 5: Line 5:
 ===== Summary and Rationale ===== ===== Summary and Rationale =====
  
-**Status**: This specification is **in drafting**. Feel free to add ideas to this page.+**Status**: This specification is **complete**. Please do not edit this page. The implementation was finished in October 2009 and is pending merge into trunk.
  
 Add support for looping parts of songs. Looping parts of songs allows DJs to perform more active mixes and also serve as an easy way to prevent trainwrecks. Add support for looping parts of songs. Looping parts of songs allows DJs to perform more active mixes and also serve as an easy way to prevent trainwrecks.
Line 78: Line 78:
 When a loop occurs, we /know/ that once we reach the loops end we are going to want to jump to the start. What is desirable for the looping machinery is a flexible way to express that to the Reader. "​Please cache this region of the song, because I'm going to need to loop over it"​. ​ When a loop occurs, we /know/ that once we reach the loops end we are going to want to jump to the start. What is desirable for the looping machinery is a flexible way to express that to the Reader. "​Please cache this region of the song, because I'm going to need to loop over it"​. ​
  
- +The Reader was completely ditched and rewritten as CachingReader,​ which implements this functionality. EngineBuffer was rewritten to work with this new reader.
- +
  
 ===== Work Breakdown ===== ===== Work Breakdown =====
Line 94: Line 92:
       1.2.2 In process() (or similar) function, check if playpos == end of loop (and move playpos to start of loop)       1.2.2 In process() (or similar) function, check if playpos == end of loop (and move playpos to start of loop)
       1.2.3 If seeking occurs outside of loop, cancel the looping (?)       1.2.3 If seeking occurs outside of loop, cancel the looping (?)
-      1.2.4  
     1.3 Code hooks into waveform view and waveform summary     1.3 Code hooks into waveform view and waveform summary
       1.3.1 Talk to RJ Ryan to make sure new waveform makes this easy       1.3.1 Talk to RJ Ryan to make sure new waveform makes this easy
-      1.3.Get loop in/out pos and paint highly visible markers+      1.3.Get loop in/out pos and paint highly visible markers 
 +      1.3.3 Make waveform more flexible in how it represents markers so that you can tell the difference between a loop and cue 
 +    1.4 Replace Reader with CachingReader 
 +    1.5 Rewrite EngineBuffer,​ remove old junk 
 +      1.5.1 Refactor rate control into RateControl,​ bpm into BpmControl, looping into LoopingControl,​ etc 
 +      1.5.2 Enable hinting of cues, loops, etc to CachingReader -- currently not done.  
 +    1.6 Update the EngineBufferScale objects to work with the new system. 
 +      1.6.1 Use ReadAheadManager to manage reading forward in the song given looping, reverse, etc. 
 +      1.6.2 Need to rewrite them to no longer use a ring-buffer,​ but rather work in a streaming fashion. 
 +    1.7 Update all official skins to have loop buttons. ​
  
 ===== Current Progress ===== ===== Current Progress =====
  
-The Features_rryan-looping branch contains all the work that's been done so far.  +The <del>Features_rryan-looping</​del>​ lp:​~mixxxdevelopers/​mixxx/​features_looping ​branch contains all the work that's been done so far. 
- +
-The EngineBuffer::​process method has been replaced with a very basic version of it that does not have all the bells and whistles of the big, nasty, full version of process.  +
- +
-The EngineBuffer::​process method calls LoopingControl::​process to ask it whether it should change its current position (i.e. whether it should loop). If it should loop, then it asks the Reader to seek to the new position, and sets the play position to the new position. +
  
 The LoopingControl class has the following Control Objects: The LoopingControl class has the following Control Objects:
Line 117: Line 118:
 The WaveformRenderer is setup to render WaveformRenderMarks of the loop_start_position and loop_end_position control objects. ​ The WaveformRenderer is setup to render WaveformRenderMarks of the loop_start_position and loop_end_position control objects. ​
  
-In order to play with the current looping setup, you need to change the skim.xml of one of your skins to make some buttons ​in the skin emit loop_in, loop_out, and reloop_exit signalsOn '​outline',​ it is convenient ​to change ​the Fast Forward, Fast Backward, and Reverse buttons to Loop In, Loop Out, and Reloop/Exit.  +The outlineNetbook skin has been changed ​to have loop in/​out/​reloop ​buttons. ​ 
- + 
 +==== Remaining Work ==== 
 + 
 +  * Change loop/cue controls ​to hint the CachingReader 
 +  * Ensure audio quality for EngineBufferScaleLinear/SoundTouch 
 +  * Experiment with EngineBufferScaleRubberBand 
 +  * Add tests 
 +   
 + 
 ===== Team ===== ===== Team =====
  
Line 125: Line 135:
   * **YOU**   * **YOU**
   * RJ Ryan   * RJ Ryan
-  * Albert Santoni+  * Albert Santoni ​
looping.1243266594.txt.gz · Last modified: 2009/05/25 11:49 by pegasus