syntax = "proto3";

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_decoding = 3;
    bool is_paused = 5;
    int32 volume = 6;             // 当前音量（0 ~ 100）
    string error_message = 7;   // 错误信息
}

// 各种扬声器命令
message GetSpeakerStateCommand {
    message Request {
        CommandHeader.Request header = 1;
    }

    message Feedback {
        CommandHeader.Feedback header = 1;
        SpeakerState state = 2;
    }
}

message PlayAudioCommand {
    message Request {
        CommandHeader.Request header = 1;
        string audio_path = 2;
    }
    message Feedback { CommandHeader.Feedback header = 1; }
}

message StopSpeakerCommand {
    message Request {
        CommandHeader.Request header = 1;
    }
    message Feedback {
        CommandHeader.Feedback header = 1;
    }
}

message PauseSpeakerCommand {
    message Request {
        CommandHeader.Request header = 1;
    }
    message Feedback {
        CommandHeader.Feedback header = 1;
    }
}

message ResumeSpeakerCommand {
    message Request {
        CommandHeader.Request header = 1;
    }
    message Feedback {
        CommandHeader.Feedback header = 1;
    }
}

message SetSpeakerVolumeCommand {
    message Request {
        CommandHeader.Request header = 1;
        int32 volume = 2;  // 音量值（0 ~ 100）
    }
    message Feedback {
        CommandHeader.Feedback header = 1;
    }
}

message GetSpeakerVolumeCommand {
    message Request {
        CommandHeader.Request header = 1;
    }
    message Feedback {
        CommandHeader.Feedback header = 1;
        int32 volume = 2;  // 当前音量值
    }
}

