<instrument type='blue.orchestra.BlueSynthBuilder' editEnabled='true'>
  <name>BeatPlayer v1.9</name>
  <comment>Author: Atte AndrÃ© Jensen (atte.dk), 2008

Sample player, targeted at playing breakbeats. Automode will
guess the tempo of the loop, if:
a) The tempo of the beat is between &quot;Maximum BPM&quot; and &quot;Maximum
    BPM&quot; / 2
b) The beat is in 4/4 and either 1/4, 1/2, 1, 2, 4 (etc) bars long

Changelog:
1.9
* Minor code cleanup

1.8
* Stretching works in stereo
* UI cleanup
* Tuning in stretch-mode (doesn&apos;t affect tempo)

1.7
* Stretching is done with syncgrain only
* Code cleanup

1.6.1
* Experimented with syncgrain in three bands

1.6
* Experimenting with both sndarp, granule and syncgrain

1.5
* Added iwarpgain to reduce output of sndwarp

1.4
* Added &quot;time stretching&quot; (using sndwarp), however the sound quality
  is quite poor :-(

1.3
* More efficient code in automode

1.2
* Fixed bug in automode

1.1
* Added auto mode, will try to guess number of bars

1.0
* Initial release
</comment>
  <globalOrc>git_beat_player_&lt;INSTR_NAME&gt;	ftgen	0, 0, 0, 1, &quot;&lt;file&gt;&quot;, &lt;skipa&gt;+&lt;skipb&gt;+&lt;skipc&gt;, 0, 0
git_beat_player_l_&lt;INSTR_NAME&gt;	ftgen	0, 0, 0, 1, &quot;&lt;file&gt;&quot;, &lt;skipa&gt;+&lt;skipb&gt;+&lt;skipc&gt;, 0, 1
git_beat_player_r_&lt;INSTR_NAME&gt;	ftgen	0, 0, 0, 1, &quot;&lt;file&gt;&quot;, &lt;skipa&gt;+&lt;skipb&gt;+&lt;skipc&gt;, 0, ftchnls(git_beat_player_&lt;INSTR_NAME&gt;)
git_beat_player_wind_&lt;INSTR_NAME&gt; ftgen 0, 0, 16384, 9,	.5, 1, 0
</globalOrc>
  <globalSco/>
  <instrumentText>ivol	=	p4; 0-1

; defaults
ivol	=	(ivol == 0) ? 1 : ivol
kcps	=	1
icps	=	1

; setup
iamp	=	20000
ifn	=	git_beat_player_&lt;INSTR_NAME&gt;
ifnl	=	git_beat_player_l_&lt;INSTR_NAME&gt;
ifnr	=	git_beat_player_r_&lt;INSTR_NAME&gt;
imaxbpm	=	&lt;maxBPM&gt;; default = 160
iguess_meter =	4
iminbars = 	.25
imax_tune_octaves = 2

itune_ref = 	6
;itune1	=	cpspch(itune_ref + (&lt;tuneSemitones&gt; + &lt;tuneCents&gt; * .01) * .01)
itune1	=	&lt;tuneSemitones&gt; + &lt;tuneCents&gt; * .01
itune1	=	itune1 + (imax_tune_octaves* 12)
itune1	=	itune_ref + (itune1 * .01)
itune1	=	cpspch(itune1)
itune2	=	cpspch(itune_ref + imax_tune_octaves)
itune	=	itune1 / itune2

; calculate
kamp	=	iamp * ivol * &lt;vol&gt;
ichn	filenchnls	&quot;&lt;file&gt;&quot;
;gichn	filenchnls	&quot;&lt;file&gt;&quot;
ilen	filelen		&quot;&lt;file&gt;&quot;
kbpm	miditempo
;ibpm	=	i(kbpm)
iminbars2 =	iminbars * 2
israte	filesr	&quot;&lt;file&gt;&quot;
iratefactor = 	sr / israte

; guess nb bars
iguess_bars	=	ilen * imaxbpm / 60 / iguess_meter
icount	=	0
;	print	iguess_bars
guess:
icount	=	icount + 1
iguess_bars = 	iguess_bars * .5
	cggoto(iguess_bars &gt; iminbars2), guess
iguess_bars pow	2, icount
iguess_bars =	iguess_bars * iminbars

;	print iguess_bars
; maybe drop altering pitch
	cggoto(&lt;speed&gt;==0), play
; alter pitch
	cggoto(&lt;auto&gt;==1), auto
; from beat/tempo settings
manual:
kcps	=	kbpm/60 * ilen/(&lt;meter&gt;*&lt;nbBars&gt; + &lt;addBeats&gt; + &lt;addBeatPart&gt;)
	goto	tempo_set
auto:
kcps	=	kbpm/60 * ilen/(iguess_meter*iguess_bars)

tempo_set:

; from tuning
;kcps	=	kcps * (1 + &lt;tunea&gt; + &lt;tuneb&gt;)

; setup for syncgrain
iolaps	=	1.6 / itune
kfreq	=	40
;kpitch	= 	2 / iratefactor
kpitch	= 	1 / iratefactor * itune
kgrsize	=	1 / kfreq * iolaps
;kprate	= 	2 * kcps / iratefactor / iolaps
kprate	= 	kcps / iratefactor / iolaps
ifun2	=	git_beat_player_wind_&lt;INSTR_NAME&gt;
icmp	=	.5

play:
; correct pitch both in stereo and mono
	cggoto(ichn==2), stereo
mono:
	cggoto(&lt;speed&gt;=2), str_mono
aout	loscil3	kamp, kcps, ifn, 1, 1
;aout syncgrain	kamp, kfreq/icmp, kpitch, kgrsize * icmp, kprate, ifn, ifun2, iolaps

	goto	end_mono
str_mono:
;aout syncgrain	kamp, kfreq/icmp, kpitch/2, kgrsize * icmp, kprate/2, ifn, ifun2, iolaps
aout syncgrain	kamp, kfreq/icmp, kpitch, kgrsize * icmp, kprate, ifn, ifun2, iolaps

end_mono:
aoutl	=	aout
aoutr	=	aout
	goto	done

stereo:
	cggoto(&lt;speed&gt;==2), str_stereo
aoutl, aoutr loscil3 kamp, kcps, ifn, 1, 1
	goto	end_stereo
str_stereo:
aoutl syncgrain	kamp, kfreq, kpitch, kgrsize, kprate, ifnl, ifun2, iolaps
aoutr syncgrain	kamp, kfreq, kpitch, kgrsize, kprate, ifnr, ifun2, iolaps
;aoutl	=	aout
;aoutr	=	aout

end_stereo:
done:

; output
	blueMixerOut aoutl, aoutr</instrumentText>
  <graphicInterface editEnabled='false'>
    <uniqueNameManager nameIndex='0' defaultPrefix='bsbObj'/>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBFileSelector'>
      <objectName>file</objectName>
      <x>27</x>
      <y>54</y>
      <fileName></fileName>
      <textFieldWidth>300</textFieldWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>skipa</objectName>
      <x>22</x>
      <y>266</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>0.1</maximum>
      <resolution>1.0E-4</resolution>
      <value>0.0</value>
      <sliderWidth>400</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>skipb</objectName>
      <x>22</x>
      <y>295</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <resolution>0.1</resolution>
      <value>0.0</value>
      <sliderWidth>400</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>nbBars</objectName>
      <x>411</x>
      <y>126</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>4.0</maximum>
      <resolution>1.0</resolution>
      <value>1.0</value>
      <sliderWidth>150</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBDropdown'>
      <objectName>meter</objectName>
      <x>358</x>
      <y>137</y>
      <bsbDropdownItemList>
        <bsbDropdownItem>
          <name>4/4</name>
          <value>4</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>3/4</name>
          <value>3</value>
        </bsbDropdownItem>
      </bsbDropdownItemList>
      <selectedIndex>0</selectedIndex>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>366</x>
      <y>163</y>
      <label>Meter</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>418</x>
      <y>145</y>
      <label>Nb Bars</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>28</x>
      <y>85</y>
      <label>Sound File</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>skipc</objectName>
      <x>22</x>
      <y>324</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>10.0</maximum>
      <resolution>1.0</resolution>
      <value>0.0</value>
      <sliderWidth>400</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob' version='2'>
      <objectName>vol</objectName>
      <x>556</x>
      <y>12</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>1.0</value>
      <knobWidth>60</knobWidth>
      <randomizable>false</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>565</x>
      <y>88</y>
      <label>Volume</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBDropdown'>
      <objectName>auto</objectName>
      <x>27</x>
      <y>151</y>
      <bsbDropdownItemList>
        <bsbDropdownItem>
          <name>Auto</name>
          <value>1</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Manual</name>
          <value>0</value>
        </bsbDropdownItem>
      </bsbDropdownItemList>
      <selectedIndex>0</selectedIndex>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>addBeats</objectName>
      <x>411</x>
      <y>155</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>4.0</maximum>
      <resolution>1.0</resolution>
      <value>0.0</value>
      <sliderWidth>150</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>420</x>
      <y>174</y>
      <label>Additional Beats</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>26</x>
      <y>105</y>
      <label>--------------------------------------------------------------------------</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>33</x>
      <y>175</y>
      <label>&lt;html&gt;&lt;center&gt;Detection&lt;br&gt;Method&lt;/center&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>252</x>
      <y>1</y>
      <label>&lt;html&gt;&lt;font size=&quot;6&quot;&gt;&lt;b&gt;BeatPlayer&lt;/b&gt;&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>298</x>
      <y>27</y>
      <label>v 1.9</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>25</x>
      <y>118</y>
      <label>&lt;html&gt;&lt;font size=&quot;4&quot;&gt;Loop Length Detection&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>maxBPM</objectName>
      <x>125</x>
      <y>137</y>
      <automationAllowed>true</automationAllowed>
      <minimum>100.0</minimum>
      <maximum>300.0</maximum>
      <resolution>1.0</resolution>
      <value>168.0</value>
      <sliderWidth>150</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>133</x>
      <y>162</y>
      <label>Maximum BPM</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>339</x>
      <y>138</y>
      <label>&lt;html&gt;M&lt;br&gt;A&lt;br&gt;N&lt;br&gt;U&lt;br&gt;A&lt;br&gt;L&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>26</x>
      <y>225</y>
      <label>--------------------------------------------------------------------------</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBDropdown'>
      <objectName>speed</objectName>
      <x>376</x>
      <y>38</y>
      <bsbDropdownItemList>
        <bsbDropdownItem>
          <name>Original</name>
          <value>0</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Pitch</name>
          <value>1</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Stretch</name>
          <value>2</value>
        </bsbDropdownItem>
      </bsbDropdownItemList>
      <selectedIndex>1</selectedIndex>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>114</x>
      <y>144</y>
      <label>&lt;html&gt;A&lt;br&gt;U&lt;br&gt;T&lt;br&gt;O&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>377</x>
      <y>62</y>
      <label>&lt;html&gt;&lt;center&gt;Speed&lt;br&gt;Adjustment&lt;/center&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>addBeatPart</objectName>
      <x>411</x>
      <y>184</y>
      <automationAllowed>true</automationAllowed>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <resolution>0.0010</resolution>
      <value>0.0</value>
      <sliderWidth>150</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>419</x>
      <y>202</y>
      <label>Additional Beat Fraction</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>26</x>
      <y>31</y>
      <label>&lt;html&gt;&lt;font size=&quot;4&quot;&gt;Global&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>27</x>
      <y>370</y>
      <label>&lt;html&gt;&lt;font size=&quot;4&quot;&gt;Tuning&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>26</x>
      <y>239</y>
      <label>&lt;html&gt;&lt;font size=&quot;4&quot;&gt;Playback Offset&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>27</x>
      <y>357</y>
      <label>--------------------------------------------------------------------------</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>tuneSemitones</objectName>
      <x>22</x>
      <y>404</y>
      <automationAllowed>true</automationAllowed>
      <minimum>-24.0</minimum>
      <maximum>24.0</maximum>
      <resolution>1.0</resolution>
      <value>0.0</value>
      <sliderWidth>400</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>tuneCents</objectName>
      <x>22</x>
      <y>433</y>
      <automationAllowed>true</automationAllowed>
      <minimum>-100.0</minimum>
      <maximum>100.0</maximum>
      <resolution>1.0</resolution>
      <value>0.0</value>
      <sliderWidth>400</sliderWidth>
      <randomizable>true</randomizable>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>483</x>
      <y>410</y>
      <label>Semi Tones</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>482</x>
      <y>439</y>
      <label>Cents</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>481</x>
      <y>331</y>
      <label>Seconds</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>480</x>
      <y>302</y>
      <label>1/10 Seconds</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>481</x>
      <y>273</y>
      <label>Micro Time</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>28</x>
      <y>388</y>
      <label>&lt;html&gt;&lt;font size=&quot;2&quot;&gt;Set &quot;Speed Adjustment&quot; to &quot;Stretch&quot; to enable...&lt;/font&gt;&lt;html&gt;</label>
    </bsbObject>
  </graphicInterface>
  <bsbParameterList>
    <parameter uniqueId='-1603577076' name='addBeatPart' label='' min='0.0' max='1.0' resolution='0.0010' automationEnabled='false'>
      <line name='' version='2' max='1.0' min='0.0' resolution='0.0010' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577080' name='addBeats' label='' min='0.0' max='4.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='4.0' min='0.0' resolution='1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577078' name='maxBPM' label='' min='100.0' max='300.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='300.0' min='100.0' resolution='1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='168.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577086' name='nbBars' label='' min='0.0' max='4.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='4.0' min='0.0' resolution='1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577090' name='skipa' label='' min='0.0' max='0.1' resolution='1.0E-4' automationEnabled='false'>
      <line name='' version='2' max='0.1' min='0.0' resolution='1.0E-4' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577088' name='skipb' label='' min='0.0' max='1.0' resolution='0.1' automationEnabled='false'>
      <line name='' version='2' max='1.0' min='0.0' resolution='0.1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577084' name='skipc' label='' min='0.0' max='10.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='10.0' min='0.0' resolution='1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577072' name='tuneCents' label='' min='-100.0' max='100.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='100.0' min='-100.0' resolution='1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577074' name='tuneSemitones' label='' min='-24.0' max='24.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='24.0' min='-24.0' resolution='1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-1603577082' name='vol' label='' min='0.0' max='1.0' resolution='-1.0' automationEnabled='false'>
      <line name='' version='2' max='1.0' min='0.0' resolution='-1.0' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1.0'/>
      </line>
    </parameter>
  </bsbParameterList>
  <presetGroup name='Presets'/>
  <opcodeList/>
</instrument>