react实现一个音序器Sequencer代码

代码语言:html

所属分类:其他

代码描述:react实现一个音序器Sequencer代码

代码标签: react 音序器 Sequencer 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  


  
  
<style>
body {
  background: #1e1e21;
}

.flex {
  display: flex;
  flex-direction: row;
}

.Sequencer {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -55%);
  padding: 1em;
  background: #28282c;
  border-radius: 4px;
}

.notes {
  list-style-type: none;
  position: absolute;
  left: -100px;
  top: 75px;
  text-align: right;
  color: white;
  line-height: 60px;
  opacity: 0.3;
}

.buttons {
  display: flex;
  padding: 0.35em 0 0.5em;
}
.buttons button, .buttons select {
  margin: 5px;
  outline: none;
  background: #36363c;
  color: white;
  padding: 1em;
  font-size: 12px;
  letter-spacing: 1px;
  border-radius: 4px;
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
  cursor: pointer;
  border: 2px solid transparent;
}
.buttons button.active, .buttons select.active {
  color: #0087ff;
  border: 2px solid #0087ff;
}
.buttons .select-wrapper {
  position: relative;
}
.buttons .select-wrapper span {
  position: absolute;
  color: white;
  top: -10px;
  left: 8px;
  font-size: 9px;
  letter-spacing: 1px;
  opacity: 0.3;
}
.buttons select {
  position: relative;
  height: 42px;
  min-width: 50px;
}

.pads {
  box-sizing: border-radius;
  display: flex;
  flex-direction: column-reverse;
  flex-wrap: wrap;
}
.pads .pad {
  background: #36363c;
  border-radius: 4px;
  cursor: pointer;
  width: calc(600px / 10 - 10px);
  height: calc(600px / 10 - 10px);
  margin: 5px;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.3);
  transition: background 100ms ease;
}
.pads .pad:hover {
  background: #42424a;
}
.pads .pad.active {
  background: #42424a;
}
.pads .pad.on {
  background: #0087ff !important;
  box-shadow: 0 0 12px 0 rgba(0, 135, 255, 0.8);
}

@-webkit-keyframes colorize {
  from {
    background: red;
  }
  to {
    background: #55ff00;
  }
}

@keyframes colorize {
  from {
    background: red;
  }
  to {
    background: #55ff00;
  }
}
</style>

  
</head>

<body translate="no">
  <div id='sequencer'></div>
  <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/babel.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/react.15.4.2.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/react-dom.15.4.2.js"></script>
      <script  type="text/babel">
const NOTES = {
"C0": 16.35,"C#0": 17.32,"D0": 18.35,"D#0": 19.45,"E0": 20.6,"F0": 21.83,"F#0": 23.12,"G0": 24.5,"G#0": 25.96,"A0": 27.5,"A#0": 29.14,"B0": 30.87,"C1": 32.7,"C#1": 34.65,"D1": 36.71,"D#1": 38.89,"E1": 41.2,"F1": 43.65,"F#1": 46.25,"G1": 49,"G#1": 51.91,"A1": 55,"A#1": 58.27,"B1": 61.74,"C2": 65.41,"C#2": 69.3,"D2": 73.42,"D#2": 77.78,"E2": 82.41,"F2": 87.31,"F#2": 92.5,"G2": 98,"G#2": 103.83,"A2": 110,"A#2": 116.54,"B2": 123.47,"C3": 130.81,"C#3": 138.59,"D3": 146.83,"D#3": 155.56,"E3": 164.81,"F3": 174.61,"F#3": 185,"G3": 196,"G#3": 207.65,"A3": 220,"A#3": 233.08,"B3": 246.94,"C4": 261.63,"C#4": 277.18,"D4": 293.66,"D#4": 311.13,"E4": 329.63,"F4": 349.23,"F#4": 369.99,"G4": 392,"G#4": 415.3,"A4": 440,"A#4": 466.16,"B4": 493.88,"C5": 523.25,"C#5": 554.37,"D5": 587.33,"D#5": 622.25,"E5": 659.26,"F5": 698.46,"F#5": 739.99,"G5": 783.99,"G#5": 830.61,"A5": 880,"A#5": 932.33,"B5": 987.77,"C6": 1046.5,"C#6": 1108.73,"D6": 1174.66,"D#6": 1244.51,"E6": 1318.51,"F6": 1396.91,"F#6": 1479.98,"G6": 1567.98,"G#6": 1661.22,"A6": 1760,"A#6": 1864.66,"B6": 1975.53,"C7": 2093,"C#7": 2217.46,"D7": 2349.32,"D#7": 2489.02,"E7": 2637.02,"F7": 2793.83,"F#7": 2959.96,"G7": 3135.96,"G#7": 3322.44,"A7": 3520,"A#7": 3729.31,"B7": 3951.07,"C8": 4186.01,"C#8": 4434.92,"D8": 4698.64,"D#8": 4978.03};

var getNotesForOctave = function(octave) {
  return Object.keys(NOTES).reduce((obj, note) => {
      if (note.split('').pop() == +octave) 
        obj[note] = NOTES[note];
      return obj;
    }, {});
};

class Synth {
  constructor() {
    
    this.ctx = new (window.AudioContext || window.webkitAudioContext)();
  }
  
  playNotes(notes = [], wave = 'sine') {
    // for(let i = 0; i < notes.length; i++) {
      
        var vco = this.ctx.createOscillator();
        vco.type = wave;
        vco.frequency.value = n.........完整代码请登录后点击上方下载按钮下载查看

网友评论0