切换风格

默认晚霞 雪山 粉色心情 伦敦 花卉 绿野仙踪 加州 白云 星空 薰衣草 城市 简约黑色 龙珠
回复 0

10

主题

17

帖子

466

积分

大区版主

漫步烟雨

Rank: 7Rank: 7Rank: 7

积分
466
人气
25 点
钻石粒
409 粒
贡献
0 点
论坛币
85 个
爱心
0 点

论坛审核会员论坛注册会员

QQ
[1.12.2][ECMA] 让脚本播放出声音![复制链接]
发表于 2019-8-11 10:00:58 | 显示全部楼层 |阅读模式

请注册论坛会员,已便查看高清图片!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Rain_Effect 于 2019-8-11 19:15 编辑


教学前言
MCBBS分流: https://www.mcbbs.net/thread-900449-1-1.html

脚本例子帖:http://bbs.mcnpc.cn/forum.php?mod=viewthread&tid=100
脚本上加上音效,想必是一些脚本作者的想法,
但碍于Noppes(CNPC作者)在5月10日的快照版才推出播放音效的功能呢...
嘛其实也差不多...

更新科普
在19年5月10日更新的CNPC快照版本中,作者为玩家添加了新的功能:
  • noppes.npcs.api.entity.IPlayer.playSound​(java.lang.String sound, float volume, float pitch);
——点我跳转到API页

虽说功能出来的晚,但实际上也可以通过NPCAPI执行,虽说效率会偏慢...
例如使用如下脚本的方式进行声音传输:
  1. function playSound(player, sound, volume, pitch){
  2.     var API = Java.type("noppes.npcs.api.NpcAPI").Instance();
  3.     API.executeCommand(API.getIWorld(0), "/playsound " + sound + " master " + player.name + " ~ ~ ~ " + volume + " " + pitch);
  4. }
复制代码
注:此处播放音效的方式中需要的值和快照中的playSound功能相同。

基础教学环节
我们先来了解一下,怎么获取自己希望播放的音效名,
每个音效肯定都有其指定的名称值,才能正确的播放所需要的音效,
而音效的名称值,则被保存在Sounds.json文件内。
在WIKI中,详细说明了该文件的组成结构,
——点我跳转到WIKI(Sounds.json)

这里以实际例子进行举例:
  1. {
  2.   "block.note.basedrum": {
  3.     "sounds": [
  4.       "note/bd"
  5.     ],
  6.     "subtitle": "subtitles.block.note.note"
  7.   }
  8. }
复制代码
"block.note.basedrum" —— 音效名, 该处指向: 方块→音符盒→低音鼓
"sounds": [ —— 音效文件列
"note/bd" —— 音效文件
"subtitle": "subtitles.block.note.note" —— 对应的辅助字幕文字

在这里,我们只需要取其音效名("block.note.basedrum")即可,

说完音效名,下面我们来说说volume,
volume其实就是播放的音量大小,最大值为1.0 。

之后,让我们了解一下pitch,
pitch就是音调,用来调节一个声音的音调变化,以及播放速度,最大值为2.0 。
但实际上使用的情况下,这里一般是不需要做任何改动的,默认为1即可。
注:如果你需要让它发出音符盒的不同音调,请看高级教学环节。

最后,通过playSound的方式注入:
  1. function interact(event){ //右键触发
  2.     event.player.playSound("block.note.basedrum", 1, 1); //播放音效
  3. }
复制代码
啥?不是快照版本?用了上面给的NPCAPI执行方式进行的?那就这样:
  1. function interact(event){ //右键触发
  2.     playSound(event.player, "block.note.basedrum", 1, 1);
  3. }
复制代码
这样,一个简单的播放音效功能就完成了!

高级教学环节
因为音符盒音效的特殊性,使得在调整音调方面,需要进行计算操作。
而音符盒本身具有25个音调,对应的音色也会附图进行说明
音符盒计算公式表:
音高 (第一八度)
交互次数
音高 (pitch)
音高 (第二八度)
交互次数
音高 (pitch)
F#/Gb
0
2^(-12/12) = 0.5F#/Gb
12
2^(0/12) = 1
G
1
2^(-11/12) ≈ 0.529732G
13
2^(1/12) ≈ 1.05946
G#/Ab
2
2^(-10/12) ≈ 0.561231G#/Ab
14
2^(2/12) ≈ 1.12246
A
3
2^(-9/12) ≈ 0.594604A
15
2^(3/12) ≈ 1.18921
A#/Bb
4
2^(-8/12) ≈ 0.629961A#/Bb
16
2^(4/12) ≈ 1.25992
B
5
2^(-7/12) ≈ 0.667420B
17
2^(5/12) ≈ 1.33484
C
6
2^(-6/12) ≈ 0.707107C
18
2^(6/12) ≈ 1.41421
C#/Db
7
2^(-5/12) ≈ 0.749154C#/Db
19
2^(7/12) ≈ 1.49831
D
8
2^(-4/12) ≈ 0.793701D
20
2^(8/12) ≈ 1.58740
D#/Eb
9
2^(-3/12) ≈ 0.840896D#/Eb
21
2^(9/12) ≈ 1.68179
E
10
2^(-2/12) ≈ 0.890899E
22
2^(10/12) ≈ 1.78180
F
11
2^(-1/12) ≈ 0.943874F
23
2^(11/12) ≈ 1.88775
F#/Gb
12
2^(0/12) = 1F#/Gb
24
2^(12/12) = 2
JavaScript程序公式:
  1. var click = 0; //交互次数
  2. Math.pow(2, (click-12)/12); //公式运算
复制代码





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|自定义NPC脚本中文论坛 ( 蜀ICP备17005795号-3 )

GMT+8, 2020-7-11 00:14 , Processed in 0.115482 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部