package com.ard.tianyu.netty.command.speaker; import com.ard.tianyu.model.dto.speaker.TextSpeakDTO; import com.ard.tianyu.netty.command.BaseCmd; import io.netty.buffer.ByteBuf; /** * 文字喊话指令 * * @author liusuyi * @date 2024年10月30日16:20 **/ public class TextSpeakCmd extends BaseCmd { private final byte speechRate; private final byte voiceType; private final String textData; public TextSpeakCmd(TextSpeakDTO textSpeakDTO) { this.speechRate = textSpeakDTO.getSpeechRate(); this.voiceType = textSpeakDTO.getVoiceType(); this.textData = textSpeakDTO.getTextData(); setDataHeader((short) 0x7479); setDataLength((short) (20 + this.textData.getBytes().length)); setBoxSn(textSpeakDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD3); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x04); // 写入动作编号 out.writeByte(this.speechRate); // 写入语速设置 out.writeByte(this.voiceType); // 写入声音 out.writeBytes(this.textData.getBytes()); // 写入文本数据 } }