diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionDetectionAlertController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionDetectionAlertController.java new file mode 100644 index 0000000..cdbc476 --- /dev/null +++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionDetectionAlertController.java @@ -0,0 +1,123 @@ +package com.cmvr.web.controller.inspection; + +import com.cmvr.common.annotation.Anonymous; +import com.cmvr.inspection.domain.dto.alert.AlertEnvelope; +import com.cmvr.inspection.exception.DetectionAlertBadRequestException; +import com.cmvr.inspection.service.IInspectionDetectionAlertService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/** + * cmvr_edge_ai 检测报警推送入口。 + * + * 该接口由边缘服务主动调用,使用HTTP状态码表达处理结果,不使用项目通用AjaxResult包装。 + */ +@Slf4j +@Anonymous +@RestController +@RequiredArgsConstructor +@Api(tags = "智能巡检--PPE报警接收") +public class InspectionDetectionAlertController +{ + /** 包含Base64图片的JSON请求最大允许20MB,防止异常请求耗尽服务端内存。 */ + private static final int MAX_REQUEST_BYTES = 20 * 1024 * 1024; + + private final IInspectionDetectionAlertService detectionAlertService; + private final ObjectMapper objectMapper; + + /** + * 接收PPE违规报警。重复事件视为已处理,仍返回204,避免边缘端持续重试。 + */ + @ApiOperation("接收边缘AI的PPE违规报警") + @PostMapping(value = "/v1/detection-alerts", consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity receive( + @RequestHeader(value = "Idempotency-Key", required = false) String idempotencyKey, + HttpServletRequest request) + { + try + { + String requestBody = readRequestBody(request); + AlertEnvelope envelope = objectMapper.readValue(requestBody, AlertEnvelope.class); + detectionAlertService.receive(envelope, idempotencyKey); + return ResponseEntity.noContent().build(); + } + catch (JsonProcessingException | DetectionAlertBadRequestException ex) + { + log.warn("拒绝不合法的PPE报警请求,idempotencyKey={},原因={}", idempotencyKey, ex.getMessage()); + return ResponseEntity.badRequest().build(); + } + catch (DuplicateKeyException ex) + { + // 预查与插入之间仍可能发生并发,由数据库唯一索引完成最终幂等。 + log.info("忽略并发重复的PPE报警,idempotencyKey={}", idempotencyKey); + return ResponseEntity.noContent().build(); + } + catch (IOException ex) + { + log.warn("读取PPE报警请求失败,idempotencyKey={},原因={}", idempotencyKey, ex.getMessage()); + return ResponseEntity.badRequest().build(); + } + catch (Exception ex) + { + log.error("PPE报警处理暂时失败,idempotencyKey={}", idempotencyKey, ex); + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); + } + } + + private String readRequestBody(HttpServletRequest request) throws IOException + { + long contentLength = request.getContentLengthLong(); + if (contentLength > MAX_REQUEST_BYTES) + { + throw new DetectionAlertBadRequestException("请求体不能超过20MB"); + } + + try (ServletInputStream inputStream = request.getInputStream(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(initialCapacity(contentLength))) + { + byte[] buffer = new byte[8192]; + int total = 0; + int length; + while ((length = inputStream.read(buffer)) != -1) + { + total += length; + if (total > MAX_REQUEST_BYTES) + { + throw new DetectionAlertBadRequestException("请求体不能超过20MB"); + } + outputStream.write(buffer, 0, length); + } + if (total == 0) + { + throw new DetectionAlertBadRequestException("请求体不能为空"); + } + return new String(outputStream.toByteArray(), StandardCharsets.UTF_8); + } + } + + private int initialCapacity(long contentLength) + { + if (contentLength <= 0 || contentLength > MAX_REQUEST_BYTES) + { + return 8192; + } + return (int) contentLength; + } +} diff --git a/cmvr-iot-admin/src/main/resources/application.yml b/cmvr-iot-admin/src/main/resources/application.yml index 1b9126e..a8f4a30 100644 --- a/cmvr-iot-admin/src/main/resources/application.yml +++ b/cmvr-iot-admin/src/main/resources/application.yml @@ -21,6 +21,9 @@ server: tomcat: # tomcat的URI编码 uri-encoding: UTF-8 + # PPE报警包含Base64图片,允许读取较大的JSON请求,同时限制异常请求的吞入大小 + max-http-form-post-size: 20MB + max-swallow-size: 20MB # 连接数满后的排队数,默认为100 accept-count: 1000 threads: diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/adapter/RobotAudioGrpcAdapter.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/adapter/RobotAudioGrpcAdapter.java index c746192..ab20267 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/adapter/RobotAudioGrpcAdapter.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/adapter/RobotAudioGrpcAdapter.java @@ -1,41 +1,44 @@ package com.cmvr.edge.client.adapter; -import cmvr.api.RobotAudio; -import cmvr.api.RobotAudioServiceGrpc; -import com.google.protobuf.ByteString; +import cmvr.api.Common; +import cmvr.api.MicPhoneServiceGrpc; +import cmvr.api.MicrophoneCommand; +import cmvr.api.SpeakerCommand; +import cmvr.api.SpeakerServiceGrpc; import com.cmvr.edge.client.manage.GrpcServiceManager; import com.cmvr.edge.client.utils.EdgeCommonUtil; +import com.google.protobuf.ByteString; import io.grpc.Status; +import io.grpc.stub.ClientCallStreamObserver; +import io.grpc.stub.ClientResponseObserver; import io.grpc.stub.StreamObserver; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.ConcurrentLinkedQueue; +import javax.annotation.PreDestroy; +import java.util.Arrays; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; /** - * 机器人实时语音 gRPC 适配层。 + * 实时语音对讲 gRPC 适配层。 * - * 约束: - * 1. Java 后端只作为 gRPC client; - * 2. 机器人终端作为 gRPC server; - * 3. Stub 必须复用项目现有 GrpcServiceManager,禁止在这里创建 ManagedChannel。 + *

当前机器人侧不再使用旧的 RobotAudio 双向流 proto,而是拆成两个现有服务: + * 浏览器 -> 机器人:SpeakerService.StreamAudio 客户端流; + * 机器人 -> 浏览器:MicPhoneService.StreamAudio 服务端流。

+ * + *

音频格式固定为 PCM_S16LE / 48000Hz / 单声道 / 10ms / 960 bytes。 + * 所有发送到 gRPC StreamObserver 的动作都绑定到会话内单线程,避免并发 onNext 引发底层崩溃。

*/ @Component @RequiredArgsConstructor @@ -43,498 +46,108 @@ public class RobotAudioGrpcAdapter { private static final Logger log = LoggerFactory.getLogger(RobotAudioGrpcAdapter.class); - /** 浏览器与机器人之间约定的音频格式:PCM-48K-16bit-单声道。 */ - public static final int SAMPLE_RATE = 48000; - public static final int CHANNELS = 1; - public static final int BITS_PER_SAMPLE = 16; - // WebRTC 与主流 PCM 设备默认使用 signed 16-bit little-endian,终端如需大端序应在设备边界自行转换。 - public static final String ENCODING = "PCM_S16LE"; + private static final int SAMPLE_RATE = 48000; + private static final int CHANNELS = 1; + private static final int BITS_PER_SAMPLE = 16; private static final int FRAME_MS = 10; private static final int FRAME_SAMPLES = SAMPLE_RATE * FRAME_MS / 1000; private static final int FRAME_BYTES = FRAME_SAMPLES * CHANNELS * (BITS_PER_SAMPLE / 8); - private static final int TARGET_QUEUED_BROWSER_FRAMES = 2; + private static final String CODEC = "PCM_S16LE"; + private static final int MAX_QUEUED_BROWSER_FRAMES = 10; - private static final long AUDIO_STATS_LOG_INTERVAL_MS = 5000L; - private static final int DEBUG_DUMP_SECONDS = 10; - private static final int DEBUG_DUMP_BYTES = SAMPLE_RATE * CHANNELS * (BITS_PER_SAMPLE / 8) * DEBUG_DUMP_SECONDS; + private static final int TARGET_QUEUED_BROWSER_FRAMES = 2; + private static final long HEARTBEAT_INTERVAL_MS = 1000L; + private static final long HEARTBEAT_DEADLINE_MS = 2000L; private final GrpcServiceManager grpcServiceManager; - private final ConcurrentHashMap lastGrpcInboundFormatLogAt = new ConcurrentHashMap<>(); - private final WavDumpRecorder robotInboundDumpRecorder = - new WavDumpRecorder("robot-to-backend", DEBUG_DUMP_BYTES); + private final ConcurrentMap streams = new ConcurrentHashMap<>(); - /** - * 打开机器人音频双向流。 - */ public RobotAudioStream openStream(String terminalId, String deviceId, String sessionId, String operatorId, RobotAudioStreamListener listener) { - RobotAudioServiceGrpc.RobotAudioServiceStub stub = - grpcServiceManager.getGrpcClient(terminalId, RobotAudioServiceGrpc.RobotAudioServiceStub.class); - - StreamObserver responseObserver = new StreamObserver() { - @Override - public void onNext(RobotAudio.RobotAudioResponse response) { - try { - handleRobotResponse(sessionId, response, listener); - } catch (Exception e) { - log.error("处理机器人音频响应失败,sessionId={}", sessionId, e); - listener.onError(sessionId, e); - } - } - - @Override - public void onError(Throwable t) { - log.error("机器人音频gRPC流异常,sessionId={}", sessionId, t); - listener.onError(sessionId, t); - } - - @Override - public void onCompleted() { - log.info("机器人音频gRPC流结束,sessionId={}", sessionId); - listener.onCompleted(sessionId); - } - }; - - StreamObserver requestObserver = stub.audioTalk(responseObserver); - RobotAudioStream stream = new RobotAudioStream(terminalId, deviceId, sessionId, requestObserver); - stream.sendStart(operatorId); - return stream; + return openStream(terminalId, deviceId, deviceId, sessionId, operatorId, listener); } - private void handleRobotResponse(String sessionId, - RobotAudio.RobotAudioResponse response, - RobotAudioStreamListener listener) { - if (response.hasHeader() - && !response.getHeader().getSuccess() - && response.getHeader().getErrorMessage() != null - && !response.getHeader().getErrorMessage().trim().isEmpty()) { - String errorMessage = response.getHeader().getErrorMessage(); - log.warn("机器人音频响应失败,sessionId={},error={}", sessionId, errorMessage); - listener.onError(sessionId, new RuntimeException(errorMessage)); - return; + public RobotAudioStream openStream(String terminalId, + String speakerDeviceId, + String micDeviceId, + String sessionId, + String operatorId, + RobotAudioStreamListener listener) { + SpeakerServiceGrpc.SpeakerServiceStub speakerStub = + grpcServiceManager.getGrpcClient(terminalId, SpeakerServiceGrpc.SpeakerServiceStub.class); + MicPhoneServiceGrpc.MicPhoneServiceStub micStub = + grpcServiceManager.getGrpcClient(terminalId, MicPhoneServiceGrpc.MicPhoneServiceStub.class); + SpeakerServiceGrpc.SpeakerServiceBlockingStub speakerBlockingStub = + grpcServiceManager.getGrpcClient(terminalId, SpeakerServiceGrpc.SpeakerServiceBlockingStub.class); + MicPhoneServiceGrpc.MicPhoneServiceBlockingStub micBlockingStub = + grpcServiceManager.getGrpcClient(terminalId, MicPhoneServiceGrpc.MicPhoneServiceBlockingStub.class); + + preflightDeviceStatus(speakerBlockingStub, micBlockingStub, speakerDeviceId, micDeviceId, sessionId); + + RobotAudioStream stream = new RobotAudioStream( + terminalId, speakerDeviceId, micDeviceId, sessionId, operatorId, speakerStub, micStub, listener); + RobotAudioStream exists = streams.putIfAbsent(sessionId, stream); + if (exists != null) { + throw new IllegalStateException("实时语音会话已存在:" + sessionId); } - switch (response.getPayloadCase()) { - case START_ACK: - listener.onStarted(sessionId, response.getStartAck().getAccepted(), response.getStartAck().getMessage()); - break; - case AUDIO_FRAME: - RobotAudio.RobotAudioFrame frame = response.getAudioFrame(); - byte[] pcm = frame.getPcm().toByteArray(); - robotInboundDumpRecorder.record(pcm); - logGrpcInboundFormatIfNeeded(sessionId, frame); - listener.onRobotAudio(sessionId, frame.getSequence(), frame.getTimestampMs(), pcm); - break; - case HEARTBEAT: - listener.onHeartbeat(sessionId, response.getHeartbeat().getTimestampMs()); - break; - case STOP: - listener.onRobotStop(sessionId, response.getStop().getReason()); - break; - case ERROR: - RobotAudio.RobotAudioError error = response.getError(); - listener.onError(sessionId, new RuntimeException(error.getCode() + ":" + error.getMessage())); - break; - case PAYLOAD_NOT_SET: - default: - log.debug("机器人音频响应为空payload,sessionId={}", sessionId); - break; + try { + stream.start(); + log.info("实时对讲 gRPC 流已创建,sessionId={},terminalId={},speakerDeviceId={},micDeviceId={},operatorId={},sampleRate={},channels={},bits={},frameMs={},frameBytes={}", + sessionId, terminalId, speakerDeviceId, micDeviceId, operatorId, SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE, FRAME_MS, FRAME_BYTES); + return stream; + } catch (RuntimeException e) { + streams.remove(sessionId, stream); + stream.closeLocalResources(); + throw e; } } - private void logGrpcInboundFormatIfNeeded(String sessionId, RobotAudio.RobotAudioFrame frame) { - long now = System.currentTimeMillis(); - Long last = lastGrpcInboundFormatLogAt.get(sessionId); - if (last != null && now - last < AUDIO_STATS_LOG_INTERVAL_MS) { - return; - } - lastGrpcInboundFormatLogAt.put(sessionId, now); - int bytes = frame.getPcm().size(); - int frameSamples = bytes / (CHANNELS * (BITS_PER_SAMPLE / 8)); - int frameMs = frameSamples * 1000 / SAMPLE_RATE; - log.info("gRPC机器人上行音频格式,sessionId={},sampleRate={},channels={},bitsPerSample={},encoding={},frameSamples={},frameMs={},bytes={},sequence={},timestampMs={}", - sessionId, - SAMPLE_RATE, - CHANNELS, - BITS_PER_SAMPLE, - ENCODING, - frameSamples, - frameMs, - bytes, - frame.getSequence(), - frame.getTimestampMs()); - logPcmStats("grpc-inbound-robot", sessionId, frame.getPcm().toByteArray(), frame.getSequence(), frame.getTimestampMs()); - } - - private void logPcmStats(String direction, String sessionId, byte[] pcm, long sequence, long timestampMs) { - PcmStats stats = PcmStats.fromPcm16Le(pcm); - log.info("PCM-STATS direction={} sessionId={} sequence={} timestampMs={} bytes={} samples={} rms={} peak={} zeroCrossRate={} firstSamples={}", - direction, - sessionId, - sequence, - timestampMs, - pcm == null ? 0 : pcm.length, - stats.samples, - stats.rms, - stats.peak, - stats.zeroCrossRate, - stats.firstSamples); - } - - /** - * 单个会话对应的一条 gRPC 双向流。 - */ - public class RobotAudioStream { - private final String terminalId; - private final String deviceId; - private final String sessionId; - private final StreamObserver requestObserver; - private final AtomicLong sequence = new AtomicLong(0); - private final AtomicBoolean closed = new AtomicBoolean(false); - private final Object sendLock = new Object(); - private final ConcurrentLinkedQueue browserAudioQueue = new ConcurrentLinkedQueue<>(); - private final AtomicInteger queuedBrowserFrames = new AtomicInteger(0); - private final Object browserAudioBufferLock = new Object(); - private byte[] browserAudioRemainder = new byte[FRAME_BYTES]; - private int browserAudioRemainderLength; - private final ScheduledExecutorService browserAudioSender; - private final ScheduledFuture browserAudioSenderFuture; - private volatile long browserAudioFramesEnqueued; - private volatile long browserAudioFramesSent; - private volatile long browserAudioFramesDropped; - private volatile long browserAudioSilentFramesSent; - private volatile boolean browserAudioStarted; - private volatile long lastAudioStatsLogAt; - private volatile long lastGrpcOutboundFormatLogAt; - - private RobotAudioStream(String terminalId, - String deviceId, - String sessionId, - StreamObserver requestObserver) { - this.terminalId = terminalId; - this.deviceId = deviceId; - this.sessionId = sessionId; - this.requestObserver = requestObserver; - this.browserAudioSender = Executors.newSingleThreadScheduledExecutor(runnable -> { - Thread thread = new Thread(runnable, "robot-audio-send-" + sessionId); - thread.setDaemon(true); - return thread; - }); - this.browserAudioSenderFuture = browserAudioSender.scheduleAtFixedRate( - this::sendQueuedBrowserAudio, - FRAME_MS, - FRAME_MS, - TimeUnit.MILLISECONDS); - } - - /** - * 通知机器人开启对讲。 - */ - public void sendStart(String operatorId) { - RobotAudio.RobotAudioFormat format = RobotAudio.RobotAudioFormat.newBuilder() - .setSampleRate(SAMPLE_RATE) - .setChannels(CHANNELS) - .setBitsPerSample(BITS_PER_SAMPLE) - .setEncoding(ENCODING) - .build(); - - RobotAudio.RobotAudioStart start = RobotAudio.RobotAudioStart.newBuilder() - .setSessionId(sessionId) - .setOperatorId(operatorId == null ? "" : operatorId) - .setFormat(format) - .build(); - - log.info("gRPC下发终端音频协商格式,sessionId={},terminalId={},deviceId={},sampleRate={},channels={},bitsPerSample={},encoding={},frameMs={},frameSamples={},frameBytes={}", - sessionId, - terminalId, - deviceId, - SAMPLE_RATE, - CHANNELS, - BITS_PER_SAMPLE, - ENCODING, - FRAME_MS, - FRAME_SAMPLES, - FRAME_BYTES); - - send(RobotAudio.RobotAudioRequest.newBuilder() - .setHeader(EdgeCommonUtil.buildRequest(deviceId)) - .setStart(start) - .build()); - } - - /** - * 将浏览器侧 WebRTC 媒体通道产出的 PCM 帧发送给机器人。 - */ - public void sendAudio(byte[] pcm) { - if (pcm == null || pcm.length == 0) { - return; - } - if (closed.get()) { - return; - } - enqueueBrowserAudio(pcm); - } - - private void enqueueBrowserAudio(byte[] pcm) { - if (closed.get()) { - return; - } - synchronized (browserAudioBufferLock) { - int offset = 0; - if (browserAudioRemainderLength > 0) { - int need = FRAME_BYTES - browserAudioRemainderLength; - int copy = Math.min(need, pcm.length); - System.arraycopy(pcm, 0, browserAudioRemainder, browserAudioRemainderLength, copy); - browserAudioRemainderLength += copy; - offset += copy; - if (browserAudioRemainderLength == FRAME_BYTES) { - offerBrowserAudioFrame(browserAudioRemainder); - browserAudioRemainder = new byte[FRAME_BYTES]; - browserAudioRemainderLength = 0; - } - } - - while (offset + FRAME_BYTES <= pcm.length) { - byte[] frame = new byte[FRAME_BYTES]; - System.arraycopy(pcm, offset, frame, 0, FRAME_BYTES); - offerBrowserAudioFrame(frame); - offset += FRAME_BYTES; - } - - int remain = pcm.length - offset; - if (remain > 0) { - System.arraycopy(pcm, offset, browserAudioRemainder, 0, remain); - browserAudioRemainderLength = remain; - } - } - } - - private void offerBrowserAudioFrame(byte[] frame) { - if (queuedBrowserFrames.get() >= MAX_QUEUED_BROWSER_FRAMES) { - if (browserAudioQueue.poll() != null) { - queuedBrowserFrames.decrementAndGet(); - browserAudioFramesDropped++; - } - } - browserAudioQueue.offer(frame.clone()); - queuedBrowserFrames.incrementAndGet(); - browserAudioFramesEnqueued++; - browserAudioStarted = true; - logBrowserAudioStatsIfNeeded("browserAudioEnqueue"); - } - - private void sendQueuedBrowserAudio() { - if (closed.get()) { - return; - } - trimBrowserAudioQueue(); - byte[] pcm = browserAudioQueue.poll(); - if (pcm == null) { - if (!browserAudioStarted) { - return; - } - pcm = new byte[FRAME_BYTES]; - browserAudioSilentFramesSent++; - } else { - queuedBrowserFrames.decrementAndGet(); - } - - RobotAudio.RobotAudioFrame frame = RobotAudio.RobotAudioFrame.newBuilder() - .setSessionId(sessionId) - .setSequence(sequence.incrementAndGet()) - .setTimestampMs(System.currentTimeMillis()) - .setPcm(ByteString.copyFrom(pcm)) - .build(); - logGrpcOutboundFormatIfNeeded(frame); - - sendDirect(RobotAudio.RobotAudioRequest.newBuilder() - .setHeader(EdgeCommonUtil.buildRequest(deviceId)) - .setAudioFrame(frame) - .build()); - browserAudioFramesSent++; - logBrowserAudioStatsIfNeeded("browserAudioGrpcSend"); - } - - private void trimBrowserAudioQueue() { - while (queuedBrowserFrames.get() > TARGET_QUEUED_BROWSER_FRAMES) { - byte[] dropped = browserAudioQueue.poll(); - if (dropped == null) { - queuedBrowserFrames.set(0); - break; - } - queuedBrowserFrames.decrementAndGet(); - browserAudioFramesDropped++; - } - } - - private void logBrowserAudioStatsIfNeeded(String source) { - long now = System.currentTimeMillis(); - if (now - lastAudioStatsLogAt < AUDIO_STATS_LOG_INTERVAL_MS) { - return; - } - lastAudioStatsLogAt = now; - log.info("gRPC浏览器音频统计,source={},sessionId={},enqueued={},sent={},dropped={},queued={}", - source, - sessionId, - browserAudioFramesEnqueued, - browserAudioFramesSent, - browserAudioFramesDropped, - queuedBrowserFrames.get()); - log.info("GRPC-BROWSER-AUDIO-STATS source={} sessionId={} enqueued={} sent={} dropped={} silentSent={} queued={}", - source, - sessionId, - browserAudioFramesEnqueued, - browserAudioFramesSent, - browserAudioFramesDropped, - browserAudioSilentFramesSent, - queuedBrowserFrames.get()); - } - - private void logGrpcOutboundFormatIfNeeded(RobotAudio.RobotAudioFrame frame) { - long now = System.currentTimeMillis(); - if (now - lastGrpcOutboundFormatLogAt < AUDIO_STATS_LOG_INTERVAL_MS) { - return; - } - lastGrpcOutboundFormatLogAt = now; - int bytes = frame.getPcm().size(); - int frameSamples = bytes / (CHANNELS * (BITS_PER_SAMPLE / 8)); - int frameMs = frameSamples * 1000 / SAMPLE_RATE; - log.info("gRPC浏览器下行音频格式,sessionId={},sampleRate={},channels={},bitsPerSample={},encoding={},frameSamples={},frameMs={},bytes={},sequence={},timestampMs={}", - sessionId, - SAMPLE_RATE, - CHANNELS, - BITS_PER_SAMPLE, - ENCODING, - frameSamples, - frameMs, - bytes, - frame.getSequence(), - frame.getTimestampMs()); - logPcmStats("grpc-outbound-browser", sessionId, frame.getPcm().toByteArray(), frame.getSequence(), frame.getTimestampMs()); - } - - - /** - * Java 侧保活心跳。机器人仍需按协议每秒上报心跳。 - */ - public void sendHeartbeat() { - RobotAudio.RobotAudioHeartbeat heartbeat = RobotAudio.RobotAudioHeartbeat.newBuilder() - .setSessionId(sessionId) - .setTimestampMs(System.currentTimeMillis()) - .build(); - - send(RobotAudio.RobotAudioRequest.newBuilder() - .setHeader(EdgeCommonUtil.buildRequest(deviceId)) - .setHeartbeat(heartbeat) - .build()); - } - - /** - * 正常结束对讲。 - */ - public void sendStop(String reason) { - if (!closed.compareAndSet(false, true)) { - return; - } - RobotAudio.RobotAudioStop stop = RobotAudio.RobotAudioStop.newBuilder() - .setSessionId(sessionId) - .setReason(reason == null ? "" : reason) - .build(); - RobotAudio.RobotAudioRequest request = RobotAudio.RobotAudioRequest.newBuilder() - .setHeader(EdgeCommonUtil.buildRequest(deviceId)) - .setStop(stop) - .build(); - executeOnGrpcSendThread(() -> { - sendDirect(request); - completeDirect(); - shutdownBrowserAudioSender(); - }); - } - - /** - * 异常关闭流。 - */ - public void cancel(String reason) { - if (closed.compareAndSet(false, true)) { - executeOnGrpcSendThread(() -> { - synchronized (sendLock) { - requestObserver.onError(Status.CANCELLED.withDescription(reason).asRuntimeException()); - } - shutdownBrowserAudioSender(); - }); - } - } - - private void complete() { - if (closed.compareAndSet(false, true)) { - executeOnGrpcSendThread(() -> { - completeDirect(); - shutdownBrowserAudioSender(); - }); - } - } - - private void completeDirect() { - synchronized (sendLock) { - requestObserver.onCompleted(); - } - } - - private void shutdownBrowserAudioSender() { - if (browserAudioSenderFuture != null) { - browserAudioSenderFuture.cancel(false); - } - browserAudioQueue.clear(); - queuedBrowserFrames.set(0); - browserAudioSender.shutdown(); - } - - private void send(RobotAudio.RobotAudioRequest request) { - if (closed.get()) { - log.warn("机器人音频流已关闭,忽略发送,sessionId={}", sessionId); - return; - } - executeOnGrpcSendThread(() -> { - if (closed.get()) { - return; - } - sendDirect(request); - }); - } - - private void executeOnGrpcSendThread(Runnable runnable) { + @PreDestroy + public void destroy() { + for (RobotAudioStream stream : streams.values()) { try { - browserAudioSender.execute(runnable); + stream.cancel("application shutdown"); } catch (Exception e) { - log.warn("机器人音频gRPC发送线程不可用,sessionId={}", sessionId, e); + log.debug("关闭实时语音流异常,sessionId={}", stream.getSessionId(), e); } } + streams.clear(); + } - private void sendDirect(RobotAudio.RobotAudioRequest request) { - synchronized (sendLock) { - requestObserver.onNext(request); + private void preflightDeviceStatus(SpeakerServiceGrpc.SpeakerServiceBlockingStub speakerStub, + MicPhoneServiceGrpc.MicPhoneServiceBlockingStub micStub, + String speakerDeviceId, + String micDeviceId, + String sessionId) { + try { + SpeakerCommand.GetSpeakerStateCommand.Request speakerRequest = SpeakerCommand.GetSpeakerStateCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(speakerDeviceId)) + .build(); + SpeakerCommand.GetSpeakerStateCommand.Feedback speakerFeedback = + speakerStub.withDeadlineAfter(HEARTBEAT_DEADLINE_MS, TimeUnit.MILLISECONDS).getStatus(speakerRequest); + if (speakerFeedback != null && speakerFeedback.hasHeader() && !speakerFeedback.getHeader().getSuccess()) { + throw new IllegalStateException("speaker device unavailable: " + speakerFeedback.getHeader().getErrorMessage()); } - } - public String getTerminalId() { - return terminalId; - } - - public String getDeviceId() { - return deviceId; - } - - public String getSessionId() { - return sessionId; + MicrophoneCommand.GetMicStateCommand.Request micRequest = MicrophoneCommand.GetMicStateCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(micDeviceId)) + .build(); + MicrophoneCommand.GetMicStateCommand.Feedback micFeedback = + micStub.withDeadlineAfter(HEARTBEAT_DEADLINE_MS, TimeUnit.MILLISECONDS).getStatus(micRequest); + if (micFeedback != null && micFeedback.hasHeader() && !micFeedback.getHeader().getSuccess()) { + throw new IllegalStateException("microphone device unavailable: " + micFeedback.getHeader().getErrorMessage()); + } + log.info("实时对讲设备预检通过,sessionId={},speakerDeviceId={},micDeviceId={}", sessionId, speakerDeviceId, micDeviceId); + } catch (RuntimeException e) { + log.error("实时对讲设备预检失败,sessionId={},speakerDeviceId={},micDeviceId={}", sessionId, speakerDeviceId, micDeviceId, e); + throw e; } } - /** - * gRPC 流事件监听器,由业务层实现会话状态更新和音频转发。 - */ public interface RobotAudioStreamListener { void onStarted(String sessionId, boolean accepted, String message); @@ -549,151 +162,684 @@ public class RobotAudioGrpcAdapter { void onCompleted(String sessionId); } - private static class WavDumpRecorder { - private final String name; - private final int maxBytes; - private final ByteArrayOutputStream buffer; - private Path filePath; - private int writtenBytes; - private boolean completed; + public class RobotAudioStream { + private final String terminalId; + private final String speakerDeviceId; + private final String micDeviceId; + private final String sessionId; + private final String operatorId; + private final SpeakerServiceGrpc.SpeakerServiceStub speakerStub; + private final MicPhoneServiceGrpc.MicPhoneServiceStub micStub; + private final RobotAudioStreamListener listener; + private final ScheduledExecutorService sendExecutor; + private final ArrayBlockingQueue browserFrameQueue = new ArrayBlockingQueue<>(MAX_QUEUED_BROWSER_FRAMES); + private final Object browserBufferLock = new Object(); + private final AtomicBoolean closed = new AtomicBoolean(false); + private final AtomicBoolean terminalNotified = new AtomicBoolean(false); + private final AtomicBoolean heartbeatInFlight = new AtomicBoolean(false); + private final AtomicLong outboundSequence = new AtomicLong(0); + private final AtomicLong inboundSequence = new AtomicLong(0); + private final AtomicLong enqueued = new AtomicLong(0); + private final AtomicLong sent = new AtomicLong(0); + private final AtomicLong dropped = new AtomicLong(0); - private WavDumpRecorder(String name, int maxBytes) { - this.name = name; - this.maxBytes = maxBytes; - this.buffer = new ByteArrayOutputStream(maxBytes); + private volatile StreamObserver speakerRequestObserver; + private volatile ClientCallStreamObserver micRequestObserver; + private volatile ScheduledFuture sendFuture; + private volatile ScheduledFuture heartbeatFuture; + private volatile long lastStatsLogAt; + private volatile byte[] pendingBrowserBytes = new byte[0]; + + private RobotAudioStream(String terminalId, + String speakerDeviceId, + String micDeviceId, + String sessionId, + String operatorId, + SpeakerServiceGrpc.SpeakerServiceStub speakerStub, + MicPhoneServiceGrpc.MicPhoneServiceStub micStub, + RobotAudioStreamListener listener) { + this.terminalId = terminalId; + this.speakerDeviceId = speakerDeviceId; + this.micDeviceId = micDeviceId; + this.sessionId = sessionId; + this.operatorId = operatorId; + this.speakerStub = speakerStub; + this.micStub = micStub; + this.listener = listener; + this.sendExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("robot-audio-send-" + sessionId)); } - private synchronized void record(byte[] pcm) { - if (completed || pcm == null || pcm.length == 0) { + private void start() { + openSpeakerStream(); + openMicStream(); + this.sendFuture = sendExecutor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + sendOneBrowserFrame(); + } + }, 0L, FRAME_MS, TimeUnit.MILLISECONDS); + this.heartbeatFuture = sendExecutor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + probeHeartbeat(); + } + }, HEARTBEAT_INTERVAL_MS, HEARTBEAT_INTERVAL_MS, TimeUnit.MILLISECONDS); + listener.onStarted(sessionId, true, "audio stream started"); + } + + private void openSpeakerStream() { + StreamObserver responseObserver = + new StreamObserver() { + @Override + public void onNext(SpeakerCommand.StreamSpeakerAudioCommand.Feedback feedback) { + if (closed.get()) { + return; + } + if (feedback != null && feedback.hasHeader() && !feedback.getHeader().getSuccess()) { + fail("speaker feedback", new IllegalStateException("speaker stream feedback failed: " + feedback.getHeader().getErrorMessage())); + } else { + listener.onHeartbeat(sessionId, System.currentTimeMillis()); + } + } + + @Override + public void onError(Throwable t) { + if (closed.get()) { + return; + } + fail("speaker stream", t); + } + + @Override + public void onCompleted() { + if (closed.get()) { + return; + } + completeFromRemote(); + } + }; + this.speakerRequestObserver = speakerStub.streamAudio(responseObserver); + } + + private void openMicStream() { + MicrophoneCommand.StreamMicAudioCommand.Request request = MicrophoneCommand.StreamMicAudioCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(micDeviceId)) + .build(); + + micStub.streamAudio(request, + new ClientResponseObserver() { + @Override + public void beforeStart(ClientCallStreamObserver requestStream) { + micRequestObserver = requestStream; + requestStream.disableAutoInboundFlowControl(); + log.info("麦克风音频流已启用手动入站流控,sessionId={},micDeviceId={}", sessionId, micDeviceId); + } + + @Override + public void onNext(MicrophoneCommand.StreamMicAudioCommand.Feedback feedback) { + handleMicFeedback(feedback); + } + + @Override + public void onError(Throwable t) { + if (closed.get()) { + return; + } + fail("mic stream", t); + } + + @Override + public void onCompleted() { + if (closed.get()) { + return; + } + completeFromRemote(); + } + }); + requestNextMicFrame(1L); + } + + /** + * 接收浏览器 WebSocket 二进制 PCM。允许前端一次发多帧或半帧,这里按 10ms 固定帧重组。 + */ + public void sendAudio(byte[] pcm) { + if (closed.get() || pcm == null || pcm.length == 0) { return; } + synchronized (browserBufferLock) { + byte[] merged = new byte[pendingBrowserBytes.length + pcm.length]; + System.arraycopy(pendingBrowserBytes, 0, merged, 0, pendingBrowserBytes.length); + System.arraycopy(pcm, 0, merged, pendingBrowserBytes.length, pcm.length); + + int offset = 0; + while (merged.length - offset >= FRAME_BYTES) { + byte[] frame = Arrays.copyOfRange(merged, offset, offset + FRAME_BYTES); + enqueueBrowserFrame(frame); + offset += FRAME_BYTES; + } + pendingBrowserBytes = Arrays.copyOfRange(merged, offset, merged.length); + } + } + + public void sendHeartbeat() { + if (!closed.get()) { + probeHeartbeat(); + } + } + + public void sendStop(String reason) { + if (!closed.compareAndSet(false, true)) { + return; + } + log.info("关闭实时对讲 gRPC 流,sessionId={},reason={}", sessionId, reason); + sendExecutor.execute(new Runnable() { + @Override + public void run() { + completeSpeakerStream(); + cancelMicStream("browser stop"); + stopTerminalAudio(); + closeLocalResources(); + streams.remove(sessionId, RobotAudioStream.this); + } + }); + } + + public void cancel(String reason) { + if (!closed.compareAndSet(false, true)) { + return; + } + log.warn("取消实时对讲 gRPC 流,sessionId={},reason={}", sessionId, reason); + sendExecutor.execute(new Runnable() { + @Override + public void run() { + errorSpeakerStream(reason); + cancelMicStream(reason); + stopTerminalAudio(); + closeLocalResources(); + streams.remove(sessionId, RobotAudioStream.this); + } + }); + } + + public String getSessionId() { + return sessionId; + } + + public String getTerminalId() { + return terminalId; + } + + public String getDeviceId() { + return speakerDeviceId; + } + + private void enqueueBrowserFrame(byte[] frame) { + if (browserFrameQueue.remainingCapacity() == 0) { + int targetDrops = Math.max(1, browserFrameQueue.size() - TARGET_QUEUED_BROWSER_FRAMES + 1); + for (int i = 0; i < targetDrops; i++) { + if (browserFrameQueue.poll() != null) { + dropped.incrementAndGet(); + } + } + } + if (browserFrameQueue.offer(frame)) { + enqueued.incrementAndGet(); + } else { + dropped.incrementAndGet(); + } + logBrowserAudioStatsIfNeeded("browserAudioEnqueue"); + } + + private void sendOneBrowserFrame() { + if (closed.get()) { + return; + } + byte[] frame = browserFrameQueue.poll(); + if (frame == null) { + return; + } + StreamObserver observer = speakerRequestObserver; + if (observer == null) { + dropped.incrementAndGet(); + return; + } + long sequence = outboundSequence.incrementAndGet(); + long timestampMs = System.currentTimeMillis(); try { - if (filePath == null) { - Path dir = Paths.get("logs", "audio-dump"); - Files.createDirectories(dir); - filePath = dir.resolve(name + "-" + System.currentTimeMillis() + ".wav"); - log.info("开始保存10秒WAV音频,name={},file={},sampleRate={},channels={},bitsPerSample={}", - name, filePath.toAbsolutePath(), SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE); - } - int remain = maxBytes - writtenBytes; - int writeBytes = Math.min(remain, pcm.length); - buffer.write(pcm, 0, writeBytes); - writtenBytes += writeBytes; - if (writtenBytes >= maxBytes) { - writeWavFile(filePath, buffer.toByteArray(), SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE); - completed = true; - log.info("WAV音频保存完成,name={},file={},pcmBytes={}", - name, filePath == null ? "" : filePath.toAbsolutePath(), writtenBytes); - } - } catch (IOException e) { - completed = true; - log.warn("保存WAV音频失败,name={},file={}", name, filePath, e); + observer.onNext(buildSpeakerAudioRequest(frame, timestampMs)); + sent.incrementAndGet(); + logGrpcOutboundFormatIfNeeded(sequence, timestampMs, frame); + logPcmStatsIfNeeded("grpc-outbound-browser", sequence, timestampMs, frame); + logBrowserAudioStatsIfNeeded("browserAudioGrpcSend"); + } catch (Throwable t) { + fail("speaker send", t); } } - private void writeWavFile(Path path, byte[] pcm, int sampleRate, int channels, int bitsPerSample) throws IOException { - try (OutputStream out = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE)) { - writeAscii(out, "RIFF"); - writeIntLe(out, 36 + pcm.length); - writeAscii(out, "WAVE"); - writeAscii(out, "fmt "); - writeIntLe(out, 16); - writeShortLe(out, 1); - writeShortLe(out, channels); - writeIntLe(out, sampleRate); - writeIntLe(out, sampleRate * channels * bitsPerSample / 8); - writeShortLe(out, channels * bitsPerSample / 8); - writeShortLe(out, bitsPerSample); - writeAscii(out, "data"); - writeIntLe(out, pcm.length); - out.write(pcm); + private SpeakerCommand.StreamSpeakerAudioCommand.Request buildSpeakerAudioRequest(byte[] frame, long timestampMs) { + Common.AudioData audio = Common.AudioData.newBuilder() + .setData(ByteString.copyFrom(frame)) + .setSampleRate(SAMPLE_RATE) + .setChannels(CHANNELS) + .setFormat(Common.AudioData.AudioFormat.PCM) + .setCodec(CODEC) + .setPts(timestampMs) + .setNbSamples(FRAME_SAMPLES) + .build(); + return SpeakerCommand.StreamSpeakerAudioCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(speakerDeviceId)) + .setAudio(audio) + .build(); + } + + private void handleMicFeedback(MicrophoneCommand.StreamMicAudioCommand.Feedback feedback) { + if (closed.get()) { + return; + } + if (feedback == null) { + listener.onHeartbeat(sessionId, System.currentTimeMillis()); + requestNextMicFrame(FRAME_MS); + return; + } + if (feedback.hasHeader() && !feedback.getHeader().getSuccess()) { + fail("mic feedback", new IllegalStateException("microphone stream feedback failed: " + feedback.getHeader().getErrorMessage())); + return; + } + listener.onHeartbeat(sessionId, System.currentTimeMillis()); + if (!feedback.hasAudio()) { + requestNextMicFrame(FRAME_MS); + return; + } + + Common.AudioData audio = feedback.getAudio(); + byte[] pcm = audio.getData().toByteArray(); + if (!validateInboundAudio(audio, pcm)) { + requestNextMicFrame(FRAME_MS); + return; + } + long audioDurationMs = calculateAudioDurationMs(audio, pcm); + long sequence = inboundSequence.incrementAndGet(); + long timestampMs = audio.getPts() > 0 ? audio.getPts() : System.currentTimeMillis(); + logGrpcInboundFormatIfNeeded(sequence, timestampMs, audio, pcm); + logPcmStatsIfNeeded("grpc-inbound-robot", sequence, timestampMs, pcm); + byte[] normalizedPcm = normalizeInboundAudio(audio, pcm, sequence, timestampMs); + logPcmStatsIfNeeded("webrtc-outbound-robot-normalized", sequence, timestampMs, normalizedPcm); + try { + listener.onRobotAudio(sessionId, sequence, timestampMs, normalizedPcm); + } catch (Throwable t) { + log.error("投递机器人音频到业务层失败,sessionId={},sequence={}", sessionId, sequence, t); + fail("business callback", t); + return; + } + requestNextMicFrame(audioDurationMs); + } + + private boolean validateInboundAudio(Common.AudioData audio, byte[] pcm) { + if (pcm == null || pcm.length == 0) { + return false; + } + if ((pcm.length & 1) != 0) { + log.warn("机器人上行 PCM 字节数不是偶数,sessionId={},bytes={}", sessionId, pcm.length); + return false; + } + if (audio.getFormat() != Common.AudioData.AudioFormat.PCM) { + log.warn("机器人上行音频格式不是 PCM,sessionId={},format={}", sessionId, audio.getFormat()); + return false; + } + String codec = audio.getCodec(); + if (codec != null && codec.length() > 0 && !CODEC.equalsIgnoreCase(codec)) { + log.warn("机器人上行编码不匹配,sessionId={},codec={},expected={}", sessionId, codec, CODEC); + } + return true; + } + + private long calculateAudioDurationMs(Common.AudioData audio, byte[] pcm) { + int sampleRate = audio.getSampleRate() <= 0 ? SAMPLE_RATE : audio.getSampleRate(); + int channels = audio.getChannels() <= 0 ? CHANNELS : audio.getChannels(); + int samples = audio.getNbSamples(); + if (samples <= 0 && pcm != null && pcm.length > 0) { + samples = pcm.length / 2 / Math.max(1, channels); + } + if (sampleRate <= 0 || samples <= 0) { + return FRAME_MS; + } + return Math.max(1L, Math.round(samples * 1000.0D / sampleRate)); + } + + private void requestNextMicFrame(long delayMs) { + if (closed.get()) { + return; + } + final long safeDelayMs = Math.max(1L, delayMs); + sendExecutor.schedule(new Runnable() { + @Override + public void run() { + if (closed.get()) { + return; + } + ClientCallStreamObserver observer = micRequestObserver; + if (observer == null) { + return; + } + try { + observer.request(1); + } catch (Throwable t) { + fail("mic flow-control request", t); + } + } + }, safeDelayMs, TimeUnit.MILLISECONDS); + } + + private byte[] normalizeInboundAudio(Common.AudioData audio, byte[] pcm, long sequence, long timestampMs) { + int sourceSampleRate = audio.getSampleRate() <= 0 ? SAMPLE_RATE : audio.getSampleRate(); + int sourceChannels = audio.getChannels() <= 0 ? CHANNELS : audio.getChannels(); + if (sourceSampleRate == SAMPLE_RATE && sourceChannels == CHANNELS) { + return pcm; + } + + short[] monoSamples = decodeToMonoSamples(pcm, sourceChannels); + short[] normalizedSamples = sourceSampleRate == SAMPLE_RATE + ? monoSamples + : resampleLinear(monoSamples, sourceSampleRate, SAMPLE_RATE); + byte[] normalizedPcm = encodeMonoSamples(normalizedSamples); + if (sequence == 1 || sequence % 500 == 0) { + log.info("机器人上行音频已标准化,sessionId={},sourceSampleRate={},sourceChannels={},targetSampleRate={},targetChannels={},sourceBytes={},targetBytes={},sequence={},timestampMs={}", + sessionId, sourceSampleRate, sourceChannels, SAMPLE_RATE, CHANNELS, pcm.length, normalizedPcm.length, sequence, timestampMs); + } + return normalizedPcm; + } + + private short[] decodeToMonoSamples(byte[] pcm, int sourceChannels) { + int channels = Math.max(1, sourceChannels); + int frameCount = pcm.length / 2 / channels; + short[] mono = new short[frameCount]; + for (int frame = 0; frame < frameCount; frame++) { + int sum = 0; + for (int channel = 0; channel < channels; channel++) { + int sampleIndex = (frame * channels + channel) * 2; + int lo = pcm[sampleIndex] & 0xff; + int hi = pcm[sampleIndex + 1]; + sum += (short) ((hi << 8) | lo); + } + mono[frame] = (short) (sum / channels); + } + return mono; + } + + private short[] resampleLinear(short[] input, int sourceSampleRate, int targetSampleRate) { + if (input.length == 0 || sourceSampleRate <= 0 || targetSampleRate <= 0) { + return input; + } + int outputLength = Math.max(1, (int) Math.round(input.length * (targetSampleRate / (double) sourceSampleRate))); + short[] output = new short[outputLength]; + double sourceStep = sourceSampleRate / (double) targetSampleRate; + for (int i = 0; i < outputLength; i++) { + double sourceIndex = i * sourceStep; + int left = (int) sourceIndex; + int right = Math.min(left + 1, input.length - 1); + double fraction = sourceIndex - left; + double value = input[left] + (input[right] - input[left]) * fraction; + output[i] = clampToShort((int) Math.round(value)); + } + return output; + } + + private byte[] encodeMonoSamples(short[] samples) { + byte[] pcm = new byte[samples.length * 2]; + for (int i = 0; i < samples.length; i++) { + pcm[i * 2] = (byte) (samples[i] & 0xff); + pcm[i * 2 + 1] = (byte) ((samples[i] >> 8) & 0xff); + } + return pcm; + } + + private short clampToShort(int value) { + if (value > Short.MAX_VALUE) { + return Short.MAX_VALUE; + } + if (value < Short.MIN_VALUE) { + return Short.MIN_VALUE; + } + return (short) value; + } + + private void probeHeartbeat() { + if (closed.get() || !heartbeatInFlight.compareAndSet(false, true)) { + return; + } + MicrophoneCommand.GetMicStateCommand.Request request = MicrophoneCommand.GetMicStateCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(micDeviceId)) + .build(); + micStub.withDeadlineAfter(HEARTBEAT_DEADLINE_MS, TimeUnit.MILLISECONDS).getStatus(request, + new StreamObserver() { + @Override + public void onNext(MicrophoneCommand.GetMicStateCommand.Feedback feedback) { + if (feedback != null && feedback.hasHeader() && !feedback.getHeader().getSuccess()) { + log.warn("实时对讲麦克风心跳返回失败,sessionId={},message={}", sessionId, feedback.getHeader().getErrorMessage()); + return; + } + listener.onHeartbeat(sessionId, System.currentTimeMillis()); + } + + @Override + public void onError(Throwable t) { + log.debug("实时对讲麦克风心跳探测失败,sessionId={}", sessionId, t); + heartbeatInFlight.set(false); + } + + @Override + public void onCompleted() { + heartbeatInFlight.set(false); + } + }); + } + + private void fail(String source, Throwable throwable) { + if (!closed.compareAndSet(false, true)) { + return; + } + Throwable actual = throwable == null ? new RuntimeException("audio stream failed") : throwable; + log.error("实时对讲 gRPC 流异常,source={},sessionId={},terminalId={},speakerDeviceId={},micDeviceId={}", + source, sessionId, terminalId, speakerDeviceId, micDeviceId, actual); + sendExecutor.execute(new Runnable() { + @Override + public void run() { + errorSpeakerStream(actual.getMessage()); + cancelMicStream(actual.getMessage()); + stopTerminalAudio(); + closeLocalResources(); + streams.remove(sessionId, RobotAudioStream.this); + if (terminalNotified.compareAndSet(false, true)) { + listener.onError(sessionId, actual); + } + } + }); + } + + private void completeFromRemote() { + if (!closed.compareAndSet(false, true)) { + return; + } + log.info("实时对讲 gRPC 流远端结束,sessionId={},terminalId={},speakerDeviceId={},micDeviceId={}", sessionId, terminalId, speakerDeviceId, micDeviceId); + sendExecutor.execute(new Runnable() { + @Override + public void run() { + completeSpeakerStream(); + cancelMicStream("remote completed"); + closeLocalResources(); + streams.remove(sessionId, RobotAudioStream.this); + if (terminalNotified.compareAndSet(false, true)) { + listener.onCompleted(sessionId); + } + } + }); + } + + private void completeSpeakerStream() { + StreamObserver observer = speakerRequestObserver; + speakerRequestObserver = null; + if (observer != null) { + try { + observer.onCompleted(); + } catch (Throwable t) { + log.debug("完成扬声器音频流异常,sessionId={}", sessionId, t); + } } } - private void writeAscii(OutputStream out, String value) throws IOException { - out.write(value.getBytes(java.nio.charset.StandardCharsets.US_ASCII)); + private void errorSpeakerStream(String reason) { + StreamObserver observer = speakerRequestObserver; + speakerRequestObserver = null; + if (observer != null) { + try { + observer.onError(Status.CANCELLED.withDescription(reason == null ? "audio cancelled" : reason).asRuntimeException()); + } catch (Throwable t) { + log.debug("取消扬声器音频流异常,sessionId={}", sessionId, t); + } + } } - private void writeIntLe(OutputStream out, int value) throws IOException { - out.write(value & 0xFF); - out.write((value >> 8) & 0xFF); - out.write((value >> 16) & 0xFF); - out.write((value >> 24) & 0xFF); + private void cancelMicStream(String reason) { + ClientCallStreamObserver observer = micRequestObserver; + micRequestObserver = null; + if (observer != null) { + try { + observer.cancel(reason == null ? "audio cancelled" : reason, null); + } catch (Throwable t) { + log.debug("取消麦克风音频流异常,sessionId={}", sessionId, t); + } + } } - private void writeShortLe(OutputStream out, int value) throws IOException { - out.write(value & 0xFF); - out.write((value >> 8) & 0xFF); + /** + * 会话关闭时尽量停止终端侧播放和采集,失败不阻断本地资源释放。 + */ + private void stopTerminalAudio() { + try { + SpeakerCommand.StopSpeakerCommand.Request speakerStop = SpeakerCommand.StopSpeakerCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(speakerDeviceId)) + .build(); + speakerStub.withDeadlineAfter(HEARTBEAT_DEADLINE_MS, TimeUnit.MILLISECONDS).stopPlayback(speakerStop, + new EmptyStreamObserver("stop speaker", sessionId)); + } catch (Throwable t) { + log.debug("下发停止扬声器失败,sessionId={}", sessionId, t); + } + try { + MicrophoneCommand.StopMicRecordingCommand.Request micStop = MicrophoneCommand.StopMicRecordingCommand.Request.newBuilder() + .setHeader(EdgeCommonUtil.buildRequest(micDeviceId)) + .build(); + micStub.withDeadlineAfter(HEARTBEAT_DEADLINE_MS, TimeUnit.MILLISECONDS).stopRecord(micStop, + new EmptyStreamObserver("stop mic", sessionId)); + } catch (Throwable t) { + log.debug("下发停止麦克风失败,sessionId={}", sessionId, t); + } + } + + private void closeLocalResources() { + ScheduledFuture sf = sendFuture; + if (sf != null) { + sf.cancel(false); + } + ScheduledFuture hf = heartbeatFuture; + if (hf != null) { + hf.cancel(false); + } + browserFrameQueue.clear(); + pendingBrowserBytes = new byte[0]; + if (!sendExecutor.isShutdown()) { + sendExecutor.shutdown(); + } + } + + private void logGrpcInboundFormatIfNeeded(long sequence, long timestampMs, Common.AudioData audio, byte[] pcm) { + if (sequence == 1 || sequence % 500 == 0) { + log.info("gRPC机器人上行音频格式,sessionId={},sampleRate={},channels={},bitsPerSample={},encoding={},frameSamples={},frameMs={},bytes={},sequence={},timestampMs={}", + sessionId, + audio.getSampleRate() == 0 ? SAMPLE_RATE : audio.getSampleRate(), + audio.getChannels() == 0 ? CHANNELS : audio.getChannels(), + BITS_PER_SAMPLE, + audio.getCodec() == null || audio.getCodec().length() == 0 ? CODEC : audio.getCodec(), + audio.getNbSamples() == 0 ? pcm.length / 2 : audio.getNbSamples(), + FRAME_MS, + pcm.length, + sequence, + timestampMs); + } + } + + private void logGrpcOutboundFormatIfNeeded(long sequence, long timestampMs, byte[] frame) { + if (sequence == 1 || sequence % 500 == 0) { + log.info("gRPC浏览器下行音频格式,sessionId={},sampleRate={},channels={},bitsPerSample={},encoding={},frameSamples={},frameMs={},bytes={},sequence={},timestampMs={}", + sessionId, SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE, CODEC, FRAME_SAMPLES, FRAME_MS, frame.length, sequence, timestampMs); + } + } + + private void logBrowserAudioStatsIfNeeded(String source) { + long now = System.currentTimeMillis(); + if (now - lastStatsLogAt < 5000L) { + return; + } + lastStatsLogAt = now; + log.info("gRPC浏览器音频统计,source={},sessionId={},enqueued={},sent={},dropped={},queued={}", + source, sessionId, enqueued.get(), sent.get(), dropped.get(), browserFrameQueue.size()); + } + + private void logPcmStatsIfNeeded(String direction, long sequence, long timestampMs, byte[] pcm) { + if (sequence != 1 && sequence % 500 != 0) { + return; + } + PcmStats stats = PcmStats.from(pcm); + log.info("PCM-STATS direction={} sessionId={} sequence={} timestampMs={} bytes={} samples={} rms={} peak={} zeroCrossRate={} firstSamples={}", + direction, sessionId, sequence, timestampMs, pcm.length, stats.samples, stats.rms, stats.peak, stats.zeroCrossRate, stats.firstSamples); } } - private static class PcmDumpRecorder { + private static class EmptyStreamObserver implements StreamObserver { + private final String action; + private final String sessionId; + + private EmptyStreamObserver(String action, String sessionId) { + this.action = action; + this.sessionId = sessionId; + } + + @Override + public void onNext(T value) { + } + + @Override + public void onError(Throwable t) { + log.debug("{} failed, sessionId={}", action, sessionId, t); + } + + @Override + public void onCompleted() { + } + } + + private static class NamedThreadFactory implements ThreadFactory { private final String name; - private final int maxBytes; - private OutputStream outputStream; - private Path filePath; - private int writtenBytes; - private boolean completed; - private PcmDumpRecorder(String name, int maxBytes) { + private NamedThreadFactory(String name) { this.name = name; - this.maxBytes = maxBytes; } - private synchronized void record(byte[] pcm) { - if (completed || pcm == null || pcm.length == 0) { - return; - } - try { - if (outputStream == null) { - Path dir = Paths.get("logs", "audio-dump"); - Files.createDirectories(dir); - filePath = dir.resolve(name + "-" + System.currentTimeMillis() + ".pcm"); - outputStream = Files.newOutputStream(filePath, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); - log.info("开始保存10秒PCM音频,name={},file={},sampleRate={},channels={},bitsPerSample={}", - name, filePath.toAbsolutePath(), SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE); - } - int remain = maxBytes - writtenBytes; - int writeBytes = Math.min(remain, pcm.length); - outputStream.write(pcm, 0, writeBytes); - writtenBytes += writeBytes; - if (writtenBytes >= maxBytes) { - close(); - completed = true; - log.info("PCM音频保存完成,name={},file={},bytes={}", - name, filePath == null ? "" : filePath.toAbsolutePath(), writtenBytes); - } - } catch (IOException e) { - completed = true; - closeQuietly(); - log.warn("保存PCM音频失败,name={},file={}", name, filePath, e); - } - } - - private void close() throws IOException { - if (outputStream != null) { - outputStream.flush(); - outputStream.close(); - outputStream = null; - } - } - - private void closeQuietly() { - try { - close(); - } catch (IOException ignored) { - } + @Override + public Thread newThread(Runnable r) { + Thread thread = new Thread(r, name); + thread.setDaemon(true); + return thread; } } private static class PcmStats { private final int samples; - private final int rms; + private final long rms; private final int peak; private final String zeroCrossRate; private final String firstSamples; - private PcmStats(int samples, int rms, int peak, String zeroCrossRate, String firstSamples) { + private PcmStats(int samples, long rms, int peak, String zeroCrossRate, String firstSamples) { this.samples = samples; this.rms = rms; this.peak = peak; @@ -701,32 +847,30 @@ public class RobotAudioGrpcAdapter { this.firstSamples = firstSamples; } - private static PcmStats fromPcm16Le(byte[] pcm) { - if (pcm == null || pcm.length < 2) { + private static PcmStats from(byte[] pcm) { + int samples = pcm == null ? 0 : pcm.length / 2; + if (samples == 0) { return new PcmStats(0, 0, 0, "0.0000", "[]"); } - - int samples = pcm.length / 2; long squareSum = 0L; int peak = 0; int zeroCross = 0; int previous = 0; StringBuilder first = new StringBuilder("["); - int firstCount = Math.min(8, samples); - for (int i = 0; i < samples; i++) { - int low = pcm[i * 2] & 0xFF; - int high = pcm[i * 2 + 1]; - short sample = (short) ((high << 8) | low); - int value = sample; + int lo = pcm[i * 2] & 0xff; + int hi = pcm[i * 2 + 1]; + int value = (short) ((hi << 8) | lo); int abs = Math.abs(value); - peak = Math.max(peak, abs); + if (abs > peak) { + peak = abs; + } squareSum += (long) value * value; if (i > 0 && ((previous < 0 && value >= 0) || (previous >= 0 && value < 0))) { zeroCross++; } previous = value; - if (i < firstCount) { + if (i < 8) { if (i > 0) { first.append(','); } @@ -734,10 +878,10 @@ public class RobotAudioGrpcAdapter { } } first.append(']'); - - int rms = (int) Math.round(Math.sqrt(squareSum / (double) samples)); - String zeroCrossRate = String.format(java.util.Locale.ROOT, "%.4f", zeroCross / (double) Math.max(1, samples - 1)); - return new PcmStats(samples, rms, peak, zeroCrossRate, first.toString()); + long rms = (long) Math.sqrt(squareSum / (double) samples); + String zcr = String.format("%.4f", zeroCross / (double) samples); + return new PcmStats(samples, rms, peak, zcr, first.toString()); } } + } diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/manage/GrpcServiceManager.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/manage/GrpcServiceManager.java index 0cf5977..2ac235a 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/manage/GrpcServiceManager.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/manage/GrpcServiceManager.java @@ -47,8 +47,10 @@ public class GrpcServiceManager { clientFactories.put(SystemServiceGrpc.SystemServiceBlockingStub.class, new GrpcClientFactory<>(SystemServiceGrpc::newBlockingStub)); // 注册扬声器服务的 Stub clientFactories.put(SpeakerServiceGrpc.SpeakerServiceBlockingStub.class, new GrpcClientFactory<>(SpeakerServiceGrpc::newBlockingStub)); + clientFactories.put(SpeakerServiceGrpc.SpeakerServiceStub.class, new GrpcClientFactory<>(SpeakerServiceGrpc::newStub)); // 注册麦克风服务的 Stub clientFactories.put(MicPhoneServiceGrpc.MicPhoneServiceBlockingStub.class, new GrpcClientFactory<>(MicPhoneServiceGrpc::newBlockingStub)); + clientFactories.put(MicPhoneServiceGrpc.MicPhoneServiceStub.class, new GrpcClientFactory<>(MicPhoneServiceGrpc::newStub)); // 注册机器人头部服务的 Stub clientFactories.put(BioHeadServiceGrpc.BioHeadServiceBlockingStub.class, new GrpcClientFactory<>(BioHeadServiceGrpc::newBlockingStub)); // 注册机器人灵巧手服务的 Stub @@ -60,7 +62,6 @@ public class GrpcServiceManager { // 注册agv服务的stub clientFactories.put(AgvServiceGrpc.AgvServiceBlockingStub.class, new GrpcClientFactory<>(AgvServiceGrpc::newBlockingStub)); // 注册机器人实时语音双向流服务的异步Stub - clientFactories.put(RobotAudioServiceGrpc.RobotAudioServiceStub.class, new GrpcClientFactory<>(RobotAudioServiceGrpc::newStub)); } diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/AudioService.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/AudioService.java index cd0cf81..ed7347b 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/AudioService.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/service/AudioService.java @@ -21,6 +21,12 @@ import java.nio.ByteBuffer; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.util.function.Consumer; /** @@ -40,6 +46,12 @@ public class AudioService implements RobotAudioStreamListener { /** 机器人心跳超时时间:机器人每 1 秒上报一次,超过 5 秒判定离线。 */ private static final long ROBOT_HEARTBEAT_TIMEOUT_MS = 5000L; + private static final int BROWSER_AUDIO_FRAME_BYTES = 960; + private static final int BROWSER_AUDIO_FRAME_MS = 10; + private static final int TARGET_BROWSER_AUDIO_QUEUE_FRAMES = 4; + private static final int MAX_BROWSER_AUDIO_CATCH_UP_FRAMES = 4; + private static final int WARN_BROWSER_AUDIO_QUEUE_FRAMES = 100; + private static final long BROWSER_AUDIO_PUSH_INTERVAL_MS = 5L; private final RobotAudioGrpcAdapter robotAudioGrpcAdapter; @@ -166,13 +178,25 @@ public class AudioService implements RobotAudioStreamListener { private void handleJoin(WebSocketSession webSocketSession, JsonNode jsonNode) { String terminalId = getText(jsonNode, "terminalId"); String deviceId = getText(jsonNode, "deviceId"); + String speakerDeviceId = getText(jsonNode, "speakerDeviceId"); + String micDeviceId = getText(jsonNode, "micDeviceId"); String operatorId = getText(jsonNode, "operatorId"); String sessionId = getText(jsonNode, "sessionId"); - if (terminalId == null || deviceId == null) { - sendError(webSocketSession, sessionId, "terminalId和deviceId不能为空"); + if (speakerDeviceId == null) { + speakerDeviceId = deviceId; + } + if (micDeviceId == null) { + micDeviceId = deviceId; + } + + if (terminalId == null || speakerDeviceId == null || micDeviceId == null) { + sendError(webSocketSession, sessionId, "terminalId、speakerDeviceId、micDeviceId不能为空"); return; } + if (deviceId == null) { + deviceId = speakerDeviceId; + } if (sessionId == null) { sessionId = IdUtils.fastSimpleUUID(); } @@ -191,24 +215,28 @@ public class AudioService implements RobotAudioStreamListener { session.sessionId = sessionId; session.terminalId = terminalId; session.deviceId = deviceId; + session.speakerDeviceId = speakerDeviceId; + session.micDeviceId = micDeviceId; session.operatorId = operatorId; session.webSocketSession = webSocketSession; session.state = AudioSessionState.CONNECTING; session.createdAt = System.currentTimeMillis(); session.lastBrowserSignalAt = session.createdAt; session.lastRobotHeartbeatAt = session.createdAt; + startBrowserAudioPusher(session); sessionMap.put(sessionId, session); webSocketSessionMap.put(webSocketSession.getId(), sessionId); try { - session.robotStream = robotAudioGrpcAdapter.openStream(terminalId, deviceId, sessionId, operatorId, this); + session.robotStream = robotAudioGrpcAdapter.openStream(terminalId, speakerDeviceId, micDeviceId, sessionId, operatorId, this); } catch (Exception e) { sessionMap.remove(sessionId); webSocketSessionMap.remove(webSocketSession.getId()); + stopBrowserAudioPusher(session); throw e; } sendState(session, "joined"); - log.info("实时语音会话创建成功,sessionId={},terminalId={},deviceId={}", sessionId, terminalId, deviceId); + log.info("实时语音会话创建成功,sessionId={},terminalId={},speakerDeviceId={},micDeviceId={}", sessionId, terminalId, speakerDeviceId, micDeviceId); } catch (Exception e) { log.error("创建实时语音会话失败,sessionId={}", sessionId, e); sendError(webSocketSession, sessionId, "创建实时语音会话失败:" + e.getMessage()); @@ -294,6 +322,7 @@ public class AudioService implements RobotAudioStreamListener { try { session.state = AudioSessionState.CLOSED; removeWebSocketMapping(session); + stopBrowserAudioPusher(session); if (session.robotStream != null) { session.robotStream.sendStop(reason); } @@ -318,12 +347,13 @@ public class AudioService implements RobotAudioStreamListener { continue; } if (now - session.lastRobotHeartbeatAt > ROBOT_HEARTBEAT_TIMEOUT_MS) { - log.warn("机器人心跳超时,sessionId={},terminalId={},deviceId={}", - session.sessionId, session.terminalId, session.deviceId); + log.warn("机器人心跳超时,sessionId={},terminalId={},speakerDeviceId={},micDeviceId={}", + session.sessionId, session.terminalId, session.speakerDeviceId, session.micDeviceId); // 先从业务会话表摘除,避免 cancel/close 触发的异步回调再次进入同一个会话并重复关闭 native 对象。 iterator.remove(); session.state = AudioSessionState.ROBOT_OFFLINE; sendState(session, "robotOffline"); + stopBrowserAudioPusher(session); if (session.robotStream != null) { session.robotStream.cancel("robot heartbeat timeout"); } @@ -359,7 +389,7 @@ public class AudioService implements RobotAudioStreamListener { } session.lastRobotAudioAt = System.currentTimeMillis(); session.lastRobotHeartbeatAt = session.lastRobotAudioAt; - sendBinary(session.webSocketSession, pcm); + enqueueRobotAudioForBrowser(session, pcm); Consumer consumer = session.robotAudioConsumer; if (consumer != null) { try { @@ -412,12 +442,14 @@ public class AudioService implements RobotAudioStreamListener { sendState(session, "grpcCompleted"); } sessionMap.remove(sessionId); + stopBrowserAudioPusher(session); removeWebSocketMapping(session); } private void failSession(AudioSession session, String reason, boolean cancelRobotStream) { sessionMap.remove(session.sessionId, session); session.state = AudioSessionState.FAILED; + stopBrowserAudioPusher(session); ObjectNode event = baseMessage("error", session.sessionId); event.put("message", reason == null ? "未知错误" : reason); event.put("state", session.state.name()); @@ -436,6 +468,8 @@ public class AudioService implements RobotAudioStreamListener { ObjectNode event = baseMessage(type, session.sessionId); event.put("terminalId", session.terminalId); event.put("deviceId", session.deviceId); + event.put("speakerDeviceId", session.speakerDeviceId); + event.put("micDeviceId", session.micDeviceId); event.put("state", session.state.name()); event.put("createdAt", session.createdAt); event.put("lastRobotHeartbeatAt", session.lastRobotHeartbeatAt); @@ -462,6 +496,108 @@ public class AudioService implements RobotAudioStreamListener { sendText(session, toJson(event)); } + private void startBrowserAudioPusher(AudioSession session) { + if (session == null || session.robotBrowserAudioExecutor != null) { + return; + } + session.robotBrowserAudioExecutor = Executors.newSingleThreadScheduledExecutor( + new NamedThreadFactory("robot-browser-audio-" + session.sessionId)); + session.robotBrowserAudioFuture = session.robotBrowserAudioExecutor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + try { + int queued = session.robotBrowserAudioQueue.size(); + int framesToSend = queued > TARGET_BROWSER_AUDIO_QUEUE_FRAMES + ? Math.min(MAX_BROWSER_AUDIO_CATCH_UP_FRAMES, queued - TARGET_BROWSER_AUDIO_QUEUE_FRAMES + 1) + : 1; + for (int i = 0; i < framesToSend; i++) { + byte[] frame = session.robotBrowserAudioQueue.poll(); + if (frame == null) { + break; + } + sendBinary(session.webSocketSession, frame); + session.robotBrowserAudioSent++; + } + logRobotBrowserAudioStatsIfNeeded(session, "robotAudioPush"); + } catch (Exception e) { + log.error("推送机器人音频到浏览器失败,sessionId={}", session.sessionId, e); + } + } + }, 0L, BROWSER_AUDIO_PUSH_INTERVAL_MS, TimeUnit.MILLISECONDS); + } + + private void enqueueRobotAudioForBrowser(AudioSession session, byte[] pcm) { + if (session == null || pcm == null || pcm.length == 0) { + return; + } + synchronized (session.robotBrowserAudioLock) { + byte[] merged = new byte[session.robotBrowserRemainder.length + pcm.length]; + System.arraycopy(session.robotBrowserRemainder, 0, merged, 0, session.robotBrowserRemainder.length); + System.arraycopy(pcm, 0, merged, session.robotBrowserRemainder.length, pcm.length); + + int offset = 0; + while (merged.length - offset >= BROWSER_AUDIO_FRAME_BYTES) { + byte[] frame = new byte[BROWSER_AUDIO_FRAME_BYTES]; + System.arraycopy(merged, offset, frame, 0, BROWSER_AUDIO_FRAME_BYTES); + offerRobotAudioFrame(session, frame); + offset += BROWSER_AUDIO_FRAME_BYTES; + } + + int remain = merged.length - offset; + session.robotBrowserRemainder = new byte[remain]; + if (remain > 0) { + System.arraycopy(merged, offset, session.robotBrowserRemainder, 0, remain); + } + } + logRobotBrowserAudioStatsIfNeeded(session, "robotAudioEnqueue"); + } + + private void offerRobotAudioFrame(AudioSession session, byte[] frame) { + session.robotBrowserAudioQueue.offer(frame); + session.robotBrowserAudioEnqueued++; + } + + private void stopBrowserAudioPusher(AudioSession session) { + if (session == null) { + return; + } + ScheduledFuture future = session.robotBrowserAudioFuture; + if (future != null) { + future.cancel(false); + session.robotBrowserAudioFuture = null; + } + ScheduledExecutorService executor = session.robotBrowserAudioExecutor; + if (executor != null) { + executor.shutdownNow(); + session.robotBrowserAudioExecutor = null; + } + synchronized (session.robotBrowserAudioLock) { + session.robotBrowserAudioQueue.clear(); + session.robotBrowserRemainder = new byte[0]; + } + } + + private void logRobotBrowserAudioStatsIfNeeded(AudioSession session, String source) { + long now = System.currentTimeMillis(); + if (now - session.lastRobotBrowserAudioLogAt < 5000L) { + return; + } + session.lastRobotBrowserAudioLogAt = now; + int queued = session.robotBrowserAudioQueue.size(); + log.info("机器人到浏览器音频统计,source={},sessionId={},enqueued={},sent={},dropped={},queued={},remainderBytes={}", + source, + session.sessionId, + session.robotBrowserAudioEnqueued, + session.robotBrowserAudioSent, + session.robotBrowserAudioDropped, + queued, + session.robotBrowserRemainder.length); + if (queued > WARN_BROWSER_AUDIO_QUEUE_FRAMES) { + log.warn("机器人到浏览器音频队列积压较高,sessionId={},queued={},estimatedDelayMs={},请检查前端播放消费或网络发送是否跟不上", + session.sessionId, queued, queued * BROWSER_AUDIO_FRAME_MS); + } + } + private void sendBinary(WebSocketSession session, byte[] pcm) { if (session == null || !session.isOpen() || pcm == null || pcm.length == 0) { return; @@ -571,10 +707,21 @@ public class AudioService implements RobotAudioStreamListener { private String sessionId; private String terminalId; private String deviceId; + private String speakerDeviceId; + private String micDeviceId; private String operatorId; private volatile WebSocketSession webSocketSession; private volatile RobotAudioStream robotStream; private volatile Consumer robotAudioConsumer; + private volatile ScheduledExecutorService robotBrowserAudioExecutor; + private volatile ScheduledFuture robotBrowserAudioFuture; + private final LinkedBlockingQueue robotBrowserAudioQueue = new LinkedBlockingQueue<>(); + private final Object robotBrowserAudioLock = new Object(); + private byte[] robotBrowserRemainder = new byte[0]; + private volatile long robotBrowserAudioEnqueued; + private volatile long robotBrowserAudioSent; + private volatile long robotBrowserAudioDropped; + private volatile long lastRobotBrowserAudioLogAt; private volatile AudioSessionState state; private volatile long createdAt; private volatile long lastBrowserSignalAt; @@ -588,4 +735,19 @@ public class AudioService implements RobotAudioStreamListener { private String sdpMid; private int sdpMLineIndex; } + + private static class NamedThreadFactory implements ThreadFactory { + private final String name; + + private NamedThreadFactory(String name) { + this.name = name; + } + + @Override + public Thread newThread(Runnable runnable) { + Thread thread = new Thread(runnable, name); + thread.setDaemon(true); + return thread; + } + } } diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/webrtc/WebRtcAudioBridge.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/webrtc/WebRtcAudioBridge.java index 535664a..7eb2dd7 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/webrtc/WebRtcAudioBridge.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/webrtc/WebRtcAudioBridge.java @@ -1,1114 +1,73 @@ package com.cmvr.edge.client.webrtc; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import dev.onvoid.webrtc.CreateSessionDescriptionObserver; -import dev.onvoid.webrtc.PeerConnectionFactory; -import dev.onvoid.webrtc.PeerConnectionObserver; -import dev.onvoid.webrtc.RTCAnswerOptions; -import dev.onvoid.webrtc.RTCConfiguration; -import dev.onvoid.webrtc.RTCDataChannel; -import dev.onvoid.webrtc.RTCIceCandidate; -import dev.onvoid.webrtc.RTCIceConnectionState; -import dev.onvoid.webrtc.RTCIceGatheringState; -import dev.onvoid.webrtc.RTCPeerConnection; -import dev.onvoid.webrtc.RTCPeerConnectionIceErrorEvent; -import dev.onvoid.webrtc.RTCPeerConnectionState; -import dev.onvoid.webrtc.RTCRtpReceiver; -import dev.onvoid.webrtc.RTCRtpSender; -import dev.onvoid.webrtc.RTCRtpTransceiver; -import dev.onvoid.webrtc.RTCSessionDescription; -import dev.onvoid.webrtc.RTCSignalingState; -import dev.onvoid.webrtc.RTCSdpType; -import dev.onvoid.webrtc.SetSessionDescriptionObserver; -import dev.onvoid.webrtc.media.MediaStream; -import dev.onvoid.webrtc.media.MediaStreamTrack; -import dev.onvoid.webrtc.media.SyncClock; -import dev.onvoid.webrtc.media.audio.AudioDeviceModuleBase; -import dev.onvoid.webrtc.media.audio.AudioTrack; -import dev.onvoid.webrtc.media.audio.AudioTrackSink; -import dev.onvoid.webrtc.media.audio.CustomAudioSource; -import dev.onvoid.webrtc.media.audio.HeadlessAudioDeviceModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import java.util.Map; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executors; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; /** - * 浏览器 WebRTC 与后端 PCM 的桥接层。 + * 旧 WebRTC 音频桥接兼容类。 * - * 下行:浏览器 WebRTC 48k PCM -> Java 转 short16/单声道 -> gRPC。 - * 上行:机器人 48k/short16 PCM -> WebRTC。 + *

实时对讲链路已经切换为浏览器 WebSocket PCM 音频 + 机器人 gRPC 音频流。 + * 这里保留原有 public 方法签名,避免旧信令代码编译失败;不再创建 WebRTC native 对象, + * 不再处理 WebRTC 音频,也不会保存调试录音文件。

*/ public class WebRtcAudioBridge { private static final Logger log = LoggerFactory.getLogger(WebRtcAudioBridge.class); + private static final String DISABLED_MESSAGE = "WebRTC audio bridge disabled; use websocket audio endpoint"; - private static final int WEBRTC_SAMPLE_RATE = 48000; - private static final int ROBOT_SAMPLE_RATE = 48000; - private static final int CHANNELS = 1; - private static final int BITS_PER_SAMPLE = 16; - private static final int ROBOT_FRAME_MS = 10; - private static final int ROBOT_FRAME_SAMPLES = ROBOT_SAMPLE_RATE * ROBOT_FRAME_MS / 1000; - private static final int ROBOT_FRAME_BYTES = ROBOT_FRAME_SAMPLES * CHANNELS * (BITS_PER_SAMPLE / 8); - private static final int WEBRTC_FRAME_SAMPLES = WEBRTC_SAMPLE_RATE * ROBOT_FRAME_MS / 1000; - private static final int TARGET_QUEUED_ROBOT_FRAMES = 3; - private static final int MAX_QUEUED_ROBOT_FRAMES = 10; - private static final long AUDIO_STATS_LOG_INTERVAL_MS = 5000L; - private static final int DEBUG_DUMP_SECONDS = 10; - private static final int DEBUG_DUMP_BYTES = WEBRTC_SAMPLE_RATE * CHANNELS * (BITS_PER_SAMPLE / 8) * DEBUG_DUMP_SECONDS; - - private final ObjectMapper objectMapper = new ObjectMapper(); - private final WavDumpRecorder webRtcOutputDumpRecorder = - new WavDumpRecorder("webrtc-to-browser", DEBUG_DUMP_BYTES); - private final Map sessionMap = new ConcurrentHashMap<>(); - private final ScheduledExecutorService webrtcExecutor = Executors.newSingleThreadScheduledExecutor(runnable -> { - Thread thread = new Thread(runnable, "webrtc-audio-native"); - thread.setDaemon(true); - return thread; - }); + private final Map> signalingSenders = new ConcurrentHashMap<>(); public void createSession(String sessionId, Consumer browserAudioConsumer, Consumer signalingSender) { - if (sessionMap.containsKey(sessionId)) { + if (sessionId == null || sessionId.trim().isEmpty()) { return; } - - executeNativeAndWait("create WebRTC session", () -> { - if (sessionMap.containsKey(sessionId)) { - return; - } - - WebRtcSession session = new WebRtcSession(); - session.sessionId = sessionId; - session.browserAudioConsumer = browserAudioConsumer; - session.signalingSender = signalingSender; - session.audioDeviceModule = new HeadlessAudioDeviceModule(); - session.peerConnectionFactory = new PeerConnectionFactory(session.audioDeviceModule); - session.robotAudioSyncClock = new SyncClock(); - session.robotAudioTrackSource = new CustomAudioSource(session.robotAudioSyncClock); - - AudioTrack robotAudioTrack = session.peerConnectionFactory.createAudioTrack( - "robot-audio-" + sessionId, session.robotAudioTrackSource); - session.robotAudioTrack = robotAudioTrack; - session.peerConnection = session.peerConnectionFactory.createPeerConnection( - new RTCConfiguration(), new BridgePeerObserver(session)); - session.robotAudioSender = session.peerConnection.addTrack( - robotAudioTrack, Collections.singletonList("robot-audio-stream-" + sessionId)); - - sessionMap.put(sessionId, session); - log.info("WebRTC音频桥接会话已创建,sessionId={}", sessionId); - }); + if (signalingSender != null) { + signalingSenders.put(sessionId, signalingSender); + } + log.warn("{}, sessionId={}", DISABLED_MESSAGE, sessionId); } public void handleOffer(String sessionId, String sdp) { - WebRtcSession session = requireSession(sessionId); - RTCSessionDescription offer = new RTCSessionDescription(RTCSdpType.OFFER, fixSdpFormat(sdp)); - executeNativeAsync("handle WebRTC offer", () -> handleOfferOnNativeThread(session, offer)); + sendDisabledError(sessionId); } public void addIceCandidate(String sessionId, String sdpMid, int sdpMLineIndex, String candidate) { - WebRtcSession session = requireSession(sessionId); - executeNativeAsync("add WebRTC ICE candidate", () -> { - if (session.closed.get() || session.peerConnection == null) { - return; - } - try { - session.peerConnection.addIceCandidate(new RTCIceCandidate(sdpMid, sdpMLineIndex, candidate)); - } catch (Exception e) { - log.error("添加浏览器ICE失败,sessionId={}", sessionId, e); - sendError(session, "添加浏览器ICE失败:" + e.getMessage()); - } - }); + sendDisabledError(sessionId); } public void pushRobotAudio(String sessionId, long timestampMs, byte[] pcm48kMono) { - WebRtcSession session = sessionMap.get(sessionId); - if (session == null || session.closed.get() || pcm48kMono == null || pcm48kMono.length == 0) { - return; - } - enqueueRobotAudio(session, timestampMs, pcm48kMono); + log.debug("{}, ignored robot audio, sessionId={}, bytes={}", + DISABLED_MESSAGE, sessionId, pcm48kMono == null ? 0 : pcm48kMono.length); } public void closeSession(String sessionId) { - WebRtcSession session = sessionMap.remove(sessionId); - if (session == null || !session.closed.compareAndSet(false, true)) { - return; - } - executeNativeAndWait("close WebRTC session", () -> closeSessionOnNativeThread(session)); - } - - private void handleOfferOnNativeThread(WebRtcSession session, RTCSessionDescription offer) { - if (session.closed.get() || session.peerConnection == null) { - return; - } - - try { - session.peerConnection.setRemoteDescription(offer, new SetSessionDescriptionObserver() { - @Override - public void onSuccess() { - executeNativeAsync("create WebRTC answer", () -> createAnswerOnNativeThread(session)); - } - - @Override - public void onFailure(String error) { - log.error("设置WebRTC remote description失败,sessionId={},error={}", session.sessionId, error); - sendError(session, "设置WebRTC remote description失败:" + error); - } - }); - } catch (Exception e) { - log.error("处理WebRTC offer失败,sessionId={}", session.sessionId, e); - sendError(session, "处理WebRTC offer失败:" + e.getMessage()); - } - } - - private void createAnswerOnNativeThread(WebRtcSession session) { - if (session.closed.get() || session.peerConnection == null) { - return; - } - - try { - session.peerConnection.createAnswer(new RTCAnswerOptions(), new CreateSessionDescriptionObserver() { - @Override - public void onSuccess(RTCSessionDescription answer) { - executeNativeAsync("set WebRTC local description", () -> setLocalAnswerOnNativeThread(session, answer)); - } - - @Override - public void onFailure(String error) { - log.error("生成WebRTC answer失败,sessionId={},error={}", session.sessionId, error); - sendError(session, "生成WebRTC answer失败:" + error); - } - }); - } catch (Exception e) { - log.error("生成WebRTC answer异常,sessionId={}", session.sessionId, e); - sendError(session, "生成WebRTC answer异常:" + e.getMessage()); - } - } - - private void setLocalAnswerOnNativeThread(WebRtcSession session, RTCSessionDescription answer) { - if (session.closed.get() || session.peerConnection == null) { - return; - } - - try { - session.peerConnection.setLocalDescription(answer, new SetSessionDescriptionObserver() { - @Override - public void onSuccess() { - clearQueuedRobotAudio(session, "mediaReady"); - session.mediaReady.set(true); - startRobotAudioPusherOnNativeThread(session); - Consumer signalingSender = session.signalingSender; - if (session.closed.get() || signalingSender == null) { - return; - } - ObjectNode node = baseMessage("answer", session.sessionId); - node.put("sdp", answer.sdp); - signalingSender.accept(toJson(node)); - log.info("WebRTC媒体发送侧已就绪,sessionId={}", session.sessionId); - } - - @Override - public void onFailure(String error) { - log.error("设置WebRTC local description失败,sessionId={},error={}", session.sessionId, error); - sendError(session, "设置WebRTC local description失败:" + error); - } - }); - } catch (Exception e) { - log.error("设置WebRTC local description异常,sessionId={}", session.sessionId, e); - sendError(session, "设置WebRTC local description异常:" + e.getMessage()); - } - } - - private void enqueueRobotAudio(WebRtcSession session, long timestampMs, byte[] pcm48kMono) { - synchronized (session.robotAudioBufferLock) { - int offset = 0; - long frameTimestampMs = timestampMs <= 0 ? System.currentTimeMillis() : timestampMs; - - if (session.robotAudioRemainderLength > 0) { - int need = ROBOT_FRAME_BYTES - session.robotAudioRemainderLength; - int copy = Math.min(need, pcm48kMono.length); - System.arraycopy(pcm48kMono, 0, session.robotAudioRemainder, session.robotAudioRemainderLength, copy); - session.robotAudioRemainderLength += copy; - offset += copy; - if (session.robotAudioRemainderLength == ROBOT_FRAME_BYTES) { - offerRobotAudioFrame(session, session.robotAudioRemainder, session.robotAudioRemainderTimestampMs); - session.robotAudioRemainder = new byte[ROBOT_FRAME_BYTES]; - session.robotAudioRemainderLength = 0; - } - } - - while (offset + ROBOT_FRAME_BYTES <= pcm48kMono.length) { - byte[] frame = new byte[ROBOT_FRAME_BYTES]; - System.arraycopy(pcm48kMono, offset, frame, 0, ROBOT_FRAME_BYTES); - offerRobotAudioFrame(session, frame, frameTimestampMs); - offset += ROBOT_FRAME_BYTES; - frameTimestampMs += ROBOT_FRAME_MS; - } - - int remain = pcm48kMono.length - offset; - if (remain > 0) { - if (session.robotAudioRemainderLength == 0) { - session.robotAudioRemainderTimestampMs = frameTimestampMs; - } - System.arraycopy(pcm48kMono, offset, session.robotAudioRemainder, session.robotAudioRemainderLength, remain); - session.robotAudioRemainderLength += remain; - } - } - } - - private void offerRobotAudioFrame(WebRtcSession session, byte[] frame, long timestampMs) { - if (session.queuedRobotAudioFrames.get() >= MAX_QUEUED_ROBOT_FRAMES) { - if (session.robotAudioQueue.poll() != null) { - session.queuedRobotAudioFrames.decrementAndGet(); - session.robotAudioFramesDropped++; - } - } - session.robotAudioQueue.offer(new RobotAudioFrameData(frame.clone(), timestampMs)); - int queued = session.queuedRobotAudioFrames.incrementAndGet(); - session.robotAudioFramesEnqueued++; - logAudioStatsIfNeeded(session, "robotAudioEnqueue", queued); - } - - private void clearQueuedRobotAudio(WebRtcSession session, String reason) { - synchronized (session.robotAudioBufferLock) { - int queued = session.queuedRobotAudioFrames.get(); - int remainder = session.robotAudioRemainderLength; - session.robotAudioQueue.clear(); - session.queuedRobotAudioFrames.set(0); - session.robotAudioRemainder = new byte[ROBOT_FRAME_BYTES]; - session.robotAudioRemainderLength = 0; - session.robotAudioRemainderTimestampMs = 0L; - if (queued > 0 || remainder > 0) { - log.info("清理WebRTC就绪前机器人音频缓存,sessionId={},reason={},droppedFrames={},remainderBytes={}", - session.sessionId, reason, queued, remainder); - } - } - } - - private void pushQueuedRobotAudioOnNativeThread(WebRtcSession session) { - if (session.closed.get() || !session.mediaReady.get() || session.robotAudioTrackSource == null) { - return; - } - - trimRobotAudioQueue(session); - RobotAudioFrameData frame = pollRobotAudioFrame(session); - byte[] pcm48k; - long sourceTimestampMs = 0L; - if (frame == null) { - pcm48k = new byte[WEBRTC_FRAME_SAMPLES * CHANNELS * (BITS_PER_SAMPLE / 8)]; - session.robotAudioPushSilentFrames++; - } else { - short[] robotSamples = pcmBytesToShorts(frame.pcm, WEBRTC_FRAME_SAMPLES); - pcm48k = shortsToPcmBytes(robotSamples, WEBRTC_FRAME_SAMPLES); - sourceTimestampMs = frame.timestampMs; - session.lastRobotTimestampMs = sourceTimestampMs; - } - - try { - webRtcOutputDumpRecorder.record(pcm48k); - // 当前 webrtc-java API 不能设置外部 RTP timestamp,只能按 48k 采样数和推送节奏由 native 生成。 - session.robotAudioTrackSource.pushAudio( - pcm48k, - BITS_PER_SAMPLE, - WEBRTC_SAMPLE_RATE, - CHANNELS, - WEBRTC_FRAME_SAMPLES); - session.robotAudioPushCalls++; - logWebRtcPushPcmStatsIfNeeded(session, pcm48k, sourceTimestampMs); - logAudioStatsIfNeeded(session, "robotAudioPush", session.queuedRobotAudioFrames.get()); - } catch (Exception e) { - log.error("推送机器人音频到WebRTC失败,sessionId={}", session.sessionId, e); - } - } - - private void startRobotAudioPusherOnNativeThread(WebRtcSession session) { - if (session.closed.get() || session.robotAudioPusherFuture != null) { - return; - } - session.robotAudioPusherFuture = webrtcExecutor.scheduleWithFixedDelay( - () -> pushQueuedRobotAudioOnNativeThread(session), - ROBOT_FRAME_MS, - ROBOT_FRAME_MS, - TimeUnit.MILLISECONDS); - log.info("WebRTC机器人音频推送任务已启动,sessionId={},sampleRate={},frameMs={},frameSamples={}", - session.sessionId, WEBRTC_SAMPLE_RATE, ROBOT_FRAME_MS, WEBRTC_FRAME_SAMPLES); - } - - private RobotAudioFrameData pollRobotAudioFrame(WebRtcSession session) { - synchronized (session.robotAudioBufferLock) { - RobotAudioFrameData frame = session.robotAudioQueue.poll(); - if (frame != null) { - session.queuedRobotAudioFrames.decrementAndGet(); - } - return frame; - } - } - - private void trimRobotAudioQueue(WebRtcSession session) { - synchronized (session.robotAudioBufferLock) { - while (session.queuedRobotAudioFrames.get() > TARGET_QUEUED_ROBOT_FRAMES) { - RobotAudioFrameData dropped = session.robotAudioQueue.poll(); - if (dropped == null) { - session.queuedRobotAudioFrames.set(0); - break; - } - session.queuedRobotAudioFrames.decrementAndGet(); - session.robotAudioFramesDropped++; - } - } - } - - private void closeSessionOnNativeThread(WebRtcSession session) { - synchronized (session.closeLock) { - String sessionId = session.sessionId; - try { - session.browserAudioConsumer = null; - session.signalingSender = null; - session.mediaReady.set(false); - session.robotAudioQueue.clear(); - session.queuedRobotAudioFrames.set(0); - if (session.robotAudioPusherFuture != null) { - session.robotAudioPusherFuture.cancel(false); - session.robotAudioPusherFuture = null; - } - - if (session.browserAudioTrack != null && session.browserAudioSink != null) { - try { - session.browserAudioTrack.removeSink(session.browserAudioSink); - } catch (Exception e) { - log.debug("移除浏览器音频sink异常,sessionId={}", sessionId, e); - } - } - session.browserAudioTrack = null; - session.browserAudioSink = null; - session.browserAudioTransceiver = null; - - if (session.peerConnection != null && session.robotAudioSender != null) { - try { - session.peerConnection.removeTrack(session.robotAudioSender); - } catch (Exception e) { - log.debug("移除机器人音频sender异常,sessionId={}", sessionId, e); - } - } - session.robotAudioSender = null; - - if (session.peerConnection != null) { - try { - session.peerConnection.close(); - } catch (Exception e) { - log.debug("关闭PeerConnection异常,sessionId={}", sessionId, e); - } - } - session.peerConnection = null; - - if (session.robotAudioTrack != null) { - try { - session.robotAudioTrack.dispose(); - } catch (Exception e) { - log.debug("释放机器人音频track异常,sessionId={}", sessionId, e); - } - } - session.robotAudioTrack = null; - - if (session.robotAudioTrackSource != null) { - try { - session.robotAudioTrackSource.dispose(); - } catch (Exception e) { - log.debug("释放机器人音频source异常,sessionId={}", sessionId, e); - } - } - session.robotAudioTrackSource = null; - - if (session.robotAudioSyncClock != null) { - try { - session.robotAudioSyncClock.dispose(); - } catch (Exception e) { - log.debug("释放机器人音频时钟异常,sessionId={}", sessionId, e); - } - } - session.robotAudioSyncClock = null; - - if (session.peerConnectionFactory != null) { - try { - session.peerConnectionFactory.dispose(); - } catch (Exception e) { - log.debug("释放PeerConnectionFactory异常,sessionId={}", sessionId, e); - } - } - session.peerConnectionFactory = null; - - if (session.audioDeviceModule != null) { - try { - session.audioDeviceModule.dispose(); - } catch (Exception e) { - log.debug("释放AudioDeviceModule异常,sessionId={}", sessionId, e); - } - } - session.audioDeviceModule = null; - log.info("WebRTC桥接会话已清理,sessionId={}", sessionId); - } catch (Exception e) { - log.warn("关闭WebRTC桥接会话异常,sessionId={}", sessionId, e); - } - } - } - - private void executeNativeAsync(String action, Runnable runnable) { - try { - webrtcExecutor.execute(() -> { - try { - runnable.run(); - } catch (Exception e) { - log.error("执行WebRTC native任务失败,action={}", action, e); - } - }); - } catch (RejectedExecutionException e) { - log.warn("WebRTC native执行器已关闭,忽略任务,action={}", action, e); - } - } - - private void executeNativeAndWait(String action, Runnable runnable) { - CompletableFuture future = new CompletableFuture<>(); - try { - webrtcExecutor.execute(() -> { - try { - runnable.run(); - future.complete(null); - } catch (Exception e) { - future.completeExceptionally(e); - } - }); - } catch (RejectedExecutionException e) { - throw new IllegalStateException("WebRTC native执行器已关闭:" + action, e); - } - - try { - future.get(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new IllegalStateException("等待WebRTC native任务被中断:" + action, e); - } catch (ExecutionException e) { - throw new IllegalStateException("执行WebRTC native任务失败:" + action, e.getCause()); + if (sessionId != null) { + signalingSenders.remove(sessionId); } } @PreDestroy public void destroy() { - List sessionIds = new ArrayList<>(sessionMap.keySet()); - for (String sessionId : sessionIds) { - try { - closeSession(sessionId); - } catch (Exception e) { - log.warn("清理WebRTC会话失败,sessionId={}", sessionId, e); - } + signalingSenders.clear(); + } + + private void sendDisabledError(String sessionId) { + Consumer sender = signalingSenders.get(sessionId); + if (sender == null) { + log.warn("{}, sessionId={}", DISABLED_MESSAGE, sessionId); + return; } - sessionMap.clear(); - webrtcExecutor.shutdown(); try { - if (!webrtcExecutor.awaitTermination(3, TimeUnit.SECONDS)) { - log.warn("WebRTC native执行器未在超时时间内退出"); - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.warn("等待WebRTC native执行器退出被中断", e); - } - } - - private WebRtcSession requireSession(String sessionId) { - WebRtcSession session = sessionMap.get(sessionId); - if (session == null) { - throw new IllegalArgumentException("WebRTC会话不存在:" + sessionId); - } - return session; - } - - private ObjectNode baseMessage(String type, String sessionId) { - ObjectNode node = objectMapper.createObjectNode(); - node.put("type", type); - node.put("sessionId", sessionId); - node.put("timestamp", System.currentTimeMillis()); - return node; - } - - private String fixSdpFormat(String sdp) { - if (sdp == null) { - return null; - } - String fixed = sdp.replaceAll("(?m)^a=ssrc:.*$", ""); - fixed = fixed.replaceAll("(?m)^[ \\t\\r\\n]*$", ""); - return fixed.replace("\r\n", "\n").replace("\r", "\n").replace("\n", "\r\n"); - } - - private String toJson(ObjectNode node) { - try { - return objectMapper.writeValueAsString(node); + sender.accept("{\"type\":\"error\",\"message\":\"" + DISABLED_MESSAGE + "\"}"); } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private void sendError(WebRtcSession session, String message) { - Consumer signalingSender = session.signalingSender; - if (session.closed.get() || signalingSender == null) { - return; - } - ObjectNode node = baseMessage("error", session.sessionId); - node.put("message", message); - signalingSender.accept(toJson(node)); - } - - private byte[] convertWebRtcAudioToRobotPcm(byte[] input, int bitsPerSample, int sampleRate, int channels, int frameCount) { - if (input == null || input.length == 0 || sampleRate <= 0 || channels <= 0 || frameCount <= 0) { - return new byte[0]; - } - if (sampleRate != ROBOT_SAMPLE_RATE) { - log.warn("浏览器WebRTC音频采样率不是48000,丢弃该帧,sampleRate={},channels={},frameCount={}", - sampleRate, channels, frameCount); - return new byte[0]; - } - - short[] mono48k; - if (bitsPerSample == 32) { - mono48k = float32PcmToMonoShort(input, channels, frameCount); - } else if (bitsPerSample == 16) { - mono48k = pcm16ToMonoShort(input, channels, frameCount); - } else { - log.warn("不支持的WebRTC音频位深,bitsPerSample={},sampleRate={},channels={}", bitsPerSample, sampleRate, channels); - return new byte[0]; - } - - return shortsToPcmBytes(mono48k, mono48k.length); - } - - private short[] float32PcmToMonoShort(byte[] input, int channels, int frameCount) { - int inputFrames = Math.min(frameCount, input.length / (4 * channels)); - short[] mono = new short[inputFrames]; - ByteBuffer buffer = ByteBuffer.wrap(input).order(ByteOrder.LITTLE_ENDIAN); - for (int frame = 0; frame < inputFrames; frame++) { - double mixed = 0.0d; - for (int ch = 0; ch < channels; ch++) { - float sample = buffer.getFloat((frame * channels + ch) * 4); - if (sample > 1.0f) { - sample = 1.0f; - } else if (sample < -1.0f) { - sample = -1.0f; - } - mixed += sample; - } - mono[frame] = (short) Math.round((mixed / channels) * 32767.0d); - } - return mono; - } - - private short[] pcm16ToMonoShort(byte[] input, int channels, int frameCount) { - int inputFrames = Math.min(frameCount, input.length / (2 * channels)); - short[] mono = new short[inputFrames]; - for (int frame = 0; frame < inputFrames; frame++) { - int mixed = 0; - for (int ch = 0; ch < channels; ch++) { - int offset = (frame * channels + ch) * 2; - mixed += readPcm16Le(input, offset); - } - mono[frame] = (short) (mixed / channels); - } - return mono; - } - - private short[] pcmBytesToShorts(byte[] input, int maxSamples) { - int samples = Math.min(maxSamples, input.length / 2); - short[] output = new short[samples]; - for (int i = 0; i < samples; i++) { - output[i] = readPcm16Le(input, i * 2); - } - return output; - } - - private byte[] shortsToPcmBytes(short[] samples, int targetSamples) { - byte[] output = new byte[targetSamples * 2]; - int count = Math.min(targetSamples, samples == null ? 0 : samples.length); - for (int i = 0; i < count; i++) { - output[i * 2] = (byte) (samples[i] & 0xFF); - output[i * 2 + 1] = (byte) ((samples[i] >> 8) & 0xFF); - } - return output; - } - - private short readPcm16Le(byte[] input, int offset) { - int low = input[offset] & 0xFF; - int high = input[offset + 1]; - return (short) ((high << 8) | low); - } - - private void logAudioStatsIfNeeded(WebRtcSession session, String source, int queuedRobotFrames) { - long now = System.currentTimeMillis(); - if (now - session.lastAudioStatsLogAt < AUDIO_STATS_LOG_INTERVAL_MS) { - return; - } - session.lastAudioStatsLogAt = now; - log.info("WebRTC音频统计,source={},sessionId={},mediaReady={},browserFrames={},robotEnqueued={},robotDropped={},robotPushCalls={},robotPushSilent={},queuedRobotFrames={},lastRobotTimestampMs={}", - source, - session.sessionId, - session.mediaReady.get(), - session.browserAudioFramesReceived, - session.robotAudioFramesEnqueued, - session.robotAudioFramesDropped, - session.robotAudioPushCalls, - session.robotAudioPushSilentFrames, - queuedRobotFrames, - session.lastRobotTimestampMs); - log.info("WEBRTC-AUDIO-STATS source={} sessionId={} browserRaw={} browserAccepted={} queuedRobotFrames={}", - source, - session.sessionId, - session.browserAudioFramesReceived, - session.browserAudioFramesAccepted, - queuedRobotFrames); - } - - private void logBrowserInputFormatIfNeeded(WebRtcSession session, - int bitsPerSample, - int sampleRate, - int channels, - int frameCount, - int inputBytes, - int outputBytes) { - long now = System.currentTimeMillis(); - if (now - session.lastBrowserFormatLogAt < AUDIO_STATS_LOG_INTERVAL_MS) { - return; - } - session.lastBrowserFormatLogAt = now; - log.info("浏览器WebRTC输入音频格式,sessionId={},bitsPerSample={},sampleRate={},channels={},frameCount={},inputBytes={},robotOutputBytes={}", - session.sessionId, - bitsPerSample, - sampleRate, - channels, - frameCount, - inputBytes, - outputBytes); - } - - private int estimateRobotOutputBytes(int sampleRate, int channels, int frameCount) { - if (sampleRate <= 0 || channels <= 0 || frameCount <= 0) { - return 0; - } - if (sampleRate != ROBOT_SAMPLE_RATE) { - return 0; - } - int monoSamples = frameCount; - return monoSamples * (BITS_PER_SAMPLE / 8); - } - - private void logWebRtcPushPcmStatsIfNeeded(WebRtcSession session, byte[] pcm48k, long sourceTimestampMs) { - long now = System.currentTimeMillis(); - if (now - session.lastWebRtcPushPcmStatsLogAt < AUDIO_STATS_LOG_INTERVAL_MS) { - return; - } - session.lastWebRtcPushPcmStatsLogAt = now; - PcmStats stats = PcmStats.fromPcm16Le(pcm48k); - log.info("PCM-STATS direction=webrtc-outbound-robot sessionId={} sampleRate={} channels={} bitsPerSample={} frameMs={} sourceTimestampMs={} bytes={} samples={} rms={} peak={} zeroCrossRate={} firstSamples={}", - session.sessionId, - WEBRTC_SAMPLE_RATE, - CHANNELS, - BITS_PER_SAMPLE, - ROBOT_FRAME_MS, - sourceTimestampMs, - pcm48k == null ? 0 : pcm48k.length, - stats.samples, - stats.rms, - stats.peak, - stats.zeroCrossRate, - stats.firstSamples); - } - - private class BridgePeerObserver implements PeerConnectionObserver { - private final WebRtcSession session; - - private BridgePeerObserver(WebRtcSession session) { - this.session = session; - } - - @Override - public void onIceCandidate(RTCIceCandidate candidate) { - Consumer signalingSender = session.signalingSender; - if (session.closed.get() || signalingSender == null) { - return; - } - ObjectNode node = baseMessage("candidate", session.sessionId); - ObjectNode candidateNode = objectMapper.createObjectNode(); - candidateNode.put("candidate", candidate.sdp); - candidateNode.put("sdpMid", candidate.sdpMid); - candidateNode.put("sdpMLineIndex", candidate.sdpMLineIndex); - node.set("candidate", candidateNode); - signalingSender.accept(toJson(node)); - } - - @Override - public void onTrack(RTCRtpTransceiver transceiver) { - executeNativeAsync("bind browser WebRTC audio track", () -> { - if (session.closed.get()) { - return; - } - MediaStreamTrack track = transceiver.getReceiver().getTrack(); - if (!(track instanceof AudioTrack)) { - return; - } - AudioTrack audioTrack = (AudioTrack) track; - if (session.browserAudioSink != null) { - log.warn("浏览器WebRTC音频track已绑定,忽略重复onTrack,sessionId={}", session.sessionId); - return; - } - AudioTrackSink sink = (audioData, bitsPerSample, sampleRate, channels, frameCount) -> { - try { - Consumer consumer = session.browserAudioConsumer; - if (session.closed.get() || consumer == null) { - return; - } - session.browserAudioFramesReceived++; - int expectedOutputBytes = estimateRobotOutputBytes(sampleRate, channels, frameCount); - logBrowserInputFormatIfNeeded(session, bitsPerSample, sampleRate, channels, frameCount, - audioData == null ? 0 : audioData.length, expectedOutputBytes); - session.browserAudioFramesAccepted++; - byte[] pcm48kMono = convertWebRtcAudioToRobotPcm(audioData, bitsPerSample, sampleRate, channels, frameCount); - if (pcm48kMono.length == 0) { - log.debug("浏览器WebRTC音频帧为空,sessionId={},bitsPerSample={},sampleRate={},channels={},frameCount={},bytes={}", - session.sessionId, bitsPerSample, sampleRate, channels, frameCount, audioData == null ? 0 : audioData.length); - return; - } - logAudioStatsIfNeeded(session, "browserAudioSink", session.queuedRobotAudioFrames.get()); - consumer.accept(pcm48kMono); - } catch (Exception e) { - log.error("处理浏览器WebRTC音频帧失败,sessionId={}", session.sessionId, e); - } - }; - audioTrack.addSink(sink); - session.browserAudioTrack = audioTrack; - session.browserAudioSink = sink; - session.browserAudioTransceiver = transceiver; - log.info("已绑定浏览器WebRTC音频track,sessionId={}", session.sessionId); - }); - } - - @Override - public void onSignalingChange(RTCSignalingState state) { - log.debug("WebRTC signaling状态变化,sessionId={},state={}", session.sessionId, state); - } - - @Override - public void onConnectionChange(RTCPeerConnectionState state) { - log.info("WebRTC连接状态变化,sessionId={},state={}", session.sessionId, state); - } - - @Override - public void onIceConnectionChange(RTCIceConnectionState state) { - log.debug("WebRTC ICE连接状态变化,sessionId={},state={}", session.sessionId, state); - } - - @Override - public void onStandardizedIceConnectionChange(RTCIceConnectionState state) { - } - - @Override - public void onIceConnectionReceivingChange(boolean receiving) { - } - - @Override - public void onIceGatheringChange(RTCIceGatheringState state) { - log.debug("WebRTC ICE采集状态变化,sessionId={},state={}", session.sessionId, state); - } - - @Override - public void onIceCandidateError(RTCPeerConnectionIceErrorEvent event) { - log.warn("WebRTC ICE候选异常,sessionId={},event={}", session.sessionId, event); - } - - @Override - public void onIceCandidatesRemoved(RTCIceCandidate[] candidates) { - } - - @Override - public void onAddStream(MediaStream stream) { - } - - @Override - public void onRemoveStream(MediaStream stream) { - } - - @Override - public void onDataChannel(RTCDataChannel dataChannel) { - } - - @Override - public void onRenegotiationNeeded() { - log.debug("WebRTC需要重新协商,sessionId={}", session.sessionId); - } - - @Override - public void onAddTrack(RTCRtpReceiver receiver, MediaStream[] mediaStreams) { - } - - @Override - public void onRemoveTrack(RTCRtpReceiver receiver) { - } - } - - private static class RobotAudioFrameData { - private final byte[] pcm; - private final long timestampMs; - - private RobotAudioFrameData(byte[] pcm, long timestampMs) { - this.pcm = pcm; - this.timestampMs = timestampMs; - } - } - - private static class WavDumpRecorder { - private final String name; - private final int maxBytes; - private final ByteArrayOutputStream buffer; - private Path filePath; - private int writtenBytes; - private boolean completed; - - private WavDumpRecorder(String name, int maxBytes) { - this.name = name; - this.maxBytes = maxBytes; - this.buffer = new ByteArrayOutputStream(maxBytes); - } - - private synchronized void record(byte[] pcm) { - if (completed || pcm == null || pcm.length == 0) { - return; - } - try { - if (filePath == null) { - Path dir = Paths.get("logs", "audio-dump"); - Files.createDirectories(dir); - filePath = dir.resolve(name + "-" + System.currentTimeMillis() + ".wav"); - log.info("开始保存10秒WAV音频,name={},file={},sampleRate={},channels={},bitsPerSample={}", - name, filePath.toAbsolutePath(), WEBRTC_SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE); - } - int remain = maxBytes - writtenBytes; - int writeBytes = Math.min(remain, pcm.length); - buffer.write(pcm, 0, writeBytes); - writtenBytes += writeBytes; - if (writtenBytes >= maxBytes) { - writeWavFile(filePath, buffer.toByteArray(), WEBRTC_SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE); - completed = true; - log.info("WAV音频保存完成,name={},file={},pcmBytes={}", - name, filePath == null ? "" : filePath.toAbsolutePath(), writtenBytes); - } - } catch (IOException e) { - completed = true; - log.warn("保存WAV音频失败,name={},file={}", name, filePath, e); - } - } - - private void writeWavFile(Path path, byte[] pcm, int sampleRate, int channels, int bitsPerSample) throws IOException { - try (OutputStream out = Files.newOutputStream(path, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE)) { - writeAscii(out, "RIFF"); - writeIntLe(out, 36 + pcm.length); - writeAscii(out, "WAVE"); - writeAscii(out, "fmt "); - writeIntLe(out, 16); - writeShortLe(out, 1); - writeShortLe(out, channels); - writeIntLe(out, sampleRate); - writeIntLe(out, sampleRate * channels * bitsPerSample / 8); - writeShortLe(out, channels * bitsPerSample / 8); - writeShortLe(out, bitsPerSample); - writeAscii(out, "data"); - writeIntLe(out, pcm.length); - out.write(pcm); - } - } - - private void writeAscii(OutputStream out, String value) throws IOException { - out.write(value.getBytes(java.nio.charset.StandardCharsets.US_ASCII)); - } - - private void writeIntLe(OutputStream out, int value) throws IOException { - out.write(value & 0xFF); - out.write((value >> 8) & 0xFF); - out.write((value >> 16) & 0xFF); - out.write((value >> 24) & 0xFF); - } - - private void writeShortLe(OutputStream out, int value) throws IOException { - out.write(value & 0xFF); - out.write((value >> 8) & 0xFF); - } - } - - private static class PcmDumpRecorder { - private final String name; - private final int maxBytes; - private OutputStream outputStream; - private Path filePath; - private int writtenBytes; - private boolean completed; - - private PcmDumpRecorder(String name, int maxBytes) { - this.name = name; - this.maxBytes = maxBytes; - } - - private synchronized void record(byte[] pcm) { - if (completed || pcm == null || pcm.length == 0) { - return; - } - try { - if (outputStream == null) { - Path dir = Paths.get("logs", "audio-dump"); - Files.createDirectories(dir); - filePath = dir.resolve(name + "-" + System.currentTimeMillis() + ".pcm"); - outputStream = Files.newOutputStream(filePath, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE); - log.info("开始保存10秒PCM音频,name={},file={},sampleRate={},channels={},bitsPerSample={}", - name, filePath.toAbsolutePath(), WEBRTC_SAMPLE_RATE, CHANNELS, BITS_PER_SAMPLE); - } - int remain = maxBytes - writtenBytes; - int writeBytes = Math.min(remain, pcm.length); - outputStream.write(pcm, 0, writeBytes); - writtenBytes += writeBytes; - if (writtenBytes >= maxBytes) { - close(); - completed = true; - log.info("PCM音频保存完成,name={},file={},bytes={}", - name, filePath == null ? "" : filePath.toAbsolutePath(), writtenBytes); - } - } catch (IOException e) { - completed = true; - closeQuietly(); - log.warn("保存PCM音频失败,name={},file={}", name, filePath, e); - } - } - - private void close() throws IOException { - if (outputStream != null) { - outputStream.flush(); - outputStream.close(); - outputStream = null; - } - } - - private void closeQuietly() { - try { - close(); - } catch (IOException ignored) { - } - } - } - - private static class WebRtcSession { - private String sessionId; - private AudioDeviceModuleBase audioDeviceModule; - private PeerConnectionFactory peerConnectionFactory; - private RTCPeerConnection peerConnection; - private SyncClock robotAudioSyncClock; - private CustomAudioSource robotAudioTrackSource; - private AudioTrack robotAudioTrack; - private RTCRtpSender robotAudioSender; - private ScheduledFuture robotAudioPusherFuture; - private final ConcurrentLinkedQueue robotAudioQueue = new ConcurrentLinkedQueue<>(); - private final AtomicInteger queuedRobotAudioFrames = new AtomicInteger(0); - private final Object robotAudioBufferLock = new Object(); - private byte[] robotAudioRemainder = new byte[ROBOT_FRAME_BYTES]; - private int robotAudioRemainderLength; - private long robotAudioRemainderTimestampMs; - private AudioTrack browserAudioTrack; - private AudioTrackSink browserAudioSink; - private RTCRtpTransceiver browserAudioTransceiver; - private Consumer browserAudioConsumer; - private Consumer signalingSender; - private final AtomicBoolean closed = new AtomicBoolean(false); - private final AtomicBoolean mediaReady = new AtomicBoolean(false); - private final Object closeLock = new Object(); - private volatile long browserAudioFramesReceived; - private volatile long browserAudioFramesAccepted; - private volatile long robotAudioFramesEnqueued; - private volatile long robotAudioFramesDropped; - private volatile long robotAudioPushCalls; - private volatile long robotAudioPushSilentFrames; - private volatile long lastRobotTimestampMs; - private volatile long lastAudioStatsLogAt; - private volatile long lastBrowserFormatLogAt; - private volatile long lastWebRtcPushPcmStatsLogAt; - } - - private static class PcmStats { - private final int samples; - private final int rms; - private final int peak; - private final String zeroCrossRate; - private final String firstSamples; - - private PcmStats(int samples, int rms, int peak, String zeroCrossRate, String firstSamples) { - this.samples = samples; - this.rms = rms; - this.peak = peak; - this.zeroCrossRate = zeroCrossRate; - this.firstSamples = firstSamples; - } - - private static PcmStats fromPcm16Le(byte[] pcm) { - if (pcm == null || pcm.length < 2) { - return new PcmStats(0, 0, 0, "0.0000", "[]"); - } - int samples = pcm.length / 2; - long squareSum = 0L; - int peak = 0; - int zeroCross = 0; - int previous = 0; - StringBuilder first = new StringBuilder("["); - int firstCount = Math.min(8, samples); - for (int i = 0; i < samples; i++) { - int low = pcm[i * 2] & 0xFF; - int high = pcm[i * 2 + 1]; - short sample = (short) ((high << 8) | low); - int value = sample; - int abs = Math.abs(value); - peak = Math.max(peak, abs); - squareSum += (long) value * value; - if (i > 0 && ((previous < 0 && value >= 0) || (previous >= 0 && value < 0))) { - zeroCross++; - } - previous = value; - if (i < firstCount) { - if (i > 0) { - first.append(','); - } - first.append(value); - } - } - first.append(']'); - int rms = (int) Math.round(Math.sqrt(squareSum / (double) samples)); - String zeroCrossRate = String.format(java.util.Locale.ROOT, "%.4f", zeroCross / (double) Math.max(1, samples - 1)); - return new PcmStats(samples, rms, peak, zeroCrossRate, first.toString()); + log.warn("send disabled WebRTC error failed, sessionId={}", sessionId, e); } } } diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/Common.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/Common.java index 3b34422..af37217 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/Common.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/Common.java @@ -2839,6 +2839,1142 @@ public final class Common { } + public interface AudioDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.AudioData) + com.google.protobuf.MessageOrBuilder { + + /** + * bytes data = 1; + * @return The data. + */ + com.google.protobuf.ByteString getData(); + + /** + * int32 sample_rate = 2; + * @return The sampleRate. + */ + int getSampleRate(); + + /** + * int32 channels = 3; + * @return The channels. + */ + int getChannels(); + + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return The enum numeric value on the wire for format. + */ + int getFormatValue(); + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return The format. + */ + cmvr.api.Common.AudioData.AudioFormat getFormat(); + + /** + * string codec = 5; + * @return The codec. + */ + java.lang.String getCodec(); + /** + * string codec = 5; + * @return The bytes for codec. + */ + com.google.protobuf.ByteString + getCodecBytes(); + + /** + * int64 pts = 6; + * @return The pts. + */ + long getPts(); + + /** + * int32 nb_samples = 7; + * @return The nbSamples. + */ + int getNbSamples(); + } + /** + * Protobuf type {@code cmvr.api.AudioData} + */ + public static final class AudioData extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.AudioData) + AudioDataOrBuilder { + private static final long serialVersionUID = 0L; + // Use AudioData.newBuilder() to construct. + private AudioData(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private AudioData() { + data_ = com.google.protobuf.ByteString.EMPTY; + format_ = 0; + codec_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new AudioData(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.Common.internal_static_cmvr_api_AudioData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.Common.internal_static_cmvr_api_AudioData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.Common.AudioData.class, cmvr.api.Common.AudioData.Builder.class); + } + + /** + * Protobuf enum {@code cmvr.api.AudioData.AudioFormat} + */ + public enum AudioFormat + implements com.google.protobuf.ProtocolMessageEnum { + /** + * PCM = 0; + */ + PCM(0), + /** + * MP3 = 1; + */ + MP3(1), + /** + * AAC = 2; + */ + AAC(2), + /** + * WAV = 3; + */ + WAV(3), + UNRECOGNIZED(-1), + ; + + /** + * PCM = 0; + */ + public static final int PCM_VALUE = 0; + /** + * MP3 = 1; + */ + public static final int MP3_VALUE = 1; + /** + * AAC = 2; + */ + public static final int AAC_VALUE = 2; + /** + * WAV = 3; + */ + public static final int WAV_VALUE = 3; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static AudioFormat valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static AudioFormat forNumber(int value) { + switch (value) { + case 0: return PCM; + case 1: return MP3; + case 2: return AAC; + case 3: return WAV; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + AudioFormat> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public AudioFormat findValueByNumber(int number) { + return AudioFormat.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return cmvr.api.Common.AudioData.getDescriptor().getEnumTypes().get(0); + } + + private static final AudioFormat[] VALUES = values(); + + public static AudioFormat valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private AudioFormat(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:cmvr.api.AudioData.AudioFormat) + } + + public static final int DATA_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString data_; + /** + * bytes data = 1; + * @return The data. + */ + @java.lang.Override + public com.google.protobuf.ByteString getData() { + return data_; + } + + public static final int SAMPLE_RATE_FIELD_NUMBER = 2; + private int sampleRate_; + /** + * int32 sample_rate = 2; + * @return The sampleRate. + */ + @java.lang.Override + public int getSampleRate() { + return sampleRate_; + } + + public static final int CHANNELS_FIELD_NUMBER = 3; + private int channels_; + /** + * int32 channels = 3; + * @return The channels. + */ + @java.lang.Override + public int getChannels() { + return channels_; + } + + public static final int FORMAT_FIELD_NUMBER = 4; + private int format_; + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return The enum numeric value on the wire for format. + */ + @java.lang.Override public int getFormatValue() { + return format_; + } + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return The format. + */ + @java.lang.Override public cmvr.api.Common.AudioData.AudioFormat getFormat() { + @SuppressWarnings("deprecation") + cmvr.api.Common.AudioData.AudioFormat result = cmvr.api.Common.AudioData.AudioFormat.valueOf(format_); + return result == null ? cmvr.api.Common.AudioData.AudioFormat.UNRECOGNIZED : result; + } + + public static final int CODEC_FIELD_NUMBER = 5; + private volatile java.lang.Object codec_; + /** + * string codec = 5; + * @return The codec. + */ + @java.lang.Override + public java.lang.String getCodec() { + java.lang.Object ref = codec_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + codec_ = s; + return s; + } + } + /** + * string codec = 5; + * @return The bytes for codec. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCodecBytes() { + java.lang.Object ref = codec_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + codec_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PTS_FIELD_NUMBER = 6; + private long pts_; + /** + * int64 pts = 6; + * @return The pts. + */ + @java.lang.Override + public long getPts() { + return pts_; + } + + public static final int NB_SAMPLES_FIELD_NUMBER = 7; + private int nbSamples_; + /** + * int32 nb_samples = 7; + * @return The nbSamples. + */ + @java.lang.Override + public int getNbSamples() { + return nbSamples_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!data_.isEmpty()) { + output.writeBytes(1, data_); + } + if (sampleRate_ != 0) { + output.writeInt32(2, sampleRate_); + } + if (channels_ != 0) { + output.writeInt32(3, channels_); + } + if (format_ != cmvr.api.Common.AudioData.AudioFormat.PCM.getNumber()) { + output.writeEnum(4, format_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(codec_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, codec_); + } + if (pts_ != 0L) { + output.writeInt64(6, pts_); + } + if (nbSamples_ != 0) { + output.writeInt32(7, nbSamples_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!data_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, data_); + } + if (sampleRate_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, sampleRate_); + } + if (channels_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, channels_); + } + if (format_ != cmvr.api.Common.AudioData.AudioFormat.PCM.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(4, format_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(codec_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, codec_); + } + if (pts_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(6, pts_); + } + if (nbSamples_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(7, nbSamples_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.Common.AudioData)) { + return super.equals(obj); + } + cmvr.api.Common.AudioData other = (cmvr.api.Common.AudioData) obj; + + if (!getData() + .equals(other.getData())) return false; + if (getSampleRate() + != other.getSampleRate()) return false; + if (getChannels() + != other.getChannels()) return false; + if (format_ != other.format_) return false; + if (!getCodec() + .equals(other.getCodec())) return false; + if (getPts() + != other.getPts()) return false; + if (getNbSamples() + != other.getNbSamples()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DATA_FIELD_NUMBER; + hash = (53 * hash) + getData().hashCode(); + hash = (37 * hash) + SAMPLE_RATE_FIELD_NUMBER; + hash = (53 * hash) + getSampleRate(); + hash = (37 * hash) + CHANNELS_FIELD_NUMBER; + hash = (53 * hash) + getChannels(); + hash = (37 * hash) + FORMAT_FIELD_NUMBER; + hash = (53 * hash) + format_; + hash = (37 * hash) + CODEC_FIELD_NUMBER; + hash = (53 * hash) + getCodec().hashCode(); + hash = (37 * hash) + PTS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPts()); + hash = (37 * hash) + NB_SAMPLES_FIELD_NUMBER; + hash = (53 * hash) + getNbSamples(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.Common.AudioData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.Common.AudioData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.Common.AudioData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.Common.AudioData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.Common.AudioData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.Common.AudioData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.Common.AudioData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.Common.AudioData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.Common.AudioData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.Common.AudioData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.Common.AudioData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.Common.AudioData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.Common.AudioData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.AudioData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.AudioData) + cmvr.api.Common.AudioDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.Common.internal_static_cmvr_api_AudioData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.Common.internal_static_cmvr_api_AudioData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.Common.AudioData.class, cmvr.api.Common.AudioData.Builder.class); + } + + // Construct using cmvr.api.Common.AudioData.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + data_ = com.google.protobuf.ByteString.EMPTY; + + sampleRate_ = 0; + + channels_ = 0; + + format_ = 0; + + codec_ = ""; + + pts_ = 0L; + + nbSamples_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.Common.internal_static_cmvr_api_AudioData_descriptor; + } + + @java.lang.Override + public cmvr.api.Common.AudioData getDefaultInstanceForType() { + return cmvr.api.Common.AudioData.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.Common.AudioData build() { + cmvr.api.Common.AudioData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.Common.AudioData buildPartial() { + cmvr.api.Common.AudioData result = new cmvr.api.Common.AudioData(this); + result.data_ = data_; + result.sampleRate_ = sampleRate_; + result.channels_ = channels_; + result.format_ = format_; + result.codec_ = codec_; + result.pts_ = pts_; + result.nbSamples_ = nbSamples_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.Common.AudioData) { + return mergeFrom((cmvr.api.Common.AudioData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.Common.AudioData other) { + if (other == cmvr.api.Common.AudioData.getDefaultInstance()) return this; + if (other.getData() != com.google.protobuf.ByteString.EMPTY) { + setData(other.getData()); + } + if (other.getSampleRate() != 0) { + setSampleRate(other.getSampleRate()); + } + if (other.getChannels() != 0) { + setChannels(other.getChannels()); + } + if (other.format_ != 0) { + setFormatValue(other.getFormatValue()); + } + if (!other.getCodec().isEmpty()) { + codec_ = other.codec_; + onChanged(); + } + if (other.getPts() != 0L) { + setPts(other.getPts()); + } + if (other.getNbSamples() != 0) { + setNbSamples(other.getNbSamples()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + data_ = input.readBytes(); + + break; + } // case 10 + case 16: { + sampleRate_ = input.readInt32(); + + break; + } // case 16 + case 24: { + channels_ = input.readInt32(); + + break; + } // case 24 + case 32: { + format_ = input.readEnum(); + + break; + } // case 32 + case 42: { + codec_ = input.readStringRequireUtf8(); + + break; + } // case 42 + case 48: { + pts_ = input.readInt64(); + + break; + } // case 48 + case 56: { + nbSamples_ = input.readInt32(); + + break; + } // case 56 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes data = 1; + * @return The data. + */ + @java.lang.Override + public com.google.protobuf.ByteString getData() { + return data_; + } + /** + * bytes data = 1; + * @param value The data to set. + * @return This builder for chaining. + */ + public Builder setData(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + data_ = value; + onChanged(); + return this; + } + /** + * bytes data = 1; + * @return This builder for chaining. + */ + public Builder clearData() { + + data_ = getDefaultInstance().getData(); + onChanged(); + return this; + } + + private int sampleRate_ ; + /** + * int32 sample_rate = 2; + * @return The sampleRate. + */ + @java.lang.Override + public int getSampleRate() { + return sampleRate_; + } + /** + * int32 sample_rate = 2; + * @param value The sampleRate to set. + * @return This builder for chaining. + */ + public Builder setSampleRate(int value) { + + sampleRate_ = value; + onChanged(); + return this; + } + /** + * int32 sample_rate = 2; + * @return This builder for chaining. + */ + public Builder clearSampleRate() { + + sampleRate_ = 0; + onChanged(); + return this; + } + + private int channels_ ; + /** + * int32 channels = 3; + * @return The channels. + */ + @java.lang.Override + public int getChannels() { + return channels_; + } + /** + * int32 channels = 3; + * @param value The channels to set. + * @return This builder for chaining. + */ + public Builder setChannels(int value) { + + channels_ = value; + onChanged(); + return this; + } + /** + * int32 channels = 3; + * @return This builder for chaining. + */ + public Builder clearChannels() { + + channels_ = 0; + onChanged(); + return this; + } + + private int format_ = 0; + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return The enum numeric value on the wire for format. + */ + @java.lang.Override public int getFormatValue() { + return format_; + } + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @param value The enum numeric value on the wire for format to set. + * @return This builder for chaining. + */ + public Builder setFormatValue(int value) { + + format_ = value; + onChanged(); + return this; + } + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return The format. + */ + @java.lang.Override + public cmvr.api.Common.AudioData.AudioFormat getFormat() { + @SuppressWarnings("deprecation") + cmvr.api.Common.AudioData.AudioFormat result = cmvr.api.Common.AudioData.AudioFormat.valueOf(format_); + return result == null ? cmvr.api.Common.AudioData.AudioFormat.UNRECOGNIZED : result; + } + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @param value The format to set. + * @return This builder for chaining. + */ + public Builder setFormat(cmvr.api.Common.AudioData.AudioFormat value) { + if (value == null) { + throw new NullPointerException(); + } + + format_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .cmvr.api.AudioData.AudioFormat format = 4; + * @return This builder for chaining. + */ + public Builder clearFormat() { + + format_ = 0; + onChanged(); + return this; + } + + private java.lang.Object codec_ = ""; + /** + * string codec = 5; + * @return The codec. + */ + public java.lang.String getCodec() { + java.lang.Object ref = codec_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + codec_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string codec = 5; + * @return The bytes for codec. + */ + public com.google.protobuf.ByteString + getCodecBytes() { + java.lang.Object ref = codec_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + codec_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string codec = 5; + * @param value The codec to set. + * @return This builder for chaining. + */ + public Builder setCodec( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + codec_ = value; + onChanged(); + return this; + } + /** + * string codec = 5; + * @return This builder for chaining. + */ + public Builder clearCodec() { + + codec_ = getDefaultInstance().getCodec(); + onChanged(); + return this; + } + /** + * string codec = 5; + * @param value The bytes for codec to set. + * @return This builder for chaining. + */ + public Builder setCodecBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + codec_ = value; + onChanged(); + return this; + } + + private long pts_ ; + /** + * int64 pts = 6; + * @return The pts. + */ + @java.lang.Override + public long getPts() { + return pts_; + } + /** + * int64 pts = 6; + * @param value The pts to set. + * @return This builder for chaining. + */ + public Builder setPts(long value) { + + pts_ = value; + onChanged(); + return this; + } + /** + * int64 pts = 6; + * @return This builder for chaining. + */ + public Builder clearPts() { + + pts_ = 0L; + onChanged(); + return this; + } + + private int nbSamples_ ; + /** + * int32 nb_samples = 7; + * @return The nbSamples. + */ + @java.lang.Override + public int getNbSamples() { + return nbSamples_; + } + /** + * int32 nb_samples = 7; + * @param value The nbSamples to set. + * @return This builder for chaining. + */ + public Builder setNbSamples(int value) { + + nbSamples_ = value; + onChanged(); + return this; + } + /** + * int32 nb_samples = 7; + * @return This builder for chaining. + */ + public Builder clearNbSamples() { + + nbSamples_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.AudioData) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.AudioData) + private static final cmvr.api.Common.AudioData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.Common.AudioData(); + } + + public static cmvr.api.Common.AudioData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AudioData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.Common.AudioData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + public interface ConfigParamOrBuilder extends // @@protoc_insertion_point(interface_extends:cmvr.api.ConfigParam) com.google.protobuf.MessageOrBuilder { @@ -4274,6 +5410,11 @@ public final class Common { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_cmvr_api_CommandHeader_Feedback_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_AudioData_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_AudioData_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_cmvr_api_ConfigParam_descriptor; private static final @@ -4299,11 +5440,16 @@ public final class Common { "2\032.google.protobuf.Timestamp\032a\n\010Feedback" + "\022\017\n\007success\030\001 \001(\010\022\025\n\rerror_message\030\002 \001(\t" + "\022-\n\ttimestamp\030\003 \001(\0132\032.google.protobuf.Ti" + - "mestamp\"\242\001\n\013ConfigParam\022\022\n\nparam_name\030\001 " + - "\001(\t\022\023\n\tint_value\030\002 \001(\005H\000\022\026\n\014double_value" + - "\030\003 \001(\001H\000\022\026\n\014string_value\030\004 \001(\tH\000\022\024\n\nbool" + - "_value\030\005 \001(\010H\000\022\025\n\013bytes_value\030\006 \001(\014H\000B\r\n" + - "\013param_valueb\006proto3" + "mestamp\"\324\001\n\tAudioData\022\014\n\004data\030\001 \001(\014\022\023\n\013s" + + "ample_rate\030\002 \001(\005\022\020\n\010channels\030\003 \001(\005\022/\n\006fo" + + "rmat\030\004 \001(\0162\037.cmvr.api.AudioData.AudioFor" + + "mat\022\r\n\005codec\030\005 \001(\t\022\013\n\003pts\030\006 \001(\003\022\022\n\nnb_sa" + + "mples\030\007 \001(\005\"1\n\013AudioFormat\022\007\n\003PCM\020\000\022\007\n\003M" + + "P3\020\001\022\007\n\003AAC\020\002\022\007\n\003WAV\020\003\"\242\001\n\013ConfigParam\022\022" + + "\n\nparam_name\030\001 \001(\t\022\023\n\tint_value\030\002 \001(\005H\000\022" + + "\026\n\014double_value\030\003 \001(\001H\000\022\026\n\014string_value\030" + + "\004 \001(\tH\000\022\024\n\nbool_value\030\005 \001(\010H\000\022\025\n\013bytes_v" + + "alue\030\006 \001(\014H\000B\r\n\013param_valueb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -4334,8 +5480,14 @@ public final class Common { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_CommandHeader_Feedback_descriptor, new java.lang.String[] { "Success", "ErrorMessage", "Timestamp", }); - internal_static_cmvr_api_ConfigParam_descriptor = + internal_static_cmvr_api_AudioData_descriptor = getDescriptor().getMessageTypes().get(2); + internal_static_cmvr_api_AudioData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_AudioData_descriptor, + new java.lang.String[] { "Data", "SampleRate", "Channels", "Format", "Codec", "Pts", "NbSamples", }); + internal_static_cmvr_api_ConfigParam_descriptor = + getDescriptor().getMessageTypes().get(3); internal_static_cmvr_api_ConfigParam_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_ConfigParam_descriptor, diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicPhoneServiceGrpc.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicPhoneServiceGrpc.java index 9b37300..c1f2978 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicPhoneServiceGrpc.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicPhoneServiceGrpc.java @@ -170,6 +170,37 @@ public final class MicPhoneServiceGrpc { return getResumeRecordMethod; } + private static volatile io.grpc.MethodDescriptor getStreamAudioMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "StreamAudio", + requestType = cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.class, + responseType = cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.class, + methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + public static io.grpc.MethodDescriptor getStreamAudioMethod() { + io.grpc.MethodDescriptor getStreamAudioMethod; + if ((getStreamAudioMethod = MicPhoneServiceGrpc.getStreamAudioMethod) == null) { + synchronized (MicPhoneServiceGrpc.class) { + if ((getStreamAudioMethod = MicPhoneServiceGrpc.getStreamAudioMethod) == null) { + MicPhoneServiceGrpc.getStreamAudioMethod = getStreamAudioMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "StreamAudio")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.getDefaultInstance())) + .setSchemaDescriptor(new MicPhoneServiceMethodDescriptorSupplier("StreamAudio")) + .build(); + } + } + } + return getStreamAudioMethod; + } + private static volatile io.grpc.MethodDescriptor getSetVolumeMethod; @@ -281,9 +312,6 @@ public final class MicPhoneServiceGrpc { public static abstract class MicPhoneServiceImplBase implements io.grpc.BindableService { /** - *
-     * 基本控制
-     * 
*/ public void getStatus(cmvr.api.MicrophoneCommand.GetMicStateCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -319,9 +347,13 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 音量控制
-     * 
+ */ + public void streamAudio(cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getStreamAudioMethod(), responseObserver); + } + + /** */ public void setVolume(cmvr.api.MicrophoneCommand.SetMicPhoneVolumeCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -372,6 +404,13 @@ public final class MicPhoneServiceGrpc { cmvr.api.MicrophoneCommand.ResumeMicRecordingCommand.Request, cmvr.api.MicrophoneCommand.ResumeMicRecordingCommand.Feedback>( this, METHODID_RESUME_RECORD))) + .addMethod( + getStreamAudioMethod(), + io.grpc.stub.ServerCalls.asyncServerStreamingCall( + new MethodHandlers< + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request, + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback>( + this, METHODID_STREAM_AUDIO))) .addMethod( getSetVolumeMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -405,9 +444,6 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 基本控制
-     * 
*/ public void getStatus(cmvr.api.MicrophoneCommand.GetMicStateCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -448,9 +484,14 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 音量控制
-     * 
+ */ + public void streamAudio(cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncServerStreamingCall( + getChannel().newCall(getStreamAudioMethod(), getCallOptions()), request, responseObserver); + } + + /** */ public void setVolume(cmvr.api.MicrophoneCommand.SetMicPhoneVolumeCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -482,9 +523,6 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 基本控制
-     * 
*/ public cmvr.api.MicrophoneCommand.GetMicStateCommand.Feedback getStatus(cmvr.api.MicrophoneCommand.GetMicStateCommand.Request request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( @@ -520,9 +558,14 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 音量控制
-     * 
+ */ + public java.util.Iterator streamAudio( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request request) { + return io.grpc.stub.ClientCalls.blockingServerStreamingCall( + getChannel(), getStreamAudioMethod(), getCallOptions(), request); + } + + /** */ public cmvr.api.MicrophoneCommand.SetMicPhoneVolumeCommand.Feedback setVolume(cmvr.api.MicrophoneCommand.SetMicPhoneVolumeCommand.Request request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( @@ -552,9 +595,6 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 基本控制
-     * 
*/ public com.google.common.util.concurrent.ListenableFuture getStatus( cmvr.api.MicrophoneCommand.GetMicStateCommand.Request request) { @@ -595,9 +635,6 @@ public final class MicPhoneServiceGrpc { } /** - *
-     * 音量控制
-     * 
*/ public com.google.common.util.concurrent.ListenableFuture setVolume( cmvr.api.MicrophoneCommand.SetMicPhoneVolumeCommand.Request request) { @@ -619,8 +656,9 @@ public final class MicPhoneServiceGrpc { private static final int METHODID_STOP_RECORD = 2; private static final int METHODID_PAUSE_RECORD = 3; private static final int METHODID_RESUME_RECORD = 4; - private static final int METHODID_SET_VOLUME = 5; - private static final int METHODID_GET_VOLUME = 6; + private static final int METHODID_STREAM_AUDIO = 5; + private static final int METHODID_SET_VOLUME = 6; + private static final int METHODID_GET_VOLUME = 7; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -659,6 +697,10 @@ public final class MicPhoneServiceGrpc { serviceImpl.resumeRecord((cmvr.api.MicrophoneCommand.ResumeMicRecordingCommand.Request) request, (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_STREAM_AUDIO: + serviceImpl.streamAudio((cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; case METHODID_SET_VOLUME: serviceImpl.setVolume((cmvr.api.MicrophoneCommand.SetMicPhoneVolumeCommand.Request) request, (io.grpc.stub.StreamObserver) responseObserver); @@ -733,6 +775,7 @@ public final class MicPhoneServiceGrpc { .addMethod(getStopRecordMethod()) .addMethod(getPauseRecordMethod()) .addMethod(getResumeRecordMethod()) + .addMethod(getStreamAudioMethod()) .addMethod(getSetVolumeMethod()) .addMethod(getGetVolumeMethod()) .build(); diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneCommand.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneCommand.java index 4030ae1..2cfaa0b 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneCommand.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneCommand.java @@ -9162,6 +9162,1797 @@ public final class MicrophoneCommand { } + public interface StreamMicAudioCommandOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.StreamMicAudioCommand) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code cmvr.api.StreamMicAudioCommand} + */ + public static final class StreamMicAudioCommand extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.StreamMicAudioCommand) + StreamMicAudioCommandOrBuilder { + private static final long serialVersionUID = 0L; + // Use StreamMicAudioCommand.newBuilder() to construct. + private StreamMicAudioCommand(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private StreamMicAudioCommand() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new StreamMicAudioCommand(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.class, cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Builder.class); + } + + public interface RequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.StreamMicAudioCommand.Request) + com.google.protobuf.MessageOrBuilder { + + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return Whether the header field is set. + */ + boolean hasHeader(); + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return The header. + */ + cmvr.api.Common.CommandHeader.Request getHeader(); + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder(); + } + /** + * Protobuf type {@code cmvr.api.StreamMicAudioCommand.Request} + */ + public static final class Request extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.StreamMicAudioCommand.Request) + RequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use Request.newBuilder() to construct. + private Request(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Request() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Request(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Request_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Request_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.class, cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.Builder.class); + } + + public static final int HEADER_FIELD_NUMBER = 1; + private cmvr.api.Common.CommandHeader.Request header_; + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return Whether the header field is set. + */ + @java.lang.Override + public boolean hasHeader() { + return header_ != null; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return The header. + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.Request getHeader() { + return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() { + return getHeader(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (header_ != null) { + output.writeMessage(1, getHeader()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (header_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getHeader()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request)) { + return super.equals(obj); + } + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request other = (cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request) obj; + + if (hasHeader() != other.hasHeader()) return false; + if (hasHeader()) { + if (!getHeader() + .equals(other.getHeader())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasHeader()) { + hash = (37 * hash) + HEADER_FIELD_NUMBER; + hash = (53 * hash) + getHeader().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.StreamMicAudioCommand.Request} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.StreamMicAudioCommand.Request) + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.RequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Request_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Request_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.class, cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.Builder.class); + } + + // Construct using cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (headerBuilder_ == null) { + header_ = null; + } else { + header_ = null; + headerBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Request_descriptor; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request getDefaultInstanceForType() { + return cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request build() { + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request buildPartial() { + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request result = new cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request(this); + if (headerBuilder_ == null) { + result.header_ = header_; + } else { + result.header_ = headerBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request) { + return mergeFrom((cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request other) { + if (other == cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request.getDefaultInstance()) return this; + if (other.hasHeader()) { + mergeHeader(other.getHeader()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + input.readMessage( + getHeaderFieldBuilder().getBuilder(), + extensionRegistry); + + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private cmvr.api.Common.CommandHeader.Request header_; + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> headerBuilder_; + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return Whether the header field is set. + */ + public boolean hasHeader() { + return headerBuilder_ != null || header_ != null; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return The header. + */ + public cmvr.api.Common.CommandHeader.Request getHeader() { + if (headerBuilder_ == null) { + return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; + } else { + return headerBuilder_.getMessage(); + } + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder setHeader(cmvr.api.Common.CommandHeader.Request value) { + if (headerBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + header_ = value; + onChanged(); + } else { + headerBuilder_.setMessage(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder setHeader( + cmvr.api.Common.CommandHeader.Request.Builder builderForValue) { + if (headerBuilder_ == null) { + header_ = builderForValue.build(); + onChanged(); + } else { + headerBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder mergeHeader(cmvr.api.Common.CommandHeader.Request value) { + if (headerBuilder_ == null) { + if (header_ != null) { + header_ = + cmvr.api.Common.CommandHeader.Request.newBuilder(header_).mergeFrom(value).buildPartial(); + } else { + header_ = value; + } + onChanged(); + } else { + headerBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder clearHeader() { + if (headerBuilder_ == null) { + header_ = null; + onChanged(); + } else { + header_ = null; + headerBuilder_ = null; + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public cmvr.api.Common.CommandHeader.Request.Builder getHeaderBuilder() { + + onChanged(); + return getHeaderFieldBuilder().getBuilder(); + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() { + if (headerBuilder_ != null) { + return headerBuilder_.getMessageOrBuilder(); + } else { + return header_ == null ? + cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; + } + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> + getHeaderFieldBuilder() { + if (headerBuilder_ == null) { + headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder>( + getHeader(), + getParentForChildren(), + isClean()); + header_ = null; + } + return headerBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.StreamMicAudioCommand.Request) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.StreamMicAudioCommand.Request) + private static final cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request(); + } + + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Request parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Request getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface FeedbackOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.StreamMicAudioCommand.Feedback) + com.google.protobuf.MessageOrBuilder { + + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return Whether the header field is set. + */ + boolean hasHeader(); + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return The header. + */ + cmvr.api.Common.CommandHeader.Feedback getHeader(); + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder(); + + /** + * .cmvr.api.AudioData audio = 2; + * @return Whether the audio field is set. + */ + boolean hasAudio(); + /** + * .cmvr.api.AudioData audio = 2; + * @return The audio. + */ + cmvr.api.Common.AudioData getAudio(); + /** + * .cmvr.api.AudioData audio = 2; + */ + cmvr.api.Common.AudioDataOrBuilder getAudioOrBuilder(); + } + /** + * Protobuf type {@code cmvr.api.StreamMicAudioCommand.Feedback} + */ + public static final class Feedback extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.StreamMicAudioCommand.Feedback) + FeedbackOrBuilder { + private static final long serialVersionUID = 0L; + // Use Feedback.newBuilder() to construct. + private Feedback(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Feedback() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Feedback(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Feedback_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Feedback_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.class, cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.Builder.class); + } + + public static final int HEADER_FIELD_NUMBER = 1; + private cmvr.api.Common.CommandHeader.Feedback header_; + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return Whether the header field is set. + */ + @java.lang.Override + public boolean hasHeader() { + return header_ != null; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return The header. + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.Feedback getHeader() { + return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() { + return getHeader(); + } + + public static final int AUDIO_FIELD_NUMBER = 2; + private cmvr.api.Common.AudioData audio_; + /** + * .cmvr.api.AudioData audio = 2; + * @return Whether the audio field is set. + */ + @java.lang.Override + public boolean hasAudio() { + return audio_ != null; + } + /** + * .cmvr.api.AudioData audio = 2; + * @return The audio. + */ + @java.lang.Override + public cmvr.api.Common.AudioData getAudio() { + return audio_ == null ? cmvr.api.Common.AudioData.getDefaultInstance() : audio_; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + @java.lang.Override + public cmvr.api.Common.AudioDataOrBuilder getAudioOrBuilder() { + return getAudio(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (header_ != null) { + output.writeMessage(1, getHeader()); + } + if (audio_ != null) { + output.writeMessage(2, getAudio()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (header_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getHeader()); + } + if (audio_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getAudio()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback)) { + return super.equals(obj); + } + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback other = (cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback) obj; + + if (hasHeader() != other.hasHeader()) return false; + if (hasHeader()) { + if (!getHeader() + .equals(other.getHeader())) return false; + } + if (hasAudio() != other.hasAudio()) return false; + if (hasAudio()) { + if (!getAudio() + .equals(other.getAudio())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasHeader()) { + hash = (37 * hash) + HEADER_FIELD_NUMBER; + hash = (53 * hash) + getHeader().hashCode(); + } + if (hasAudio()) { + hash = (37 * hash) + AUDIO_FIELD_NUMBER; + hash = (53 * hash) + getAudio().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.StreamMicAudioCommand.Feedback} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.StreamMicAudioCommand.Feedback) + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.FeedbackOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Feedback_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Feedback_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.class, cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.Builder.class); + } + + // Construct using cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (headerBuilder_ == null) { + header_ = null; + } else { + header_ = null; + headerBuilder_ = null; + } + if (audioBuilder_ == null) { + audio_ = null; + } else { + audio_ = null; + audioBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_Feedback_descriptor; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback getDefaultInstanceForType() { + return cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback build() { + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback buildPartial() { + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback result = new cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback(this); + if (headerBuilder_ == null) { + result.header_ = header_; + } else { + result.header_ = headerBuilder_.build(); + } + if (audioBuilder_ == null) { + result.audio_ = audio_; + } else { + result.audio_ = audioBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback) { + return mergeFrom((cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback other) { + if (other == cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback.getDefaultInstance()) return this; + if (other.hasHeader()) { + mergeHeader(other.getHeader()); + } + if (other.hasAudio()) { + mergeAudio(other.getAudio()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + input.readMessage( + getHeaderFieldBuilder().getBuilder(), + extensionRegistry); + + break; + } // case 10 + case 18: { + input.readMessage( + getAudioFieldBuilder().getBuilder(), + extensionRegistry); + + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private cmvr.api.Common.CommandHeader.Feedback header_; + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> headerBuilder_; + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return Whether the header field is set. + */ + public boolean hasHeader() { + return headerBuilder_ != null || header_ != null; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return The header. + */ + public cmvr.api.Common.CommandHeader.Feedback getHeader() { + if (headerBuilder_ == null) { + return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; + } else { + return headerBuilder_.getMessage(); + } + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder setHeader(cmvr.api.Common.CommandHeader.Feedback value) { + if (headerBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + header_ = value; + onChanged(); + } else { + headerBuilder_.setMessage(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder setHeader( + cmvr.api.Common.CommandHeader.Feedback.Builder builderForValue) { + if (headerBuilder_ == null) { + header_ = builderForValue.build(); + onChanged(); + } else { + headerBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder mergeHeader(cmvr.api.Common.CommandHeader.Feedback value) { + if (headerBuilder_ == null) { + if (header_ != null) { + header_ = + cmvr.api.Common.CommandHeader.Feedback.newBuilder(header_).mergeFrom(value).buildPartial(); + } else { + header_ = value; + } + onChanged(); + } else { + headerBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder clearHeader() { + if (headerBuilder_ == null) { + header_ = null; + onChanged(); + } else { + header_ = null; + headerBuilder_ = null; + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public cmvr.api.Common.CommandHeader.Feedback.Builder getHeaderBuilder() { + + onChanged(); + return getHeaderFieldBuilder().getBuilder(); + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() { + if (headerBuilder_ != null) { + return headerBuilder_.getMessageOrBuilder(); + } else { + return header_ == null ? + cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; + } + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> + getHeaderFieldBuilder() { + if (headerBuilder_ == null) { + headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>( + getHeader(), + getParentForChildren(), + isClean()); + header_ = null; + } + return headerBuilder_; + } + + private cmvr.api.Common.AudioData audio_; + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.AudioData, cmvr.api.Common.AudioData.Builder, cmvr.api.Common.AudioDataOrBuilder> audioBuilder_; + /** + * .cmvr.api.AudioData audio = 2; + * @return Whether the audio field is set. + */ + public boolean hasAudio() { + return audioBuilder_ != null || audio_ != null; + } + /** + * .cmvr.api.AudioData audio = 2; + * @return The audio. + */ + public cmvr.api.Common.AudioData getAudio() { + if (audioBuilder_ == null) { + return audio_ == null ? cmvr.api.Common.AudioData.getDefaultInstance() : audio_; + } else { + return audioBuilder_.getMessage(); + } + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder setAudio(cmvr.api.Common.AudioData value) { + if (audioBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + audio_ = value; + onChanged(); + } else { + audioBuilder_.setMessage(value); + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder setAudio( + cmvr.api.Common.AudioData.Builder builderForValue) { + if (audioBuilder_ == null) { + audio_ = builderForValue.build(); + onChanged(); + } else { + audioBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder mergeAudio(cmvr.api.Common.AudioData value) { + if (audioBuilder_ == null) { + if (audio_ != null) { + audio_ = + cmvr.api.Common.AudioData.newBuilder(audio_).mergeFrom(value).buildPartial(); + } else { + audio_ = value; + } + onChanged(); + } else { + audioBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder clearAudio() { + if (audioBuilder_ == null) { + audio_ = null; + onChanged(); + } else { + audio_ = null; + audioBuilder_ = null; + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public cmvr.api.Common.AudioData.Builder getAudioBuilder() { + + onChanged(); + return getAudioFieldBuilder().getBuilder(); + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public cmvr.api.Common.AudioDataOrBuilder getAudioOrBuilder() { + if (audioBuilder_ != null) { + return audioBuilder_.getMessageOrBuilder(); + } else { + return audio_ == null ? + cmvr.api.Common.AudioData.getDefaultInstance() : audio_; + } + } + /** + * .cmvr.api.AudioData audio = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.AudioData, cmvr.api.Common.AudioData.Builder, cmvr.api.Common.AudioDataOrBuilder> + getAudioFieldBuilder() { + if (audioBuilder_ == null) { + audioBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.AudioData, cmvr.api.Common.AudioData.Builder, cmvr.api.Common.AudioDataOrBuilder>( + getAudio(), + getParentForChildren(), + isClean()); + audio_ = null; + } + return audioBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.StreamMicAudioCommand.Feedback) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.StreamMicAudioCommand.Feedback) + private static final cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback(); + } + + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Feedback parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Feedback getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.MicrophoneCommand.StreamMicAudioCommand)) { + return super.equals(obj); + } + cmvr.api.MicrophoneCommand.StreamMicAudioCommand other = (cmvr.api.MicrophoneCommand.StreamMicAudioCommand) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.MicrophoneCommand.StreamMicAudioCommand prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.StreamMicAudioCommand} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.StreamMicAudioCommand) + cmvr.api.MicrophoneCommand.StreamMicAudioCommandOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.MicrophoneCommand.StreamMicAudioCommand.class, cmvr.api.MicrophoneCommand.StreamMicAudioCommand.Builder.class); + } + + // Construct using cmvr.api.MicrophoneCommand.StreamMicAudioCommand.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.MicrophoneCommand.internal_static_cmvr_api_StreamMicAudioCommand_descriptor; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand getDefaultInstanceForType() { + return cmvr.api.MicrophoneCommand.StreamMicAudioCommand.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand build() { + cmvr.api.MicrophoneCommand.StreamMicAudioCommand result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand buildPartial() { + cmvr.api.MicrophoneCommand.StreamMicAudioCommand result = new cmvr.api.MicrophoneCommand.StreamMicAudioCommand(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.MicrophoneCommand.StreamMicAudioCommand) { + return mergeFrom((cmvr.api.MicrophoneCommand.StreamMicAudioCommand)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.MicrophoneCommand.StreamMicAudioCommand other) { + if (other == cmvr.api.MicrophoneCommand.StreamMicAudioCommand.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.StreamMicAudioCommand) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.StreamMicAudioCommand) + private static final cmvr.api.MicrophoneCommand.StreamMicAudioCommand DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.MicrophoneCommand.StreamMicAudioCommand(); + } + + public static cmvr.api.MicrophoneCommand.StreamMicAudioCommand getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public StreamMicAudioCommand parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.MicrophoneCommand.StreamMicAudioCommand getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + public interface SetMicPhoneVolumeCommandOrBuilder extends // @@protoc_insertion_point(interface_extends:cmvr.api.SetMicPhoneVolumeCommand) com.google.protobuf.MessageOrBuilder { @@ -9226,10 +11017,6 @@ public final class MicrophoneCommand { cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder(); /** - *
-       * 音量值(0 ~ 100)
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -9304,10 +11091,6 @@ public final class MicrophoneCommand { public static final int VOLUME_FIELD_NUMBER = 2; private int volume_; /** - *
-       * 音量值(0 ~ 100)
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -9789,10 +11572,6 @@ public final class MicrophoneCommand { private int volume_ ; /** - *
-         * 音量值(0 ~ 100)
-         * 
- * * int32 volume = 2; * @return The volume. */ @@ -9801,10 +11580,6 @@ public final class MicrophoneCommand { return volume_; } /** - *
-         * 音量值(0 ~ 100)
-         * 
- * * int32 volume = 2; * @param value The volume to set. * @return This builder for chaining. @@ -9816,10 +11591,6 @@ public final class MicrophoneCommand { return this; } /** - *
-         * 音量值(0 ~ 100)
-         * 
- * * int32 volume = 2; * @return This builder for chaining. */ @@ -11507,10 +13278,6 @@ public final class MicrophoneCommand { cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder(); /** - *
-       * 当前音量值
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -11585,10 +13352,6 @@ public final class MicrophoneCommand { public static final int VOLUME_FIELD_NUMBER = 2; private int volume_; /** - *
-       * 当前音量值
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -12070,10 +13833,6 @@ public final class MicrophoneCommand { private int volume_ ; /** - *
-         * 当前音量值
-         * 
- * * int32 volume = 2; * @return The volume. */ @@ -12082,10 +13841,6 @@ public final class MicrophoneCommand { return volume_; } /** - *
-         * 当前音量值
-         * 
- * * int32 volume = 2; * @param value The volume to set. * @return This builder for chaining. @@ -12097,10 +13852,6 @@ public final class MicrophoneCommand { return this; } /** - *
-         * 当前音量值
-         * 
- * * int32 volume = 2; * @return This builder for chaining. */ @@ -12610,6 +14361,21 @@ public final class MicrophoneCommand { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_cmvr_api_ResumeMicRecordingCommand_Feedback_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_StreamMicAudioCommand_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_StreamMicAudioCommand_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_StreamMicAudioCommand_Request_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_StreamMicAudioCommand_Request_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_StreamMicAudioCommand_Feedback_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_StreamMicAudioCommand_Feedback_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_cmvr_api_SetMicPhoneVolumeCommand_descriptor; private static final @@ -12673,16 +14439,20 @@ public final class MicrophoneCommand { "\031ResumeMicRecordingCommand\032:\n\007Request\022/\n" + "\006header\030\001 \001(\0132\037.cmvr.api.CommandHeader.R" + "equest\032<\n\010Feedback\0220\n\006header\030\001 \001(\0132 .cmv" + - "r.api.CommandHeader.Feedback\"\244\001\n\030SetMicP" + - "honeVolumeCommand\032J\n\007Request\022/\n\006header\030\001" + - " \001(\0132\037.cmvr.api.CommandHeader.Request\022\016\n" + - "\006volume\030\002 \001(\005\032<\n\010Feedback\0220\n\006header\030\001 \001(" + - "\0132 .cmvr.api.CommandHeader.Feedback\"\244\001\n\030" + - "GetMicPhoneVolumeCommand\032:\n\007Request\022/\n\006h" + - "eader\030\001 \001(\0132\037.cmvr.api.CommandHeader.Req" + - "uest\032L\n\010Feedback\0220\n\006header\030\001 \001(\0132 .cmvr." + - "api.CommandHeader.Feedback\022\016\n\006volume\030\002 \001" + - "(\005b\006proto3" + "r.api.CommandHeader.Feedback\"\265\001\n\025StreamM" + + "icAudioCommand\032:\n\007Request\022/\n\006header\030\001 \001(" + + "\0132\037.cmvr.api.CommandHeader.Request\032`\n\010Fe" + + "edback\0220\n\006header\030\001 \001(\0132 .cmvr.api.Comman" + + "dHeader.Feedback\022\"\n\005audio\030\002 \001(\0132\023.cmvr.a" + + "pi.AudioData\"\244\001\n\030SetMicPhoneVolumeComman" + + "d\032J\n\007Request\022/\n\006header\030\001 \001(\0132\037.cmvr.api." + + "CommandHeader.Request\022\016\n\006volume\030\002 \001(\005\032<\n" + + "\010Feedback\0220\n\006header\030\001 \001(\0132 .cmvr.api.Com" + + "mandHeader.Feedback\"\244\001\n\030GetMicPhoneVolum" + + "eCommand\032:\n\007Request\022/\n\006header\030\001 \001(\0132\037.cm" + + "vr.api.CommandHeader.Request\032L\n\010Feedback" + + "\0220\n\006header\030\001 \001(\0132 .cmvr.api.CommandHeade" + + "r.Feedback\022\016\n\006volume\030\002 \001(\005b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -12785,8 +14555,26 @@ public final class MicrophoneCommand { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_ResumeMicRecordingCommand_Feedback_descriptor, new java.lang.String[] { "Header", }); - internal_static_cmvr_api_SetMicPhoneVolumeCommand_descriptor = + internal_static_cmvr_api_StreamMicAudioCommand_descriptor = getDescriptor().getMessageTypes().get(6); + internal_static_cmvr_api_StreamMicAudioCommand_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_StreamMicAudioCommand_descriptor, + new java.lang.String[] { }); + internal_static_cmvr_api_StreamMicAudioCommand_Request_descriptor = + internal_static_cmvr_api_StreamMicAudioCommand_descriptor.getNestedTypes().get(0); + internal_static_cmvr_api_StreamMicAudioCommand_Request_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_StreamMicAudioCommand_Request_descriptor, + new java.lang.String[] { "Header", }); + internal_static_cmvr_api_StreamMicAudioCommand_Feedback_descriptor = + internal_static_cmvr_api_StreamMicAudioCommand_descriptor.getNestedTypes().get(1); + internal_static_cmvr_api_StreamMicAudioCommand_Feedback_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_StreamMicAudioCommand_Feedback_descriptor, + new java.lang.String[] { "Header", "Audio", }); + internal_static_cmvr_api_SetMicPhoneVolumeCommand_descriptor = + getDescriptor().getMessageTypes().get(7); internal_static_cmvr_api_SetMicPhoneVolumeCommand_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_SetMicPhoneVolumeCommand_descriptor, @@ -12804,7 +14592,7 @@ public final class MicrophoneCommand { internal_static_cmvr_api_SetMicPhoneVolumeCommand_Feedback_descriptor, new java.lang.String[] { "Header", }); internal_static_cmvr_api_GetMicPhoneVolumeCommand_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageTypes().get(8); internal_static_cmvr_api_GetMicPhoneVolumeCommand_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_GetMicPhoneVolumeCommand_descriptor, diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneService.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneService.java index 3a47a36..3d9c6e3 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneService.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/MicrophoneService.java @@ -25,7 +25,7 @@ public final class MicrophoneService { java.lang.String[] descriptorData = { "\n!cmvr/api/microphone_service.proto\022\010cmv" + "r.api\032!cmvr/api/microphone_command.proto" + - "2\327\005\n\017MicPhoneService\022X\n\tGetStatus\022$.cmvr" + + "2\273\006\n\017MicPhoneService\022X\n\tGetStatus\022$.cmvr" + ".api.GetMicStateCommand.Request\032%.cmvr.a" + "pi.GetMicStateCommand.Feedback\022f\n\013StartR" + "ecord\022*.cmvr.api.StartMicRecordingComman" + @@ -38,12 +38,14 @@ public final class MicrophoneService { "ingCommand.Feedback\022i\n\014ResumeRecord\022+.cm" + "vr.api.ResumeMicRecordingCommand.Request" + "\032,.cmvr.api.ResumeMicRecordingCommand.Fe" + - "edback\022d\n\tSetVolume\022*.cmvr.api.SetMicPho" + - "neVolumeCommand.Request\032+.cmvr.api.SetMi" + - "cPhoneVolumeCommand.Feedback\022d\n\tGetVolum" + - "e\022*.cmvr.api.GetMicPhoneVolumeCommand.Re" + - "quest\032+.cmvr.api.GetMicPhoneVolumeComman" + - "d.Feedbackb\006proto3" + "edback\022b\n\013StreamAudio\022\'.cmvr.api.StreamM" + + "icAudioCommand.Request\032(.cmvr.api.Stream" + + "MicAudioCommand.Feedback0\001\022d\n\tSetVolume\022" + + "*.cmvr.api.SetMicPhoneVolumeCommand.Requ" + + "est\032+.cmvr.api.SetMicPhoneVolumeCommand." + + "Feedback\022d\n\tGetVolume\022*.cmvr.api.GetMicP" + + "honeVolumeCommand.Request\032+.cmvr.api.Get" + + "MicPhoneVolumeCommand.Feedbackb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/RobotAudio.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/RobotAudio.java deleted file mode 100644 index ae32f56..0000000 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/RobotAudio.java +++ /dev/null @@ -1,9090 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: cmvr/api/robot_audio.proto - -package cmvr.api; - -public final class RobotAudio { - private RobotAudio() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface RobotAudioFormatOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioFormat) - com.google.protobuf.MessageOrBuilder { - - /** - * int32 sample_rate = 1; - * @return The sampleRate. - */ - int getSampleRate(); - - /** - * int32 channels = 2; - * @return The channels. - */ - int getChannels(); - - /** - * int32 bits_per_sample = 3; - * @return The bitsPerSample. - */ - int getBitsPerSample(); - - /** - * string encoding = 4; - * @return The encoding. - */ - java.lang.String getEncoding(); - /** - * string encoding = 4; - * @return The bytes for encoding. - */ - com.google.protobuf.ByteString - getEncodingBytes(); - } - /** - *
-   * Fixed audio format: PCM_S16LE, 48 kHz, 16-bit, mono.
-   * Both directions use 10 ms frames: 480 samples, 960 bytes.
-   * 
- * - * Protobuf type {@code cmvr.api.RobotAudioFormat} - */ - public static final class RobotAudioFormat extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioFormat) - RobotAudioFormatOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioFormat.newBuilder() to construct. - private RobotAudioFormat(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioFormat() { - encoding_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioFormat(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFormat_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFormat_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioFormat.class, cmvr.api.RobotAudio.RobotAudioFormat.Builder.class); - } - - public static final int SAMPLE_RATE_FIELD_NUMBER = 1; - private int sampleRate_; - /** - * int32 sample_rate = 1; - * @return The sampleRate. - */ - @java.lang.Override - public int getSampleRate() { - return sampleRate_; - } - - public static final int CHANNELS_FIELD_NUMBER = 2; - private int channels_; - /** - * int32 channels = 2; - * @return The channels. - */ - @java.lang.Override - public int getChannels() { - return channels_; - } - - public static final int BITS_PER_SAMPLE_FIELD_NUMBER = 3; - private int bitsPerSample_; - /** - * int32 bits_per_sample = 3; - * @return The bitsPerSample. - */ - @java.lang.Override - public int getBitsPerSample() { - return bitsPerSample_; - } - - public static final int ENCODING_FIELD_NUMBER = 4; - private volatile java.lang.Object encoding_; - /** - * string encoding = 4; - * @return The encoding. - */ - @java.lang.Override - public java.lang.String getEncoding() { - java.lang.Object ref = encoding_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - encoding_ = s; - return s; - } - } - /** - * string encoding = 4; - * @return The bytes for encoding. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getEncodingBytes() { - java.lang.Object ref = encoding_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - encoding_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (sampleRate_ != 0) { - output.writeInt32(1, sampleRate_); - } - if (channels_ != 0) { - output.writeInt32(2, channels_); - } - if (bitsPerSample_ != 0) { - output.writeInt32(3, bitsPerSample_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(encoding_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 4, encoding_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (sampleRate_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, sampleRate_); - } - if (channels_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, channels_); - } - if (bitsPerSample_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(3, bitsPerSample_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(encoding_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, encoding_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioFormat)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioFormat other = (cmvr.api.RobotAudio.RobotAudioFormat) obj; - - if (getSampleRate() - != other.getSampleRate()) return false; - if (getChannels() - != other.getChannels()) return false; - if (getBitsPerSample() - != other.getBitsPerSample()) return false; - if (!getEncoding() - .equals(other.getEncoding())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SAMPLE_RATE_FIELD_NUMBER; - hash = (53 * hash) + getSampleRate(); - hash = (37 * hash) + CHANNELS_FIELD_NUMBER; - hash = (53 * hash) + getChannels(); - hash = (37 * hash) + BITS_PER_SAMPLE_FIELD_NUMBER; - hash = (53 * hash) + getBitsPerSample(); - hash = (37 * hash) + ENCODING_FIELD_NUMBER; - hash = (53 * hash) + getEncoding().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioFormat parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioFormat prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * Fixed audio format: PCM_S16LE, 48 kHz, 16-bit, mono.
-     * Both directions use 10 ms frames: 480 samples, 960 bytes.
-     * 
- * - * Protobuf type {@code cmvr.api.RobotAudioFormat} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioFormat) - cmvr.api.RobotAudio.RobotAudioFormatOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFormat_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFormat_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioFormat.class, cmvr.api.RobotAudio.RobotAudioFormat.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioFormat.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sampleRate_ = 0; - - channels_ = 0; - - bitsPerSample_ = 0; - - encoding_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFormat_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFormat getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioFormat.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFormat build() { - cmvr.api.RobotAudio.RobotAudioFormat result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFormat buildPartial() { - cmvr.api.RobotAudio.RobotAudioFormat result = new cmvr.api.RobotAudio.RobotAudioFormat(this); - result.sampleRate_ = sampleRate_; - result.channels_ = channels_; - result.bitsPerSample_ = bitsPerSample_; - result.encoding_ = encoding_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioFormat) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioFormat)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioFormat other) { - if (other == cmvr.api.RobotAudio.RobotAudioFormat.getDefaultInstance()) return this; - if (other.getSampleRate() != 0) { - setSampleRate(other.getSampleRate()); - } - if (other.getChannels() != 0) { - setChannels(other.getChannels()); - } - if (other.getBitsPerSample() != 0) { - setBitsPerSample(other.getBitsPerSample()); - } - if (!other.getEncoding().isEmpty()) { - encoding_ = other.encoding_; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - sampleRate_ = input.readInt32(); - - break; - } // case 8 - case 16: { - channels_ = input.readInt32(); - - break; - } // case 16 - case 24: { - bitsPerSample_ = input.readInt32(); - - break; - } // case 24 - case 34: { - encoding_ = input.readStringRequireUtf8(); - - break; - } // case 34 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int sampleRate_ ; - /** - * int32 sample_rate = 1; - * @return The sampleRate. - */ - @java.lang.Override - public int getSampleRate() { - return sampleRate_; - } - /** - * int32 sample_rate = 1; - * @param value The sampleRate to set. - * @return This builder for chaining. - */ - public Builder setSampleRate(int value) { - - sampleRate_ = value; - onChanged(); - return this; - } - /** - * int32 sample_rate = 1; - * @return This builder for chaining. - */ - public Builder clearSampleRate() { - - sampleRate_ = 0; - onChanged(); - return this; - } - - private int channels_ ; - /** - * int32 channels = 2; - * @return The channels. - */ - @java.lang.Override - public int getChannels() { - return channels_; - } - /** - * int32 channels = 2; - * @param value The channels to set. - * @return This builder for chaining. - */ - public Builder setChannels(int value) { - - channels_ = value; - onChanged(); - return this; - } - /** - * int32 channels = 2; - * @return This builder for chaining. - */ - public Builder clearChannels() { - - channels_ = 0; - onChanged(); - return this; - } - - private int bitsPerSample_ ; - /** - * int32 bits_per_sample = 3; - * @return The bitsPerSample. - */ - @java.lang.Override - public int getBitsPerSample() { - return bitsPerSample_; - } - /** - * int32 bits_per_sample = 3; - * @param value The bitsPerSample to set. - * @return This builder for chaining. - */ - public Builder setBitsPerSample(int value) { - - bitsPerSample_ = value; - onChanged(); - return this; - } - /** - * int32 bits_per_sample = 3; - * @return This builder for chaining. - */ - public Builder clearBitsPerSample() { - - bitsPerSample_ = 0; - onChanged(); - return this; - } - - private java.lang.Object encoding_ = ""; - /** - * string encoding = 4; - * @return The encoding. - */ - public java.lang.String getEncoding() { - java.lang.Object ref = encoding_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - encoding_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string encoding = 4; - * @return The bytes for encoding. - */ - public com.google.protobuf.ByteString - getEncodingBytes() { - java.lang.Object ref = encoding_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - encoding_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string encoding = 4; - * @param value The encoding to set. - * @return This builder for chaining. - */ - public Builder setEncoding( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - encoding_ = value; - onChanged(); - return this; - } - /** - * string encoding = 4; - * @return This builder for chaining. - */ - public Builder clearEncoding() { - - encoding_ = getDefaultInstance().getEncoding(); - onChanged(); - return this; - } - /** - * string encoding = 4; - * @param value The bytes for encoding to set. - * @return This builder for chaining. - */ - public Builder setEncodingBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - encoding_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioFormat) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioFormat) - private static final cmvr.api.RobotAudio.RobotAudioFormat DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioFormat(); - } - - public static cmvr.api.RobotAudio.RobotAudioFormat getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioFormat parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFormat getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioStartOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioStart) - com.google.protobuf.MessageOrBuilder { - - /** - * string session_id = 1; - * @return The sessionId. - */ - java.lang.String getSessionId(); - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - com.google.protobuf.ByteString - getSessionIdBytes(); - - /** - * string operator_id = 2; - * @return The operatorId. - */ - java.lang.String getOperatorId(); - /** - * string operator_id = 2; - * @return The bytes for operatorId. - */ - com.google.protobuf.ByteString - getOperatorIdBytes(); - - /** - * .cmvr.api.RobotAudioFormat format = 3; - * @return Whether the format field is set. - */ - boolean hasFormat(); - /** - * .cmvr.api.RobotAudioFormat format = 3; - * @return The format. - */ - cmvr.api.RobotAudio.RobotAudioFormat getFormat(); - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - cmvr.api.RobotAudio.RobotAudioFormatOrBuilder getFormatOrBuilder(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioStart} - */ - public static final class RobotAudioStart extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioStart) - RobotAudioStartOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioStart.newBuilder() to construct. - private RobotAudioStart(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioStart() { - sessionId_ = ""; - operatorId_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioStart(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStart_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStart_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioStart.class, cmvr.api.RobotAudio.RobotAudioStart.Builder.class); - } - - public static final int SESSION_ID_FIELD_NUMBER = 1; - private volatile java.lang.Object sessionId_; - /** - * string session_id = 1; - * @return The sessionId. - */ - @java.lang.Override - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int OPERATOR_ID_FIELD_NUMBER = 2; - private volatile java.lang.Object operatorId_; - /** - * string operator_id = 2; - * @return The operatorId. - */ - @java.lang.Override - public java.lang.String getOperatorId() { - java.lang.Object ref = operatorId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - operatorId_ = s; - return s; - } - } - /** - * string operator_id = 2; - * @return The bytes for operatorId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getOperatorIdBytes() { - java.lang.Object ref = operatorId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - operatorId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int FORMAT_FIELD_NUMBER = 3; - private cmvr.api.RobotAudio.RobotAudioFormat format_; - /** - * .cmvr.api.RobotAudioFormat format = 3; - * @return Whether the format field is set. - */ - @java.lang.Override - public boolean hasFormat() { - return format_ != null; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - * @return The format. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFormat getFormat() { - return format_ == null ? cmvr.api.RobotAudio.RobotAudioFormat.getDefaultInstance() : format_; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFormatOrBuilder getFormatOrBuilder() { - return getFormat(); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sessionId_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operatorId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, operatorId_); - } - if (format_ != null) { - output.writeMessage(3, getFormat()); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sessionId_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operatorId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, operatorId_); - } - if (format_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, getFormat()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioStart)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioStart other = (cmvr.api.RobotAudio.RobotAudioStart) obj; - - if (!getSessionId() - .equals(other.getSessionId())) return false; - if (!getOperatorId() - .equals(other.getOperatorId())) return false; - if (hasFormat() != other.hasFormat()) return false; - if (hasFormat()) { - if (!getFormat() - .equals(other.getFormat())) return false; - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_ID_FIELD_NUMBER; - hash = (53 * hash) + getSessionId().hashCode(); - hash = (37 * hash) + OPERATOR_ID_FIELD_NUMBER; - hash = (53 * hash) + getOperatorId().hashCode(); - if (hasFormat()) { - hash = (37 * hash) + FORMAT_FIELD_NUMBER; - hash = (53 * hash) + getFormat().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStart parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioStart prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioStart} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioStart) - cmvr.api.RobotAudio.RobotAudioStartOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStart_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStart_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioStart.class, cmvr.api.RobotAudio.RobotAudioStart.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioStart.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sessionId_ = ""; - - operatorId_ = ""; - - if (formatBuilder_ == null) { - format_ = null; - } else { - format_ = null; - formatBuilder_ = null; - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStart_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStart getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStart build() { - cmvr.api.RobotAudio.RobotAudioStart result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStart buildPartial() { - cmvr.api.RobotAudio.RobotAudioStart result = new cmvr.api.RobotAudio.RobotAudioStart(this); - result.sessionId_ = sessionId_; - result.operatorId_ = operatorId_; - if (formatBuilder_ == null) { - result.format_ = format_; - } else { - result.format_ = formatBuilder_.build(); - } - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioStart) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioStart)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioStart other) { - if (other == cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance()) return this; - if (!other.getSessionId().isEmpty()) { - sessionId_ = other.sessionId_; - onChanged(); - } - if (!other.getOperatorId().isEmpty()) { - operatorId_ = other.operatorId_; - onChanged(); - } - if (other.hasFormat()) { - mergeFormat(other.getFormat()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - sessionId_ = input.readStringRequireUtf8(); - - break; - } // case 10 - case 18: { - operatorId_ = input.readStringRequireUtf8(); - - break; - } // case 18 - case 26: { - input.readMessage( - getFormatFieldBuilder().getBuilder(), - extensionRegistry); - - break; - } // case 26 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private java.lang.Object sessionId_ = ""; - /** - * string session_id = 1; - * @return The sessionId. - */ - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string session_id = 1; - * @param value The sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - sessionId_ = value; - onChanged(); - return this; - } - /** - * string session_id = 1; - * @return This builder for chaining. - */ - public Builder clearSessionId() { - - sessionId_ = getDefaultInstance().getSessionId(); - onChanged(); - return this; - } - /** - * string session_id = 1; - * @param value The bytes for sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - sessionId_ = value; - onChanged(); - return this; - } - - private java.lang.Object operatorId_ = ""; - /** - * string operator_id = 2; - * @return The operatorId. - */ - public java.lang.String getOperatorId() { - java.lang.Object ref = operatorId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - operatorId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string operator_id = 2; - * @return The bytes for operatorId. - */ - public com.google.protobuf.ByteString - getOperatorIdBytes() { - java.lang.Object ref = operatorId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - operatorId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string operator_id = 2; - * @param value The operatorId to set. - * @return This builder for chaining. - */ - public Builder setOperatorId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - operatorId_ = value; - onChanged(); - return this; - } - /** - * string operator_id = 2; - * @return This builder for chaining. - */ - public Builder clearOperatorId() { - - operatorId_ = getDefaultInstance().getOperatorId(); - onChanged(); - return this; - } - /** - * string operator_id = 2; - * @param value The bytes for operatorId to set. - * @return This builder for chaining. - */ - public Builder setOperatorIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - operatorId_ = value; - onChanged(); - return this; - } - - private cmvr.api.RobotAudio.RobotAudioFormat format_; - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFormat, cmvr.api.RobotAudio.RobotAudioFormat.Builder, cmvr.api.RobotAudio.RobotAudioFormatOrBuilder> formatBuilder_; - /** - * .cmvr.api.RobotAudioFormat format = 3; - * @return Whether the format field is set. - */ - public boolean hasFormat() { - return formatBuilder_ != null || format_ != null; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - * @return The format. - */ - public cmvr.api.RobotAudio.RobotAudioFormat getFormat() { - if (formatBuilder_ == null) { - return format_ == null ? cmvr.api.RobotAudio.RobotAudioFormat.getDefaultInstance() : format_; - } else { - return formatBuilder_.getMessage(); - } - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - public Builder setFormat(cmvr.api.RobotAudio.RobotAudioFormat value) { - if (formatBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - format_ = value; - onChanged(); - } else { - formatBuilder_.setMessage(value); - } - - return this; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - public Builder setFormat( - cmvr.api.RobotAudio.RobotAudioFormat.Builder builderForValue) { - if (formatBuilder_ == null) { - format_ = builderForValue.build(); - onChanged(); - } else { - formatBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - public Builder mergeFormat(cmvr.api.RobotAudio.RobotAudioFormat value) { - if (formatBuilder_ == null) { - if (format_ != null) { - format_ = - cmvr.api.RobotAudio.RobotAudioFormat.newBuilder(format_).mergeFrom(value).buildPartial(); - } else { - format_ = value; - } - onChanged(); - } else { - formatBuilder_.mergeFrom(value); - } - - return this; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - public Builder clearFormat() { - if (formatBuilder_ == null) { - format_ = null; - onChanged(); - } else { - format_ = null; - formatBuilder_ = null; - } - - return this; - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - public cmvr.api.RobotAudio.RobotAudioFormat.Builder getFormatBuilder() { - - onChanged(); - return getFormatFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - public cmvr.api.RobotAudio.RobotAudioFormatOrBuilder getFormatOrBuilder() { - if (formatBuilder_ != null) { - return formatBuilder_.getMessageOrBuilder(); - } else { - return format_ == null ? - cmvr.api.RobotAudio.RobotAudioFormat.getDefaultInstance() : format_; - } - } - /** - * .cmvr.api.RobotAudioFormat format = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFormat, cmvr.api.RobotAudio.RobotAudioFormat.Builder, cmvr.api.RobotAudio.RobotAudioFormatOrBuilder> - getFormatFieldBuilder() { - if (formatBuilder_ == null) { - formatBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFormat, cmvr.api.RobotAudio.RobotAudioFormat.Builder, cmvr.api.RobotAudio.RobotAudioFormatOrBuilder>( - getFormat(), - getParentForChildren(), - isClean()); - format_ = null; - } - return formatBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioStart) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioStart) - private static final cmvr.api.RobotAudio.RobotAudioStart DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioStart(); - } - - public static cmvr.api.RobotAudio.RobotAudioStart getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioStart parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStart getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioFrameOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioFrame) - com.google.protobuf.MessageOrBuilder { - - /** - * string session_id = 1; - * @return The sessionId. - */ - java.lang.String getSessionId(); - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - com.google.protobuf.ByteString - getSessionIdBytes(); - - /** - * int64 sequence = 2; - * @return The sequence. - */ - long getSequence(); - - /** - *
-     * Robot upload: capture timestamp. Browser downlink: backend send timestamp.
-     * 
- * - * int64 timestamp_ms = 3; - * @return The timestampMs. - */ - long getTimestampMs(); - - /** - *
-     * PCM_S16LE. Fixed 10 ms / 960 bytes at 48 kHz mono 16-bit.
-     * 
- * - * bytes pcm = 4; - * @return The pcm. - */ - com.google.protobuf.ByteString getPcm(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioFrame} - */ - public static final class RobotAudioFrame extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioFrame) - RobotAudioFrameOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioFrame.newBuilder() to construct. - private RobotAudioFrame(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioFrame() { - sessionId_ = ""; - pcm_ = com.google.protobuf.ByteString.EMPTY; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioFrame(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFrame_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFrame_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioFrame.class, cmvr.api.RobotAudio.RobotAudioFrame.Builder.class); - } - - public static final int SESSION_ID_FIELD_NUMBER = 1; - private volatile java.lang.Object sessionId_; - /** - * string session_id = 1; - * @return The sessionId. - */ - @java.lang.Override - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int SEQUENCE_FIELD_NUMBER = 2; - private long sequence_; - /** - * int64 sequence = 2; - * @return The sequence. - */ - @java.lang.Override - public long getSequence() { - return sequence_; - } - - public static final int TIMESTAMP_MS_FIELD_NUMBER = 3; - private long timestampMs_; - /** - *
-     * Robot upload: capture timestamp. Browser downlink: backend send timestamp.
-     * 
- * - * int64 timestamp_ms = 3; - * @return The timestampMs. - */ - @java.lang.Override - public long getTimestampMs() { - return timestampMs_; - } - - public static final int PCM_FIELD_NUMBER = 4; - private com.google.protobuf.ByteString pcm_; - /** - *
-     * PCM_S16LE. Fixed 10 ms / 960 bytes at 48 kHz mono 16-bit.
-     * 
- * - * bytes pcm = 4; - * @return The pcm. - */ - @java.lang.Override - public com.google.protobuf.ByteString getPcm() { - return pcm_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sessionId_); - } - if (sequence_ != 0L) { - output.writeInt64(2, sequence_); - } - if (timestampMs_ != 0L) { - output.writeInt64(3, timestampMs_); - } - if (!pcm_.isEmpty()) { - output.writeBytes(4, pcm_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sessionId_); - } - if (sequence_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(2, sequence_); - } - if (timestampMs_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(3, timestampMs_); - } - if (!pcm_.isEmpty()) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(4, pcm_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioFrame)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioFrame other = (cmvr.api.RobotAudio.RobotAudioFrame) obj; - - if (!getSessionId() - .equals(other.getSessionId())) return false; - if (getSequence() - != other.getSequence()) return false; - if (getTimestampMs() - != other.getTimestampMs()) return false; - if (!getPcm() - .equals(other.getPcm())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_ID_FIELD_NUMBER; - hash = (53 * hash) + getSessionId().hashCode(); - hash = (37 * hash) + SEQUENCE_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getSequence()); - hash = (37 * hash) + TIMESTAMP_MS_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getTimestampMs()); - hash = (37 * hash) + PCM_FIELD_NUMBER; - hash = (53 * hash) + getPcm().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioFrame parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioFrame prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioFrame} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioFrame) - cmvr.api.RobotAudio.RobotAudioFrameOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFrame_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFrame_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioFrame.class, cmvr.api.RobotAudio.RobotAudioFrame.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioFrame.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sessionId_ = ""; - - sequence_ = 0L; - - timestampMs_ = 0L; - - pcm_ = com.google.protobuf.ByteString.EMPTY; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioFrame_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame build() { - cmvr.api.RobotAudio.RobotAudioFrame result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame buildPartial() { - cmvr.api.RobotAudio.RobotAudioFrame result = new cmvr.api.RobotAudio.RobotAudioFrame(this); - result.sessionId_ = sessionId_; - result.sequence_ = sequence_; - result.timestampMs_ = timestampMs_; - result.pcm_ = pcm_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioFrame) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioFrame)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioFrame other) { - if (other == cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance()) return this; - if (!other.getSessionId().isEmpty()) { - sessionId_ = other.sessionId_; - onChanged(); - } - if (other.getSequence() != 0L) { - setSequence(other.getSequence()); - } - if (other.getTimestampMs() != 0L) { - setTimestampMs(other.getTimestampMs()); - } - if (other.getPcm() != com.google.protobuf.ByteString.EMPTY) { - setPcm(other.getPcm()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - sessionId_ = input.readStringRequireUtf8(); - - break; - } // case 10 - case 16: { - sequence_ = input.readInt64(); - - break; - } // case 16 - case 24: { - timestampMs_ = input.readInt64(); - - break; - } // case 24 - case 34: { - pcm_ = input.readBytes(); - - break; - } // case 34 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private java.lang.Object sessionId_ = ""; - /** - * string session_id = 1; - * @return The sessionId. - */ - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string session_id = 1; - * @param value The sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - sessionId_ = value; - onChanged(); - return this; - } - /** - * string session_id = 1; - * @return This builder for chaining. - */ - public Builder clearSessionId() { - - sessionId_ = getDefaultInstance().getSessionId(); - onChanged(); - return this; - } - /** - * string session_id = 1; - * @param value The bytes for sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - sessionId_ = value; - onChanged(); - return this; - } - - private long sequence_ ; - /** - * int64 sequence = 2; - * @return The sequence. - */ - @java.lang.Override - public long getSequence() { - return sequence_; - } - /** - * int64 sequence = 2; - * @param value The sequence to set. - * @return This builder for chaining. - */ - public Builder setSequence(long value) { - - sequence_ = value; - onChanged(); - return this; - } - /** - * int64 sequence = 2; - * @return This builder for chaining. - */ - public Builder clearSequence() { - - sequence_ = 0L; - onChanged(); - return this; - } - - private long timestampMs_ ; - /** - *
-       * Robot upload: capture timestamp. Browser downlink: backend send timestamp.
-       * 
- * - * int64 timestamp_ms = 3; - * @return The timestampMs. - */ - @java.lang.Override - public long getTimestampMs() { - return timestampMs_; - } - /** - *
-       * Robot upload: capture timestamp. Browser downlink: backend send timestamp.
-       * 
- * - * int64 timestamp_ms = 3; - * @param value The timestampMs to set. - * @return This builder for chaining. - */ - public Builder setTimestampMs(long value) { - - timestampMs_ = value; - onChanged(); - return this; - } - /** - *
-       * Robot upload: capture timestamp. Browser downlink: backend send timestamp.
-       * 
- * - * int64 timestamp_ms = 3; - * @return This builder for chaining. - */ - public Builder clearTimestampMs() { - - timestampMs_ = 0L; - onChanged(); - return this; - } - - private com.google.protobuf.ByteString pcm_ = com.google.protobuf.ByteString.EMPTY; - /** - *
-       * PCM_S16LE. Fixed 10 ms / 960 bytes at 48 kHz mono 16-bit.
-       * 
- * - * bytes pcm = 4; - * @return The pcm. - */ - @java.lang.Override - public com.google.protobuf.ByteString getPcm() { - return pcm_; - } - /** - *
-       * PCM_S16LE. Fixed 10 ms / 960 bytes at 48 kHz mono 16-bit.
-       * 
- * - * bytes pcm = 4; - * @param value The pcm to set. - * @return This builder for chaining. - */ - public Builder setPcm(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - - pcm_ = value; - onChanged(); - return this; - } - /** - *
-       * PCM_S16LE. Fixed 10 ms / 960 bytes at 48 kHz mono 16-bit.
-       * 
- * - * bytes pcm = 4; - * @return This builder for chaining. - */ - public Builder clearPcm() { - - pcm_ = getDefaultInstance().getPcm(); - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioFrame) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioFrame) - private static final cmvr.api.RobotAudio.RobotAudioFrame DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioFrame(); - } - - public static cmvr.api.RobotAudio.RobotAudioFrame getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioFrame parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioHeartbeatOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioHeartbeat) - com.google.protobuf.MessageOrBuilder { - - /** - * string session_id = 1; - * @return The sessionId. - */ - java.lang.String getSessionId(); - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - com.google.protobuf.ByteString - getSessionIdBytes(); - - /** - * int64 timestamp_ms = 2; - * @return The timestampMs. - */ - long getTimestampMs(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioHeartbeat} - */ - public static final class RobotAudioHeartbeat extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioHeartbeat) - RobotAudioHeartbeatOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioHeartbeat.newBuilder() to construct. - private RobotAudioHeartbeat(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioHeartbeat() { - sessionId_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioHeartbeat(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioHeartbeat_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioHeartbeat_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioHeartbeat.class, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder.class); - } - - public static final int SESSION_ID_FIELD_NUMBER = 1; - private volatile java.lang.Object sessionId_; - /** - * string session_id = 1; - * @return The sessionId. - */ - @java.lang.Override - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TIMESTAMP_MS_FIELD_NUMBER = 2; - private long timestampMs_; - /** - * int64 timestamp_ms = 2; - * @return The timestampMs. - */ - @java.lang.Override - public long getTimestampMs() { - return timestampMs_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sessionId_); - } - if (timestampMs_ != 0L) { - output.writeInt64(2, timestampMs_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sessionId_); - } - if (timestampMs_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(2, timestampMs_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioHeartbeat)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioHeartbeat other = (cmvr.api.RobotAudio.RobotAudioHeartbeat) obj; - - if (!getSessionId() - .equals(other.getSessionId())) return false; - if (getTimestampMs() - != other.getTimestampMs()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_ID_FIELD_NUMBER; - hash = (53 * hash) + getSessionId().hashCode(); - hash = (37 * hash) + TIMESTAMP_MS_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getTimestampMs()); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioHeartbeat parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioHeartbeat prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioHeartbeat} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioHeartbeat) - cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioHeartbeat_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioHeartbeat_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioHeartbeat.class, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioHeartbeat.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sessionId_ = ""; - - timestampMs_ = 0L; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioHeartbeat_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat build() { - cmvr.api.RobotAudio.RobotAudioHeartbeat result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat buildPartial() { - cmvr.api.RobotAudio.RobotAudioHeartbeat result = new cmvr.api.RobotAudio.RobotAudioHeartbeat(this); - result.sessionId_ = sessionId_; - result.timestampMs_ = timestampMs_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioHeartbeat) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioHeartbeat)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioHeartbeat other) { - if (other == cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance()) return this; - if (!other.getSessionId().isEmpty()) { - sessionId_ = other.sessionId_; - onChanged(); - } - if (other.getTimestampMs() != 0L) { - setTimestampMs(other.getTimestampMs()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - sessionId_ = input.readStringRequireUtf8(); - - break; - } // case 10 - case 16: { - timestampMs_ = input.readInt64(); - - break; - } // case 16 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private java.lang.Object sessionId_ = ""; - /** - * string session_id = 1; - * @return The sessionId. - */ - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string session_id = 1; - * @param value The sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - sessionId_ = value; - onChanged(); - return this; - } - /** - * string session_id = 1; - * @return This builder for chaining. - */ - public Builder clearSessionId() { - - sessionId_ = getDefaultInstance().getSessionId(); - onChanged(); - return this; - } - /** - * string session_id = 1; - * @param value The bytes for sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - sessionId_ = value; - onChanged(); - return this; - } - - private long timestampMs_ ; - /** - * int64 timestamp_ms = 2; - * @return The timestampMs. - */ - @java.lang.Override - public long getTimestampMs() { - return timestampMs_; - } - /** - * int64 timestamp_ms = 2; - * @param value The timestampMs to set. - * @return This builder for chaining. - */ - public Builder setTimestampMs(long value) { - - timestampMs_ = value; - onChanged(); - return this; - } - /** - * int64 timestamp_ms = 2; - * @return This builder for chaining. - */ - public Builder clearTimestampMs() { - - timestampMs_ = 0L; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioHeartbeat) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioHeartbeat) - private static final cmvr.api.RobotAudio.RobotAudioHeartbeat DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioHeartbeat(); - } - - public static cmvr.api.RobotAudio.RobotAudioHeartbeat getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioHeartbeat parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioStopOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioStop) - com.google.protobuf.MessageOrBuilder { - - /** - * string session_id = 1; - * @return The sessionId. - */ - java.lang.String getSessionId(); - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - com.google.protobuf.ByteString - getSessionIdBytes(); - - /** - * string reason = 2; - * @return The reason. - */ - java.lang.String getReason(); - /** - * string reason = 2; - * @return The bytes for reason. - */ - com.google.protobuf.ByteString - getReasonBytes(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioStop} - */ - public static final class RobotAudioStop extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioStop) - RobotAudioStopOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioStop.newBuilder() to construct. - private RobotAudioStop(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioStop() { - sessionId_ = ""; - reason_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioStop(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStop_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStop_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioStop.class, cmvr.api.RobotAudio.RobotAudioStop.Builder.class); - } - - public static final int SESSION_ID_FIELD_NUMBER = 1; - private volatile java.lang.Object sessionId_; - /** - * string session_id = 1; - * @return The sessionId. - */ - @java.lang.Override - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int REASON_FIELD_NUMBER = 2; - private volatile java.lang.Object reason_; - /** - * string reason = 2; - * @return The reason. - */ - @java.lang.Override - public java.lang.String getReason() { - java.lang.Object ref = reason_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - reason_ = s; - return s; - } - } - /** - * string reason = 2; - * @return The bytes for reason. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getReasonBytes() { - java.lang.Object ref = reason_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - reason_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sessionId_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reason_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, reason_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sessionId_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reason_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, reason_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioStop)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioStop other = (cmvr.api.RobotAudio.RobotAudioStop) obj; - - if (!getSessionId() - .equals(other.getSessionId())) return false; - if (!getReason() - .equals(other.getReason())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_ID_FIELD_NUMBER; - hash = (53 * hash) + getSessionId().hashCode(); - hash = (37 * hash) + REASON_FIELD_NUMBER; - hash = (53 * hash) + getReason().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStop parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioStop prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioStop} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioStop) - cmvr.api.RobotAudio.RobotAudioStopOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStop_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStop_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioStop.class, cmvr.api.RobotAudio.RobotAudioStop.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioStop.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sessionId_ = ""; - - reason_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStop_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop build() { - cmvr.api.RobotAudio.RobotAudioStop result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop buildPartial() { - cmvr.api.RobotAudio.RobotAudioStop result = new cmvr.api.RobotAudio.RobotAudioStop(this); - result.sessionId_ = sessionId_; - result.reason_ = reason_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioStop) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioStop)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioStop other) { - if (other == cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance()) return this; - if (!other.getSessionId().isEmpty()) { - sessionId_ = other.sessionId_; - onChanged(); - } - if (!other.getReason().isEmpty()) { - reason_ = other.reason_; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - sessionId_ = input.readStringRequireUtf8(); - - break; - } // case 10 - case 18: { - reason_ = input.readStringRequireUtf8(); - - break; - } // case 18 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private java.lang.Object sessionId_ = ""; - /** - * string session_id = 1; - * @return The sessionId. - */ - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string session_id = 1; - * @param value The sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - sessionId_ = value; - onChanged(); - return this; - } - /** - * string session_id = 1; - * @return This builder for chaining. - */ - public Builder clearSessionId() { - - sessionId_ = getDefaultInstance().getSessionId(); - onChanged(); - return this; - } - /** - * string session_id = 1; - * @param value The bytes for sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - sessionId_ = value; - onChanged(); - return this; - } - - private java.lang.Object reason_ = ""; - /** - * string reason = 2; - * @return The reason. - */ - public java.lang.String getReason() { - java.lang.Object ref = reason_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - reason_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string reason = 2; - * @return The bytes for reason. - */ - public com.google.protobuf.ByteString - getReasonBytes() { - java.lang.Object ref = reason_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - reason_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string reason = 2; - * @param value The reason to set. - * @return This builder for chaining. - */ - public Builder setReason( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - reason_ = value; - onChanged(); - return this; - } - /** - * string reason = 2; - * @return This builder for chaining. - */ - public Builder clearReason() { - - reason_ = getDefaultInstance().getReason(); - onChanged(); - return this; - } - /** - * string reason = 2; - * @param value The bytes for reason to set. - * @return This builder for chaining. - */ - public Builder setReasonBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - reason_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioStop) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioStop) - private static final cmvr.api.RobotAudio.RobotAudioStop DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioStop(); - } - - public static cmvr.api.RobotAudio.RobotAudioStop getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioStop parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioErrorOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioError) - com.google.protobuf.MessageOrBuilder { - - /** - * string session_id = 1; - * @return The sessionId. - */ - java.lang.String getSessionId(); - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - com.google.protobuf.ByteString - getSessionIdBytes(); - - /** - * int32 code = 2; - * @return The code. - */ - int getCode(); - - /** - * string message = 3; - * @return The message. - */ - java.lang.String getMessage(); - /** - * string message = 3; - * @return The bytes for message. - */ - com.google.protobuf.ByteString - getMessageBytes(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioError} - */ - public static final class RobotAudioError extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioError) - RobotAudioErrorOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioError.newBuilder() to construct. - private RobotAudioError(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioError() { - sessionId_ = ""; - message_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioError(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioError_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioError_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioError.class, cmvr.api.RobotAudio.RobotAudioError.Builder.class); - } - - public static final int SESSION_ID_FIELD_NUMBER = 1; - private volatile java.lang.Object sessionId_; - /** - * string session_id = 1; - * @return The sessionId. - */ - @java.lang.Override - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int CODE_FIELD_NUMBER = 2; - private int code_; - /** - * int32 code = 2; - * @return The code. - */ - @java.lang.Override - public int getCode() { - return code_; - } - - public static final int MESSAGE_FIELD_NUMBER = 3; - private volatile java.lang.Object message_; - /** - * string message = 3; - * @return The message. - */ - @java.lang.Override - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } - } - /** - * string message = 3; - * @return The bytes for message. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sessionId_); - } - if (code_ != 0) { - output.writeInt32(2, code_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sessionId_); - } - if (code_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, code_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioError)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioError other = (cmvr.api.RobotAudio.RobotAudioError) obj; - - if (!getSessionId() - .equals(other.getSessionId())) return false; - if (getCode() - != other.getCode()) return false; - if (!getMessage() - .equals(other.getMessage())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_ID_FIELD_NUMBER; - hash = (53 * hash) + getSessionId().hashCode(); - hash = (37 * hash) + CODE_FIELD_NUMBER; - hash = (53 * hash) + getCode(); - hash = (37 * hash) + MESSAGE_FIELD_NUMBER; - hash = (53 * hash) + getMessage().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioError parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioError parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioError parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioError prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioError} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioError) - cmvr.api.RobotAudio.RobotAudioErrorOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioError_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioError_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioError.class, cmvr.api.RobotAudio.RobotAudioError.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioError.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sessionId_ = ""; - - code_ = 0; - - message_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioError_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError build() { - cmvr.api.RobotAudio.RobotAudioError result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError buildPartial() { - cmvr.api.RobotAudio.RobotAudioError result = new cmvr.api.RobotAudio.RobotAudioError(this); - result.sessionId_ = sessionId_; - result.code_ = code_; - result.message_ = message_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioError) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioError)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioError other) { - if (other == cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance()) return this; - if (!other.getSessionId().isEmpty()) { - sessionId_ = other.sessionId_; - onChanged(); - } - if (other.getCode() != 0) { - setCode(other.getCode()); - } - if (!other.getMessage().isEmpty()) { - message_ = other.message_; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - sessionId_ = input.readStringRequireUtf8(); - - break; - } // case 10 - case 16: { - code_ = input.readInt32(); - - break; - } // case 16 - case 26: { - message_ = input.readStringRequireUtf8(); - - break; - } // case 26 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private java.lang.Object sessionId_ = ""; - /** - * string session_id = 1; - * @return The sessionId. - */ - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string session_id = 1; - * @param value The sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - sessionId_ = value; - onChanged(); - return this; - } - /** - * string session_id = 1; - * @return This builder for chaining. - */ - public Builder clearSessionId() { - - sessionId_ = getDefaultInstance().getSessionId(); - onChanged(); - return this; - } - /** - * string session_id = 1; - * @param value The bytes for sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - sessionId_ = value; - onChanged(); - return this; - } - - private int code_ ; - /** - * int32 code = 2; - * @return The code. - */ - @java.lang.Override - public int getCode() { - return code_; - } - /** - * int32 code = 2; - * @param value The code to set. - * @return This builder for chaining. - */ - public Builder setCode(int value) { - - code_ = value; - onChanged(); - return this; - } - /** - * int32 code = 2; - * @return This builder for chaining. - */ - public Builder clearCode() { - - code_ = 0; - onChanged(); - return this; - } - - private java.lang.Object message_ = ""; - /** - * string message = 3; - * @return The message. - */ - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string message = 3; - * @return The bytes for message. - */ - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string message = 3; - * @param value The message to set. - * @return This builder for chaining. - */ - public Builder setMessage( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - message_ = value; - onChanged(); - return this; - } - /** - * string message = 3; - * @return This builder for chaining. - */ - public Builder clearMessage() { - - message_ = getDefaultInstance().getMessage(); - onChanged(); - return this; - } - /** - * string message = 3; - * @param value The bytes for message to set. - * @return This builder for chaining. - */ - public Builder setMessageBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - message_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioError) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioError) - private static final cmvr.api.RobotAudio.RobotAudioError DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioError(); - } - - public static cmvr.api.RobotAudio.RobotAudioError getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioError parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioStartAckOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioStartAck) - com.google.protobuf.MessageOrBuilder { - - /** - * string session_id = 1; - * @return The sessionId. - */ - java.lang.String getSessionId(); - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - com.google.protobuf.ByteString - getSessionIdBytes(); - - /** - * bool accepted = 2; - * @return The accepted. - */ - boolean getAccepted(); - - /** - * string message = 3; - * @return The message. - */ - java.lang.String getMessage(); - /** - * string message = 3; - * @return The bytes for message. - */ - com.google.protobuf.ByteString - getMessageBytes(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioStartAck} - */ - public static final class RobotAudioStartAck extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioStartAck) - RobotAudioStartAckOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioStartAck.newBuilder() to construct. - private RobotAudioStartAck(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioStartAck() { - sessionId_ = ""; - message_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioStartAck(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStartAck_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStartAck_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioStartAck.class, cmvr.api.RobotAudio.RobotAudioStartAck.Builder.class); - } - - public static final int SESSION_ID_FIELD_NUMBER = 1; - private volatile java.lang.Object sessionId_; - /** - * string session_id = 1; - * @return The sessionId. - */ - @java.lang.Override - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int ACCEPTED_FIELD_NUMBER = 2; - private boolean accepted_; - /** - * bool accepted = 2; - * @return The accepted. - */ - @java.lang.Override - public boolean getAccepted() { - return accepted_; - } - - public static final int MESSAGE_FIELD_NUMBER = 3; - private volatile java.lang.Object message_; - /** - * string message = 3; - * @return The message. - */ - @java.lang.Override - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } - } - /** - * string message = 3; - * @return The bytes for message. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sessionId_); - } - if (accepted_ != false) { - output.writeBool(2, accepted_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sessionId_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sessionId_); - } - if (accepted_ != false) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(2, accepted_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioStartAck)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioStartAck other = (cmvr.api.RobotAudio.RobotAudioStartAck) obj; - - if (!getSessionId() - .equals(other.getSessionId())) return false; - if (getAccepted() - != other.getAccepted()) return false; - if (!getMessage() - .equals(other.getMessage())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_ID_FIELD_NUMBER; - hash = (53 * hash) + getSessionId().hashCode(); - hash = (37 * hash) + ACCEPTED_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getAccepted()); - hash = (37 * hash) + MESSAGE_FIELD_NUMBER; - hash = (53 * hash) + getMessage().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioStartAck parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioStartAck prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioStartAck} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioStartAck) - cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStartAck_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStartAck_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioStartAck.class, cmvr.api.RobotAudio.RobotAudioStartAck.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioStartAck.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - sessionId_ = ""; - - accepted_ = false; - - message_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioStartAck_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAck getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAck build() { - cmvr.api.RobotAudio.RobotAudioStartAck result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAck buildPartial() { - cmvr.api.RobotAudio.RobotAudioStartAck result = new cmvr.api.RobotAudio.RobotAudioStartAck(this); - result.sessionId_ = sessionId_; - result.accepted_ = accepted_; - result.message_ = message_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioStartAck) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioStartAck)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioStartAck other) { - if (other == cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance()) return this; - if (!other.getSessionId().isEmpty()) { - sessionId_ = other.sessionId_; - onChanged(); - } - if (other.getAccepted() != false) { - setAccepted(other.getAccepted()); - } - if (!other.getMessage().isEmpty()) { - message_ = other.message_; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - sessionId_ = input.readStringRequireUtf8(); - - break; - } // case 10 - case 16: { - accepted_ = input.readBool(); - - break; - } // case 16 - case 26: { - message_ = input.readStringRequireUtf8(); - - break; - } // case 26 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private java.lang.Object sessionId_ = ""; - /** - * string session_id = 1; - * @return The sessionId. - */ - public java.lang.String getSessionId() { - java.lang.Object ref = sessionId_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - sessionId_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string session_id = 1; - * @return The bytes for sessionId. - */ - public com.google.protobuf.ByteString - getSessionIdBytes() { - java.lang.Object ref = sessionId_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - sessionId_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string session_id = 1; - * @param value The sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionId( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - sessionId_ = value; - onChanged(); - return this; - } - /** - * string session_id = 1; - * @return This builder for chaining. - */ - public Builder clearSessionId() { - - sessionId_ = getDefaultInstance().getSessionId(); - onChanged(); - return this; - } - /** - * string session_id = 1; - * @param value The bytes for sessionId to set. - * @return This builder for chaining. - */ - public Builder setSessionIdBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - sessionId_ = value; - onChanged(); - return this; - } - - private boolean accepted_ ; - /** - * bool accepted = 2; - * @return The accepted. - */ - @java.lang.Override - public boolean getAccepted() { - return accepted_; - } - /** - * bool accepted = 2; - * @param value The accepted to set. - * @return This builder for chaining. - */ - public Builder setAccepted(boolean value) { - - accepted_ = value; - onChanged(); - return this; - } - /** - * bool accepted = 2; - * @return This builder for chaining. - */ - public Builder clearAccepted() { - - accepted_ = false; - onChanged(); - return this; - } - - private java.lang.Object message_ = ""; - /** - * string message = 3; - * @return The message. - */ - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string message = 3; - * @return The bytes for message. - */ - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string message = 3; - * @param value The message to set. - * @return This builder for chaining. - */ - public Builder setMessage( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - message_ = value; - onChanged(); - return this; - } - /** - * string message = 3; - * @return This builder for chaining. - */ - public Builder clearMessage() { - - message_ = getDefaultInstance().getMessage(); - onChanged(); - return this; - } - /** - * string message = 3; - * @param value The bytes for message to set. - * @return This builder for chaining. - */ - public Builder setMessageBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - message_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioStartAck) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioStartAck) - private static final cmvr.api.RobotAudio.RobotAudioStartAck DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioStartAck(); - } - - public static cmvr.api.RobotAudio.RobotAudioStartAck getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioStartAck parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAck getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioRequest) - com.google.protobuf.MessageOrBuilder { - - /** - * .cmvr.api.CommandHeader.Request header = 1; - * @return Whether the header field is set. - */ - boolean hasHeader(); - /** - * .cmvr.api.CommandHeader.Request header = 1; - * @return The header. - */ - cmvr.api.Common.CommandHeader.Request getHeader(); - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder(); - - /** - * .cmvr.api.RobotAudioStart start = 2; - * @return Whether the start field is set. - */ - boolean hasStart(); - /** - * .cmvr.api.RobotAudioStart start = 2; - * @return The start. - */ - cmvr.api.RobotAudio.RobotAudioStart getStart(); - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - cmvr.api.RobotAudio.RobotAudioStartOrBuilder getStartOrBuilder(); - - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return Whether the audioFrame field is set. - */ - boolean hasAudioFrame(); - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return The audioFrame. - */ - cmvr.api.RobotAudio.RobotAudioFrame getAudioFrame(); - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - cmvr.api.RobotAudio.RobotAudioFrameOrBuilder getAudioFrameOrBuilder(); - - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return Whether the heartbeat field is set. - */ - boolean hasHeartbeat(); - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return The heartbeat. - */ - cmvr.api.RobotAudio.RobotAudioHeartbeat getHeartbeat(); - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder getHeartbeatOrBuilder(); - - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return Whether the stop field is set. - */ - boolean hasStop(); - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return The stop. - */ - cmvr.api.RobotAudio.RobotAudioStop getStop(); - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - cmvr.api.RobotAudio.RobotAudioStopOrBuilder getStopOrBuilder(); - - /** - * .cmvr.api.RobotAudioError error = 6; - * @return Whether the error field is set. - */ - boolean hasError(); - /** - * .cmvr.api.RobotAudioError error = 6; - * @return The error. - */ - cmvr.api.RobotAudio.RobotAudioError getError(); - /** - * .cmvr.api.RobotAudioError error = 6; - */ - cmvr.api.RobotAudio.RobotAudioErrorOrBuilder getErrorOrBuilder(); - - public cmvr.api.RobotAudio.RobotAudioRequest.PayloadCase getPayloadCase(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioRequest} - */ - public static final class RobotAudioRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioRequest) - RobotAudioRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioRequest.newBuilder() to construct. - private RobotAudioRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioRequest() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioRequest(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioRequest.class, cmvr.api.RobotAudio.RobotAudioRequest.Builder.class); - } - - private int payloadCase_ = 0; - private java.lang.Object payload_; - public enum PayloadCase - implements com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - START(2), - AUDIO_FRAME(3), - HEARTBEAT(4), - STOP(5), - ERROR(6), - PAYLOAD_NOT_SET(0); - private final int value; - private PayloadCase(int value) { - this.value = value; - } - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static PayloadCase valueOf(int value) { - return forNumber(value); - } - - public static PayloadCase forNumber(int value) { - switch (value) { - case 2: return START; - case 3: return AUDIO_FRAME; - case 4: return HEARTBEAT; - case 5: return STOP; - case 6: return ERROR; - case 0: return PAYLOAD_NOT_SET; - default: return null; - } - } - public int getNumber() { - return this.value; - } - }; - - public PayloadCase - getPayloadCase() { - return PayloadCase.forNumber( - payloadCase_); - } - - public static final int HEADER_FIELD_NUMBER = 1; - private cmvr.api.Common.CommandHeader.Request header_; - /** - * .cmvr.api.CommandHeader.Request header = 1; - * @return Whether the header field is set. - */ - @java.lang.Override - public boolean hasHeader() { - return header_ != null; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - * @return The header. - */ - @java.lang.Override - public cmvr.api.Common.CommandHeader.Request getHeader() { - return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - @java.lang.Override - public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() { - return getHeader(); - } - - public static final int START_FIELD_NUMBER = 2; - /** - * .cmvr.api.RobotAudioStart start = 2; - * @return Whether the start field is set. - */ - @java.lang.Override - public boolean hasStart() { - return payloadCase_ == 2; - } - /** - * .cmvr.api.RobotAudioStart start = 2; - * @return The start. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStart getStart() { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStart) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartOrBuilder getStartOrBuilder() { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStart) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } - - public static final int AUDIO_FRAME_FIELD_NUMBER = 3; - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return Whether the audioFrame field is set. - */ - @java.lang.Override - public boolean hasAudioFrame() { - return payloadCase_ == 3; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return The audioFrame. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame getAudioFrame() { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrameOrBuilder getAudioFrameOrBuilder() { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - - public static final int HEARTBEAT_FIELD_NUMBER = 4; - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return Whether the heartbeat field is set. - */ - @java.lang.Override - public boolean hasHeartbeat() { - return payloadCase_ == 4; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return The heartbeat. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat getHeartbeat() { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder getHeartbeatOrBuilder() { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - - public static final int STOP_FIELD_NUMBER = 5; - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return Whether the stop field is set. - */ - @java.lang.Override - public boolean hasStop() { - return payloadCase_ == 5; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return The stop. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop getStop() { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStopOrBuilder getStopOrBuilder() { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - - public static final int ERROR_FIELD_NUMBER = 6; - /** - * .cmvr.api.RobotAudioError error = 6; - * @return Whether the error field is set. - */ - @java.lang.Override - public boolean hasError() { - return payloadCase_ == 6; - } - /** - * .cmvr.api.RobotAudioError error = 6; - * @return The error. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError getError() { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioErrorOrBuilder getErrorOrBuilder() { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (header_ != null) { - output.writeMessage(1, getHeader()); - } - if (payloadCase_ == 2) { - output.writeMessage(2, (cmvr.api.RobotAudio.RobotAudioStart) payload_); - } - if (payloadCase_ == 3) { - output.writeMessage(3, (cmvr.api.RobotAudio.RobotAudioFrame) payload_); - } - if (payloadCase_ == 4) { - output.writeMessage(4, (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_); - } - if (payloadCase_ == 5) { - output.writeMessage(5, (cmvr.api.RobotAudio.RobotAudioStop) payload_); - } - if (payloadCase_ == 6) { - output.writeMessage(6, (cmvr.api.RobotAudio.RobotAudioError) payload_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (header_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getHeader()); - } - if (payloadCase_ == 2) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, (cmvr.api.RobotAudio.RobotAudioStart) payload_); - } - if (payloadCase_ == 3) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, (cmvr.api.RobotAudio.RobotAudioFrame) payload_); - } - if (payloadCase_ == 4) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_); - } - if (payloadCase_ == 5) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, (cmvr.api.RobotAudio.RobotAudioStop) payload_); - } - if (payloadCase_ == 6) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, (cmvr.api.RobotAudio.RobotAudioError) payload_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioRequest)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioRequest other = (cmvr.api.RobotAudio.RobotAudioRequest) obj; - - if (hasHeader() != other.hasHeader()) return false; - if (hasHeader()) { - if (!getHeader() - .equals(other.getHeader())) return false; - } - if (!getPayloadCase().equals(other.getPayloadCase())) return false; - switch (payloadCase_) { - case 2: - if (!getStart() - .equals(other.getStart())) return false; - break; - case 3: - if (!getAudioFrame() - .equals(other.getAudioFrame())) return false; - break; - case 4: - if (!getHeartbeat() - .equals(other.getHeartbeat())) return false; - break; - case 5: - if (!getStop() - .equals(other.getStop())) return false; - break; - case 6: - if (!getError() - .equals(other.getError())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (hasHeader()) { - hash = (37 * hash) + HEADER_FIELD_NUMBER; - hash = (53 * hash) + getHeader().hashCode(); - } - switch (payloadCase_) { - case 2: - hash = (37 * hash) + START_FIELD_NUMBER; - hash = (53 * hash) + getStart().hashCode(); - break; - case 3: - hash = (37 * hash) + AUDIO_FRAME_FIELD_NUMBER; - hash = (53 * hash) + getAudioFrame().hashCode(); - break; - case 4: - hash = (37 * hash) + HEARTBEAT_FIELD_NUMBER; - hash = (53 * hash) + getHeartbeat().hashCode(); - break; - case 5: - hash = (37 * hash) + STOP_FIELD_NUMBER; - hash = (53 * hash) + getStop().hashCode(); - break; - case 6: - hash = (37 * hash) + ERROR_FIELD_NUMBER; - hash = (53 * hash) + getError().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioRequest} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioRequest) - cmvr.api.RobotAudio.RobotAudioRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioRequest.class, cmvr.api.RobotAudio.RobotAudioRequest.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioRequest.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - if (headerBuilder_ == null) { - header_ = null; - } else { - header_ = null; - headerBuilder_ = null; - } - if (startBuilder_ != null) { - startBuilder_.clear(); - } - if (audioFrameBuilder_ != null) { - audioFrameBuilder_.clear(); - } - if (heartbeatBuilder_ != null) { - heartbeatBuilder_.clear(); - } - if (stopBuilder_ != null) { - stopBuilder_.clear(); - } - if (errorBuilder_ != null) { - errorBuilder_.clear(); - } - payloadCase_ = 0; - payload_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioRequest_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioRequest getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioRequest.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioRequest build() { - cmvr.api.RobotAudio.RobotAudioRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioRequest buildPartial() { - cmvr.api.RobotAudio.RobotAudioRequest result = new cmvr.api.RobotAudio.RobotAudioRequest(this); - if (headerBuilder_ == null) { - result.header_ = header_; - } else { - result.header_ = headerBuilder_.build(); - } - if (payloadCase_ == 2) { - if (startBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = startBuilder_.build(); - } - } - if (payloadCase_ == 3) { - if (audioFrameBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = audioFrameBuilder_.build(); - } - } - if (payloadCase_ == 4) { - if (heartbeatBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = heartbeatBuilder_.build(); - } - } - if (payloadCase_ == 5) { - if (stopBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = stopBuilder_.build(); - } - } - if (payloadCase_ == 6) { - if (errorBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = errorBuilder_.build(); - } - } - result.payloadCase_ = payloadCase_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioRequest) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioRequest)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioRequest other) { - if (other == cmvr.api.RobotAudio.RobotAudioRequest.getDefaultInstance()) return this; - if (other.hasHeader()) { - mergeHeader(other.getHeader()); - } - switch (other.getPayloadCase()) { - case START: { - mergeStart(other.getStart()); - break; - } - case AUDIO_FRAME: { - mergeAudioFrame(other.getAudioFrame()); - break; - } - case HEARTBEAT: { - mergeHeartbeat(other.getHeartbeat()); - break; - } - case STOP: { - mergeStop(other.getStop()); - break; - } - case ERROR: { - mergeError(other.getError()); - break; - } - case PAYLOAD_NOT_SET: { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - input.readMessage( - getHeaderFieldBuilder().getBuilder(), - extensionRegistry); - - break; - } // case 10 - case 18: { - input.readMessage( - getStartFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 2; - break; - } // case 18 - case 26: { - input.readMessage( - getAudioFrameFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 3; - break; - } // case 26 - case 34: { - input.readMessage( - getHeartbeatFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 4; - break; - } // case 34 - case 42: { - input.readMessage( - getStopFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 5; - break; - } // case 42 - case 50: { - input.readMessage( - getErrorFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 6; - break; - } // case 50 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int payloadCase_ = 0; - private java.lang.Object payload_; - public PayloadCase - getPayloadCase() { - return PayloadCase.forNumber( - payloadCase_); - } - - public Builder clearPayload() { - payloadCase_ = 0; - payload_ = null; - onChanged(); - return this; - } - - - private cmvr.api.Common.CommandHeader.Request header_; - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> headerBuilder_; - /** - * .cmvr.api.CommandHeader.Request header = 1; - * @return Whether the header field is set. - */ - public boolean hasHeader() { - return headerBuilder_ != null || header_ != null; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - * @return The header. - */ - public cmvr.api.Common.CommandHeader.Request getHeader() { - if (headerBuilder_ == null) { - return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; - } else { - return headerBuilder_.getMessage(); - } - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - public Builder setHeader(cmvr.api.Common.CommandHeader.Request value) { - if (headerBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - header_ = value; - onChanged(); - } else { - headerBuilder_.setMessage(value); - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - public Builder setHeader( - cmvr.api.Common.CommandHeader.Request.Builder builderForValue) { - if (headerBuilder_ == null) { - header_ = builderForValue.build(); - onChanged(); - } else { - headerBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - public Builder mergeHeader(cmvr.api.Common.CommandHeader.Request value) { - if (headerBuilder_ == null) { - if (header_ != null) { - header_ = - cmvr.api.Common.CommandHeader.Request.newBuilder(header_).mergeFrom(value).buildPartial(); - } else { - header_ = value; - } - onChanged(); - } else { - headerBuilder_.mergeFrom(value); - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - public Builder clearHeader() { - if (headerBuilder_ == null) { - header_ = null; - onChanged(); - } else { - header_ = null; - headerBuilder_ = null; - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - public cmvr.api.Common.CommandHeader.Request.Builder getHeaderBuilder() { - - onChanged(); - return getHeaderFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() { - if (headerBuilder_ != null) { - return headerBuilder_.getMessageOrBuilder(); - } else { - return header_ == null ? - cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; - } - } - /** - * .cmvr.api.CommandHeader.Request header = 1; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> - getHeaderFieldBuilder() { - if (headerBuilder_ == null) { - headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder>( - getHeader(), - getParentForChildren(), - isClean()); - header_ = null; - } - return headerBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStart, cmvr.api.RobotAudio.RobotAudioStart.Builder, cmvr.api.RobotAudio.RobotAudioStartOrBuilder> startBuilder_; - /** - * .cmvr.api.RobotAudioStart start = 2; - * @return Whether the start field is set. - */ - @java.lang.Override - public boolean hasStart() { - return payloadCase_ == 2; - } - /** - * .cmvr.api.RobotAudioStart start = 2; - * @return The start. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStart getStart() { - if (startBuilder_ == null) { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStart) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } else { - if (payloadCase_ == 2) { - return startBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - public Builder setStart(cmvr.api.RobotAudio.RobotAudioStart value) { - if (startBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - startBuilder_.setMessage(value); - } - payloadCase_ = 2; - return this; - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - public Builder setStart( - cmvr.api.RobotAudio.RobotAudioStart.Builder builderForValue) { - if (startBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - startBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 2; - return this; - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - public Builder mergeStart(cmvr.api.RobotAudio.RobotAudioStart value) { - if (startBuilder_ == null) { - if (payloadCase_ == 2 && - payload_ != cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioStart.newBuilder((cmvr.api.RobotAudio.RobotAudioStart) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 2) { - startBuilder_.mergeFrom(value); - } else { - startBuilder_.setMessage(value); - } - } - payloadCase_ = 2; - return this; - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - public Builder clearStart() { - if (startBuilder_ == null) { - if (payloadCase_ == 2) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 2) { - payloadCase_ = 0; - payload_ = null; - } - startBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - public cmvr.api.RobotAudio.RobotAudioStart.Builder getStartBuilder() { - return getStartFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartOrBuilder getStartOrBuilder() { - if ((payloadCase_ == 2) && (startBuilder_ != null)) { - return startBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStart) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStart start = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStart, cmvr.api.RobotAudio.RobotAudioStart.Builder, cmvr.api.RobotAudio.RobotAudioStartOrBuilder> - getStartFieldBuilder() { - if (startBuilder_ == null) { - if (!(payloadCase_ == 2)) { - payload_ = cmvr.api.RobotAudio.RobotAudioStart.getDefaultInstance(); - } - startBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStart, cmvr.api.RobotAudio.RobotAudioStart.Builder, cmvr.api.RobotAudio.RobotAudioStartOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioStart) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 2; - onChanged();; - return startBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFrame, cmvr.api.RobotAudio.RobotAudioFrame.Builder, cmvr.api.RobotAudio.RobotAudioFrameOrBuilder> audioFrameBuilder_; - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return Whether the audioFrame field is set. - */ - @java.lang.Override - public boolean hasAudioFrame() { - return payloadCase_ == 3; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return The audioFrame. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame getAudioFrame() { - if (audioFrameBuilder_ == null) { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } else { - if (payloadCase_ == 3) { - return audioFrameBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder setAudioFrame(cmvr.api.RobotAudio.RobotAudioFrame value) { - if (audioFrameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - audioFrameBuilder_.setMessage(value); - } - payloadCase_ = 3; - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder setAudioFrame( - cmvr.api.RobotAudio.RobotAudioFrame.Builder builderForValue) { - if (audioFrameBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - audioFrameBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 3; - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder mergeAudioFrame(cmvr.api.RobotAudio.RobotAudioFrame value) { - if (audioFrameBuilder_ == null) { - if (payloadCase_ == 3 && - payload_ != cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioFrame.newBuilder((cmvr.api.RobotAudio.RobotAudioFrame) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 3) { - audioFrameBuilder_.mergeFrom(value); - } else { - audioFrameBuilder_.setMessage(value); - } - } - payloadCase_ = 3; - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder clearAudioFrame() { - if (audioFrameBuilder_ == null) { - if (payloadCase_ == 3) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 3) { - payloadCase_ = 0; - payload_ = null; - } - audioFrameBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public cmvr.api.RobotAudio.RobotAudioFrame.Builder getAudioFrameBuilder() { - return getAudioFrameFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrameOrBuilder getAudioFrameOrBuilder() { - if ((payloadCase_ == 3) && (audioFrameBuilder_ != null)) { - return audioFrameBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFrame, cmvr.api.RobotAudio.RobotAudioFrame.Builder, cmvr.api.RobotAudio.RobotAudioFrameOrBuilder> - getAudioFrameFieldBuilder() { - if (audioFrameBuilder_ == null) { - if (!(payloadCase_ == 3)) { - payload_ = cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - audioFrameBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFrame, cmvr.api.RobotAudio.RobotAudioFrame.Builder, cmvr.api.RobotAudio.RobotAudioFrameOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioFrame) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 3; - onChanged();; - return audioFrameBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioHeartbeat, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder, cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder> heartbeatBuilder_; - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return Whether the heartbeat field is set. - */ - @java.lang.Override - public boolean hasHeartbeat() { - return payloadCase_ == 4; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return The heartbeat. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat getHeartbeat() { - if (heartbeatBuilder_ == null) { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } else { - if (payloadCase_ == 4) { - return heartbeatBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder setHeartbeat(cmvr.api.RobotAudio.RobotAudioHeartbeat value) { - if (heartbeatBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - heartbeatBuilder_.setMessage(value); - } - payloadCase_ = 4; - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder setHeartbeat( - cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder builderForValue) { - if (heartbeatBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - heartbeatBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 4; - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder mergeHeartbeat(cmvr.api.RobotAudio.RobotAudioHeartbeat value) { - if (heartbeatBuilder_ == null) { - if (payloadCase_ == 4 && - payload_ != cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioHeartbeat.newBuilder((cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 4) { - heartbeatBuilder_.mergeFrom(value); - } else { - heartbeatBuilder_.setMessage(value); - } - } - payloadCase_ = 4; - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder clearHeartbeat() { - if (heartbeatBuilder_ == null) { - if (payloadCase_ == 4) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 4) { - payloadCase_ = 0; - payload_ = null; - } - heartbeatBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder getHeartbeatBuilder() { - return getHeartbeatFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder getHeartbeatOrBuilder() { - if ((payloadCase_ == 4) && (heartbeatBuilder_ != null)) { - return heartbeatBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioHeartbeat, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder, cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder> - getHeartbeatFieldBuilder() { - if (heartbeatBuilder_ == null) { - if (!(payloadCase_ == 4)) { - payload_ = cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - heartbeatBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioHeartbeat, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder, cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 4; - onChanged();; - return heartbeatBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStop, cmvr.api.RobotAudio.RobotAudioStop.Builder, cmvr.api.RobotAudio.RobotAudioStopOrBuilder> stopBuilder_; - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return Whether the stop field is set. - */ - @java.lang.Override - public boolean hasStop() { - return payloadCase_ == 5; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return The stop. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop getStop() { - if (stopBuilder_ == null) { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } else { - if (payloadCase_ == 5) { - return stopBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder setStop(cmvr.api.RobotAudio.RobotAudioStop value) { - if (stopBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - stopBuilder_.setMessage(value); - } - payloadCase_ = 5; - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder setStop( - cmvr.api.RobotAudio.RobotAudioStop.Builder builderForValue) { - if (stopBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - stopBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 5; - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder mergeStop(cmvr.api.RobotAudio.RobotAudioStop value) { - if (stopBuilder_ == null) { - if (payloadCase_ == 5 && - payload_ != cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioStop.newBuilder((cmvr.api.RobotAudio.RobotAudioStop) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 5) { - stopBuilder_.mergeFrom(value); - } else { - stopBuilder_.setMessage(value); - } - } - payloadCase_ = 5; - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder clearStop() { - if (stopBuilder_ == null) { - if (payloadCase_ == 5) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 5) { - payloadCase_ = 0; - payload_ = null; - } - stopBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public cmvr.api.RobotAudio.RobotAudioStop.Builder getStopBuilder() { - return getStopFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStopOrBuilder getStopOrBuilder() { - if ((payloadCase_ == 5) && (stopBuilder_ != null)) { - return stopBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStop, cmvr.api.RobotAudio.RobotAudioStop.Builder, cmvr.api.RobotAudio.RobotAudioStopOrBuilder> - getStopFieldBuilder() { - if (stopBuilder_ == null) { - if (!(payloadCase_ == 5)) { - payload_ = cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - stopBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStop, cmvr.api.RobotAudio.RobotAudioStop.Builder, cmvr.api.RobotAudio.RobotAudioStopOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioStop) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 5; - onChanged();; - return stopBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioError, cmvr.api.RobotAudio.RobotAudioError.Builder, cmvr.api.RobotAudio.RobotAudioErrorOrBuilder> errorBuilder_; - /** - * .cmvr.api.RobotAudioError error = 6; - * @return Whether the error field is set. - */ - @java.lang.Override - public boolean hasError() { - return payloadCase_ == 6; - } - /** - * .cmvr.api.RobotAudioError error = 6; - * @return The error. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError getError() { - if (errorBuilder_ == null) { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } else { - if (payloadCase_ == 6) { - return errorBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder setError(cmvr.api.RobotAudio.RobotAudioError value) { - if (errorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - errorBuilder_.setMessage(value); - } - payloadCase_ = 6; - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder setError( - cmvr.api.RobotAudio.RobotAudioError.Builder builderForValue) { - if (errorBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - errorBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 6; - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder mergeError(cmvr.api.RobotAudio.RobotAudioError value) { - if (errorBuilder_ == null) { - if (payloadCase_ == 6 && - payload_ != cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioError.newBuilder((cmvr.api.RobotAudio.RobotAudioError) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 6) { - errorBuilder_.mergeFrom(value); - } else { - errorBuilder_.setMessage(value); - } - } - payloadCase_ = 6; - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder clearError() { - if (errorBuilder_ == null) { - if (payloadCase_ == 6) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 6) { - payloadCase_ = 0; - payload_ = null; - } - errorBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public cmvr.api.RobotAudio.RobotAudioError.Builder getErrorBuilder() { - return getErrorFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioErrorOrBuilder getErrorOrBuilder() { - if ((payloadCase_ == 6) && (errorBuilder_ != null)) { - return errorBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioError, cmvr.api.RobotAudio.RobotAudioError.Builder, cmvr.api.RobotAudio.RobotAudioErrorOrBuilder> - getErrorFieldBuilder() { - if (errorBuilder_ == null) { - if (!(payloadCase_ == 6)) { - payload_ = cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioError, cmvr.api.RobotAudio.RobotAudioError.Builder, cmvr.api.RobotAudio.RobotAudioErrorOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioError) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 6; - onChanged();; - return errorBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioRequest) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioRequest) - private static final cmvr.api.RobotAudio.RobotAudioRequest DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioRequest(); - } - - public static cmvr.api.RobotAudio.RobotAudioRequest getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioRequest getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RobotAudioResponseOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.RobotAudioResponse) - com.google.protobuf.MessageOrBuilder { - - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - * @return Whether the header field is set. - */ - boolean hasHeader(); - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - * @return The header. - */ - cmvr.api.Common.CommandHeader.Feedback getHeader(); - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder(); - - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - * @return Whether the startAck field is set. - */ - boolean hasStartAck(); - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - * @return The startAck. - */ - cmvr.api.RobotAudio.RobotAudioStartAck getStartAck(); - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder getStartAckOrBuilder(); - - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return Whether the audioFrame field is set. - */ - boolean hasAudioFrame(); - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return The audioFrame. - */ - cmvr.api.RobotAudio.RobotAudioFrame getAudioFrame(); - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - cmvr.api.RobotAudio.RobotAudioFrameOrBuilder getAudioFrameOrBuilder(); - - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return Whether the heartbeat field is set. - */ - boolean hasHeartbeat(); - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return The heartbeat. - */ - cmvr.api.RobotAudio.RobotAudioHeartbeat getHeartbeat(); - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder getHeartbeatOrBuilder(); - - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return Whether the stop field is set. - */ - boolean hasStop(); - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return The stop. - */ - cmvr.api.RobotAudio.RobotAudioStop getStop(); - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - cmvr.api.RobotAudio.RobotAudioStopOrBuilder getStopOrBuilder(); - - /** - * .cmvr.api.RobotAudioError error = 6; - * @return Whether the error field is set. - */ - boolean hasError(); - /** - * .cmvr.api.RobotAudioError error = 6; - * @return The error. - */ - cmvr.api.RobotAudio.RobotAudioError getError(); - /** - * .cmvr.api.RobotAudioError error = 6; - */ - cmvr.api.RobotAudio.RobotAudioErrorOrBuilder getErrorOrBuilder(); - - public cmvr.api.RobotAudio.RobotAudioResponse.PayloadCase getPayloadCase(); - } - /** - * Protobuf type {@code cmvr.api.RobotAudioResponse} - */ - public static final class RobotAudioResponse extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.RobotAudioResponse) - RobotAudioResponseOrBuilder { - private static final long serialVersionUID = 0L; - // Use RobotAudioResponse.newBuilder() to construct. - private RobotAudioResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RobotAudioResponse() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RobotAudioResponse(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioResponse_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioResponse_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioResponse.class, cmvr.api.RobotAudio.RobotAudioResponse.Builder.class); - } - - private int payloadCase_ = 0; - private java.lang.Object payload_; - public enum PayloadCase - implements com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - START_ACK(2), - AUDIO_FRAME(3), - HEARTBEAT(4), - STOP(5), - ERROR(6), - PAYLOAD_NOT_SET(0); - private final int value; - private PayloadCase(int value) { - this.value = value; - } - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static PayloadCase valueOf(int value) { - return forNumber(value); - } - - public static PayloadCase forNumber(int value) { - switch (value) { - case 2: return START_ACK; - case 3: return AUDIO_FRAME; - case 4: return HEARTBEAT; - case 5: return STOP; - case 6: return ERROR; - case 0: return PAYLOAD_NOT_SET; - default: return null; - } - } - public int getNumber() { - return this.value; - } - }; - - public PayloadCase - getPayloadCase() { - return PayloadCase.forNumber( - payloadCase_); - } - - public static final int HEADER_FIELD_NUMBER = 1; - private cmvr.api.Common.CommandHeader.Feedback header_; - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - * @return Whether the header field is set. - */ - @java.lang.Override - public boolean hasHeader() { - return header_ != null; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - * @return The header. - */ - @java.lang.Override - public cmvr.api.Common.CommandHeader.Feedback getHeader() { - return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - @java.lang.Override - public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() { - return getHeader(); - } - - public static final int START_ACK_FIELD_NUMBER = 2; - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - * @return Whether the startAck field is set. - */ - @java.lang.Override - public boolean hasStartAck() { - return payloadCase_ == 2; - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - * @return The startAck. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAck getStartAck() { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStartAck) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder getStartAckOrBuilder() { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStartAck) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } - - public static final int AUDIO_FRAME_FIELD_NUMBER = 3; - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return Whether the audioFrame field is set. - */ - @java.lang.Override - public boolean hasAudioFrame() { - return payloadCase_ == 3; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return The audioFrame. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame getAudioFrame() { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrameOrBuilder getAudioFrameOrBuilder() { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - - public static final int HEARTBEAT_FIELD_NUMBER = 4; - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return Whether the heartbeat field is set. - */ - @java.lang.Override - public boolean hasHeartbeat() { - return payloadCase_ == 4; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return The heartbeat. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat getHeartbeat() { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder getHeartbeatOrBuilder() { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - - public static final int STOP_FIELD_NUMBER = 5; - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return Whether the stop field is set. - */ - @java.lang.Override - public boolean hasStop() { - return payloadCase_ == 5; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return The stop. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop getStop() { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStopOrBuilder getStopOrBuilder() { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - - public static final int ERROR_FIELD_NUMBER = 6; - /** - * .cmvr.api.RobotAudioError error = 6; - * @return Whether the error field is set. - */ - @java.lang.Override - public boolean hasError() { - return payloadCase_ == 6; - } - /** - * .cmvr.api.RobotAudioError error = 6; - * @return The error. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError getError() { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioErrorOrBuilder getErrorOrBuilder() { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (header_ != null) { - output.writeMessage(1, getHeader()); - } - if (payloadCase_ == 2) { - output.writeMessage(2, (cmvr.api.RobotAudio.RobotAudioStartAck) payload_); - } - if (payloadCase_ == 3) { - output.writeMessage(3, (cmvr.api.RobotAudio.RobotAudioFrame) payload_); - } - if (payloadCase_ == 4) { - output.writeMessage(4, (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_); - } - if (payloadCase_ == 5) { - output.writeMessage(5, (cmvr.api.RobotAudio.RobotAudioStop) payload_); - } - if (payloadCase_ == 6) { - output.writeMessage(6, (cmvr.api.RobotAudio.RobotAudioError) payload_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (header_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, getHeader()); - } - if (payloadCase_ == 2) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, (cmvr.api.RobotAudio.RobotAudioStartAck) payload_); - } - if (payloadCase_ == 3) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, (cmvr.api.RobotAudio.RobotAudioFrame) payload_); - } - if (payloadCase_ == 4) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_); - } - if (payloadCase_ == 5) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, (cmvr.api.RobotAudio.RobotAudioStop) payload_); - } - if (payloadCase_ == 6) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, (cmvr.api.RobotAudio.RobotAudioError) payload_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.RobotAudio.RobotAudioResponse)) { - return super.equals(obj); - } - cmvr.api.RobotAudio.RobotAudioResponse other = (cmvr.api.RobotAudio.RobotAudioResponse) obj; - - if (hasHeader() != other.hasHeader()) return false; - if (hasHeader()) { - if (!getHeader() - .equals(other.getHeader())) return false; - } - if (!getPayloadCase().equals(other.getPayloadCase())) return false; - switch (payloadCase_) { - case 2: - if (!getStartAck() - .equals(other.getStartAck())) return false; - break; - case 3: - if (!getAudioFrame() - .equals(other.getAudioFrame())) return false; - break; - case 4: - if (!getHeartbeat() - .equals(other.getHeartbeat())) return false; - break; - case 5: - if (!getStop() - .equals(other.getStop())) return false; - break; - case 6: - if (!getError() - .equals(other.getError())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (hasHeader()) { - hash = (37 * hash) + HEADER_FIELD_NUMBER; - hash = (53 * hash) + getHeader().hashCode(); - } - switch (payloadCase_) { - case 2: - hash = (37 * hash) + START_ACK_FIELD_NUMBER; - hash = (53 * hash) + getStartAck().hashCode(); - break; - case 3: - hash = (37 * hash) + AUDIO_FRAME_FIELD_NUMBER; - hash = (53 * hash) + getAudioFrame().hashCode(); - break; - case 4: - hash = (37 * hash) + HEARTBEAT_FIELD_NUMBER; - hash = (53 * hash) + getHeartbeat().hashCode(); - break; - case 5: - hash = (37 * hash) + STOP_FIELD_NUMBER; - hash = (53 * hash) + getStop().hashCode(); - break; - case 6: - hash = (37 * hash) + ERROR_FIELD_NUMBER; - hash = (53 * hash) + getError().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.RobotAudio.RobotAudioResponse parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.RobotAudio.RobotAudioResponse prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code cmvr.api.RobotAudioResponse} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.RobotAudioResponse) - cmvr.api.RobotAudio.RobotAudioResponseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioResponse_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioResponse_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.RobotAudio.RobotAudioResponse.class, cmvr.api.RobotAudio.RobotAudioResponse.Builder.class); - } - - // Construct using cmvr.api.RobotAudio.RobotAudioResponse.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - if (headerBuilder_ == null) { - header_ = null; - } else { - header_ = null; - headerBuilder_ = null; - } - if (startAckBuilder_ != null) { - startAckBuilder_.clear(); - } - if (audioFrameBuilder_ != null) { - audioFrameBuilder_.clear(); - } - if (heartbeatBuilder_ != null) { - heartbeatBuilder_.clear(); - } - if (stopBuilder_ != null) { - stopBuilder_.clear(); - } - if (errorBuilder_ != null) { - errorBuilder_.clear(); - } - payloadCase_ = 0; - payload_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.RobotAudio.internal_static_cmvr_api_RobotAudioResponse_descriptor; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioResponse getDefaultInstanceForType() { - return cmvr.api.RobotAudio.RobotAudioResponse.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioResponse build() { - cmvr.api.RobotAudio.RobotAudioResponse result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioResponse buildPartial() { - cmvr.api.RobotAudio.RobotAudioResponse result = new cmvr.api.RobotAudio.RobotAudioResponse(this); - if (headerBuilder_ == null) { - result.header_ = header_; - } else { - result.header_ = headerBuilder_.build(); - } - if (payloadCase_ == 2) { - if (startAckBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = startAckBuilder_.build(); - } - } - if (payloadCase_ == 3) { - if (audioFrameBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = audioFrameBuilder_.build(); - } - } - if (payloadCase_ == 4) { - if (heartbeatBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = heartbeatBuilder_.build(); - } - } - if (payloadCase_ == 5) { - if (stopBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = stopBuilder_.build(); - } - } - if (payloadCase_ == 6) { - if (errorBuilder_ == null) { - result.payload_ = payload_; - } else { - result.payload_ = errorBuilder_.build(); - } - } - result.payloadCase_ = payloadCase_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.RobotAudio.RobotAudioResponse) { - return mergeFrom((cmvr.api.RobotAudio.RobotAudioResponse)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.RobotAudio.RobotAudioResponse other) { - if (other == cmvr.api.RobotAudio.RobotAudioResponse.getDefaultInstance()) return this; - if (other.hasHeader()) { - mergeHeader(other.getHeader()); - } - switch (other.getPayloadCase()) { - case START_ACK: { - mergeStartAck(other.getStartAck()); - break; - } - case AUDIO_FRAME: { - mergeAudioFrame(other.getAudioFrame()); - break; - } - case HEARTBEAT: { - mergeHeartbeat(other.getHeartbeat()); - break; - } - case STOP: { - mergeStop(other.getStop()); - break; - } - case ERROR: { - mergeError(other.getError()); - break; - } - case PAYLOAD_NOT_SET: { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - input.readMessage( - getHeaderFieldBuilder().getBuilder(), - extensionRegistry); - - break; - } // case 10 - case 18: { - input.readMessage( - getStartAckFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 2; - break; - } // case 18 - case 26: { - input.readMessage( - getAudioFrameFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 3; - break; - } // case 26 - case 34: { - input.readMessage( - getHeartbeatFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 4; - break; - } // case 34 - case 42: { - input.readMessage( - getStopFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 5; - break; - } // case 42 - case 50: { - input.readMessage( - getErrorFieldBuilder().getBuilder(), - extensionRegistry); - payloadCase_ = 6; - break; - } // case 50 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int payloadCase_ = 0; - private java.lang.Object payload_; - public PayloadCase - getPayloadCase() { - return PayloadCase.forNumber( - payloadCase_); - } - - public Builder clearPayload() { - payloadCase_ = 0; - payload_ = null; - onChanged(); - return this; - } - - - private cmvr.api.Common.CommandHeader.Feedback header_; - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> headerBuilder_; - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - * @return Whether the header field is set. - */ - public boolean hasHeader() { - return headerBuilder_ != null || header_ != null; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - * @return The header. - */ - public cmvr.api.Common.CommandHeader.Feedback getHeader() { - if (headerBuilder_ == null) { - return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; - } else { - return headerBuilder_.getMessage(); - } - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - public Builder setHeader(cmvr.api.Common.CommandHeader.Feedback value) { - if (headerBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - header_ = value; - onChanged(); - } else { - headerBuilder_.setMessage(value); - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - public Builder setHeader( - cmvr.api.Common.CommandHeader.Feedback.Builder builderForValue) { - if (headerBuilder_ == null) { - header_ = builderForValue.build(); - onChanged(); - } else { - headerBuilder_.setMessage(builderForValue.build()); - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - public Builder mergeHeader(cmvr.api.Common.CommandHeader.Feedback value) { - if (headerBuilder_ == null) { - if (header_ != null) { - header_ = - cmvr.api.Common.CommandHeader.Feedback.newBuilder(header_).mergeFrom(value).buildPartial(); - } else { - header_ = value; - } - onChanged(); - } else { - headerBuilder_.mergeFrom(value); - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - public Builder clearHeader() { - if (headerBuilder_ == null) { - header_ = null; - onChanged(); - } else { - header_ = null; - headerBuilder_ = null; - } - - return this; - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - public cmvr.api.Common.CommandHeader.Feedback.Builder getHeaderBuilder() { - - onChanged(); - return getHeaderFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() { - if (headerBuilder_ != null) { - return headerBuilder_.getMessageOrBuilder(); - } else { - return header_ == null ? - cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; - } - } - /** - * .cmvr.api.CommandHeader.Feedback header = 1; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> - getHeaderFieldBuilder() { - if (headerBuilder_ == null) { - headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>( - getHeader(), - getParentForChildren(), - isClean()); - header_ = null; - } - return headerBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStartAck, cmvr.api.RobotAudio.RobotAudioStartAck.Builder, cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder> startAckBuilder_; - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - * @return Whether the startAck field is set. - */ - @java.lang.Override - public boolean hasStartAck() { - return payloadCase_ == 2; - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - * @return The startAck. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAck getStartAck() { - if (startAckBuilder_ == null) { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStartAck) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } else { - if (payloadCase_ == 2) { - return startAckBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - public Builder setStartAck(cmvr.api.RobotAudio.RobotAudioStartAck value) { - if (startAckBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - startAckBuilder_.setMessage(value); - } - payloadCase_ = 2; - return this; - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - public Builder setStartAck( - cmvr.api.RobotAudio.RobotAudioStartAck.Builder builderForValue) { - if (startAckBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - startAckBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 2; - return this; - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - public Builder mergeStartAck(cmvr.api.RobotAudio.RobotAudioStartAck value) { - if (startAckBuilder_ == null) { - if (payloadCase_ == 2 && - payload_ != cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioStartAck.newBuilder((cmvr.api.RobotAudio.RobotAudioStartAck) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 2) { - startAckBuilder_.mergeFrom(value); - } else { - startAckBuilder_.setMessage(value); - } - } - payloadCase_ = 2; - return this; - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - public Builder clearStartAck() { - if (startAckBuilder_ == null) { - if (payloadCase_ == 2) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 2) { - payloadCase_ = 0; - payload_ = null; - } - startAckBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - public cmvr.api.RobotAudio.RobotAudioStartAck.Builder getStartAckBuilder() { - return getStartAckFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder getStartAckOrBuilder() { - if ((payloadCase_ == 2) && (startAckBuilder_ != null)) { - return startAckBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 2) { - return (cmvr.api.RobotAudio.RobotAudioStartAck) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStartAck start_ack = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStartAck, cmvr.api.RobotAudio.RobotAudioStartAck.Builder, cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder> - getStartAckFieldBuilder() { - if (startAckBuilder_ == null) { - if (!(payloadCase_ == 2)) { - payload_ = cmvr.api.RobotAudio.RobotAudioStartAck.getDefaultInstance(); - } - startAckBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStartAck, cmvr.api.RobotAudio.RobotAudioStartAck.Builder, cmvr.api.RobotAudio.RobotAudioStartAckOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioStartAck) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 2; - onChanged();; - return startAckBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFrame, cmvr.api.RobotAudio.RobotAudioFrame.Builder, cmvr.api.RobotAudio.RobotAudioFrameOrBuilder> audioFrameBuilder_; - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return Whether the audioFrame field is set. - */ - @java.lang.Override - public boolean hasAudioFrame() { - return payloadCase_ == 3; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - * @return The audioFrame. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrame getAudioFrame() { - if (audioFrameBuilder_ == null) { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } else { - if (payloadCase_ == 3) { - return audioFrameBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder setAudioFrame(cmvr.api.RobotAudio.RobotAudioFrame value) { - if (audioFrameBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - audioFrameBuilder_.setMessage(value); - } - payloadCase_ = 3; - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder setAudioFrame( - cmvr.api.RobotAudio.RobotAudioFrame.Builder builderForValue) { - if (audioFrameBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - audioFrameBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 3; - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder mergeAudioFrame(cmvr.api.RobotAudio.RobotAudioFrame value) { - if (audioFrameBuilder_ == null) { - if (payloadCase_ == 3 && - payload_ != cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioFrame.newBuilder((cmvr.api.RobotAudio.RobotAudioFrame) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 3) { - audioFrameBuilder_.mergeFrom(value); - } else { - audioFrameBuilder_.setMessage(value); - } - } - payloadCase_ = 3; - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public Builder clearAudioFrame() { - if (audioFrameBuilder_ == null) { - if (payloadCase_ == 3) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 3) { - payloadCase_ = 0; - payload_ = null; - } - audioFrameBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - public cmvr.api.RobotAudio.RobotAudioFrame.Builder getAudioFrameBuilder() { - return getAudioFrameFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioFrameOrBuilder getAudioFrameOrBuilder() { - if ((payloadCase_ == 3) && (audioFrameBuilder_ != null)) { - return audioFrameBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 3) { - return (cmvr.api.RobotAudio.RobotAudioFrame) payload_; - } - return cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioFrame audio_frame = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFrame, cmvr.api.RobotAudio.RobotAudioFrame.Builder, cmvr.api.RobotAudio.RobotAudioFrameOrBuilder> - getAudioFrameFieldBuilder() { - if (audioFrameBuilder_ == null) { - if (!(payloadCase_ == 3)) { - payload_ = cmvr.api.RobotAudio.RobotAudioFrame.getDefaultInstance(); - } - audioFrameBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioFrame, cmvr.api.RobotAudio.RobotAudioFrame.Builder, cmvr.api.RobotAudio.RobotAudioFrameOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioFrame) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 3; - onChanged();; - return audioFrameBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioHeartbeat, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder, cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder> heartbeatBuilder_; - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return Whether the heartbeat field is set. - */ - @java.lang.Override - public boolean hasHeartbeat() { - return payloadCase_ == 4; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - * @return The heartbeat. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeat getHeartbeat() { - if (heartbeatBuilder_ == null) { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } else { - if (payloadCase_ == 4) { - return heartbeatBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder setHeartbeat(cmvr.api.RobotAudio.RobotAudioHeartbeat value) { - if (heartbeatBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - heartbeatBuilder_.setMessage(value); - } - payloadCase_ = 4; - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder setHeartbeat( - cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder builderForValue) { - if (heartbeatBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - heartbeatBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 4; - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder mergeHeartbeat(cmvr.api.RobotAudio.RobotAudioHeartbeat value) { - if (heartbeatBuilder_ == null) { - if (payloadCase_ == 4 && - payload_ != cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioHeartbeat.newBuilder((cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 4) { - heartbeatBuilder_.mergeFrom(value); - } else { - heartbeatBuilder_.setMessage(value); - } - } - payloadCase_ = 4; - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public Builder clearHeartbeat() { - if (heartbeatBuilder_ == null) { - if (payloadCase_ == 4) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 4) { - payloadCase_ = 0; - payload_ = null; - } - heartbeatBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - public cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder getHeartbeatBuilder() { - return getHeartbeatFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder getHeartbeatOrBuilder() { - if ((payloadCase_ == 4) && (heartbeatBuilder_ != null)) { - return heartbeatBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 4) { - return (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_; - } - return cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioHeartbeat heartbeat = 4; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioHeartbeat, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder, cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder> - getHeartbeatFieldBuilder() { - if (heartbeatBuilder_ == null) { - if (!(payloadCase_ == 4)) { - payload_ = cmvr.api.RobotAudio.RobotAudioHeartbeat.getDefaultInstance(); - } - heartbeatBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioHeartbeat, cmvr.api.RobotAudio.RobotAudioHeartbeat.Builder, cmvr.api.RobotAudio.RobotAudioHeartbeatOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioHeartbeat) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 4; - onChanged();; - return heartbeatBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStop, cmvr.api.RobotAudio.RobotAudioStop.Builder, cmvr.api.RobotAudio.RobotAudioStopOrBuilder> stopBuilder_; - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return Whether the stop field is set. - */ - @java.lang.Override - public boolean hasStop() { - return payloadCase_ == 5; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - * @return The stop. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStop getStop() { - if (stopBuilder_ == null) { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } else { - if (payloadCase_ == 5) { - return stopBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder setStop(cmvr.api.RobotAudio.RobotAudioStop value) { - if (stopBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - stopBuilder_.setMessage(value); - } - payloadCase_ = 5; - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder setStop( - cmvr.api.RobotAudio.RobotAudioStop.Builder builderForValue) { - if (stopBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - stopBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 5; - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder mergeStop(cmvr.api.RobotAudio.RobotAudioStop value) { - if (stopBuilder_ == null) { - if (payloadCase_ == 5 && - payload_ != cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioStop.newBuilder((cmvr.api.RobotAudio.RobotAudioStop) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 5) { - stopBuilder_.mergeFrom(value); - } else { - stopBuilder_.setMessage(value); - } - } - payloadCase_ = 5; - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public Builder clearStop() { - if (stopBuilder_ == null) { - if (payloadCase_ == 5) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 5) { - payloadCase_ = 0; - payload_ = null; - } - stopBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - public cmvr.api.RobotAudio.RobotAudioStop.Builder getStopBuilder() { - return getStopFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioStopOrBuilder getStopOrBuilder() { - if ((payloadCase_ == 5) && (stopBuilder_ != null)) { - return stopBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 5) { - return (cmvr.api.RobotAudio.RobotAudioStop) payload_; - } - return cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioStop stop = 5; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStop, cmvr.api.RobotAudio.RobotAudioStop.Builder, cmvr.api.RobotAudio.RobotAudioStopOrBuilder> - getStopFieldBuilder() { - if (stopBuilder_ == null) { - if (!(payloadCase_ == 5)) { - payload_ = cmvr.api.RobotAudio.RobotAudioStop.getDefaultInstance(); - } - stopBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioStop, cmvr.api.RobotAudio.RobotAudioStop.Builder, cmvr.api.RobotAudio.RobotAudioStopOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioStop) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 5; - onChanged();; - return stopBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioError, cmvr.api.RobotAudio.RobotAudioError.Builder, cmvr.api.RobotAudio.RobotAudioErrorOrBuilder> errorBuilder_; - /** - * .cmvr.api.RobotAudioError error = 6; - * @return Whether the error field is set. - */ - @java.lang.Override - public boolean hasError() { - return payloadCase_ == 6; - } - /** - * .cmvr.api.RobotAudioError error = 6; - * @return The error. - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioError getError() { - if (errorBuilder_ == null) { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } else { - if (payloadCase_ == 6) { - return errorBuilder_.getMessage(); - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder setError(cmvr.api.RobotAudio.RobotAudioError value) { - if (errorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - payload_ = value; - onChanged(); - } else { - errorBuilder_.setMessage(value); - } - payloadCase_ = 6; - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder setError( - cmvr.api.RobotAudio.RobotAudioError.Builder builderForValue) { - if (errorBuilder_ == null) { - payload_ = builderForValue.build(); - onChanged(); - } else { - errorBuilder_.setMessage(builderForValue.build()); - } - payloadCase_ = 6; - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder mergeError(cmvr.api.RobotAudio.RobotAudioError value) { - if (errorBuilder_ == null) { - if (payloadCase_ == 6 && - payload_ != cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance()) { - payload_ = cmvr.api.RobotAudio.RobotAudioError.newBuilder((cmvr.api.RobotAudio.RobotAudioError) payload_) - .mergeFrom(value).buildPartial(); - } else { - payload_ = value; - } - onChanged(); - } else { - if (payloadCase_ == 6) { - errorBuilder_.mergeFrom(value); - } else { - errorBuilder_.setMessage(value); - } - } - payloadCase_ = 6; - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public Builder clearError() { - if (errorBuilder_ == null) { - if (payloadCase_ == 6) { - payloadCase_ = 0; - payload_ = null; - onChanged(); - } - } else { - if (payloadCase_ == 6) { - payloadCase_ = 0; - payload_ = null; - } - errorBuilder_.clear(); - } - return this; - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - public cmvr.api.RobotAudio.RobotAudioError.Builder getErrorBuilder() { - return getErrorFieldBuilder().getBuilder(); - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioErrorOrBuilder getErrorOrBuilder() { - if ((payloadCase_ == 6) && (errorBuilder_ != null)) { - return errorBuilder_.getMessageOrBuilder(); - } else { - if (payloadCase_ == 6) { - return (cmvr.api.RobotAudio.RobotAudioError) payload_; - } - return cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - } - /** - * .cmvr.api.RobotAudioError error = 6; - */ - private com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioError, cmvr.api.RobotAudio.RobotAudioError.Builder, cmvr.api.RobotAudio.RobotAudioErrorOrBuilder> - getErrorFieldBuilder() { - if (errorBuilder_ == null) { - if (!(payloadCase_ == 6)) { - payload_ = cmvr.api.RobotAudio.RobotAudioError.getDefaultInstance(); - } - errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - cmvr.api.RobotAudio.RobotAudioError, cmvr.api.RobotAudio.RobotAudioError.Builder, cmvr.api.RobotAudio.RobotAudioErrorOrBuilder>( - (cmvr.api.RobotAudio.RobotAudioError) payload_, - getParentForChildren(), - isClean()); - payload_ = null; - } - payloadCase_ = 6; - onChanged();; - return errorBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.RobotAudioResponse) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.RobotAudioResponse) - private static final cmvr.api.RobotAudio.RobotAudioResponse DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.RobotAudio.RobotAudioResponse(); - } - - public static cmvr.api.RobotAudio.RobotAudioResponse getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RobotAudioResponse parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.RobotAudio.RobotAudioResponse getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioFormat_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioFormat_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioStart_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioStart_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioFrame_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioFrame_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioHeartbeat_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioHeartbeat_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioStop_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioStop_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioError_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioError_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioStartAck_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioStartAck_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioRequest_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioRequest_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_RobotAudioResponse_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_RobotAudioResponse_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\032cmvr/api/robot_audio.proto\022\010cmvr.api\032\025" + - "cmvr/api/common.proto\"d\n\020RobotAudioForma" + - "t\022\023\n\013sample_rate\030\001 \001(\005\022\020\n\010channels\030\002 \001(\005" + - "\022\027\n\017bits_per_sample\030\003 \001(\005\022\020\n\010encoding\030\004 " + - "\001(\t\"f\n\017RobotAudioStart\022\022\n\nsession_id\030\001 \001" + - "(\t\022\023\n\013operator_id\030\002 \001(\t\022*\n\006format\030\003 \001(\0132" + - "\032.cmvr.api.RobotAudioFormat\"Z\n\017RobotAudi" + - "oFrame\022\022\n\nsession_id\030\001 \001(\t\022\020\n\010sequence\030\002" + - " \001(\003\022\024\n\014timestamp_ms\030\003 \001(\003\022\013\n\003pcm\030\004 \001(\014\"" + - "?\n\023RobotAudioHeartbeat\022\022\n\nsession_id\030\001 \001" + - "(\t\022\024\n\014timestamp_ms\030\002 \001(\003\"4\n\016RobotAudioSt" + - "op\022\022\n\nsession_id\030\001 \001(\t\022\016\n\006reason\030\002 \001(\t\"D" + - "\n\017RobotAudioError\022\022\n\nsession_id\030\001 \001(\t\022\014\n" + - "\004code\030\002 \001(\005\022\017\n\007message\030\003 \001(\t\"K\n\022RobotAud" + - "ioStartAck\022\022\n\nsession_id\030\001 \001(\t\022\020\n\010accept" + - "ed\030\002 \001(\010\022\017\n\007message\030\003 \001(\t\"\267\002\n\021RobotAudio" + - "Request\022/\n\006header\030\001 \001(\0132\037.cmvr.api.Comma" + - "ndHeader.Request\022*\n\005start\030\002 \001(\0132\031.cmvr.a" + - "pi.RobotAudioStartH\000\0220\n\013audio_frame\030\003 \001(" + - "\0132\031.cmvr.api.RobotAudioFrameH\000\0222\n\theartb" + - "eat\030\004 \001(\0132\035.cmvr.api.RobotAudioHeartbeat" + - "H\000\022(\n\004stop\030\005 \001(\0132\030.cmvr.api.RobotAudioSt" + - "opH\000\022*\n\005error\030\006 \001(\0132\031.cmvr.api.RobotAudi" + - "oErrorH\000B\t\n\007payload\"\300\002\n\022RobotAudioRespon" + - "se\0220\n\006header\030\001 \001(\0132 .cmvr.api.CommandHea" + - "der.Feedback\0221\n\tstart_ack\030\002 \001(\0132\034.cmvr.a" + - "pi.RobotAudioStartAckH\000\0220\n\013audio_frame\030\003" + - " \001(\0132\031.cmvr.api.RobotAudioFrameH\000\0222\n\thea" + - "rtbeat\030\004 \001(\0132\035.cmvr.api.RobotAudioHeartb" + - "eatH\000\022(\n\004stop\030\005 \001(\0132\030.cmvr.api.RobotAudi" + - "oStopH\000\022*\n\005error\030\006 \001(\0132\031.cmvr.api.RobotA" + - "udioErrorH\000B\t\n\007payload2_\n\021RobotAudioServ" + - "ice\022J\n\tAudioTalk\022\033.cmvr.api.RobotAudioRe" + - "quest\032\034.cmvr.api.RobotAudioResponse(\0010\001b" + - "\006proto3" - }; - descriptor = com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - cmvr.api.Common.getDescriptor(), - }); - internal_static_cmvr_api_RobotAudioFormat_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_cmvr_api_RobotAudioFormat_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioFormat_descriptor, - new java.lang.String[] { "SampleRate", "Channels", "BitsPerSample", "Encoding", }); - internal_static_cmvr_api_RobotAudioStart_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_cmvr_api_RobotAudioStart_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioStart_descriptor, - new java.lang.String[] { "SessionId", "OperatorId", "Format", }); - internal_static_cmvr_api_RobotAudioFrame_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_cmvr_api_RobotAudioFrame_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioFrame_descriptor, - new java.lang.String[] { "SessionId", "Sequence", "TimestampMs", "Pcm", }); - internal_static_cmvr_api_RobotAudioHeartbeat_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_cmvr_api_RobotAudioHeartbeat_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioHeartbeat_descriptor, - new java.lang.String[] { "SessionId", "TimestampMs", }); - internal_static_cmvr_api_RobotAudioStop_descriptor = - getDescriptor().getMessageTypes().get(4); - internal_static_cmvr_api_RobotAudioStop_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioStop_descriptor, - new java.lang.String[] { "SessionId", "Reason", }); - internal_static_cmvr_api_RobotAudioError_descriptor = - getDescriptor().getMessageTypes().get(5); - internal_static_cmvr_api_RobotAudioError_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioError_descriptor, - new java.lang.String[] { "SessionId", "Code", "Message", }); - internal_static_cmvr_api_RobotAudioStartAck_descriptor = - getDescriptor().getMessageTypes().get(6); - internal_static_cmvr_api_RobotAudioStartAck_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioStartAck_descriptor, - new java.lang.String[] { "SessionId", "Accepted", "Message", }); - internal_static_cmvr_api_RobotAudioRequest_descriptor = - getDescriptor().getMessageTypes().get(7); - internal_static_cmvr_api_RobotAudioRequest_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioRequest_descriptor, - new java.lang.String[] { "Header", "Start", "AudioFrame", "Heartbeat", "Stop", "Error", "Payload", }); - internal_static_cmvr_api_RobotAudioResponse_descriptor = - getDescriptor().getMessageTypes().get(8); - internal_static_cmvr_api_RobotAudioResponse_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_RobotAudioResponse_descriptor, - new java.lang.String[] { "Header", "StartAck", "AudioFrame", "Heartbeat", "Stop", "Error", "Payload", }); - cmvr.api.Common.getDescriptor(); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/RobotAudioServiceGrpc.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/RobotAudioServiceGrpc.java deleted file mode 100644 index 14c8575..0000000 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/RobotAudioServiceGrpc.java +++ /dev/null @@ -1,280 +0,0 @@ -package cmvr.api; - -import static io.grpc.MethodDescriptor.generateFullMethodName; - -/** - *
- * Real-time bidirectional robot audio service.
- * Java backend is the gRPC client; robot terminal is the gRPC server.
- * 
- */ -@javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.52.0)", - comments = "Source: cmvr/api/robot_audio.proto") -@io.grpc.stub.annotations.GrpcGenerated -public final class RobotAudioServiceGrpc { - - private RobotAudioServiceGrpc() {} - - public static final String SERVICE_NAME = "cmvr.api.RobotAudioService"; - - // Static method descriptors that strictly reflect the proto. - private static volatile io.grpc.MethodDescriptor getAudioTalkMethod; - - @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "AudioTalk", - requestType = cmvr.api.RobotAudio.RobotAudioRequest.class, - responseType = cmvr.api.RobotAudio.RobotAudioResponse.class, - methodType = io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING) - public static io.grpc.MethodDescriptor getAudioTalkMethod() { - io.grpc.MethodDescriptor getAudioTalkMethod; - if ((getAudioTalkMethod = RobotAudioServiceGrpc.getAudioTalkMethod) == null) { - synchronized (RobotAudioServiceGrpc.class) { - if ((getAudioTalkMethod = RobotAudioServiceGrpc.getAudioTalkMethod) == null) { - RobotAudioServiceGrpc.getAudioTalkMethod = getAudioTalkMethod = - io.grpc.MethodDescriptor.newBuilder() - .setType(io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING) - .setFullMethodName(generateFullMethodName(SERVICE_NAME, "AudioTalk")) - .setSampledToLocalTracing(true) - .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( - cmvr.api.RobotAudio.RobotAudioRequest.getDefaultInstance())) - .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( - cmvr.api.RobotAudio.RobotAudioResponse.getDefaultInstance())) - .setSchemaDescriptor(new RobotAudioServiceMethodDescriptorSupplier("AudioTalk")) - .build(); - } - } - } - return getAudioTalkMethod; - } - - /** - * Creates a new async stub that supports all call types for the service - */ - public static RobotAudioServiceStub newStub(io.grpc.Channel channel) { - io.grpc.stub.AbstractStub.StubFactory factory = - new io.grpc.stub.AbstractStub.StubFactory() { - @java.lang.Override - public RobotAudioServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new RobotAudioServiceStub(channel, callOptions); - } - }; - return RobotAudioServiceStub.newStub(factory, channel); - } - - /** - * Creates a new blocking-style stub that supports unary and streaming output calls on the service - */ - public static RobotAudioServiceBlockingStub newBlockingStub( - io.grpc.Channel channel) { - io.grpc.stub.AbstractStub.StubFactory factory = - new io.grpc.stub.AbstractStub.StubFactory() { - @java.lang.Override - public RobotAudioServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new RobotAudioServiceBlockingStub(channel, callOptions); - } - }; - return RobotAudioServiceBlockingStub.newStub(factory, channel); - } - - /** - * Creates a new ListenableFuture-style stub that supports unary calls on the service - */ - public static RobotAudioServiceFutureStub newFutureStub( - io.grpc.Channel channel) { - io.grpc.stub.AbstractStub.StubFactory factory = - new io.grpc.stub.AbstractStub.StubFactory() { - @java.lang.Override - public RobotAudioServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new RobotAudioServiceFutureStub(channel, callOptions); - } - }; - return RobotAudioServiceFutureStub.newStub(factory, channel); - } - - /** - *
-   * Real-time bidirectional robot audio service.
-   * Java backend is the gRPC client; robot terminal is the gRPC server.
-   * 
- */ - public static abstract class RobotAudioServiceImplBase implements io.grpc.BindableService { - - /** - */ - public io.grpc.stub.StreamObserver audioTalk( - io.grpc.stub.StreamObserver responseObserver) { - return io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall(getAudioTalkMethod(), responseObserver); - } - - @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { - return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) - .addMethod( - getAudioTalkMethod(), - io.grpc.stub.ServerCalls.asyncBidiStreamingCall( - new MethodHandlers< - cmvr.api.RobotAudio.RobotAudioRequest, - cmvr.api.RobotAudio.RobotAudioResponse>( - this, METHODID_AUDIO_TALK))) - .build(); - } - } - - /** - *
-   * Real-time bidirectional robot audio service.
-   * Java backend is the gRPC client; robot terminal is the gRPC server.
-   * 
- */ - public static final class RobotAudioServiceStub extends io.grpc.stub.AbstractAsyncStub { - private RobotAudioServiceStub( - io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - super(channel, callOptions); - } - - @java.lang.Override - protected RobotAudioServiceStub build( - io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new RobotAudioServiceStub(channel, callOptions); - } - - /** - */ - public io.grpc.stub.StreamObserver audioTalk( - io.grpc.stub.StreamObserver responseObserver) { - return io.grpc.stub.ClientCalls.asyncBidiStreamingCall( - getChannel().newCall(getAudioTalkMethod(), getCallOptions()), responseObserver); - } - } - - /** - *
-   * Real-time bidirectional robot audio service.
-   * Java backend is the gRPC client; robot terminal is the gRPC server.
-   * 
- */ - public static final class RobotAudioServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub { - private RobotAudioServiceBlockingStub( - io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - super(channel, callOptions); - } - - @java.lang.Override - protected RobotAudioServiceBlockingStub build( - io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new RobotAudioServiceBlockingStub(channel, callOptions); - } - } - - /** - *
-   * Real-time bidirectional robot audio service.
-   * Java backend is the gRPC client; robot terminal is the gRPC server.
-   * 
- */ - public static final class RobotAudioServiceFutureStub extends io.grpc.stub.AbstractFutureStub { - private RobotAudioServiceFutureStub( - io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - super(channel, callOptions); - } - - @java.lang.Override - protected RobotAudioServiceFutureStub build( - io.grpc.Channel channel, io.grpc.CallOptions callOptions) { - return new RobotAudioServiceFutureStub(channel, callOptions); - } - } - - private static final int METHODID_AUDIO_TALK = 0; - - private static final class MethodHandlers implements - io.grpc.stub.ServerCalls.UnaryMethod, - io.grpc.stub.ServerCalls.ServerStreamingMethod, - io.grpc.stub.ServerCalls.ClientStreamingMethod, - io.grpc.stub.ServerCalls.BidiStreamingMethod { - private final RobotAudioServiceImplBase serviceImpl; - private final int methodId; - - MethodHandlers(RobotAudioServiceImplBase serviceImpl, int methodId) { - this.serviceImpl = serviceImpl; - this.methodId = methodId; - } - - @java.lang.Override - @java.lang.SuppressWarnings("unchecked") - public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { - switch (methodId) { - default: - throw new AssertionError(); - } - } - - @java.lang.Override - @java.lang.SuppressWarnings("unchecked") - public io.grpc.stub.StreamObserver invoke( - io.grpc.stub.StreamObserver responseObserver) { - switch (methodId) { - case METHODID_AUDIO_TALK: - return (io.grpc.stub.StreamObserver) serviceImpl.audioTalk( - (io.grpc.stub.StreamObserver) responseObserver); - default: - throw new AssertionError(); - } - } - } - - private static abstract class RobotAudioServiceBaseDescriptorSupplier - implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier { - RobotAudioServiceBaseDescriptorSupplier() {} - - @java.lang.Override - public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { - return cmvr.api.RobotAudio.getDescriptor(); - } - - @java.lang.Override - public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { - return getFileDescriptor().findServiceByName("RobotAudioService"); - } - } - - private static final class RobotAudioServiceFileDescriptorSupplier - extends RobotAudioServiceBaseDescriptorSupplier { - RobotAudioServiceFileDescriptorSupplier() {} - } - - private static final class RobotAudioServiceMethodDescriptorSupplier - extends RobotAudioServiceBaseDescriptorSupplier - implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { - private final String methodName; - - RobotAudioServiceMethodDescriptorSupplier(String methodName) { - this.methodName = methodName; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { - return getServiceDescriptor().findMethodByName(methodName); - } - } - - private static volatile io.grpc.ServiceDescriptor serviceDescriptor; - - public static io.grpc.ServiceDescriptor getServiceDescriptor() { - io.grpc.ServiceDescriptor result = serviceDescriptor; - if (result == null) { - synchronized (RobotAudioServiceGrpc.class) { - result = serviceDescriptor; - if (result == null) { - serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) - .setSchemaDescriptor(new RobotAudioServiceFileDescriptorSupplier()) - .addMethod(getAudioTalkMethod()) - .build(); - } - } - } - return result; - } -} diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerCommand.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerCommand.java index 90d4b6f..3e5a0e8 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerCommand.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerCommand.java @@ -14,1160 +14,17 @@ public final class SpeakerCommand { registerAllExtensions( (com.google.protobuf.ExtensionRegistryLite) registry); } - public interface AudioDataOrBuilder extends - // @@protoc_insertion_point(interface_extends:cmvr.api.AudioData) - com.google.protobuf.MessageOrBuilder { - - /** - *
-     * 音频二进制数据
-     * 
- * - * bytes data = 1; - * @return The data. - */ - com.google.protobuf.ByteString getData(); - - /** - *
-     * 采样率(Hz)
-     * 
- * - * int32 sample_rate = 2; - * @return The sampleRate. - */ - int getSampleRate(); - - /** - *
-     * 声道数
-     * 
- * - * int32 channels = 3; - * @return The channels. - */ - int getChannels(); - - /** - *
-     * 音频格式
-     * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return The enum numeric value on the wire for format. - */ - int getFormatValue(); - /** - *
-     * 音频格式
-     * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return The format. - */ - cmvr.api.SpeakerCommand.AudioData.AudioFormat getFormat(); - - /** - *
-     * 编码方式
-     * 
- * - * string codec = 5; - * @return The codec. - */ - java.lang.String getCodec(); - /** - *
-     * 编码方式
-     * 
- * - * string codec = 5; - * @return The bytes for codec. - */ - com.google.protobuf.ByteString - getCodecBytes(); - } - /** - *
-   * 音频数据格式(与麦克风类似,但用于输出)
-   * 
- * - * Protobuf type {@code cmvr.api.AudioData} - */ - public static final class AudioData extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:cmvr.api.AudioData) - AudioDataOrBuilder { - private static final long serialVersionUID = 0L; - // Use AudioData.newBuilder() to construct. - private AudioData(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private AudioData() { - data_ = com.google.protobuf.ByteString.EMPTY; - format_ = 0; - codec_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new AudioData(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.SpeakerCommand.internal_static_cmvr_api_AudioData_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.SpeakerCommand.internal_static_cmvr_api_AudioData_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.SpeakerCommand.AudioData.class, cmvr.api.SpeakerCommand.AudioData.Builder.class); - } - - /** - * Protobuf enum {@code cmvr.api.AudioData.AudioFormat} - */ - public enum AudioFormat - implements com.google.protobuf.ProtocolMessageEnum { - /** - * PCM = 0; - */ - PCM(0), - /** - * MP3 = 1; - */ - MP3(1), - /** - * AAC = 2; - */ - AAC(2), - /** - * WAV = 3; - */ - WAV(3), - UNRECOGNIZED(-1), - ; - - /** - * PCM = 0; - */ - public static final int PCM_VALUE = 0; - /** - * MP3 = 1; - */ - public static final int MP3_VALUE = 1; - /** - * AAC = 2; - */ - public static final int AAC_VALUE = 2; - /** - * WAV = 3; - */ - public static final int WAV_VALUE = 3; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static AudioFormat valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static AudioFormat forNumber(int value) { - switch (value) { - case 0: return PCM; - case 1: return MP3; - case 2: return AAC; - case 3: return WAV; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - AudioFormat> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public AudioFormat findValueByNumber(int number) { - return AudioFormat.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return cmvr.api.SpeakerCommand.AudioData.getDescriptor().getEnumTypes().get(0); - } - - private static final AudioFormat[] VALUES = values(); - - public static AudioFormat valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private AudioFormat(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:cmvr.api.AudioData.AudioFormat) - } - - public static final int DATA_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString data_; - /** - *
-     * 音频二进制数据
-     * 
- * - * bytes data = 1; - * @return The data. - */ - @java.lang.Override - public com.google.protobuf.ByteString getData() { - return data_; - } - - public static final int SAMPLE_RATE_FIELD_NUMBER = 2; - private int sampleRate_; - /** - *
-     * 采样率(Hz)
-     * 
- * - * int32 sample_rate = 2; - * @return The sampleRate. - */ - @java.lang.Override - public int getSampleRate() { - return sampleRate_; - } - - public static final int CHANNELS_FIELD_NUMBER = 3; - private int channels_; - /** - *
-     * 声道数
-     * 
- * - * int32 channels = 3; - * @return The channels. - */ - @java.lang.Override - public int getChannels() { - return channels_; - } - - public static final int FORMAT_FIELD_NUMBER = 4; - private int format_; - /** - *
-     * 音频格式
-     * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return The enum numeric value on the wire for format. - */ - @java.lang.Override public int getFormatValue() { - return format_; - } - /** - *
-     * 音频格式
-     * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return The format. - */ - @java.lang.Override public cmvr.api.SpeakerCommand.AudioData.AudioFormat getFormat() { - @SuppressWarnings("deprecation") - cmvr.api.SpeakerCommand.AudioData.AudioFormat result = cmvr.api.SpeakerCommand.AudioData.AudioFormat.valueOf(format_); - return result == null ? cmvr.api.SpeakerCommand.AudioData.AudioFormat.UNRECOGNIZED : result; - } - - public static final int CODEC_FIELD_NUMBER = 5; - private volatile java.lang.Object codec_; - /** - *
-     * 编码方式
-     * 
- * - * string codec = 5; - * @return The codec. - */ - @java.lang.Override - public java.lang.String getCodec() { - java.lang.Object ref = codec_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - codec_ = s; - return s; - } - } - /** - *
-     * 编码方式
-     * 
- * - * string codec = 5; - * @return The bytes for codec. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getCodecBytes() { - java.lang.Object ref = codec_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - codec_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!data_.isEmpty()) { - output.writeBytes(1, data_); - } - if (sampleRate_ != 0) { - output.writeInt32(2, sampleRate_); - } - if (channels_ != 0) { - output.writeInt32(3, channels_); - } - if (format_ != cmvr.api.SpeakerCommand.AudioData.AudioFormat.PCM.getNumber()) { - output.writeEnum(4, format_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(codec_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, codec_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!data_.isEmpty()) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, data_); - } - if (sampleRate_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, sampleRate_); - } - if (channels_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(3, channels_); - } - if (format_ != cmvr.api.SpeakerCommand.AudioData.AudioFormat.PCM.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(4, format_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(codec_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, codec_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof cmvr.api.SpeakerCommand.AudioData)) { - return super.equals(obj); - } - cmvr.api.SpeakerCommand.AudioData other = (cmvr.api.SpeakerCommand.AudioData) obj; - - if (!getData() - .equals(other.getData())) return false; - if (getSampleRate() - != other.getSampleRate()) return false; - if (getChannels() - != other.getChannels()) return false; - if (format_ != other.format_) return false; - if (!getCodec() - .equals(other.getCodec())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + DATA_FIELD_NUMBER; - hash = (53 * hash) + getData().hashCode(); - hash = (37 * hash) + SAMPLE_RATE_FIELD_NUMBER; - hash = (53 * hash) + getSampleRate(); - hash = (37 * hash) + CHANNELS_FIELD_NUMBER; - hash = (53 * hash) + getChannels(); - hash = (37 * hash) + FORMAT_FIELD_NUMBER; - hash = (53 * hash) + format_; - hash = (37 * hash) + CODEC_FIELD_NUMBER; - hash = (53 * hash) + getCodec().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.SpeakerCommand.AudioData parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static cmvr.api.SpeakerCommand.AudioData parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static cmvr.api.SpeakerCommand.AudioData parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(cmvr.api.SpeakerCommand.AudioData prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * 音频数据格式(与麦克风类似,但用于输出)
-     * 
- * - * Protobuf type {@code cmvr.api.AudioData} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:cmvr.api.AudioData) - cmvr.api.SpeakerCommand.AudioDataOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return cmvr.api.SpeakerCommand.internal_static_cmvr_api_AudioData_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return cmvr.api.SpeakerCommand.internal_static_cmvr_api_AudioData_fieldAccessorTable - .ensureFieldAccessorsInitialized( - cmvr.api.SpeakerCommand.AudioData.class, cmvr.api.SpeakerCommand.AudioData.Builder.class); - } - - // Construct using cmvr.api.SpeakerCommand.AudioData.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - data_ = com.google.protobuf.ByteString.EMPTY; - - sampleRate_ = 0; - - channels_ = 0; - - format_ = 0; - - codec_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return cmvr.api.SpeakerCommand.internal_static_cmvr_api_AudioData_descriptor; - } - - @java.lang.Override - public cmvr.api.SpeakerCommand.AudioData getDefaultInstanceForType() { - return cmvr.api.SpeakerCommand.AudioData.getDefaultInstance(); - } - - @java.lang.Override - public cmvr.api.SpeakerCommand.AudioData build() { - cmvr.api.SpeakerCommand.AudioData result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public cmvr.api.SpeakerCommand.AudioData buildPartial() { - cmvr.api.SpeakerCommand.AudioData result = new cmvr.api.SpeakerCommand.AudioData(this); - result.data_ = data_; - result.sampleRate_ = sampleRate_; - result.channels_ = channels_; - result.format_ = format_; - result.codec_ = codec_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof cmvr.api.SpeakerCommand.AudioData) { - return mergeFrom((cmvr.api.SpeakerCommand.AudioData)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(cmvr.api.SpeakerCommand.AudioData other) { - if (other == cmvr.api.SpeakerCommand.AudioData.getDefaultInstance()) return this; - if (other.getData() != com.google.protobuf.ByteString.EMPTY) { - setData(other.getData()); - } - if (other.getSampleRate() != 0) { - setSampleRate(other.getSampleRate()); - } - if (other.getChannels() != 0) { - setChannels(other.getChannels()); - } - if (other.format_ != 0) { - setFormatValue(other.getFormatValue()); - } - if (!other.getCodec().isEmpty()) { - codec_ = other.codec_; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - data_ = input.readBytes(); - - break; - } // case 10 - case 16: { - sampleRate_ = input.readInt32(); - - break; - } // case 16 - case 24: { - channels_ = input.readInt32(); - - break; - } // case 24 - case 32: { - format_ = input.readEnum(); - - break; - } // case 32 - case 42: { - codec_ = input.readStringRequireUtf8(); - - break; - } // case 42 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY; - /** - *
-       * 音频二进制数据
-       * 
- * - * bytes data = 1; - * @return The data. - */ - @java.lang.Override - public com.google.protobuf.ByteString getData() { - return data_; - } - /** - *
-       * 音频二进制数据
-       * 
- * - * bytes data = 1; - * @param value The data to set. - * @return This builder for chaining. - */ - public Builder setData(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - - data_ = value; - onChanged(); - return this; - } - /** - *
-       * 音频二进制数据
-       * 
- * - * bytes data = 1; - * @return This builder for chaining. - */ - public Builder clearData() { - - data_ = getDefaultInstance().getData(); - onChanged(); - return this; - } - - private int sampleRate_ ; - /** - *
-       * 采样率(Hz)
-       * 
- * - * int32 sample_rate = 2; - * @return The sampleRate. - */ - @java.lang.Override - public int getSampleRate() { - return sampleRate_; - } - /** - *
-       * 采样率(Hz)
-       * 
- * - * int32 sample_rate = 2; - * @param value The sampleRate to set. - * @return This builder for chaining. - */ - public Builder setSampleRate(int value) { - - sampleRate_ = value; - onChanged(); - return this; - } - /** - *
-       * 采样率(Hz)
-       * 
- * - * int32 sample_rate = 2; - * @return This builder for chaining. - */ - public Builder clearSampleRate() { - - sampleRate_ = 0; - onChanged(); - return this; - } - - private int channels_ ; - /** - *
-       * 声道数
-       * 
- * - * int32 channels = 3; - * @return The channels. - */ - @java.lang.Override - public int getChannels() { - return channels_; - } - /** - *
-       * 声道数
-       * 
- * - * int32 channels = 3; - * @param value The channels to set. - * @return This builder for chaining. - */ - public Builder setChannels(int value) { - - channels_ = value; - onChanged(); - return this; - } - /** - *
-       * 声道数
-       * 
- * - * int32 channels = 3; - * @return This builder for chaining. - */ - public Builder clearChannels() { - - channels_ = 0; - onChanged(); - return this; - } - - private int format_ = 0; - /** - *
-       * 音频格式
-       * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return The enum numeric value on the wire for format. - */ - @java.lang.Override public int getFormatValue() { - return format_; - } - /** - *
-       * 音频格式
-       * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @param value The enum numeric value on the wire for format to set. - * @return This builder for chaining. - */ - public Builder setFormatValue(int value) { - - format_ = value; - onChanged(); - return this; - } - /** - *
-       * 音频格式
-       * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return The format. - */ - @java.lang.Override - public cmvr.api.SpeakerCommand.AudioData.AudioFormat getFormat() { - @SuppressWarnings("deprecation") - cmvr.api.SpeakerCommand.AudioData.AudioFormat result = cmvr.api.SpeakerCommand.AudioData.AudioFormat.valueOf(format_); - return result == null ? cmvr.api.SpeakerCommand.AudioData.AudioFormat.UNRECOGNIZED : result; - } - /** - *
-       * 音频格式
-       * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @param value The format to set. - * @return This builder for chaining. - */ - public Builder setFormat(cmvr.api.SpeakerCommand.AudioData.AudioFormat value) { - if (value == null) { - throw new NullPointerException(); - } - - format_ = value.getNumber(); - onChanged(); - return this; - } - /** - *
-       * 音频格式
-       * 
- * - * .cmvr.api.AudioData.AudioFormat format = 4; - * @return This builder for chaining. - */ - public Builder clearFormat() { - - format_ = 0; - onChanged(); - return this; - } - - private java.lang.Object codec_ = ""; - /** - *
-       * 编码方式
-       * 
- * - * string codec = 5; - * @return The codec. - */ - public java.lang.String getCodec() { - java.lang.Object ref = codec_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - codec_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-       * 编码方式
-       * 
- * - * string codec = 5; - * @return The bytes for codec. - */ - public com.google.protobuf.ByteString - getCodecBytes() { - java.lang.Object ref = codec_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - codec_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-       * 编码方式
-       * 
- * - * string codec = 5; - * @param value The codec to set. - * @return This builder for chaining. - */ - public Builder setCodec( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - codec_ = value; - onChanged(); - return this; - } - /** - *
-       * 编码方式
-       * 
- * - * string codec = 5; - * @return This builder for chaining. - */ - public Builder clearCodec() { - - codec_ = getDefaultInstance().getCodec(); - onChanged(); - return this; - } - /** - *
-       * 编码方式
-       * 
- * - * string codec = 5; - * @param value The bytes for codec to set. - * @return This builder for chaining. - */ - public Builder setCodecBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - codec_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:cmvr.api.AudioData) - } - - // @@protoc_insertion_point(class_scope:cmvr.api.AudioData) - private static final cmvr.api.SpeakerCommand.AudioData DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new cmvr.api.SpeakerCommand.AudioData(); - } - - public static cmvr.api.SpeakerCommand.AudioData getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public AudioData parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public cmvr.api.SpeakerCommand.AudioData getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - public interface SpeakerStateOrBuilder extends // @@protoc_insertion_point(interface_extends:cmvr.api.SpeakerState) com.google.protobuf.MessageOrBuilder { /** - *
-     * 是否已初始化
-     * 
- * * bool is_initialized = 1; * @return The isInitialized. */ boolean getIsInitialized(); /** - *
-     * 是否正在播放
-     * 
- * * bool is_running = 2; * @return The isRunning. */ @@ -1186,29 +43,17 @@ public final class SpeakerCommand { boolean getIsPaused(); /** - *
-     * 当前音量(0 ~ 100)
-     * 
- * * int32 volume = 6; * @return The volume. */ int getVolume(); /** - *
-     * 错误信息
-     * 
- * * string error_message = 7; * @return The errorMessage. */ java.lang.String getErrorMessage(); /** - *
-     * 错误信息
-     * 
- * * string error_message = 7; * @return The bytes for errorMessage. */ @@ -1216,10 +61,6 @@ public final class SpeakerCommand { getErrorMessageBytes(); } /** - *
-   * 扬声器状态
-   * 
- * * Protobuf type {@code cmvr.api.SpeakerState} */ public static final class SpeakerState extends @@ -1263,10 +104,6 @@ public final class SpeakerCommand { public static final int IS_INITIALIZED_FIELD_NUMBER = 1; private boolean isInitialized_; /** - *
-     * 是否已初始化
-     * 
- * * bool is_initialized = 1; * @return The isInitialized. */ @@ -1278,10 +115,6 @@ public final class SpeakerCommand { public static final int IS_RUNNING_FIELD_NUMBER = 2; private boolean isRunning_; /** - *
-     * 是否正在播放
-     * 
- * * bool is_running = 2; * @return The isRunning. */ @@ -1315,10 +148,6 @@ public final class SpeakerCommand { public static final int VOLUME_FIELD_NUMBER = 6; private int volume_; /** - *
-     * 当前音量(0 ~ 100)
-     * 
- * * int32 volume = 6; * @return The volume. */ @@ -1330,10 +159,6 @@ public final class SpeakerCommand { public static final int ERROR_MESSAGE_FIELD_NUMBER = 7; private volatile java.lang.Object errorMessage_; /** - *
-     * 错误信息
-     * 
- * * string error_message = 7; * @return The errorMessage. */ @@ -1351,10 +176,6 @@ public final class SpeakerCommand { } } /** - *
-     * 错误信息
-     * 
- * * string error_message = 7; * @return The bytes for errorMessage. */ @@ -1587,10 +408,6 @@ public final class SpeakerCommand { return builder; } /** - *
-     * 扬声器状态
-     * 
- * * Protobuf type {@code cmvr.api.SpeakerState} */ public static final class Builder extends @@ -1808,10 +625,6 @@ public final class SpeakerCommand { private boolean isInitialized_ ; /** - *
-       * 是否已初始化
-       * 
- * * bool is_initialized = 1; * @return The isInitialized. */ @@ -1820,10 +633,6 @@ public final class SpeakerCommand { return isInitialized_; } /** - *
-       * 是否已初始化
-       * 
- * * bool is_initialized = 1; * @param value The isInitialized to set. * @return This builder for chaining. @@ -1835,10 +644,6 @@ public final class SpeakerCommand { return this; } /** - *
-       * 是否已初始化
-       * 
- * * bool is_initialized = 1; * @return This builder for chaining. */ @@ -1851,10 +656,6 @@ public final class SpeakerCommand { private boolean isRunning_ ; /** - *
-       * 是否正在播放
-       * 
- * * bool is_running = 2; * @return The isRunning. */ @@ -1863,10 +664,6 @@ public final class SpeakerCommand { return isRunning_; } /** - *
-       * 是否正在播放
-       * 
- * * bool is_running = 2; * @param value The isRunning to set. * @return This builder for chaining. @@ -1878,10 +675,6 @@ public final class SpeakerCommand { return this; } /** - *
-       * 是否正在播放
-       * 
- * * bool is_running = 2; * @return This builder for chaining. */ @@ -1956,10 +749,6 @@ public final class SpeakerCommand { private int volume_ ; /** - *
-       * 当前音量(0 ~ 100)
-       * 
- * * int32 volume = 6; * @return The volume. */ @@ -1968,10 +757,6 @@ public final class SpeakerCommand { return volume_; } /** - *
-       * 当前音量(0 ~ 100)
-       * 
- * * int32 volume = 6; * @param value The volume to set. * @return This builder for chaining. @@ -1983,10 +768,6 @@ public final class SpeakerCommand { return this; } /** - *
-       * 当前音量(0 ~ 100)
-       * 
- * * int32 volume = 6; * @return This builder for chaining. */ @@ -1999,10 +780,6 @@ public final class SpeakerCommand { private java.lang.Object errorMessage_ = ""; /** - *
-       * 错误信息
-       * 
- * * string error_message = 7; * @return The errorMessage. */ @@ -2019,10 +796,6 @@ public final class SpeakerCommand { } } /** - *
-       * 错误信息
-       * 
- * * string error_message = 7; * @return The bytes for errorMessage. */ @@ -2040,10 +813,6 @@ public final class SpeakerCommand { } } /** - *
-       * 错误信息
-       * 
- * * string error_message = 7; * @param value The errorMessage to set. * @return This builder for chaining. @@ -2059,10 +828,6 @@ public final class SpeakerCommand { return this; } /** - *
-       * 错误信息
-       * 
- * * string error_message = 7; * @return This builder for chaining. */ @@ -2073,10 +838,6 @@ public final class SpeakerCommand { return this; } /** - *
-       * 错误信息
-       * 
- * * string error_message = 7; * @param value The bytes for errorMessage to set. * @return This builder for chaining. @@ -2161,10 +922,6 @@ public final class SpeakerCommand { com.google.protobuf.MessageOrBuilder { } /** - *
-   * 各种扬声器命令
-   * 
- * * Protobuf type {@code cmvr.api.GetSpeakerStateCommand} */ public static final class GetSpeakerStateCommand extends @@ -3740,10 +2497,6 @@ public final class SpeakerCommand { return builder; } /** - *
-     * 各种扬声器命令
-     * 
- * * Protobuf type {@code cmvr.api.GetSpeakerStateCommand} */ public static final class Builder extends @@ -5698,6 +4451,1797 @@ public final class SpeakerCommand { } + public interface StreamSpeakerAudioCommandOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.StreamSpeakerAudioCommand) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code cmvr.api.StreamSpeakerAudioCommand} + */ + public static final class StreamSpeakerAudioCommand extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.StreamSpeakerAudioCommand) + StreamSpeakerAudioCommandOrBuilder { + private static final long serialVersionUID = 0L; + // Use StreamSpeakerAudioCommand.newBuilder() to construct. + private StreamSpeakerAudioCommand(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private StreamSpeakerAudioCommand() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new StreamSpeakerAudioCommand(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.class, cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Builder.class); + } + + public interface RequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.StreamSpeakerAudioCommand.Request) + com.google.protobuf.MessageOrBuilder { + + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return Whether the header field is set. + */ + boolean hasHeader(); + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return The header. + */ + cmvr.api.Common.CommandHeader.Request getHeader(); + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder(); + + /** + * .cmvr.api.AudioData audio = 2; + * @return Whether the audio field is set. + */ + boolean hasAudio(); + /** + * .cmvr.api.AudioData audio = 2; + * @return The audio. + */ + cmvr.api.Common.AudioData getAudio(); + /** + * .cmvr.api.AudioData audio = 2; + */ + cmvr.api.Common.AudioDataOrBuilder getAudioOrBuilder(); + } + /** + * Protobuf type {@code cmvr.api.StreamSpeakerAudioCommand.Request} + */ + public static final class Request extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.StreamSpeakerAudioCommand.Request) + RequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use Request.newBuilder() to construct. + private Request(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Request() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Request(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.class, cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.Builder.class); + } + + public static final int HEADER_FIELD_NUMBER = 1; + private cmvr.api.Common.CommandHeader.Request header_; + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return Whether the header field is set. + */ + @java.lang.Override + public boolean hasHeader() { + return header_ != null; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return The header. + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.Request getHeader() { + return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() { + return getHeader(); + } + + public static final int AUDIO_FIELD_NUMBER = 2; + private cmvr.api.Common.AudioData audio_; + /** + * .cmvr.api.AudioData audio = 2; + * @return Whether the audio field is set. + */ + @java.lang.Override + public boolean hasAudio() { + return audio_ != null; + } + /** + * .cmvr.api.AudioData audio = 2; + * @return The audio. + */ + @java.lang.Override + public cmvr.api.Common.AudioData getAudio() { + return audio_ == null ? cmvr.api.Common.AudioData.getDefaultInstance() : audio_; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + @java.lang.Override + public cmvr.api.Common.AudioDataOrBuilder getAudioOrBuilder() { + return getAudio(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (header_ != null) { + output.writeMessage(1, getHeader()); + } + if (audio_ != null) { + output.writeMessage(2, getAudio()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (header_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getHeader()); + } + if (audio_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getAudio()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request)) { + return super.equals(obj); + } + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request other = (cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request) obj; + + if (hasHeader() != other.hasHeader()) return false; + if (hasHeader()) { + if (!getHeader() + .equals(other.getHeader())) return false; + } + if (hasAudio() != other.hasAudio()) return false; + if (hasAudio()) { + if (!getAudio() + .equals(other.getAudio())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasHeader()) { + hash = (37 * hash) + HEADER_FIELD_NUMBER; + hash = (53 * hash) + getHeader().hashCode(); + } + if (hasAudio()) { + hash = (37 * hash) + AUDIO_FIELD_NUMBER; + hash = (53 * hash) + getAudio().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.StreamSpeakerAudioCommand.Request} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.StreamSpeakerAudioCommand.Request) + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.RequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.class, cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.Builder.class); + } + + // Construct using cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (headerBuilder_ == null) { + header_ = null; + } else { + header_ = null; + headerBuilder_ = null; + } + if (audioBuilder_ == null) { + audio_ = null; + } else { + audio_ = null; + audioBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_descriptor; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request getDefaultInstanceForType() { + return cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request build() { + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request buildPartial() { + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request result = new cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request(this); + if (headerBuilder_ == null) { + result.header_ = header_; + } else { + result.header_ = headerBuilder_.build(); + } + if (audioBuilder_ == null) { + result.audio_ = audio_; + } else { + result.audio_ = audioBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request) { + return mergeFrom((cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request other) { + if (other == cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.getDefaultInstance()) return this; + if (other.hasHeader()) { + mergeHeader(other.getHeader()); + } + if (other.hasAudio()) { + mergeAudio(other.getAudio()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + input.readMessage( + getHeaderFieldBuilder().getBuilder(), + extensionRegistry); + + break; + } // case 10 + case 18: { + input.readMessage( + getAudioFieldBuilder().getBuilder(), + extensionRegistry); + + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private cmvr.api.Common.CommandHeader.Request header_; + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> headerBuilder_; + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return Whether the header field is set. + */ + public boolean hasHeader() { + return headerBuilder_ != null || header_ != null; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + * @return The header. + */ + public cmvr.api.Common.CommandHeader.Request getHeader() { + if (headerBuilder_ == null) { + return header_ == null ? cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; + } else { + return headerBuilder_.getMessage(); + } + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder setHeader(cmvr.api.Common.CommandHeader.Request value) { + if (headerBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + header_ = value; + onChanged(); + } else { + headerBuilder_.setMessage(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder setHeader( + cmvr.api.Common.CommandHeader.Request.Builder builderForValue) { + if (headerBuilder_ == null) { + header_ = builderForValue.build(); + onChanged(); + } else { + headerBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder mergeHeader(cmvr.api.Common.CommandHeader.Request value) { + if (headerBuilder_ == null) { + if (header_ != null) { + header_ = + cmvr.api.Common.CommandHeader.Request.newBuilder(header_).mergeFrom(value).buildPartial(); + } else { + header_ = value; + } + onChanged(); + } else { + headerBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public Builder clearHeader() { + if (headerBuilder_ == null) { + header_ = null; + onChanged(); + } else { + header_ = null; + headerBuilder_ = null; + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public cmvr.api.Common.CommandHeader.Request.Builder getHeaderBuilder() { + + onChanged(); + return getHeaderFieldBuilder().getBuilder(); + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + public cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder() { + if (headerBuilder_ != null) { + return headerBuilder_.getMessageOrBuilder(); + } else { + return header_ == null ? + cmvr.api.Common.CommandHeader.Request.getDefaultInstance() : header_; + } + } + /** + * .cmvr.api.CommandHeader.Request header = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder> + getHeaderFieldBuilder() { + if (headerBuilder_ == null) { + headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Request, cmvr.api.Common.CommandHeader.Request.Builder, cmvr.api.Common.CommandHeader.RequestOrBuilder>( + getHeader(), + getParentForChildren(), + isClean()); + header_ = null; + } + return headerBuilder_; + } + + private cmvr.api.Common.AudioData audio_; + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.AudioData, cmvr.api.Common.AudioData.Builder, cmvr.api.Common.AudioDataOrBuilder> audioBuilder_; + /** + * .cmvr.api.AudioData audio = 2; + * @return Whether the audio field is set. + */ + public boolean hasAudio() { + return audioBuilder_ != null || audio_ != null; + } + /** + * .cmvr.api.AudioData audio = 2; + * @return The audio. + */ + public cmvr.api.Common.AudioData getAudio() { + if (audioBuilder_ == null) { + return audio_ == null ? cmvr.api.Common.AudioData.getDefaultInstance() : audio_; + } else { + return audioBuilder_.getMessage(); + } + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder setAudio(cmvr.api.Common.AudioData value) { + if (audioBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + audio_ = value; + onChanged(); + } else { + audioBuilder_.setMessage(value); + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder setAudio( + cmvr.api.Common.AudioData.Builder builderForValue) { + if (audioBuilder_ == null) { + audio_ = builderForValue.build(); + onChanged(); + } else { + audioBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder mergeAudio(cmvr.api.Common.AudioData value) { + if (audioBuilder_ == null) { + if (audio_ != null) { + audio_ = + cmvr.api.Common.AudioData.newBuilder(audio_).mergeFrom(value).buildPartial(); + } else { + audio_ = value; + } + onChanged(); + } else { + audioBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public Builder clearAudio() { + if (audioBuilder_ == null) { + audio_ = null; + onChanged(); + } else { + audio_ = null; + audioBuilder_ = null; + } + + return this; + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public cmvr.api.Common.AudioData.Builder getAudioBuilder() { + + onChanged(); + return getAudioFieldBuilder().getBuilder(); + } + /** + * .cmvr.api.AudioData audio = 2; + */ + public cmvr.api.Common.AudioDataOrBuilder getAudioOrBuilder() { + if (audioBuilder_ != null) { + return audioBuilder_.getMessageOrBuilder(); + } else { + return audio_ == null ? + cmvr.api.Common.AudioData.getDefaultInstance() : audio_; + } + } + /** + * .cmvr.api.AudioData audio = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.AudioData, cmvr.api.Common.AudioData.Builder, cmvr.api.Common.AudioDataOrBuilder> + getAudioFieldBuilder() { + if (audioBuilder_ == null) { + audioBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.AudioData, cmvr.api.Common.AudioData.Builder, cmvr.api.Common.AudioDataOrBuilder>( + getAudio(), + getParentForChildren(), + isClean()); + audio_ = null; + } + return audioBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.StreamSpeakerAudioCommand.Request) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.StreamSpeakerAudioCommand.Request) + private static final cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request(); + } + + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Request parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface FeedbackOrBuilder extends + // @@protoc_insertion_point(interface_extends:cmvr.api.StreamSpeakerAudioCommand.Feedback) + com.google.protobuf.MessageOrBuilder { + + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return Whether the header field is set. + */ + boolean hasHeader(); + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return The header. + */ + cmvr.api.Common.CommandHeader.Feedback getHeader(); + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder(); + } + /** + * Protobuf type {@code cmvr.api.StreamSpeakerAudioCommand.Feedback} + */ + public static final class Feedback extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:cmvr.api.StreamSpeakerAudioCommand.Feedback) + FeedbackOrBuilder { + private static final long serialVersionUID = 0L; + // Use Feedback.newBuilder() to construct. + private Feedback(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Feedback() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Feedback(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.class, cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.Builder.class); + } + + public static final int HEADER_FIELD_NUMBER = 1; + private cmvr.api.Common.CommandHeader.Feedback header_; + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return Whether the header field is set. + */ + @java.lang.Override + public boolean hasHeader() { + return header_ != null; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return The header. + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.Feedback getHeader() { + return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + @java.lang.Override + public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() { + return getHeader(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (header_ != null) { + output.writeMessage(1, getHeader()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (header_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getHeader()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback)) { + return super.equals(obj); + } + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback other = (cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback) obj; + + if (hasHeader() != other.hasHeader()) return false; + if (hasHeader()) { + if (!getHeader() + .equals(other.getHeader())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasHeader()) { + hash = (37 * hash) + HEADER_FIELD_NUMBER; + hash = (53 * hash) + getHeader().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.StreamSpeakerAudioCommand.Feedback} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.StreamSpeakerAudioCommand.Feedback) + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.FeedbackOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.class, cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.Builder.class); + } + + // Construct using cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (headerBuilder_ == null) { + header_ = null; + } else { + header_ = null; + headerBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_descriptor; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback getDefaultInstanceForType() { + return cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback build() { + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback buildPartial() { + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback result = new cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback(this); + if (headerBuilder_ == null) { + result.header_ = header_; + } else { + result.header_ = headerBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback) { + return mergeFrom((cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback other) { + if (other == cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.getDefaultInstance()) return this; + if (other.hasHeader()) { + mergeHeader(other.getHeader()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + input.readMessage( + getHeaderFieldBuilder().getBuilder(), + extensionRegistry); + + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private cmvr.api.Common.CommandHeader.Feedback header_; + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> headerBuilder_; + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return Whether the header field is set. + */ + public boolean hasHeader() { + return headerBuilder_ != null || header_ != null; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + * @return The header. + */ + public cmvr.api.Common.CommandHeader.Feedback getHeader() { + if (headerBuilder_ == null) { + return header_ == null ? cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; + } else { + return headerBuilder_.getMessage(); + } + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder setHeader(cmvr.api.Common.CommandHeader.Feedback value) { + if (headerBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + header_ = value; + onChanged(); + } else { + headerBuilder_.setMessage(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder setHeader( + cmvr.api.Common.CommandHeader.Feedback.Builder builderForValue) { + if (headerBuilder_ == null) { + header_ = builderForValue.build(); + onChanged(); + } else { + headerBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder mergeHeader(cmvr.api.Common.CommandHeader.Feedback value) { + if (headerBuilder_ == null) { + if (header_ != null) { + header_ = + cmvr.api.Common.CommandHeader.Feedback.newBuilder(header_).mergeFrom(value).buildPartial(); + } else { + header_ = value; + } + onChanged(); + } else { + headerBuilder_.mergeFrom(value); + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public Builder clearHeader() { + if (headerBuilder_ == null) { + header_ = null; + onChanged(); + } else { + header_ = null; + headerBuilder_ = null; + } + + return this; + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public cmvr.api.Common.CommandHeader.Feedback.Builder getHeaderBuilder() { + + onChanged(); + return getHeaderFieldBuilder().getBuilder(); + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + public cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder() { + if (headerBuilder_ != null) { + return headerBuilder_.getMessageOrBuilder(); + } else { + return header_ == null ? + cmvr.api.Common.CommandHeader.Feedback.getDefaultInstance() : header_; + } + } + /** + * .cmvr.api.CommandHeader.Feedback header = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder> + getHeaderFieldBuilder() { + if (headerBuilder_ == null) { + headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + cmvr.api.Common.CommandHeader.Feedback, cmvr.api.Common.CommandHeader.Feedback.Builder, cmvr.api.Common.CommandHeader.FeedbackOrBuilder>( + getHeader(), + getParentForChildren(), + isClean()); + header_ = null; + } + return headerBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.StreamSpeakerAudioCommand.Feedback) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.StreamSpeakerAudioCommand.Feedback) + private static final cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback(); + } + + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Feedback parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand)) { + return super.equals(obj); + } + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand other = (cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code cmvr.api.StreamSpeakerAudioCommand} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:cmvr.api.StreamSpeakerAudioCommand) + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommandOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_fieldAccessorTable + .ensureFieldAccessorsInitialized( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.class, cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Builder.class); + } + + // Construct using cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return cmvr.api.SpeakerCommand.internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand getDefaultInstanceForType() { + return cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.getDefaultInstance(); + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand build() { + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand buildPartial() { + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand result = new cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand) { + return mergeFrom((cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand other) { + if (other == cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:cmvr.api.StreamSpeakerAudioCommand) + } + + // @@protoc_insertion_point(class_scope:cmvr.api.StreamSpeakerAudioCommand) + private static final cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand(); + } + + public static cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public StreamSpeakerAudioCommand parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + public interface StopSpeakerCommandOrBuilder extends // @@protoc_insertion_point(interface_extends:cmvr.api.StopSpeakerCommand) com.google.protobuf.MessageOrBuilder { @@ -10544,10 +11088,6 @@ public final class SpeakerCommand { cmvr.api.Common.CommandHeader.RequestOrBuilder getHeaderOrBuilder(); /** - *
-       * 音量值(0 ~ 100)
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -10622,10 +11162,6 @@ public final class SpeakerCommand { public static final int VOLUME_FIELD_NUMBER = 2; private int volume_; /** - *
-       * 音量值(0 ~ 100)
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -11107,10 +11643,6 @@ public final class SpeakerCommand { private int volume_ ; /** - *
-         * 音量值(0 ~ 100)
-         * 
- * * int32 volume = 2; * @return The volume. */ @@ -11119,10 +11651,6 @@ public final class SpeakerCommand { return volume_; } /** - *
-         * 音量值(0 ~ 100)
-         * 
- * * int32 volume = 2; * @param value The volume to set. * @return This builder for chaining. @@ -11134,10 +11662,6 @@ public final class SpeakerCommand { return this; } /** - *
-         * 音量值(0 ~ 100)
-         * 
- * * int32 volume = 2; * @return This builder for chaining. */ @@ -12825,10 +13349,6 @@ public final class SpeakerCommand { cmvr.api.Common.CommandHeader.FeedbackOrBuilder getHeaderOrBuilder(); /** - *
-       * 当前音量值
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -12903,10 +13423,6 @@ public final class SpeakerCommand { public static final int VOLUME_FIELD_NUMBER = 2; private int volume_; /** - *
-       * 当前音量值
-       * 
- * * int32 volume = 2; * @return The volume. */ @@ -13388,10 +13904,6 @@ public final class SpeakerCommand { private int volume_ ; /** - *
-         * 当前音量值
-         * 
- * * int32 volume = 2; * @return The volume. */ @@ -13400,10 +13912,6 @@ public final class SpeakerCommand { return volume_; } /** - *
-         * 当前音量值
-         * 
- * * int32 volume = 2; * @param value The volume to set. * @return This builder for chaining. @@ -13415,10 +13923,6 @@ public final class SpeakerCommand { return this; } /** - *
-         * 当前音量值
-         * 
- * * int32 volume = 2; * @return This builder for chaining. */ @@ -13848,11 +14352,6 @@ public final class SpeakerCommand { } - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_cmvr_api_AudioData_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_cmvr_api_AudioData_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_cmvr_api_SpeakerState_descriptor; private static final @@ -13888,6 +14387,21 @@ public final class SpeakerCommand { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_cmvr_api_PlayAudioCommand_Feedback_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_StreamSpeakerAudioCommand_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_cmvr_api_StopSpeakerCommand_descriptor; private static final @@ -13973,63 +14487,58 @@ public final class SpeakerCommand { static { java.lang.String[] descriptorData = { "\n\036cmvr/api/speaker_command.proto\022\010cmvr.a" + - "pi\032\025cmvr/api/common.proto\"\263\001\n\tAudioData\022" + - "\014\n\004data\030\001 \001(\014\022\023\n\013sample_rate\030\002 \001(\005\022\020\n\010ch" + - "annels\030\003 \001(\005\022/\n\006format\030\004 \001(\0162\037.cmvr.api." + - "AudioData.AudioFormat\022\r\n\005codec\030\005 \001(\t\"1\n\013" + - "AudioFormat\022\007\n\003PCM\020\000\022\007\n\003MP3\020\001\022\007\n\003AAC\020\002\022\007" + - "\n\003WAV\020\003\"\211\001\n\014SpeakerState\022\026\n\016is_initializ" + - "ed\030\001 \001(\010\022\022\n\nis_running\030\002 \001(\010\022\023\n\013is_decod" + - "ing\030\003 \001(\010\022\021\n\tis_paused\030\005 \001(\010\022\016\n\006volume\030\006" + - " \001(\005\022\025\n\rerror_message\030\007 \001(\t\"\271\001\n\026GetSpeak" + - "erStateCommand\032:\n\007Request\022/\n\006header\030\001 \001(" + - "\0132\037.cmvr.api.CommandHeader.Request\032c\n\010Fe" + - "edback\0220\n\006header\030\001 \001(\0132 .cmvr.api.Comman" + - "dHeader.Feedback\022%\n\005state\030\002 \001(\0132\026.cmvr.a" + - "pi.SpeakerState\"\240\001\n\020PlayAudioCommand\032N\n\007" + - "Request\022/\n\006header\030\001 \001(\0132\037.cmvr.api.Comma" + - "ndHeader.Request\022\022\n\naudio_path\030\002 \001(\t\032<\n\010" + - "Feedback\0220\n\006header\030\001 \001(\0132 .cmvr.api.Comm" + - "andHeader.Feedback\"\216\001\n\022StopSpeakerComman" + - "d\032:\n\007Request\022/\n\006header\030\001 \001(\0132\037.cmvr.api." + - "CommandHeader.Request\032<\n\010Feedback\0220\n\006hea" + - "der\030\001 \001(\0132 .cmvr.api.CommandHeader.Feedb" + - "ack\"\217\001\n\023PauseSpeakerCommand\032:\n\007Request\022/" + - "\n\006header\030\001 \001(\0132\037.cmvr.api.CommandHeader." + - "Request\032<\n\010Feedback\0220\n\006header\030\001 \001(\0132 .cm" + - "vr.api.CommandHeader.Feedback\"\220\001\n\024Resume" + - "SpeakerCommand\032:\n\007Request\022/\n\006header\030\001 \001(" + - "\0132\037.cmvr.api.CommandHeader.Request\032<\n\010Fe" + - "edback\0220\n\006header\030\001 \001(\0132 .cmvr.api.Comman" + - "dHeader.Feedback\"\243\001\n\027SetSpeakerVolumeCom" + - "mand\032J\n\007Request\022/\n\006header\030\001 \001(\0132\037.cmvr.a" + - "pi.CommandHeader.Request\022\016\n\006volume\030\002 \001(\005" + + "pi\032\025cmvr/api/common.proto\"\211\001\n\014SpeakerSta" + + "te\022\026\n\016is_initialized\030\001 \001(\010\022\022\n\nis_running" + + "\030\002 \001(\010\022\023\n\013is_decoding\030\003 \001(\010\022\021\n\tis_paused" + + "\030\005 \001(\010\022\016\n\006volume\030\006 \001(\005\022\025\n\rerror_message\030" + + "\007 \001(\t\"\271\001\n\026GetSpeakerStateCommand\032:\n\007Requ" + + "est\022/\n\006header\030\001 \001(\0132\037.cmvr.api.CommandHe" + + "ader.Request\032c\n\010Feedback\0220\n\006header\030\001 \001(\013" + + "2 .cmvr.api.CommandHeader.Feedback\022%\n\005st" + + "ate\030\002 \001(\0132\026.cmvr.api.SpeakerState\"\240\001\n\020Pl" + + "ayAudioCommand\032N\n\007Request\022/\n\006header\030\001 \001(" + + "\0132\037.cmvr.api.CommandHeader.Request\022\022\n\nau" + + "dio_path\030\002 \001(\t\032<\n\010Feedback\0220\n\006header\030\001 \001" + + "(\0132 .cmvr.api.CommandHeader.Feedback\"\271\001\n" + + "\031StreamSpeakerAudioCommand\032^\n\007Request\022/\n" + + "\006header\030\001 \001(\0132\037.cmvr.api.CommandHeader.R" + + "equest\022\"\n\005audio\030\002 \001(\0132\023.cmvr.api.AudioDa" + + "ta\032<\n\010Feedback\0220\n\006header\030\001 \001(\0132 .cmvr.ap" + + "i.CommandHeader.Feedback\"\216\001\n\022StopSpeaker" + + "Command\032:\n\007Request\022/\n\006header\030\001 \001(\0132\037.cmv" + + "r.api.CommandHeader.Request\032<\n\010Feedback\022" + + "0\n\006header\030\001 \001(\0132 .cmvr.api.CommandHeader" + + ".Feedback\"\217\001\n\023PauseSpeakerCommand\032:\n\007Req" + + "uest\022/\n\006header\030\001 \001(\0132\037.cmvr.api.CommandH" + + "eader.Request\032<\n\010Feedback\0220\n\006header\030\001 \001(" + + "\0132 .cmvr.api.CommandHeader.Feedback\"\220\001\n\024" + + "ResumeSpeakerCommand\032:\n\007Request\022/\n\006heade" + + "r\030\001 \001(\0132\037.cmvr.api.CommandHeader.Request" + "\032<\n\010Feedback\0220\n\006header\030\001 \001(\0132 .cmvr.api." + - "CommandHeader.Feedback\"\243\001\n\027GetSpeakerVol" + - "umeCommand\032:\n\007Request\022/\n\006header\030\001 \001(\0132\037." + - "cmvr.api.CommandHeader.Request\032L\n\010Feedba" + - "ck\0220\n\006header\030\001 \001(\0132 .cmvr.api.CommandHea" + - "der.Feedback\022\016\n\006volume\030\002 \001(\005b\006proto3" + "CommandHeader.Feedback\"\243\001\n\027SetSpeakerVol" + + "umeCommand\032J\n\007Request\022/\n\006header\030\001 \001(\0132\037." + + "cmvr.api.CommandHeader.Request\022\016\n\006volume" + + "\030\002 \001(\005\032<\n\010Feedback\0220\n\006header\030\001 \001(\0132 .cmv" + + "r.api.CommandHeader.Feedback\"\243\001\n\027GetSpea" + + "kerVolumeCommand\032:\n\007Request\022/\n\006header\030\001 " + + "\001(\0132\037.cmvr.api.CommandHeader.Request\032L\n\010" + + "Feedback\0220\n\006header\030\001 \001(\0132 .cmvr.api.Comm" + + "andHeader.Feedback\022\016\n\006volume\030\002 \001(\005b\006prot" + + "o3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { cmvr.api.Common.getDescriptor(), }); - internal_static_cmvr_api_AudioData_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_cmvr_api_AudioData_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_cmvr_api_AudioData_descriptor, - new java.lang.String[] { "Data", "SampleRate", "Channels", "Format", "Codec", }); internal_static_cmvr_api_SpeakerState_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageTypes().get(0); internal_static_cmvr_api_SpeakerState_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_SpeakerState_descriptor, new java.lang.String[] { "IsInitialized", "IsRunning", "IsDecoding", "IsPaused", "Volume", "ErrorMessage", }); internal_static_cmvr_api_GetSpeakerStateCommand_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageTypes().get(1); internal_static_cmvr_api_GetSpeakerStateCommand_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_GetSpeakerStateCommand_descriptor, @@ -14047,7 +14556,7 @@ public final class SpeakerCommand { internal_static_cmvr_api_GetSpeakerStateCommand_Feedback_descriptor, new java.lang.String[] { "Header", "State", }); internal_static_cmvr_api_PlayAudioCommand_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageTypes().get(2); internal_static_cmvr_api_PlayAudioCommand_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_PlayAudioCommand_descriptor, @@ -14064,6 +14573,24 @@ public final class SpeakerCommand { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_cmvr_api_PlayAudioCommand_Feedback_descriptor, new java.lang.String[] { "Header", }); + internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_cmvr_api_StreamSpeakerAudioCommand_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor, + new java.lang.String[] { }); + internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_descriptor = + internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor.getNestedTypes().get(0); + internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_StreamSpeakerAudioCommand_Request_descriptor, + new java.lang.String[] { "Header", "Audio", }); + internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_descriptor = + internal_static_cmvr_api_StreamSpeakerAudioCommand_descriptor.getNestedTypes().get(1); + internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_cmvr_api_StreamSpeakerAudioCommand_Feedback_descriptor, + new java.lang.String[] { "Header", }); internal_static_cmvr_api_StopSpeakerCommand_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_cmvr_api_StopSpeakerCommand_fieldAccessorTable = new diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceGrpc.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceGrpc.java index e0947b7..d4b0fc6 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceGrpc.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceGrpc.java @@ -77,6 +77,37 @@ public final class SpeakerServiceGrpc { return getPlayAudioMethod; } + private static volatile io.grpc.MethodDescriptor getStreamAudioMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "StreamAudio", + requestType = cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.class, + responseType = cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.class, + methodType = io.grpc.MethodDescriptor.MethodType.CLIENT_STREAMING) + public static io.grpc.MethodDescriptor getStreamAudioMethod() { + io.grpc.MethodDescriptor getStreamAudioMethod; + if ((getStreamAudioMethod = SpeakerServiceGrpc.getStreamAudioMethod) == null) { + synchronized (SpeakerServiceGrpc.class) { + if ((getStreamAudioMethod = SpeakerServiceGrpc.getStreamAudioMethod) == null) { + SpeakerServiceGrpc.getStreamAudioMethod = getStreamAudioMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.CLIENT_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "StreamAudio")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback.getDefaultInstance())) + .setSchemaDescriptor(new SpeakerServiceMethodDescriptorSupplier("StreamAudio")) + .build(); + } + } + } + return getStreamAudioMethod; + } + private static volatile io.grpc.MethodDescriptor getStopPlaybackMethod; @@ -281,9 +312,6 @@ public final class SpeakerServiceGrpc { public static abstract class SpeakerServiceImplBase implements io.grpc.BindableService { /** - *
-     * 基本控制
-     * 
*/ public void getStatus(cmvr.api.SpeakerCommand.GetSpeakerStateCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -297,6 +325,13 @@ public final class SpeakerServiceGrpc { io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getPlayAudioMethod(), responseObserver); } + /** + */ + public io.grpc.stub.StreamObserver streamAudio( + io.grpc.stub.StreamObserver responseObserver) { + return io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall(getStreamAudioMethod(), responseObserver); + } + /** */ public void stopPlayback(cmvr.api.SpeakerCommand.StopSpeakerCommand.Request request, @@ -319,9 +354,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 音量控制
-     * 
*/ public void setVolume(cmvr.api.SpeakerCommand.SetSpeakerVolumeCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -351,6 +383,13 @@ public final class SpeakerServiceGrpc { cmvr.api.SpeakerCommand.PlayAudioCommand.Request, cmvr.api.SpeakerCommand.PlayAudioCommand.Feedback>( this, METHODID_PLAY_AUDIO))) + .addMethod( + getStreamAudioMethod(), + io.grpc.stub.ServerCalls.asyncClientStreamingCall( + new MethodHandlers< + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Request, + cmvr.api.SpeakerCommand.StreamSpeakerAudioCommand.Feedback>( + this, METHODID_STREAM_AUDIO))) .addMethod( getStopPlaybackMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -405,9 +444,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 基本控制
-     * 
*/ public void getStatus(cmvr.api.SpeakerCommand.GetSpeakerStateCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -423,6 +459,14 @@ public final class SpeakerServiceGrpc { getChannel().newCall(getPlayAudioMethod(), getCallOptions()), request, responseObserver); } + /** + */ + public io.grpc.stub.StreamObserver streamAudio( + io.grpc.stub.StreamObserver responseObserver) { + return io.grpc.stub.ClientCalls.asyncClientStreamingCall( + getChannel().newCall(getStreamAudioMethod(), getCallOptions()), responseObserver); + } + /** */ public void stopPlayback(cmvr.api.SpeakerCommand.StopSpeakerCommand.Request request, @@ -448,9 +492,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 音量控制
-     * 
*/ public void setVolume(cmvr.api.SpeakerCommand.SetSpeakerVolumeCommand.Request request, io.grpc.stub.StreamObserver responseObserver) { @@ -482,9 +523,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 基本控制
-     * 
*/ public cmvr.api.SpeakerCommand.GetSpeakerStateCommand.Feedback getStatus(cmvr.api.SpeakerCommand.GetSpeakerStateCommand.Request request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( @@ -520,9 +558,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 音量控制
-     * 
*/ public cmvr.api.SpeakerCommand.SetSpeakerVolumeCommand.Feedback setVolume(cmvr.api.SpeakerCommand.SetSpeakerVolumeCommand.Request request) { return io.grpc.stub.ClientCalls.blockingUnaryCall( @@ -552,9 +587,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 基本控制
-     * 
*/ public com.google.common.util.concurrent.ListenableFuture getStatus( cmvr.api.SpeakerCommand.GetSpeakerStateCommand.Request request) { @@ -595,9 +627,6 @@ public final class SpeakerServiceGrpc { } /** - *
-     * 音量控制
-     * 
*/ public com.google.common.util.concurrent.ListenableFuture setVolume( cmvr.api.SpeakerCommand.SetSpeakerVolumeCommand.Request request) { @@ -621,6 +650,7 @@ public final class SpeakerServiceGrpc { private static final int METHODID_RESUME_PLAYBACK = 4; private static final int METHODID_SET_VOLUME = 5; private static final int METHODID_GET_VOLUME = 6; + private static final int METHODID_STREAM_AUDIO = 7; private static final class MethodHandlers implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -677,6 +707,9 @@ public final class SpeakerServiceGrpc { public io.grpc.stub.StreamObserver invoke( io.grpc.stub.StreamObserver responseObserver) { switch (methodId) { + case METHODID_STREAM_AUDIO: + return (io.grpc.stub.StreamObserver) serviceImpl.streamAudio( + (io.grpc.stub.StreamObserver) responseObserver); default: throw new AssertionError(); } @@ -730,6 +763,7 @@ public final class SpeakerServiceGrpc { .setSchemaDescriptor(new SpeakerServiceFileDescriptorSupplier()) .addMethod(getGetStatusMethod()) .addMethod(getPlayAudioMethod()) + .addMethod(getStreamAudioMethod()) .addMethod(getStopPlaybackMethod()) .addMethod(getPausePlaybackMethod()) .addMethod(getResumePlaybackMethod()) diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceOuterClass.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceOuterClass.java index f8cb524..35fb499 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceOuterClass.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/java/cmvr/api/SpeakerServiceOuterClass.java @@ -24,25 +24,28 @@ public final class SpeakerServiceOuterClass { static { java.lang.String[] descriptorData = { "\n\036cmvr/api/speaker_service.proto\022\010cmvr.a" + - "pi\032\036cmvr/api/speaker_command.proto2\260\005\n\016S" + + "pi\032\036cmvr/api/speaker_command.proto2\234\006\n\016S" + "peakerService\022`\n\tGetStatus\022(.cmvr.api.Ge" + "tSpeakerStateCommand.Request\032).cmvr.api." + "GetSpeakerStateCommand.Feedback\022T\n\tPlayA" + "udio\022\".cmvr.api.PlayAudioCommand.Request" + - "\032#.cmvr.api.PlayAudioCommand.Feedback\022[\n" + - "\014StopPlayback\022$.cmvr.api.StopSpeakerComm" + - "and.Request\032%.cmvr.api.StopSpeakerComman" + - "d.Feedback\022^\n\rPausePlayback\022%.cmvr.api.P" + - "auseSpeakerCommand.Request\032&.cmvr.api.Pa" + - "useSpeakerCommand.Feedback\022a\n\016ResumePlay" + - "back\022&.cmvr.api.ResumeSpeakerCommand.Req" + - "uest\032\'.cmvr.api.ResumeSpeakerCommand.Fee" + - "dback\022b\n\tSetVolume\022).cmvr.api.SetSpeaker" + - "VolumeCommand.Request\032*.cmvr.api.SetSpea" + - "kerVolumeCommand.Feedback\022b\n\tGetVolume\022)" + - ".cmvr.api.GetSpeakerVolumeCommand.Reques" + - "t\032*.cmvr.api.GetSpeakerVolumeCommand.Fee" + - "dbackb\006proto3" + "\032#.cmvr.api.PlayAudioCommand.Feedback\022j\n" + + "\013StreamAudio\022+.cmvr.api.StreamSpeakerAud" + + "ioCommand.Request\032,.cmvr.api.StreamSpeak" + + "erAudioCommand.Feedback(\001\022[\n\014StopPlaybac" + + "k\022$.cmvr.api.StopSpeakerCommand.Request\032" + + "%.cmvr.api.StopSpeakerCommand.Feedback\022^" + + "\n\rPausePlayback\022%.cmvr.api.PauseSpeakerC" + + "ommand.Request\032&.cmvr.api.PauseSpeakerCo" + + "mmand.Feedback\022a\n\016ResumePlayback\022&.cmvr." + + "api.ResumeSpeakerCommand.Request\032\'.cmvr." + + "api.ResumeSpeakerCommand.Feedback\022b\n\tSet" + + "Volume\022).cmvr.api.SetSpeakerVolumeComman" + + "d.Request\032*.cmvr.api.SetSpeakerVolumeCom" + + "mand.Feedback\022b\n\tGetVolume\022).cmvr.api.Ge" + + "tSpeakerVolumeCommand.Request\032*.cmvr.api" + + ".GetSpeakerVolumeCommand.Feedbackb\006proto" + + "3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/common.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/common.proto index accb936..53ecd55 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/common.proto +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/common.proto @@ -29,6 +29,22 @@ message CommandHeader { } } +message AudioData { + enum AudioFormat { + PCM = 0; + MP3 = 1; + AAC = 2; + WAV = 3; + } + bytes data = 1; + int32 sample_rate = 2; + int32 channels = 3; + AudioFormat format = 4; + string codec = 5; + int64 pts = 6; + int32 nb_samples = 7; +} + message ConfigParam { string param_name = 1; diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_command.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_command.proto index 4183415..71a6f4e 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_command.proto +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_command.proto @@ -11,6 +11,7 @@ message MicState { int32 volume = 4; string error_message = 5; } + message GetMicStateCommand { message Request { CommandHeader.Request header = 1; @@ -21,6 +22,7 @@ message GetMicStateCommand { MicState state = 2; } } + message StartMicRecordingCommand { message Request { CommandHeader.Request header = 1; @@ -59,10 +61,20 @@ message ResumeMicRecordingCommand { } } +message StreamMicAudioCommand { + message Request { + CommandHeader.Request header = 1; + } + message Feedback { + CommandHeader.Feedback header = 1; + AudioData audio = 2; + } +} + message SetMicPhoneVolumeCommand { message Request { CommandHeader.Request header = 1; - int32 volume = 2; // 音量值(0 ~ 100) + int32 volume = 2; } message Feedback { CommandHeader.Feedback header = 1; @@ -75,7 +87,6 @@ message GetMicPhoneVolumeCommand { } message Feedback { CommandHeader.Feedback header = 1; - int32 volume = 2; // 当前音量值 + int32 volume = 2; } } - diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_service.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_service.proto index fcf31b7..d9cea81 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_service.proto +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/microphone_service.proto @@ -4,17 +4,14 @@ import "cmvr/api/microphone_command.proto"; package cmvr.api; - service MicPhoneService { - // 基本控制 rpc GetStatus(GetMicStateCommand.Request) returns (GetMicStateCommand.Feedback); rpc StartRecord(StartMicRecordingCommand.Request) returns (StartMicRecordingCommand.Feedback); rpc StopRecord(StopMicRecordingCommand.Request) returns (StopMicRecordingCommand.Feedback); rpc PauseRecord(PauseMicRecordingCommand.Request) returns (PauseMicRecordingCommand.Feedback); rpc ResumeRecord(ResumeMicRecordingCommand.Request) returns (ResumeMicRecordingCommand.Feedback); + rpc StreamAudio(StreamMicAudioCommand.Request) returns (stream StreamMicAudioCommand.Feedback); - // 音量控制 rpc SetVolume(SetMicPhoneVolumeCommand.Request) returns (SetMicPhoneVolumeCommand.Feedback); rpc GetVolume(GetMicPhoneVolumeCommand.Request) returns (GetMicPhoneVolumeCommand.Feedback); - -} \ No newline at end of file +} diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/robot_audio.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/robot_audio.proto deleted file mode 100644 index 4f97c9d..0000000 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/robot_audio.proto +++ /dev/null @@ -1,81 +0,0 @@ -syntax = "proto3"; - -import "cmvr/api/common.proto"; - -package cmvr.api; - -// Real-time bidirectional robot audio service. -// Java backend is the gRPC client; robot terminal is the gRPC server. -service RobotAudioService { - rpc AudioTalk(stream RobotAudioRequest) returns (stream RobotAudioResponse); -} - -// Fixed audio format: PCM_S16LE, 48 kHz, 16-bit, mono. -// Both directions use 10 ms frames: 480 samples, 960 bytes. -message RobotAudioFormat { - int32 sample_rate = 1; - int32 channels = 2; - int32 bits_per_sample = 3; - string encoding = 4; -} - -message RobotAudioStart { - string session_id = 1; - string operator_id = 2; - RobotAudioFormat format = 3; -} - -message RobotAudioFrame { - string session_id = 1; - int64 sequence = 2; - // Robot upload: capture timestamp. Browser downlink: backend send timestamp. - int64 timestamp_ms = 3; - // PCM_S16LE. Fixed 10 ms / 960 bytes at 48 kHz mono 16-bit. - bytes pcm = 4; -} - -message RobotAudioHeartbeat { - string session_id = 1; - int64 timestamp_ms = 2; -} - -message RobotAudioStop { - string session_id = 1; - string reason = 2; -} - -message RobotAudioError { - string session_id = 1; - int32 code = 2; - string message = 3; -} - -message RobotAudioStartAck { - string session_id = 1; - bool accepted = 2; - string message = 3; -} - -message RobotAudioRequest { - CommandHeader.Request header = 1; - - oneof payload { - RobotAudioStart start = 2; - RobotAudioFrame audio_frame = 3; - RobotAudioHeartbeat heartbeat = 4; - RobotAudioStop stop = 5; - RobotAudioError error = 6; - } -} - -message RobotAudioResponse { - CommandHeader.Feedback header = 1; - - oneof payload { - RobotAudioStartAck start_ack = 2; - RobotAudioFrame audio_frame = 3; - RobotAudioHeartbeat heartbeat = 4; - RobotAudioStop stop = 5; - RobotAudioError error = 6; - } -} diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_command.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_command.proto index f5a23b8..6243b6d 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_command.proto +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_command.proto @@ -4,33 +4,15 @@ import "cmvr/api/common.proto"; package cmvr.api; - -// 音频数据格式(与麦克风类似,但用于输出) -message AudioData { - enum AudioFormat { - PCM = 0; - MP3 = 1; - AAC = 2; - WAV = 3; - } - bytes data = 1; // 音频二进制数据 - int32 sample_rate = 2; // 采样率(Hz) - int32 channels = 3; // 声道数 - AudioFormat format = 4; // 音频格式 - string codec = 5; // 编码方式 -} - -// 扬声器状态 message SpeakerState { - bool is_initialized = 1; // 是否已初始化 - bool is_running = 2; // 是否正在播放 + bool is_initialized = 1; + bool is_running = 2; bool is_decoding = 3; bool is_paused = 5; - int32 volume = 6; // 当前音量(0 ~ 100) - string error_message = 7; // 错误信息 + int32 volume = 6; + string error_message = 7; } -// 各种扬声器命令 message GetSpeakerStateCommand { message Request { CommandHeader.Request header = 1; @@ -47,7 +29,19 @@ message PlayAudioCommand { CommandHeader.Request header = 1; string audio_path = 2; } - message Feedback { CommandHeader.Feedback header = 1; } + message Feedback { + CommandHeader.Feedback header = 1; + } +} + +message StreamSpeakerAudioCommand { + message Request { + CommandHeader.Request header = 1; + AudioData audio = 2; + } + message Feedback { + CommandHeader.Feedback header = 1; + } } message StopSpeakerCommand { @@ -80,7 +74,7 @@ message ResumeSpeakerCommand { message SetSpeakerVolumeCommand { message Request { CommandHeader.Request header = 1; - int32 volume = 2; // 音量值(0 ~ 100) + int32 volume = 2; } message Feedback { CommandHeader.Feedback header = 1; @@ -93,7 +87,6 @@ message GetSpeakerVolumeCommand { } message Feedback { CommandHeader.Feedback header = 1; - int32 volume = 2; // 当前音量值 + int32 volume = 2; } } - diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_service.proto b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_service.proto index 9cbc77c..6fc3d92 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_service.proto +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-lib/src/main/proto/cmvr/api/speaker_service.proto @@ -4,17 +4,14 @@ import "cmvr/api/speaker_command.proto"; package cmvr.api; - service SpeakerService { - // 基本控制 rpc GetStatus(GetSpeakerStateCommand.Request) returns (GetSpeakerStateCommand.Feedback); rpc PlayAudio(PlayAudioCommand.Request) returns (PlayAudioCommand.Feedback); + rpc StreamAudio(stream StreamSpeakerAudioCommand.Request) returns (StreamSpeakerAudioCommand.Feedback); rpc StopPlayback(StopSpeakerCommand.Request) returns (StopSpeakerCommand.Feedback); rpc PausePlayback(PauseSpeakerCommand.Request) returns (PauseSpeakerCommand.Feedback); rpc ResumePlayback(ResumeSpeakerCommand.Request) returns (ResumeSpeakerCommand.Feedback); - // 音量控制 rpc SetVolume(SetSpeakerVolumeCommand.Request) returns (SetSpeakerVolumeCommand.Feedback); rpc GetVolume(GetSpeakerVolumeCommand.Request) returns (GetSpeakerVolumeCommand.Feedback); - -} \ No newline at end of file +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionDetectionAlert.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionDetectionAlert.java new file mode 100644 index 0000000..0409c92 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionDetectionAlert.java @@ -0,0 +1,52 @@ +package com.cmvr.inspection.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 边缘 AI 推送的 PPE 违规报警主表实体。 + */ +@Data +@TableName("inspection_detection_alert") +public class InspectionDetectionAlert implements Serializable +{ + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.INPUT) + private String id; + + private String eventId; + private String idempotencyKey; + @TableField("schema_version") + private String schema; + private String sourceId; + @TableField("source_sequence") + private Long sequence; + private Long capturedAtNs; + private Long receivedAtNs; + private String traceId; + private String sessionId; + private String inputPort; + private String ruleId; + private String modelId; + private String modelName; + private String labelsJson; + @TableField("detection_scope") + private String scope; + private String scopeId; + private Integer hitCount; + private Double windowMs; + private Long firstSeenNs; + private Long lastSeenNs; + private Long triggeredAtNs; + private Double maxConfidence; + private String imagePath; + private String rawJson; + private Date createdAt; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionDetectionDetail.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionDetectionDetail.java new file mode 100644 index 0000000..d184433 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionDetectionDetail.java @@ -0,0 +1,30 @@ +package com.cmvr.inspection.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + * PPE 报警检测框明细实体。 + */ +@Data +@TableName("inspection_detection_detail") +public class InspectionDetectionDetail implements Serializable +{ + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.INPUT) + private String id; + + private String alertId; + private String label; + private Double confidence; + private Double xMin; + private Double yMin; + private Double xMax; + private Double yMax; + private Long trackId; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/AlertEnvelope.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/AlertEnvelope.java new file mode 100644 index 0000000..c4d9a06 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/AlertEnvelope.java @@ -0,0 +1,55 @@ +package com.cmvr.inspection.domain.dto.alert; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.Map; + +/** + * 边缘 AI 推送消息的统一信封。 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AlertEnvelope +{ + /** 消息结构版本,当前固定为 DetectionAlert/v1。 */ + @JsonProperty("schema") + private String schema; + + /** 产生消息的视频源标识。 */ + @JsonProperty("source_id") + private String sourceId; + + /** 视频源内递增序号。 */ + @JsonProperty("sequence") + private Long sequence; + + /** 图像采集时间,Unix 纳秒时间戳。 */ + @JsonProperty("captured_at_ns") + private Long capturedAtNs; + + /** 边缘端接收时间,Unix 纳秒时间戳。 */ + @JsonProperty("received_at_ns") + private Long receivedAtNs; + + /** 全链路追踪标识。 */ + @JsonProperty("trace_id") + private String traceId; + + /** 边缘推理会话标识。 */ + @JsonProperty("session_id") + private String sessionId; + + /** 产生消息的输入端口。 */ + @JsonProperty("input_port") + private String inputPort; + + /** 扩展属性。 */ + @JsonProperty("attributes") + private Map attributes; + + /** PPE 违规报警内容。 */ + @JsonProperty("payload") + private DetectionAlert payload; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/AlertImage.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/AlertImage.java new file mode 100644 index 0000000..9c10ba7 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/AlertImage.java @@ -0,0 +1,33 @@ +package com.cmvr.inspection.domain.dto.alert; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.ToString; + +/** + * 报警现场图片。 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AlertImage +{ + /** 图片媒体类型,例如 image/jpeg。 */ + @JsonProperty("media_type") + private String mediaType; + + @JsonProperty("width") + private Integer width; + + @JsonProperty("height") + private Integer height; + + /** 编码方式,当前协议固定为 base64。 */ + @JsonProperty("encoding") + private String encoding; + + /** Base64 编码后的图片内容。 */ + @JsonProperty("data") + @ToString.Exclude + private String data; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/BoundingBox.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/BoundingBox.java new file mode 100644 index 0000000..ae90e4f --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/BoundingBox.java @@ -0,0 +1,25 @@ +package com.cmvr.inspection.domain.dto.alert; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 检测目标的像素坐标框。 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class BoundingBox +{ + @JsonProperty("x_min") + private Double xMin; + + @JsonProperty("y_min") + private Double yMin; + + @JsonProperty("x_max") + private Double xMax; + + @JsonProperty("y_max") + private Double yMax; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/Detection.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/Detection.java new file mode 100644 index 0000000..675846e --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/Detection.java @@ -0,0 +1,29 @@ +package com.cmvr.inspection.domain.dto.alert; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 单个 PPE 检测结果。 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class Detection +{ + /** 检测标签。 */ + @JsonProperty("label") + private String label; + + /** 检测置信度。 */ + @JsonProperty("confidence") + private Double confidence; + + /** 目标框坐标。 */ + @JsonProperty("box") + private BoundingBox box; + + /** 跟踪目标标识。 */ + @JsonProperty("track_id") + private Long trackId; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/DetectionAlert.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/DetectionAlert.java new file mode 100644 index 0000000..ee8817c --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/dto/alert/DetectionAlert.java @@ -0,0 +1,75 @@ +package com.cmvr.inspection.domain.dto.alert; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +/** + * PPE 违规报警业务数据。 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class DetectionAlert +{ + /** 边缘端生成的全局事件标识。 */ + @JsonProperty("event_id") + private String eventId; + + /** 命中的规则标识。 */ + @JsonProperty("rule_id") + private String ruleId; + + /** 模型版本标识。 */ + @JsonProperty("model_id") + private String modelId; + + /** 模型显示名称。 */ + @JsonProperty("model_name") + private String modelName; + + /** 命中的标签集合。 */ + @JsonProperty("labels") + private List labels; + + /** 规则统计范围。 */ + @JsonProperty("scope") + private String scope; + + /** 规则统计范围对应的对象标识。 */ + @JsonProperty("scope_id") + private String scopeId; + + /** 时间窗口内命中次数。 */ + @JsonProperty("hit_count") + private Integer hitCount; + + /** 规则统计窗口,单位毫秒。 */ + @JsonProperty("window_ms") + private Double windowMs; + + /** 首次命中时间,Unix 纳秒时间戳。 */ + @JsonProperty("first_seen_ns") + private Long firstSeenNs; + + /** 最后命中时间,Unix 纳秒时间戳。 */ + @JsonProperty("last_seen_ns") + private Long lastSeenNs; + + /** 触发报警时间,Unix 纳秒时间戳。 */ + @JsonProperty("triggered_at_ns") + private Long triggeredAtNs; + + /** 本次报警中的最大置信度。 */ + @JsonProperty("max_confidence") + private Double maxConfidence; + + /** 报警关联的检测框。 */ + @JsonProperty("detections") + private List detections; + + /** 报警现场图片,允许为空。 */ + @JsonProperty("image") + private AlertImage image; +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/exception/DetectionAlertBadRequestException.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/exception/DetectionAlertBadRequestException.java new file mode 100644 index 0000000..26fc186 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/exception/DetectionAlertBadRequestException.java @@ -0,0 +1,17 @@ +package com.cmvr.inspection.exception; + +/** + * 边缘检测报警请求参数不符合协议。 + */ +public class DetectionAlertBadRequestException extends RuntimeException +{ + public DetectionAlertBadRequestException(String message) + { + super(message); + } + + public DetectionAlertBadRequestException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/exception/DetectionAlertTemporaryException.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/exception/DetectionAlertTemporaryException.java new file mode 100644 index 0000000..61dec80 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/exception/DetectionAlertTemporaryException.java @@ -0,0 +1,17 @@ +package com.cmvr.inspection.exception; + +/** + * 数据库或对象存储暂时不可用,边缘端可稍后重试。 + */ +public class DetectionAlertTemporaryException extends RuntimeException +{ + public DetectionAlertTemporaryException(String message) + { + super(message); + } + + public DetectionAlertTemporaryException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionDetectionAlertMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionDetectionAlertMapper.java new file mode 100644 index 0000000..dfc99bb --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionDetectionAlertMapper.java @@ -0,0 +1,11 @@ +package com.cmvr.inspection.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cmvr.inspection.domain.InspectionDetectionAlert; + +/** + * PPE 违规报警主表 Mapper。 + */ +public interface InspectionDetectionAlertMapper extends BaseMapper +{ +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionDetectionDetailMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionDetectionDetailMapper.java new file mode 100644 index 0000000..3d52e32 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionDetectionDetailMapper.java @@ -0,0 +1,11 @@ +package com.cmvr.inspection.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cmvr.inspection.domain.InspectionDetectionDetail; + +/** + * PPE 报警检测框明细 Mapper。 + */ +public interface InspectionDetectionDetailMapper extends BaseMapper +{ +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionDetectionAlertService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionDetectionAlertService.java new file mode 100644 index 0000000..5d78e84 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionDetectionAlertService.java @@ -0,0 +1,18 @@ +package com.cmvr.inspection.service; + +import com.cmvr.inspection.domain.dto.alert.AlertEnvelope; + +/** + * 边缘 AI 检测报警接收服务。 + */ +public interface IInspectionDetectionAlertService +{ + /** + * 接收并持久化一条 PPE 违规报警。 + * + * @param envelope 报警信封 + * @param requestIdempotencyKey HTTP 请求头中的幂等键,允许为空 + * @return true 表示本次新增,false 表示重复事件 + */ + boolean receive(AlertEnvelope envelope, String requestIdempotencyKey); +} diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java new file mode 100644 index 0000000..570dc21 --- /dev/null +++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionDetectionAlertServiceImpl.java @@ -0,0 +1,391 @@ +package com.cmvr.inspection.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.cmvr.common.config.properties.MinioProperties; +import com.cmvr.common.core.minio.MinioService; +import com.cmvr.inspection.domain.InspectionDetectionAlert; +import com.cmvr.inspection.domain.InspectionDetectionDetail; +import com.cmvr.inspection.domain.dto.alert.AlertEnvelope; +import com.cmvr.inspection.domain.dto.alert.AlertImage; +import com.cmvr.inspection.domain.dto.alert.BoundingBox; +import com.cmvr.inspection.domain.dto.alert.Detection; +import com.cmvr.inspection.exception.DetectionAlertBadRequestException; +import com.cmvr.inspection.exception.DetectionAlertTemporaryException; +import com.cmvr.inspection.mapper.InspectionDetectionAlertMapper; +import com.cmvr.inspection.mapper.InspectionDetectionDetailMapper; +import com.cmvr.inspection.service.IInspectionDetectionAlertService; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Base64; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +/** + * PPE 违规报警接收业务实现。 + * + * 数据库唯一索引是并发幂等的最终保障;业务预查用于减少重复请求的无效写入。 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class InspectionDetectionAlertServiceImpl implements IInspectionDetectionAlertService +{ + private static final String SUPPORTED_SCHEMA = "DetectionAlert/v1"; + private static final String IMAGE_ENCODING_BASE64 = "base64"; + private static final String IMAGE_OBJECT_PREFIX = "inspection/detection-alerts"; + private static final int MAX_IDEMPOTENCY_KEY_LENGTH = 191; + private static final int MAX_EVENT_ID_LENGTH = 128; + private static final int MAX_IMAGE_BYTES = 10 * 1024 * 1024; + private static final int MAX_BASE64_LENGTH = (MAX_IMAGE_BYTES * 4 / 3) + 8; + + private final InspectionDetectionAlertMapper alertMapper; + private final InspectionDetectionDetailMapper detailMapper; + private final MinioService minioService; + private final MinioProperties minioProperties; + private final ObjectMapper objectMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean receive(AlertEnvelope envelope, String requestIdempotencyKey) + { + String idempotencyKey = validateAndResolveIdempotencyKey(envelope, requestIdempotencyKey); + String eventId = trimToNull(envelope.getPayload().getEventId()); + + if (exists(idempotencyKey, eventId)) + { + log.info("忽略重复PPE报警,idempotencyKey={},eventId={}", idempotencyKey, eventId); + return false; + } + + InspectionDetectionAlert alert = buildAlert(envelope, idempotencyKey); + StoredImage storedImage = null; + try + { + alertMapper.insert(alert); + + AlertImage image = envelope.getPayload().getImage(); + if (image != null) + { + storedImage = uploadImage(alert.getId(), image); + alert.setImagePath(storedImage.url); + if (alertMapper.updateById(alert) != 1) + { + throw new DetectionAlertTemporaryException("更新报警图片地址失败"); + } + } + + saveDetectionDetails(alert.getId(), envelope.getPayload().getDetections()); + log.info("PPE报警接收成功,alertId={},eventId={},sourceId={}", + alert.getId(), eventId, envelope.getSourceId()); + return true; + } + catch (RuntimeException ex) + { + // 数据库事务无法回滚 MinIO,对后续步骤失败时主动删除已上传对象。 + if (storedImage != null) + { + deleteUploadedImageQuietly(storedImage.objectName); + } + throw ex; + } + } + + /** + * 校验协议关键字段,并按请求头、event_id、trace_id 的顺序生成幂等键。 + */ + private String validateAndResolveIdempotencyKey(AlertEnvelope envelope, String requestIdempotencyKey) + { + if (envelope == null) + { + throw new DetectionAlertBadRequestException("请求体不能为空"); + } + if (!SUPPORTED_SCHEMA.equals(envelope.getSchema())) + { + throw new DetectionAlertBadRequestException("schema必须为" + SUPPORTED_SCHEMA); + } + if (envelope.getPayload() == null) + { + throw new DetectionAlertBadRequestException("payload不能为空"); + } + + String eventId = trimToNull(envelope.getPayload().getEventId()); + if (eventId != null && eventId.length() > MAX_EVENT_ID_LENGTH) + { + throw new DetectionAlertBadRequestException("payload.event_id长度不能超过" + MAX_EVENT_ID_LENGTH); + } + + String idempotencyKey = trimToNull(requestIdempotencyKey); + if (idempotencyKey == null) + { + idempotencyKey = eventId; + } + if (idempotencyKey == null) + { + idempotencyKey = trimToNull(envelope.getTraceId()); + } + if (idempotencyKey == null) + { + throw new DetectionAlertBadRequestException("Idempotency-Key、payload.event_id和trace_id不能同时为空"); + } + if (idempotencyKey.length() > MAX_IDEMPOTENCY_KEY_LENGTH) + { + throw new DetectionAlertBadRequestException("幂等键长度不能超过" + MAX_IDEMPOTENCY_KEY_LENGTH); + } + + validateImage(envelope.getPayload().getImage()); + return idempotencyKey; + } + + private void validateImage(AlertImage image) + { + if (image == null) + { + return; + } + if (!IMAGE_ENCODING_BASE64.equalsIgnoreCase(trimToEmpty(image.getEncoding()))) + { + throw new DetectionAlertBadRequestException("payload.image.encoding必须为base64"); + } + if (StringUtils.isBlank(image.getData())) + { + throw new DetectionAlertBadRequestException("payload.image.data不能为空"); + } + if (image.getData().length() > MAX_BASE64_LENGTH) + { + throw new DetectionAlertBadRequestException("报警图片不能超过10MB"); + } + String mediaType = trimToNull(image.getMediaType()); + if (mediaType == null || !mediaType.toLowerCase(Locale.ROOT).startsWith("image/")) + { + throw new DetectionAlertBadRequestException("payload.image.media_type必须是图片类型"); + } + } + + private boolean exists(String idempotencyKey, String eventId) + { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(InspectionDetectionAlert::getIdempotencyKey, idempotencyKey); + if (eventId != null) + { + query.or().eq(InspectionDetectionAlert::getEventId, eventId); + } + return alertMapper.selectCount(query) > 0; + } + + private InspectionDetectionAlert buildAlert(AlertEnvelope envelope, String idempotencyKey) + { + com.cmvr.inspection.domain.dto.alert.DetectionAlert payload = envelope.getPayload(); + InspectionDetectionAlert alert = new InspectionDetectionAlert(); + alert.setId(newId()); + alert.setEventId(trimToNull(payload.getEventId())); + alert.setIdempotencyKey(idempotencyKey); + alert.setSchema(envelope.getSchema()); + alert.setSourceId(envelope.getSourceId()); + alert.setSequence(envelope.getSequence()); + alert.setCapturedAtNs(envelope.getCapturedAtNs()); + alert.setReceivedAtNs(envelope.getReceivedAtNs()); + alert.setTraceId(envelope.getTraceId()); + alert.setSessionId(envelope.getSessionId()); + alert.setInputPort(envelope.getInputPort()); + alert.setRuleId(payload.getRuleId()); + alert.setModelId(payload.getModelId()); + alert.setModelName(payload.getModelName()); + alert.setLabelsJson(writeJson(payload.getLabels(), "序列化labels失败")); + alert.setScope(payload.getScope()); + alert.setScopeId(payload.getScopeId()); + alert.setHitCount(payload.getHitCount()); + alert.setWindowMs(payload.getWindowMs()); + alert.setFirstSeenNs(payload.getFirstSeenNs()); + alert.setLastSeenNs(payload.getLastSeenNs()); + alert.setTriggeredAtNs(payload.getTriggeredAtNs()); + alert.setMaxConfidence(payload.getMaxConfidence()); + alert.setRawJson(buildSanitizedRawJson(envelope)); + alert.setCreatedAt(new Date()); + return alert; + } + + /** + * raw_json保留协议元数据,但明确移除Base64图片,避免图片以另一种形式进入数据库。 + */ + private String buildSanitizedRawJson(AlertEnvelope envelope) + { + AlertImage image = envelope.getPayload().getImage(); + String imageData = image == null ? null : image.getData(); + try + { + // 避免构建JSON树时复制一份大Base64字符串;finally中恢复仅供随后上传MinIO。 + if (image != null) + { + image.setData(null); + } + return objectMapper.writeValueAsString(envelope); + } + catch (Exception ex) + { + throw new DetectionAlertTemporaryException("序列化报警原始数据失败", ex); + } + finally + { + if (image != null) + { + image.setData(imageData); + } + } + } + + private String writeJson(Object value, String errorMessage) + { + if (value == null) + { + return null; + } + try + { + return objectMapper.writeValueAsString(value); + } + catch (Exception ex) + { + throw new DetectionAlertTemporaryException(errorMessage, ex); + } + } + + private StoredImage uploadImage(String alertId, AlertImage image) + { + final byte[] imageBytes; + try + { + imageBytes = Base64.getDecoder().decode(image.getData().getBytes(StandardCharsets.US_ASCII)); + } + catch (IllegalArgumentException ex) + { + throw new DetectionAlertBadRequestException("payload.image.data不是有效的Base64", ex); + } + if (imageBytes.length > MAX_IMAGE_BYTES) + { + throw new DetectionAlertBadRequestException("报警图片不能超过10MB"); + } + + String extension = extensionFor(image.getMediaType()); + String datePath = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE); + String objectName = IMAGE_OBJECT_PREFIX + "/" + datePath + "/" + alertId + extension; + try (ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes)) + { + minioService.uploadStream(minioProperties.getBucketName(), objectName, inputStream, + imageBytes.length, image.getMediaType()); + return new StoredImage(objectName, buildMinioUrl(objectName)); + } + catch (DetectionAlertBadRequestException ex) + { + throw ex; + } + catch (Exception ex) + { + throw new DetectionAlertTemporaryException("上传报警图片到MinIO失败", ex); + } + } + + private void saveDetectionDetails(String alertId, List detections) + { + if (detections == null || detections.isEmpty()) + { + return; + } + for (Detection detection : detections) + { + if (detection == null) + { + throw new DetectionAlertBadRequestException("payload.detections不能包含null元素"); + } + InspectionDetectionDetail detail = new InspectionDetectionDetail(); + detail.setId(newId()); + detail.setAlertId(alertId); + detail.setLabel(detection.getLabel()); + detail.setConfidence(detection.getConfidence()); + detail.setTrackId(detection.getTrackId()); + BoundingBox box = detection.getBox(); + if (box != null) + { + detail.setXMin(box.getXMin()); + detail.setYMin(box.getYMin()); + detail.setXMax(box.getXMax()); + detail.setYMax(box.getYMax()); + } + detailMapper.insert(detail); + } + } + + private String buildMinioUrl(String objectName) + { + String baseUrl = StringUtils.removeEnd(minioProperties.getUrl(), "/"); + return baseUrl + "/" + minioProperties.getBucketName() + "/" + objectName; + } + + private void deleteUploadedImageQuietly(String objectName) + { + try + { + minioService.deleteFile(minioProperties.getBucketName(), objectName); + } + catch (Exception cleanupEx) + { + log.error("回滚PPE报警时删除MinIO对象失败,objectName={}", objectName, cleanupEx); + } + } + + private String extensionFor(String mediaType) + { + String normalized = trimToEmpty(mediaType).toLowerCase(Locale.ROOT); + if ("image/jpeg".equals(normalized) || "image/jpg".equals(normalized)) + { + return ".jpg"; + } + if ("image/png".equals(normalized)) + { + return ".png"; + } + if ("image/webp".equals(normalized)) + { + return ".webp"; + } + // 未知图片类型使用无执行语义的后缀,实际Content-Type仍按协议上传。 + return ".img"; + } + + private String trimToNull(String value) + { + return StringUtils.trimToNull(value); + } + + private String trimToEmpty(String value) + { + return StringUtils.trimToEmpty(value); + } + + private String newId() + { + return UUID.randomUUID().toString().replace("-", ""); + } + + private static final class StoredImage + { + private final String objectName; + private final String url; + + private StoredImage(String objectName, String url) + { + this.objectName = objectName; + this.url = url; + } + } +} diff --git a/logs/audio-dump/robot-to-backend-1784086438864.wav b/logs/audio-dump/robot-to-backend-1784086438864.wav deleted file mode 100644 index 35a9e02..0000000 Binary files a/logs/audio-dump/robot-to-backend-1784086438864.wav and /dev/null differ diff --git a/logs/audio-dump/robot-to-backend-1784086792085.wav b/logs/audio-dump/robot-to-backend-1784086792085.wav deleted file mode 100644 index 3d38b5d..0000000 Binary files a/logs/audio-dump/robot-to-backend-1784086792085.wav and /dev/null differ diff --git a/sql/inspection_detection_alert.sql b/sql/inspection_detection_alert.sql new file mode 100644 index 0000000..696e5ef --- /dev/null +++ b/sql/inspection_detection_alert.sql @@ -0,0 +1,54 @@ +-- PPE违规报警接收表。 +-- 本脚本用于已有数据库增量部署,不会删除现有巡检数据。 + +CREATE TABLE IF NOT EXISTS `inspection_detection_alert` ( + `id` varchar(32) NOT NULL COMMENT '主键ID', + `event_id` varchar(128) DEFAULT NULL COMMENT '边缘端事件ID', + `idempotency_key` varchar(191) NOT NULL COMMENT 'HTTP幂等键', + `schema_version` varchar(64) NOT NULL COMMENT '消息结构版本', + `source_id` varchar(128) DEFAULT NULL COMMENT '视频源标识', + `source_sequence` bigint DEFAULT NULL COMMENT '视频源内消息序号', + `captured_at_ns` bigint DEFAULT NULL COMMENT '采集时间Unix纳秒', + `received_at_ns` bigint DEFAULT NULL COMMENT '边缘端接收时间Unix纳秒', + `trace_id` varchar(128) DEFAULT NULL COMMENT '链路追踪ID', + `session_id` varchar(128) DEFAULT NULL COMMENT '边缘推理会话ID', + `input_port` varchar(128) DEFAULT NULL COMMENT '消息输入端口', + `rule_id` varchar(128) DEFAULT NULL COMMENT '命中的规则ID', + `model_id` varchar(255) DEFAULT NULL COMMENT '模型版本ID', + `model_name` varchar(255) DEFAULT NULL COMMENT '模型名称', + `labels_json` text COMMENT '命中标签JSON', + `detection_scope` varchar(64) DEFAULT NULL COMMENT '规则统计范围', + `scope_id` varchar(128) DEFAULT NULL COMMENT '统计范围对象ID', + `hit_count` int DEFAULT NULL COMMENT '窗口内命中次数', + `window_ms` decimal(12,3) DEFAULT NULL COMMENT '统计窗口毫秒', + `first_seen_ns` bigint DEFAULT NULL COMMENT '首次命中时间Unix纳秒', + `last_seen_ns` bigint DEFAULT NULL COMMENT '最后命中时间Unix纳秒', + `triggered_at_ns` bigint DEFAULT NULL COMMENT '报警触发时间Unix纳秒', + `max_confidence` decimal(8,6) DEFAULT NULL COMMENT '最大置信度', + `image_path` varchar(1000) DEFAULT NULL COMMENT 'MinIO图片URL', + `raw_json` mediumtext COMMENT '已移除Base64图片数据的原始协议JSON', + `created_at` datetime(3) NOT NULL COMMENT '平台接收时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_detection_alert_event_id` (`event_id`), + UNIQUE KEY `uk_detection_alert_idempotency_key` (`idempotency_key`), + KEY `idx_detection_alert_source_id` (`source_id`), + KEY `idx_detection_alert_rule_id` (`rule_id`), + KEY `idx_detection_alert_triggered_at` (`triggered_at_ns`), + KEY `idx_detection_alert_created_at` (`created_at`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检PPE违规报警主表'; + +CREATE TABLE IF NOT EXISTS `inspection_detection_detail` ( + `id` varchar(32) NOT NULL COMMENT '主键ID', + `alert_id` varchar(32) NOT NULL COMMENT '报警主表ID', + `label` varchar(128) DEFAULT NULL COMMENT '检测标签', + `confidence` decimal(8,6) DEFAULT NULL COMMENT '检测置信度', + `x_min` decimal(12,4) DEFAULT NULL COMMENT '目标框左上X坐标', + `y_min` decimal(12,4) DEFAULT NULL COMMENT '目标框左上Y坐标', + `x_max` decimal(12,4) DEFAULT NULL COMMENT '目标框右下X坐标', + `y_max` decimal(12,4) DEFAULT NULL COMMENT '目标框右下Y坐标', + `track_id` bigint DEFAULT NULL COMMENT '目标跟踪ID', + PRIMARY KEY (`id`), + KEY `idx_detection_detail_alert_id` (`alert_id`), + CONSTRAINT `fk_detection_detail_alert` FOREIGN KEY (`alert_id`) + REFERENCES `inspection_detection_alert` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检PPE报警检测框明细表';