|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
|
|
|
<head> |
|
|
<meta charset="utf-8"> |
|
|
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
|
<link rel="icon" href="favicon.ico" type="image/x-icon" /> |
|
|
<link rel="stylesheet" type="text/css" href="../abcjs-audio.css"> |
|
|
<link rel="stylesheet" href="examples-styles.css" /> |
|
|
|
|
|
<title>Output Transposition</title> |
|
|
<script src="../dist/abcjs-basic.js" type="text/javascript"></script> |
|
|
<script type="text/javascript"> |
|
|
var editor; |
|
|
var renderParams = { responsive: "resize", selectTypes: false }; |
|
|
var outputEl; |
|
|
var abcEl; |
|
|
var currentAbc = "" |
|
|
window.onload = function () { |
|
|
abcEl = document.querySelector("#abc"); |
|
|
outputEl = document.querySelector("#transposed"); |
|
|
visualTransposeEl = document.querySelector(".transpose"); |
|
|
|
|
|
editor = new ABCJS.Editor("abc", { |
|
|
canvas_id: "paper", |
|
|
warnings_id: "warnings", |
|
|
abcjsParams: renderParams, |
|
|
}); |
|
|
|
|
|
visualTransposeEl.addEventListener("change", paramChanged); |
|
|
paramChanged(false); |
|
|
}; |
|
|
|
|
|
function paramChanged(userAction) { |
|
|
var visualObj = editor.tunes |
|
|
var abc = abcEl.value |
|
|
var steps = visualTransposeEl.value |
|
|
var output = ABCJS.strTranspose(abc, visualObj, steps) |
|
|
outputEl.innerText = output |
|
|
var newVisualObj = ABCJS.renderAbc("paper2", output, renderParams) |
|
|
if (userAction) |
|
|
createSynth(newVisualObj[0]) |
|
|
} |
|
|
|
|
|
var synthControl |
|
|
|
|
|
function createSynth(visualObj) { |
|
|
if (!synthControl) { |
|
|
synthControl = new ABCJS.synth.SynthController(); |
|
|
synthControl.load("#audio", null, { displayRestart: true, displayPlay: true, displayProgress: true }); |
|
|
} |
|
|
var midiBuffer = new ABCJS.synth.CreateSynth(); |
|
|
midiBuffer.init({ |
|
|
visualObj: visualObj, |
|
|
}).then(function (response) { |
|
|
synthControl.setTune(visualObj, true).then(function (response) { |
|
|
}).catch(function (error) { |
|
|
console.warn("Audio problem:", error); |
|
|
}); |
|
|
}).catch(function (error) { |
|
|
console.warn("Audio problem:", error); |
|
|
}); |
|
|
|
|
|
} |
|
|
</script> |
|
|
<style> |
|
|
@media only screen and (min-width: 700px) { |
|
|
.container { |
|
|
max-width: 1200px; |
|
|
} |
|
|
} |
|
|
|
|
|
.input, |
|
|
.output { |
|
|
display: flex; |
|
|
column-gap: 10px; |
|
|
} |
|
|
|
|
|
.input>div, |
|
|
.output>div { |
|
|
width: 50%; |
|
|
} |
|
|
|
|
|
#abc, |
|
|
#transposed { |
|
|
font-family: monaco, monospace; |
|
|
font-size: 1em; |
|
|
height: 300px; |
|
|
} |
|
|
|
|
|
#transposed { |
|
|
border: 1px solid #888; |
|
|
padding: 10px; |
|
|
margin-top: 0; |
|
|
overflow: auto; |
|
|
} |
|
|
label { |
|
|
margin-top: 10px; |
|
|
display: block; |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
|
|
|
<body> |
|
|
<header> |
|
|
<img src="https://paulrosen.github.io/abcjs/img/abcjs_comp_extended_08.svg" alt="abcjs logo"> |
|
|
<h1>Output Transposition</h1> |
|
|
</header> |
|
|
<div class="container"> |
|
|
<main> |
|
|
<p>This demonstrates transposing an ABC string and retrieving that transposed string. Type any valid ABC string in the "input string" area and choose your transposition in half-steps below the input string. The resultant ABC string, transposed audio, and transposed notation are shown on the right side of the page.</p> |
|
|
<section class="input"> |
|
|
<div> |
|
|
<h2>Input String</h2> |
|
|
<textarea aria-label="ABC string" id="abc" spellcheck="false"> |
|
|
X: 1 |
|
|
T: Cooley's |
|
|
M: 4/4 |
|
|
L: 1/8 |
|
|
R: reel |
|
|
K: Em |
|
|
V: Melody |
|
|
|:D2|EB{c}BA B2 EB|~B2 AB dBAG|FDAD BDAD|FDAD dAFD| |
|
|
EBBA B2 EB|B2 AB defg|afe^c dBAF|DEFD E2:| |
|
|
|:gf|eB B2 efge|eB B2 gedB|A2 FA DAFA|A2 FA defg| |
|
|
eB B2 eBgB|eB B2 defg|afe^c dBAF|DEFD E2:| |
|
|
</textarea> |
|
|
<label>Transpose: |
|
|
<input |
|
|
class="transpose" |
|
|
type="number" |
|
|
min="-24" |
|
|
max="24" |
|
|
step="1" |
|
|
value="0"> |
|
|
</label> |
|
|
</div> |
|
|
<div> |
|
|
<h2>Output String</h2> |
|
|
<pre id="transposed"></pre> |
|
|
<div id="audio"></div> |
|
|
</div> |
|
|
</section> |
|
|
|
|
|
<div id="warnings"></div> |
|
|
<section class="output"> |
|
|
<div> |
|
|
<h2>Original Output</h2> |
|
|
<div id="paper" class="visible-background"></div> |
|
|
</div> |
|
|
<div> |
|
|
<h2>Transposed Output</h2> |
|
|
<div id="paper2" class="visible-background"></div> |
|
|
</div> |
|
|
</section> |
|
|
</main> |
|
|
</div> |
|
|
</body> |
|
|
|
|
|
</html> |