-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapi.go
61 lines (51 loc) · 1.13 KB
/
api.go
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
package g722
const (
RateDefault = Rate64000
Rate64000 = 64000
Rate56000 = 56000
Rate48000 = 48000
)
type Flags byte
func Encode(pcm []int16, rate int, flags Flags) []byte {
var enc Encoder
encoderInit(&enc, rate, int(flags))
div := 2
if flags&FlagSampleRate8000 != 0 {
div = 1
}
n := len(pcm) / div
if len(pcm)%div != 0 {
n++
}
out := make([]byte, n)
n = encode(&enc, out, pcm, len(pcm))
return out[:n]
}
func NewEncoder(rate int, flags Flags) *Encoder {
var enc Encoder
encoderInit(&enc, rate, int(flags))
return &enc
}
func (enc *Encoder) Encode(dst []byte, src []int16) int {
return encode(enc, dst, src, len(src))
}
func Decode(g722 []byte, rate int, flags Flags) []int16 {
var dec Decoder
decoderInit(&dec, rate, int(flags))
mul := 2
if flags&FlagSampleRate8000 != 0 {
mul = 1
}
n := len(g722) * mul
out := make([]int16, n)
n = decode(&dec, out, g722, len(g722))
return out[:n]
}
func NewDecoder(rate int, flags Flags) *Decoder {
var dec Decoder
decoderInit(&dec, rate, int(flags))
return &dec
}
func (dec *Decoder) Decode(dst []int16, src []byte) int {
return decode(dec, dst, src, len(src))
}