在wikidot上播放midi并可视化
评分: +42+x


1.说明

本页面用于介绍如何在wikidot中嵌入midi文件并展示相应的可视化效果,使用者需要具备一定的HTML和CSS语法技能与音乐知识
组件来源于html midi播放器,<midi-player> 和 <midi-visualizer> HTML 元素由 @magenta/music (Magenta.js) 提供支持,完全可设置样式和脚本。
许可协议为BSD 2-Clause License

以下为本人使用“Lovely Composer”及其附带音色写的几首8bit风格示例歌曲,均适用于CC-BY-SA 3.0协议。

《拉赫曼尼诺夫前奏曲-Remix》

《循环》

《空军进行曲-8bit》

《攻击战-8bit》

《塔朗泰拉-8bit》

值得注意的是,在浏览器上播放midi其使用的库中自带的音源,因此会与上述音频的音色不同,使用时需要注意。




2.演示

简单midi可视化

普通midi样式

附注:通用的样式,适用于大部分midi

五线谱样式

附注:五线谱样式更适合于简单曲调的midi

瀑布样式

注意:本样式可能因为源JS库年久失修,现已出现了不能播放可视化的问题。


高级midi显示

风格已适配sigma-9版式


摩斯密码



3.使用

上传midi文件

由于跨源资源共享(Cross-Origin Resource Sharing,CORS)问题,该JS库无法直接使用本地文件以及wikidot上的文件链接,这需要你拥有一个Github库,将文件上传到Github上即可解决该问题。

考虑到国内很可能无法直接访问github,建议使用JsDeliver进行加速,简要的操作要领为:发布一个release,然后使用该链接即可:

https://cdn.jsdelivr.net/gh/用户名/页面名@版本号>/文件名.midi


嵌入代码方块

以五线谱样式举例

[[html]]
 
<midi-player
  src="https://cdn.jsdelivr.net/gh/msjand/live2d-jand@0.0.3/air-march.mid"
  sound-font="https://storage.googleapis.com/magentadata/js/soundfonts/salamander"
  visualizer="#myStaffVisualizer">
</midi-player>
 
<midi-visualizer type="staff" id="myStaffVisualizer" 
  src="https://cdn.jsdelivr.net/gh/msjand/live2d-jand@0.0.2/loop.mid">
</midi-visualizer>
 
<script src="https://cdn.jsdelivr.net/combine/npm/tone@14.7.58,npm/@magenta/music@1.23.1/es6/core.js,npm/focus-visible@5,npm/html-midi-player@1.4.0"></script>
 
[[/html]]

其中的<midiplayer>标签为播放器部分,而<midi-visualizer>标签为midi可视化部分,其顺序与其相互位置相关。

https://cdn.jsdelivr.net/gh/msjand/live2d-jand@0.0.2/loop.mid为笔者使用的URL,可见已经进行了cdn加速。

<midi-visualizer>中的type有三种样式piano-roll/staff/waterfall,分别对应普通样式、五线谱样式、瀑布样式。

其余midi可视化组件的参数可在magenta-js中查询。

最重要的是

<script src="https://cdn.jsdelivr.net/combine/npm/tone@14.7.58,npm/@magenta/music@1.23.1/es6/core.js,npm/focus-visible@5,npm/html-midi-player@1.4.0"></script>

标签,其指向改组件的JS库,也经过了CDN加速,每个html块中必须包含该原封不动的标签。

同时,该插件可以更改midi音色,库中有三种内置音色,分别为:

