人工智能AI创作打击音乐效果代码
代码语言:html
所属分类:多媒体
代码描述:人工智能AI创作打击音乐效果代码,可设置节拍及速度,还可自己自定义节拍位置创作新的电子乐。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/materialize.css">
<link rel='stylesheet' href='https://fonts.googleapis.com/icon?family=Material+Icons'>
<style>
html,
body,
.app {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background-color: #111;
color: white;
}
.progress {
max-width: 30%;
margin: 45vh auto 55vh auto;
}
.app {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: linear-gradient(to right, #010305, #131516);
}
.sequencer,
.controls {
width: 80vw;
}
.controls {
display: flex;
flex-direction: row;
justify-content: space-around;
}
.control {
text-align: center;
}
.control input {
margin-bottom: 20px;
}
.select-wrapper span.caret {
color: inherit; /* Override materialize.css black */
}
.select-wrapper input.select-dropdown {
margin-bottom: 10px;
}
.input-field {
margin-top: 0;
}
input[type='range'] {
border: 0;
}
input[type='range'] + .thumb {
background-color: #2196f3;
}
input[type='range']::-webkit-slider-thumb {
background-color: #2196f3;
}
input[type='range']::-moz-range-thumb {
background-color: #2196f3;
}
input[type='range']::-ms-thumb {
background-color: #2196f3;
}
.control .share {
margin-top: 10px;
}
.midi-output,
.midi-clock-input,
.select-wrapper {
max-width: 200px;
margin: 0 auto;
}
.select-wrapper input {
color: white;
}
.sequencer {
position: relative;
height: 70vh;
margin: 20px 0;
display: flex;
flex-direction: row;
perspective: 1000px;
transform-style: preserve-3d;
}
.sequencer .legend {
flex: 0.75;
display: flex;
flex-direction: column;
}
.drum-class {
display: flex;
align-items: center;
justify-content: flex-start;
margin: 2.5px;
font-size: 12px;
color: #999;
}
.sequencer .steps {
flex: 9;
display: flex;
flex-direction: row;
}
.step {
flex: 1;
display: flex;
flex-direction: column;
transform-style: preserve-3d;
}
.steps {
transform-style: preserve-3d;
}
.gutter {
width: 5px;
}
.gutter.seed-marker {
background-color: #aaa;
margin: 0 10px;
cursor: move;
}
.gutter.seed-marker:hover {
background-color: white;
}
.cell {
margin: 2.5px 0;
background-color: rgba(100, 100, 100, 0.1);
border: 1px solid rgba(100, 100, 100, 0.2);
border-radius: 3px;
z-index: 0;
transition: background-color 0.3s ease;
}
.cell:hover {
background-color: rgba(100, 100, 100, 0.5);
}
.step:not(.regenerating) .cell.on {
background-color: #64b5f6;
opacity: 1;
}
.step.seed .cell.on {
background-color: #e91e63;
}
.regenerate {
position: absolute;
visibility: hidden;
font-size: 30px;
line-height: 56px;
}
.kick {
flex: 2;
margin-bottom: 10px;
}
.snare {
flex: 1;
margin-top: 10px;
margin-bottom: 10px;
}
.hi-hat-closed {
flex: 1;
margin-top: 10px;
}
.hi-hat-open {
flex: 1;
margin-bottom: 10px;
}
.tom-low {
flex: 1;
margin-top: 10px;
}
.tom-mid {
flex: 1;
}
.tom-high {
flex: 1;
margin-bottom: 10px;
}
.clap {
flex: 1;
margin-top: 10px;
}
.rim {
flex: 1;
}
.info {
max-width: 50%;
margin: 100px auto;
text-align: center;
}
.info p {
margin-top: 50px;
}
</style>
</head>
<body>
<div class="progress pink">
<div class="indeterminate white"></div>
</div>
<div class="app" style="display: none;">
<div class="sequencer">
<div class="steps"></div>
</div>
<a class="regenerate btn-floating btn-large waves-effect waves-light pink darken-2 pulse">
<i class="material-icons">refresh</i>
</a>
<div class="controls">
<div class="control">
<a class="playpause btn-floating btn-large waves-effect waves-light blue">
<i class="material-icons play-icon">play_arrow</i>
<i class="material-icons pause-icon" style="display: none">pause</i>
</a>
</div>
<div class="control">
<div class="input-field grey-text">
<select id="pattern-length">
<option>4</option>
<option>8</option>
<option selected>16</option>
<option>32</option>
</select> Pattern length
</div>
</div>
<div class="control">
<p class="range-field grey-text">
<input type="range" id="tempo" min="20" max="240" value="120" step="1"> Tempo
</p>
</div>
<div class="control">
<p class="range-field grey-text">
<input type="range" id="swing" min="0.5" max="0.7" value="0.55" step="0.05"> Swing
</p>
</div>
<div class="control">
<p class="range-field grey-text">
<input type="range" id="temperature" class="tooltipped" min="0.5" max="2" value="1.1" step="0.1" data-tooltip="Higher temperatures will make the neural network generates wilder patterns" data-delay="500"> Temperature
</p>
</div>
</div>
</div>
<div class="info">
<p class="webmidi-enabled" style="display: none;">
Output:
<select class="midi-output"></select>
</p>
<p class="webmidi-enabled" style="display: none;">
MIDI clock output:
<select class="midi-clock-output"></select>
</p>
<p class="webmidi-enabled" style="display: none;">
MIDI clock input:
<select class="midi-clock-input"></select>
</p>
<p>This is an experimental drum machine powered by a deep neural network. To use it, define a seed pattern on the left, and use the “generate” button. A neural network will dream up a continuation to your seed pattern.</p>
<p>Using the
<a href="https://github.com/tensorflow/magenta/tree/master/magenta/models/drums_rnn">Drums RNN</a> (pretrained) model from
<a href="https://magenta.tensorflow.org/">Google Magenta</a>, and
<a href="https://goo.gl/magenta/js">Magenta.js</a> +
<a href="https://js.tensorflow.org/">TensorFlow.js</a> +
<a href="https://tonejs.github.io/">Tone.js</a>.</p>
<p>A pen by
<a href="https://twitter.com/teropa">@teropa</a>.</p>
</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/lodash-min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/magentamusic.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/materialize.1.0.0.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/web-animations.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/webmidi.min.js"></script>
<script>
const DRUM_CLASSES = [
'Kick',
'Snare',
'Hi-hat closed',
'Hi-hat open',
'Tom low',
'Tom mid',
'Tom high',
'Clap',
'Rim'
];
const TIME_HUMANIZATION = 0.01;
let Tone = mm.Player.tone;
let sampleBaseUrl = '//repo.bfw.wiki/bfwrepo/sound/tones';
let reverb = new Tone.Convolver(
`${sampleBaseUrl}/small-drum-room.wav`
).toMaster();
reverb.wet.value = 0.35;
let snarePanner = new Tone.Panner().connect(reverb);
new Tone.LFO(0.13, -0.25, 0.25).connect(snarePanner.pan).start();
let drumKit = [
new Tone.Players({
high: `${sampleBaseUrl}/808-kick-vh.mp3`,
med: `${sampleBaseUrl}/808-kick-vm.mp3`,
low: `${sampleBaseUrl}/808-kick-vl.mp3`
}).toMaster(),
new Tone.Players({
high: `${sampleBaseUrl}/flares-snare-vh.mp3`,
med: `${sampleBaseUrl}/flares-snare-vm.mp3`,
low: `${sampleBaseUrl}/flares-snare-vl.mp3`
}).connect(snarePanner),
new Tone.Players({
high: `${sampleBaseUrl}/808-hihat-vh.mp3`,
med: `${sampleBaseUrl}/808-hihat-vm.mp3`,
low: `${sampleBaseUrl}/808-hihat-vl.mp3`
}).connect(new Tone.Panner(-0.5).connect(reverb)),
new Tone.Players({
high: `${sampleBaseUrl}/808-hihat-open-vh.mp3`,
med: `${sampleBaseUrl}/808-hihat-open-vm.mp3`,
low: `${sampleBaseUrl}/808-hihat-open-vl.mp3`
}).connect(new Tone.Panner(-0.5).connect(reverb)),
new Tone.Players({
high: `${sampleBaseUrl}/slamdam-tom-low-vh.mp3`,
med: `${sampleBaseUrl}/slamdam-tom-low-vm.mp3`,
low: `${sampleBaseUrl}/slamdam-tom-low-vl.mp3`
}).connect(new Tone.Panner(-0.4).connect(reverb)),
new Tone.Players({
high: `${sampleBaseUrl}/slamdam-tom-mid-vh.mp3`,
med: `${sampleBaseUrl}/slamdam-tom-mid-vm.mp3`,
low: `${sampleBaseUrl}/slamdam-tom-mid-vl.mp3`
}).connect(reverb),
new Tone.Players({
high: `${sampleBaseUrl}/slamdam-tom-high-vh.mp3`,
.........完整代码请登录后点击上方下载按钮下载查看
网友评论0