音频、磁带与聊天 API
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | pl.asie.computronics.api(5 个子包,22 个文件) |
| 子包 | audio(8)、chat(4)、tape(3)、multiperipheral(6) |
| 面向 | 其它 mod 接入 Computronics 的音频播放、磁带存储与聊天推送 |
audio / chat / tape 三个子包在本页覆盖;multiperipheral 见 多外设 API。
audio 子包
| 类型 | 作用 |
|---|---|
IAudioSource |
声音源:唯一方法是 int getSourceId()(IAudioSource.java:5) |
IAudioReceiver |
声音接收端,5 个方法(IAudioReceiver.java:9-17) |
IAudioConnection |
音频连接(网络端点) |
AudioPacket |
音频数据包基类 |
AudioPacketDFPWM |
DFPWM 编码的音频包(本 mod 自用) |
AudioPacketRegistry |
数据包类型注册表 |
AudioPacketClientHandler |
客户端处理器 |
package-info.java |
包说明 |
IAudioReceiver 的 5 个方法
World getSoundWorld();
Vec3 getSoundPos();
int getSoundDistance();
void receivePacket(AudioPacket packet, ForgeDirection side);
String getID();
(IAudioReceiver.java:9-17)
getSoundDistance() 决定该接收端能听到多远;磁带机用 tapedrive.hearingDistance(默认 24),便携式磁带驱动器用 tapedrive.portable.hearingDistance(默认 8)。
音频格式
本 mod 内部使用 DFPWM(4 bits/sample 增量调制)。AudioPacketDFPWM 的比特率参数为 packetSize × 8 × 4(TapeDriveState.java:98)。播放参数在 TapeDriveState.setSpeed 中由 round(1024 × speed) 得出,speed 范围 0.25–2.0(TapeDriveState.java:45-49)。
DFPWM 格式本身是外部规范,Computronics 仓库内只有编解码实现,没有格式规范文档。具体解码规则请参考 DFPWM 的原始实现说明。
tape 子包
| 类型 | 作用 |
|---|---|
ITapeStorage |
磁带存储后端抽象,11 个方法 |
IItemTapeStorage |
基于物品的磁带存储 |
package-info.java |
包说明 |
ITapeStorage 的 11 个方法(ITapeStorage.java:8-79)
String getUniqueId();
String getName();
int getPosition();
int getSize();
int setPosition(int newPosition);
int seek(int amount);
int read(boolean simulate);
int read(byte[] intoArray, boolean simulate);
void write(byte b);
int write(byte[] array);
void onStorageUnload();
关键点:
read(boolean simulate)/read(byte[], boolean simulate)的simulate参数允许只查询不消耗位置——这是磁带机「先试探能否读满一整包」的实现基础(TapeDriveState.java:92的if (amount < packetSize)判定)。seek(int amount)的amount单位是字节;磁带机的倒带/快进硬编码为∓2048(TapeDriveState.java:120、:125)。getSize()返回字节容量,默认 1 分钟 =4096 × 60 = 245760字节(ItemTape.java:38)。onStorageUnload()是存储后端的清理钩子,磁带机切状态时触发(TapeDriveState.java:65-82调AudioUtils.removePlayer)。
IItemTapeStorage 把 ITapeStorage 绑定到具体 ItemStack。
chat 子包
| 类型 | 作用 |
|---|---|
ChatAPI |
静态工具类 |
IChatListener |
聊天接收方 |
IChatListenerRegistry |
监听方注册表 |
package-info.java |
包说明 |
聊天盒与 OC 的 RobotUpgradeChatBox 都通过这套 API 推送消息。作用半径由 chatbox.maxDistance(默认 40)约束;创造模式聊天盒(meta 8)可由对话参数覆盖,makeMagical 打开后普通聊天盒也无距离限制且可跨维度(Config.java:117-121)。