音频、磁带与聊天 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)。

相关条目