少年修仙传客户端代码仓库
hch
2023-06-14 f23c81d21c9cc4c9f06e8bed3ebb7ddbe7e15ac3
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System;
using System.Runtime.InteropServices;
 
namespace UnityOpus {
    public enum SamplingFrequency : int {
        Frequency_8000 = 8000,
        Frequency_12000 = 12000,
        Frequency_16000 = 16000,
        Frequency_24000 = 24000,
        Frequency_48000 = 48000,
    }
 
    public enum NumChannels : int {
        Mono = 1,
        Stereo = 2,
    }
 
    public enum OpusApplication : int {
        VoIP = 2048,
        Audio = 2049,
        RestrictedLowDelay = 2051,
    }
 
    public enum OpusSignal : int {
        Auto = -1000,
        Voice = 3001,
        Music = 3002
    }
 
    public enum ErrorCode {
        OK = 0,
        BadArg = -1,
        BufferTooSmall = -2,
        InternalError = -3,
        InvalidPacket = -4,
        Unimplemented = -5,
        InvalidState = -6,
        AllocFail = -7,
    }
 
    public class Library {
        public const int maximumPacketDuration = 5760;
 
#if UNITY_ANDROID
        const string dllName = "unityopus";
#else
        const string dllName = "UnityOpus";
#endif
 
        [DllImport(dllName)]
        public static extern IntPtr OpusEncoderCreate(
            SamplingFrequency samplingFrequency,
            NumChannels channels,
            OpusApplication application,
            out ErrorCode error);
 
        [DllImport(dllName)]
        public static extern int OpusEncode(
            IntPtr encoder,
            short[] pcm,
            int frameSize,
            byte[] data,
            int maxDataBytes);
 
        [DllImport(dllName)]
        public static extern int OpusEncodeFloat(
            IntPtr encoder,
            float[] pcm,
            int frameSize,
            byte[] data,
            int maxDataBytes);
 
        [DllImport(dllName)]
        public static extern void OpusEncoderDestroy(
            IntPtr encoder);
 
        [DllImport(dllName)]
        public static extern int OpusEncoderSetBitrate(
            IntPtr encoder,
            int bitrate);
 
        [DllImport(dllName)]
        public static extern int OpusEncoderSetComplexity(
            IntPtr encoder,
            int complexity);
 
        [DllImport(dllName)]
        public static extern int OpusEncoderSetSignal(
            IntPtr encoder,
            OpusSignal signal);
 
        [DllImport(dllName)]
        public static extern IntPtr OpusDecoderCreate(
            SamplingFrequency samplingFrequency,
            NumChannels channels,
            out ErrorCode error);
 
        [DllImport(dllName)]
        public static extern int OpusDecode(
            IntPtr decoder,
            byte[] data,
            int len,
            short[] pcm,
            int frameSize,
            int decodeFec);
 
        [DllImport(dllName)]
        public static extern int OpusDecodeFloat(
            IntPtr decoder,
            byte[] data,
            int len,
            float[] pcm,
            int frameSize,
            int decodeFec);
 
        [DllImport(dllName)]
        public static extern void OpusDecoderDestroy(
            IntPtr decoder);
 
        [DllImport(dllName)]
        public static extern void OpusPcmSoftClip(
            float[] pcm,
            int frameSize,
            NumChannels channels,
            float[] softclipMem);
    }
}