钢琴(https://storage.googleapis.com/magentadata/js/soundfonts/salamander
默认(https://storage.googleapis.com/magentadata/js/soundfonts/sgm_plus
爵士鼓(https://storage.googleapis.com/magentadata/js/soundfonts/jazz_kit

更改相应的sound-font链接即可,也可以使用相同的方法在github上上传你想用的音色,再使用类似的方法引用。

定制高级样式

midi可视化可以使用对应的CSS样式,例如上文展示的(已加入注释):

<style>
/* 自定义 MIDI 播放器样式 */
#section1 midi-player {
  display: block; /* 让播放器以块级元素显示 */
  width: inherit; /* 继承父级的宽度 */
  margin: 4px; /* 设置播放器的外边距 */
  margin-bottom: 0; /* 底部外边距设置为 0 */
}
#section1 midi-player::part(control-panel) {
  background: #fff; /* 控制面板背景颜色为白色 */
  border: 2px solid #000; /* 边框为黑色,宽度 2px */
  border-radius: 10px 10px 0 0; /* 圆角设置:上两个角为圆角,下两个为直角 */
}
#section1 midi-player::part(play-button) {
  color: maroon; /* 播放按钮的颜色为栗色 */
  border: 2px solid currentColor; /* 边框颜色与当前文本颜色一致 */
  background-color: #fff; /* 背景色为白色 */
  border-radius: 20px; /* 按钮圆角设置为 20px */
  transition: all 0.2s; /* 添加过渡效果,使样式切换更平滑 */
  content: 'hello'; /* 设置伪元素内容为 'hello'(无实际效果,但可修改显示内容) */
}
#section1 midi-player::part(play-button):hover {
  color: maroon; /* 鼠标悬停时,按钮文本颜色保持栗色 */
  background-color: #fff; /* 悬停时背景色保持白色 */
  border-radius: 10px; /* 悬停时改变圆角为 10px */
}
#section1 midi-player::part(time) {
  font-family: monospace; /* 时间显示使用等宽字体 */
}
 
/* 自定义 MIDI 可视化样式 */
#section1 midi-visualizer .piano-roll-visualizer {
  background: #fff; /* 可视化背景颜色为白色 */
  border: 2px solid black; /* 黑色边框,宽度 2px */
  border-top: none; /* 顶部边框取消 */
  border-radius: 0 0 10px 10px; /* 设置下两个角为圆角 */
  margin: 4px; /* 外边距为 4px */
  margin-top: 0; /* 顶部外边距设置为 0 */
  overflow: auto; /* 超出内容可滚动 */
}
#section1 midi-visualizer svg rect.note {
  opacity: 0.6; /* 音符矩形透明度为 0.6 */
  stroke-width: 2; /* 描边宽度为 2 */
}
#section1 midi-visualizer svg rect.note[data-instrument="0"] {
  fill: red; /* 设置乐器 0 的音符颜色为红色 */
  stroke: red; /* 描边颜色为红色 */
}
#section1 midi-visualizer svg rect.note[data-instrument="1"] {
  fill: green; /* 设置乐器 1 的音符颜色为绿色 */
  stroke: green; /* 描边颜色为绿色 */
}
#section1 midi-visualizer svg rect.note[data-instrument="2"] {
  fill: blue; /* 设置乐器 2 的音符颜色为蓝色 */
  stroke: blue; /* 描边颜色为蓝色 */
}
#section1 midi-visualizer svg rect.note[data-is-drum="true"] {
  fill: yellow; /* 打击乐音符的颜色为黄色 */
  stroke: yellow; /* 打击乐音符的描边颜色为黄色 */
}
#section1 midi-visualizer svg rect.note.active {
  opacity: 1; /* 激活的音符透明度为 1 */
  stroke: maroon; /* 激活音符的描边颜色为栗色 */
}
</style>
 
<body>
 
<!-- 定义一个包含 MIDI 播放器和可视化工具的部分 -->
<section id="section1">
  <!-- MIDI 播放器组件 -->
  <midi-player
    src="https://cdn.jsdelivr.net/gh/msjand/live2d-jand@0.0.1/Rachmaninoff.mid" 
    sound-font visualizer="#section1 midi-visualizer">
  </midi-player>
  <!-- MIDI 可视化组件 -->
  <midi-visualizer
    src="https://cdn.jsdelivr.net/gh/msjand/live2d-jand@0.0.1/Rachmaninoff.mid">
  </midi-visualizer>
</section>
 
<!-- 引入相关库文件 -->
<script src="https://cdn.jsdelivr.net/combine/npm/tone@14.7.58,npm/@magenta/music@1.23.1/es6/core.js,npm/focus-visible@5,npm/html-midi-player@1.5.0"></script>
 
</body>




除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License