大佬教程收集整理的这篇文章主要介绍了使用javascript或jquery转置音乐,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的图表看起来像这样
{C}My name is Blanket,{F}And I can run fast
括号内的和弦出现在它前面的字母上方.
我想使用javascript或jquery来做到这一点.我该如何创建这个转置按钮?任何帮助表示赞赏.先感谢您.
编辑
所以这就是我想出来的……
$('.transposeUp').click(function(){ $('.chord').each(function(){ var currentChord = $(this).text(); // gathers the chord being used if(currentChord == $(this).text()){ var chord = $(this).text().replace("F#","G") } //... the if statements conTinue though every chord //but I didn't place them here to save space }); });
所以这就是问题……
我在混音中有一个斜线和弦(G / B),它改变了转置,但因为它改变了“B”,和弦现在是(G / C),它与“currentChord”不同,所以它没有当它达到各自的if状态时,不要改变G.直到我在Chord最终(G / G)的位置进行了足够的转置,然后第一个“G”开始转置,使最后一个“G”保持相同.有任何想法吗?非常感谢您的知识和帮助.提前致谢.
完成此任务的一个好方法是使用正则表达式来解析和分割和弦.获得匹配的和弦值后,使用和弦数组找到要转置的下一个/上一个和弦.以下是我作为演示开发的一些示例代码:
<p><span class="chord">{C}</span>My name is Blanket,</p> <p><span class="chord">{G / B}</span>And I can run fast</p> <p> <input id="transposeDown" type="button" value="Down" /> | <input id="transposeUp" type="button" value="Up" /> </p> var match; var chords = ['C','C#','D','Eb','E','F','F#','G','Ab','A','Bb','B','C','Db','D#','Gb','G#','A#','C']; var chordRegex = /C#|D#|F#|G#|A#|Db|Eb|Gb|Ab|Bb|C|D|E|F|G|A|B/g; $('#transposeUp').click(function() { $('.chord').each(function() { var currentChord = $(this).text(); var output = ""; var parts = currentChord.split(chordRegeX); var index = 0; while (match = chordRegex.exec(currentChord)) { var chordIndex = chords.indexOf(match[0]); output += parts[index++] + chords[chordIndex+1]; } output += parts[index]; $(this).text(output); }); }); $('#transposeDown').click(function() { $('.chord').each(function() { var currentChord = $(this).text(); var output = ""; var parts = currentChord.split(chordRegeX); var index = 0; while (match = chordRegex.exec(currentChord)) { var chordIndex = chords.indexOf(match[0],1); output += parts[index++] + chords[chordIndex-1]; } output += parts[index]; $(this).text(output); }); });
示例演示:http://jsfiddle.net/4kYQZ/2/
有几点需要注意:
>我采用了@ gregp的想法,即拥有密钥列表的多个副本,以便我可以处理锐利和平面.第一个音阶包括在移调期间使用的首选#/ b.第二个音阶包括其他格式,以便如果音乐包含它们,它们将正确转置.例如,因为Eb是第一个比例,所以当你上下移调时,它将被用来代替D#;但是,如果音乐开头有D#,它将正确移动到D / E(需要注意的是,如果你向后移动,它将再次成为Eb).随意修改首选比例 – 我根据个人音乐经验使用了我受过教育的判断.
>正则表达式必须首先使用锐化/平坦键,否则当C#不正确时,C#就像C一样容易匹配.
>我在数组的开头和结尾都有C,这样我就可以从任何位置开始并移动两个方向而不通过数组的末尾.为了使其工作,transposeDown代码在调用chords.indexOf时有一个额外的参数从位置1开始,因此它匹配数组中的最后一个C而不是第一个C.然后当它尝试移动到前一个元素,它不传递数组的开头.
>我正在使用正则表达式来分割和弦,这是多余的,但是通过将原始字符串部分与更新的和弦键交错,可以非常容易地将最终字符串重新组合在一起(不要忘记最后一块到底!).
>我正在使用元素而不是按钮的类.
希望这可以帮助!
更新1:OP的每条评论,pre-ie9不支持在数组上使用indexOf.这可以通过使用执行相同操作的辅助函数来解决:
function arrayIndexOf(arr,match) { for (var i = 0; i < arr.length; i++) if (arr[i] == match) return i; return -1; }
而这一行
var chordIndex = chords.indexOf(match[0]);
将被替换为:
var chordIndex = arrayIndexOf(chords,match[0]);
请参阅更新的示例演示:http://jsfiddle.net/4kYQZ/11/
以上是大佬教程为你收集整理的使用javascript或jquery转置音乐全部内容,希望文章能够帮你解决使用javascript或jquery转置音乐所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。