function Part(steps, bLength) {
    looper_classCallCheck(this, Part);
    this.length = steps || 0; 
    this.partStep = 0;
    this.phrases = [];
    this.isPlaying = false;
    this.noLoop();
    this.tatums = bLength || 0.0625; 

    this.metro = new metro();
    this.metro._init();
    this.metro.beatLength(this.tatums);
    this.metro.setBPM(BPM);
    main.parts.push(this);
    this.callback = function () {};
  }
<p>A p5.Part plays back one or more p5.Phrases. Instantiate a part
 with steps and tatums. By default, each step represents a 1/16th note.</p>

 <p>See p5.Phrase for more about musical timing.</p>

 @class p5.Part
 @constructor
 @param {Number} [steps]   Steps in the part
 @param {Number} [tatums] Divisions of a beat, e.g. use 1/4, or 0.25 for a quater note (default is 1/16, a sixteenth note)
 @example
 <div><code>
 let box, drum, myPart;
 let boxPat = [1,0,0,2,0,2,0,0];
 let drumPat = [0,1,1,0,2,0,1,0];

 function preload() {
   box = loadSound('assets/beatbox.mp3');
   drum = loadSound('assets/drum.mp3');
 }

 function setup() {
   let cnv = createCanvas(100, 100);
   cnv.mousePressed(playMyPart);
   background(220);
   textAlign(CENTER, CENTER);
   text('tap to play', width/2, height/2);

   let boxPhrase = new p5.Phrase('box', playBox, boxPat);
   let drumPhrase = new p5.Phrase('drum', playDrum, drumPat);
   myPart = new p5.Part();
   myPart.addPhrase(boxPhrase);
   myPart.addPhrase(drumPhrase);
   myPart.setBPM(60);
 }

 function playBox(time, playbackRate) {
   box.rate(playbackRate);
   box.play(time);
 }

 function playDrum(time, playbackRate) {
   drum.rate(playbackRate);
   drum.play(time);
 }

 function playMyPart() {
   userStartAudio();

   myPart.start();
 }
 </code></div>