少年修仙传客户端代码仓库
hch
2025-06-12 204ef05a831c9484e2abc561d27ecbff7c797453
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
 
 
public class VoiceHttpRequest : SingletonMonobehaviour<VoiceHttpRequest>
 
{
    const string uploadUrl = "http://{0}.gamecenter.secondworld.net.cn:53001/voice/upload";
 
 
    public Queue<VoiceHttp> speechs = new Queue<VoiceHttp>();
    public Queue<VoiceDecodec> decodecSamples = new Queue<VoiceDecodec>();
 
    public event Action<VoiceDecodec> samplesDecodecComplete;
 
    private bool onceSuccessRemind = false;
 
    private void Awake()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
    }
 
    private void OnStageLoadFinish()
    {
        if (StageLoad.Instance.currentStage is LoginStage)
        {
            speechs.Clear();
        }
    }
 
    private void OnBeforePlayerDataInitialize()
    {
        speechs.Clear();
    }
 
    public void Enqueue(byte[] _encode, long _tick, int _playerId)
    {
        speechs.Enqueue(new VoiceHttp()
        {
            encode = _encode,
            tick = _tick,
            playerId = _playerId
        });
        onceSuccessRemind = false;
    }
 
    private void LateUpdate()
    {
        if (speechs.Count > 0)
        {
            if (!onceSuccessRemind)
            {
                SysNotifyMgr.Instance.ShowTip("VoiceSendSuccess");
                onceSuccessRemind = true;
            }
            var _data = speechs.Dequeue();
 
            var content = Convert.ToBase64String(_data.encode);
            content = content.Replace("+", "%2B");
 
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("voiceID", _data.tick.ToString());
            dict.Add("playerID", _data.playerId.ToString());
            dict.Add("appid", VersionConfig.Get().appId);
            dict.Add("content", content);
            var url = string.Format(uploadUrl, VersionConfig.Get().appId);
            HttpRequest.Instance.RequestHttpPost(url, dict, HttpRequest.defaultHttpContentType);
        }
        if (decodecSamples.Count > 0)
        {
            samplesDecodecComplete(decodecSamples.Dequeue());
        }
    }
 
    public void Enqueue(float[] _samples, long _tick, int _playerId)
    {
        decodecSamples.Enqueue(new VoiceDecodec()
        {
            tick = _tick,
            samples = _samples,
            playerId = _playerId,
        });
    }
 
    public struct VoiceHttp
    {
        public byte[] encode;
        public long tick;
        public int playerId;
    }
 
    public struct VoiceDecodec
    {
        public long tick;
        public int playerId;
        public float[] samples;
    }
}