operations.js
function uniq (gamut) {
  var semitones = heights(gamut)
  return gamut.reduce(function (uniq, current, currentIndex) {
    if (current) {
      var index = semitones.indexOf(semitones[currentIndex])
      if (index === currentIndex) uniq.push(current)
    }
    return uniq
  }, [])
}
function uniq (gamut) {
  var semitones = heights(gamut)
  return gamut.reduce(function (uniq, current, currentIndex) {
    if (current) {
      var index = semitones.indexOf(semitones[currentIndex])
      if (index === currentIndex) uniq.push(current)
    }
    return uniq
  }, [])
}
function uniq ( gamut ) { var semitones = heights ( gamut ) return gamut . reduce ( function ( uniq , current , currentIndex ) { if ( current ) { var index = semitones . indexOf ( semitones [ currentIndex ] ) if ( index === currentIndex ) uniq . push ( current ) } return uniq } , [ ] ) }
remove duplicated notes AND nulls
remove duplicated notes AND nulls