Unfold musical jumps
JavaScript (ES6), 253 bytes

x=&gt;eval('n=(" "+x).replace(/D.{11}|[CSF]/g,d=&gt;({C:4,S:5,F:6}[d]|(d[2]&lt;"S")*2+(d[8]&lt;"f"))).split` `;for(i=c=f=o="";v=n[++i];v&lt;9?v&lt;4?(n[i]=7,i=0,s=n.indexOf`5`,v==0?f=i=s:v==1?c=i=s:v==2?f=1:c=1):v==4&amp;c?c=!(i=n.indexOf("4",i+1)):v==6&amp;f?i=n:0:o+=v+" ");o')


Explanation

Could be golfed better but I'm done for now.

x=&gt;
  eval(`                                  // use eval to enable for loop without return
    n=(" "+x)                             // n = array of [ "", ...notes/commands ]
                                          // empty first element means f and c can be set
                                          //     to i (always true) in the cases below
      // DS fine =&gt; 0, DS coda =&gt; 1, DC fine =&gt; 2, DC coda =&gt; 3, C =&gt; 4, S =&gt; 5, F =&gt; 6
      .replace(/D.{11}|[CSF]/g,d=&gt;({C:4,S:5,F:6}[d]|(d[2]&lt;"S")*2+(d[8]&lt;"f")))
      .split\` \`;
    for(
      i=                                  // i = position in note array
      c=                                  // c = look out for coda if true
      f=                                  // f = look out for fine if true
      o="";                               // o = output string
      v=n[++i];                           // v = note/command
      v&lt;9?                                // if not a note
        v&lt;4?(                             // if DS/DC
          n[i]=7,                         // change it to NOP
          i=0,                            // reset i here to save doing it in DC cases
          s=n.indexOf\`5\`,
          v==0?f=i=s:                     // case: D.S. al fine
          v==1?c=i=s:                     // case: D.S. al coda
          v==2?f=1:                       // case: D.C. al fine
          c=1                             // case: D.C. al coda
        ):
        v==4&amp;c?c=!(i=n.indexOf("4",i+1)): // case: C
        v==6&amp;f?i=n:                       // case: F
        0                                 // case: S
      :o+=v+" "                           // add the note
    );o                                   // return the output
  `)


Test



var solution = x=&gt;eval('n=(" "+x).replace(/D.{11}|[CSF]/g,d=&gt;({C:4,S:5,F:6}[d]|(d[2]&lt;"S")*2+(d[8]&lt;"f"))).split` `;for(i=c=f=o="";v=n[++i];v&lt;9?v&lt;4?(n[i]=7,i=0,s=n.indexOf`5`,v==0?f=i=s:v==1?c=i=s:v==2?f=1:c=1):v==4&amp;c?c=!(i=n.indexOf("4",i+1)):v==6&amp;f?i=n:0:o+=v+" ");o')
&lt;input type="text" id="input" value="a b C c d D.C. al coda e f F g g# C gb a# D.C. al fine" /&gt;
&lt;button onclick="result.textContent=solution(input.value)"&gt;Go&lt;/button&gt;
&lt;pre id="result"&gt;&lt;/pre&gt;