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);
| }
| }
|
|