磁带机
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | computronics:tapeReader |
| 未本地化名 | computronics.tapeDrive(BlockTapeReader.java:24)—— 物品栏名取自 lang tile.computronics.tapeDrive.name = 磁带机 |
| 方块类 | pl.asie.computronics.block.BlockTapeReader |
| TileEntity | pl.asie.computronics.tile.TileTapeDrive |
| 文档名 | tape_drive(BlockTapeReader.java:23) |
| 正面材质 | computronics:tape_drive_front(BlockTapeReader.java:43) |
| GUI | Computronics.guiTapeDrive(BlockTapeReader.java:25) |
| 接受红石 | receivesRedstone 恒为 true(BlockTapeReader.java:47-49) |
| 比较器输出 | hasComparatorInputOverride 恒为 true(BlockTapeReader.java:52-54) |
| 创造标签 | tabComputronics(继承自 BlockPeripheral.java:29) |
| 开启配置 | enable.tape,默认 true(Computronics.java:240) |
功能
插入并播放录音带的设备,是 Computronics 的核心:它把音频数据编码成 DFPWM 流,经音频线推给所有扩音器。
播放状态机 TapeDriveState.State 共 4 态(TapeDriveState.java:16-22):STOPPED / PLAYING / REWINDING / FORWARDING。每次状态切换服务端先摘除旧播放器(AudioUtils.removePlayer),切到 PLAYING 时再申请新播放器并记录 lastCodecTime(TapeDriveState.java:65-82)。无磁带时强制回到 STOPPED(TapeDriveState.java:70)。
PLAYING 态每 250 ms 出一包(TapeDriveState.java:110-116);读不满整包即判定磁带结束并停止(TapeDriveState.java:92)。
数值
| 数值名 | 值 | 范围 | 来源 |
|---|---|---|---|
tapedrive.audioPreloadMs |
750 | 500–10000 | Config.java:400-406 |
tapedrive.hearingDistance |
24 | 0–64 | Config.java:407-413 |
| 播放出包间隔 | 250 ms(硬编码) | — | TapeDriveState.java:113 |
| 倒带 / 快进步长 | ∓2048 字节/次 | — | TapeDriveState.java:120、TapeDriveState.java:125 |
| 变速范围 | 0.25 – 2.0 | — | TapeDriveState.java:45-49 |
| 变速公式 | packetSize = round(1024 × speed) |
— | TapeDriveState.java:47 |
| 音量映射 | floor(volume × 127),钳制 0.0–1.0 |
— | TapeDriveState.java:59-63 |
| DFPWM 比特率参数 | packetSize × 8 × 4 |
— | TapeDriveState.java:98 |
变速范围是硬编码的,没有对应的配置项;
TapeDriveState.packetSize初值 1024 同样不可配。
交互
| 触发 | 行为 |
|---|---|
| 右击 | 打开 guiTapeDrive(GuiTapePlayer),GUI 内的播放/停止/倒带/快进经封包发回服务端 |
| 比较器读取 | 返回 TileTapeDrive 当前状态(BlockTapeReader.java:57-60;Tile 为 TileTapeDrive 时取值,否则 0) |
| 红石输入 | receivesRedstone 恒 true |
| 断开音频线 | 无声音输出 |
⚠️ GUI 状态封包的异常被静默吞掉:GuiProviderTapeDrive.setState 中 Computronics.packet.sendToServer(packet) 包裹在 try { ... } catch (Exception e) { // NO-OP } 内(GuiProviderTapeDrive.java:37-45)。封包构造或发送失败时既不抛错也不写日志,但 tile.switchState(state) 仍会在 catch 之后不执行——GUI 显示与实际播放状态会不一致且无任何提示。
合成配方
无 OC 配方(ModRecipes.java:122-134):
iii
iri
iai
| 字符 | 物品 |
|---|---|
i |
铁锭 ingotIron |
r |
红石粉 dustRedstone |
a |
铁音符盒(未启用时回退为 minecraft:noteblock) |
OC 配方(ModRecipes.java:400-419):
ici
sag
ibi
| 字符 | 物品 |
|---|---|
i |
铁锭 ingotIron |
c |
oc:circuitChip2 |
s |
minecraft:craftingPiston |
g |
铁栅栏 minecraft:iron_bars |
a |
扩音器 → 铁音符盒 → 音符盒(依次回退) |
b |
oc:materialCircuitBoardPrinted |
相关条目
- 录音带 - 10 种时长变体
- 便携式磁带驱动器 - 物品形态的同类设备
- 音频线 - 声音传输网络
- 扩音器 - 声音播放终端
- OpenComputers 物品系统 - CC 媒体提供方