Remove examples, tests, change module name
This commit is contained in:
parent
52c23bd389
commit
e088a49a96
14
README.md
14
README.md
|
@ -1,19 +1,7 @@
|
||||||
## aac-go
|
## aac-go
|
||||||
[![TravisCI Build Status](https://travis-ci.org/gen2brain/aac-go.svg?branch=master)](https://travis-ci.org/gen2brain/aac-go)
|
|
||||||
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/cig800cju43dbn8u?svg=true)](https://ci.appveyor.com/project/gen2brain/aac-go)
|
|
||||||
[![GoDoc](https://godoc.org/github.com/gen2brain/aac-go?status.svg)](https://godoc.org/github.com/gen2brain/aac-go)
|
|
||||||
[![Go Report Card](https://goreportcard.com/badge/github.com/gen2brain/aac-go?branch=master)](https://goreportcard.com/report/github.com/gen2brain/aac-go)
|
|
||||||
|
|
||||||
`aac-go` provides AAC codec encoder based on [VisualOn AAC encoder](https://github.com/mstorsjo/vo-aacenc) library.
|
`aac-go` provides AAC codec encoder based on [VisualOn AAC encoder](https://github.com/mstorsjo/vo-aacenc) library.
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
go get -u github.com/gen2brain/aac-go
|
|
||||||
|
|
||||||
### Examples
|
|
||||||
|
|
||||||
See [micgrab](https://github.com/gen2brain/aac-go/blob/master/examples/micgrab/micgrab.go) example.
|
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
@ -24,7 +12,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/gen2brain/aac-go"
|
"git.gammaspectra.live/S.O.N.G/voaac-go"
|
||||||
"github.com/youpy/go-wav"
|
"github.com/youpy/go-wav"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/aam335/aac-go/aacenc"
|
"git.gammaspectra.live/S.O.N.G/voaac-go/aacenc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Options represent encoding options.
|
// Options represent encoding options.
|
||||||
|
|
136
encode_test.go
136
encode_test.go
|
@ -1,136 +0,0 @@
|
||||||
package aac
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/youpy/go-wav"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestEncode(t *testing.T) {
|
|
||||||
file, err := os.Open(filepath.Join("testdata", "test.wav"))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
wr := wav.NewReader(file)
|
|
||||||
f, err := wr.Format()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
buf := bytes.NewBuffer(make([]byte, 0))
|
|
||||||
|
|
||||||
opts := &Options{}
|
|
||||||
opts.SampleRate = int(f.SampleRate)
|
|
||||||
opts.NumChannels = int(f.NumChannels)
|
|
||||||
|
|
||||||
enc, err := NewEncoder(buf, opts)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Encode(wr)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Close()
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = ioutil.WriteFile(filepath.Join(os.TempDir(), "test.aac"), buf.Bytes(), 0644)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if want, got := 8192, len(buf.Bytes()); want != got {
|
|
||||||
t.Errorf("encoded file length %d is different from expected length %d", got, want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type testReader struct {
|
|
||||||
bufLen int
|
|
||||||
from io.Reader
|
|
||||||
adjust func() int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *testReader) Read(in []byte) (int, error) {
|
|
||||||
defer func() {
|
|
||||||
t.bufLen = t.adjust()
|
|
||||||
}()
|
|
||||||
if t.bufLen > len(in) {
|
|
||||||
t.bufLen = len(in)
|
|
||||||
}
|
|
||||||
if t.bufLen == 0 {
|
|
||||||
// This is not EOF, just unavailable data at this point.
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
buf := make([]byte, t.bufLen)
|
|
||||||
n, err := t.from.Read(buf)
|
|
||||||
if n > 0 {
|
|
||||||
copy(in, buf[:n])
|
|
||||||
}
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEncodeVariableReadLength(t *testing.T) {
|
|
||||||
file, err := os.Open(filepath.Join("testdata", "test.wav"))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
wr := wav.NewReader(file)
|
|
||||||
f, err := wr.Format()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tr := &testReader{
|
|
||||||
bufLen: 1,
|
|
||||||
from: wr,
|
|
||||||
}
|
|
||||||
bufLenPrev := 1
|
|
||||||
tr.adjust = func() int {
|
|
||||||
bufLenPrev += 1
|
|
||||||
if bufLenPrev%5 == 0 {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return bufLenPrev
|
|
||||||
}
|
|
||||||
|
|
||||||
buf := bytes.NewBuffer(make([]byte, 0))
|
|
||||||
|
|
||||||
opts := &Options{}
|
|
||||||
opts.SampleRate = int(f.SampleRate)
|
|
||||||
opts.NumChannels = int(f.NumChannels)
|
|
||||||
|
|
||||||
enc, err := NewEncoder(buf, opts)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Encode(tr)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Close()
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = ioutil.WriteFile(filepath.Join(os.TempDir(), "test-2.aac"), buf.Bytes(), 0644)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if want, got := 8192, len(buf.Bytes()); want != got {
|
|
||||||
t.Errorf("encoded file length %d is different from expected length %d", got, want)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
aac "github.com/aam335/aac-go"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
file, err := os.Open("test.wav")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
wreader := wav.NewReader(file)
|
|
||||||
f, err := wreader.Format()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
buf := bytes.NewBuffer(make([]byte, 0))
|
|
||||||
|
|
||||||
opts := &aac.Options{}
|
|
||||||
opts.SampleRate = int(f.SampleRate)
|
|
||||||
opts.NumChannels = int(f.NumChannels)
|
|
||||||
|
|
||||||
enc, err := aac.NewEncoder(buf, opts)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Encode(wreader)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Close()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = ioutil.WriteFile("test.aac", buf.Bytes(), 0644)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,96 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/gen2brain/aac-go"
|
|
||||||
"github.com/gen2brain/malgo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
device := mal.NewDevice()
|
|
||||||
|
|
||||||
numChannels := 2
|
|
||||||
sampleRate := 48000
|
|
||||||
|
|
||||||
var capturedSampleCount uint32
|
|
||||||
pCapturedSamples := make([]byte, 0)
|
|
||||||
|
|
||||||
onRecvFrames := func(framecount uint32, pSamples []byte) {
|
|
||||||
sizeInBytes := device.SampleSizeInBytes(device.Format())
|
|
||||||
sampleCount := framecount * device.Channels() * sizeInBytes
|
|
||||||
|
|
||||||
newCapturedSampleCount := capturedSampleCount + sampleCount
|
|
||||||
pCapturedSamples = append(pCapturedSamples, pSamples...)
|
|
||||||
capturedSampleCount = newCapturedSampleCount
|
|
||||||
}
|
|
||||||
|
|
||||||
err := device.ContextInit(nil, mal.ContextConfig{})
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
defer device.ContextUninit()
|
|
||||||
|
|
||||||
config := device.ConfigInit(mal.FormatS16, uint32(numChannels), uint32(sampleRate), onRecvFrames, nil)
|
|
||||||
|
|
||||||
fmt.Println("Recording...")
|
|
||||||
err = device.Init(mal.Capture, nil, &config)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = device.Start()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Press Enter to stop recording...")
|
|
||||||
fmt.Scanln()
|
|
||||||
|
|
||||||
device.Uninit()
|
|
||||||
|
|
||||||
fmt.Println("Encoding...")
|
|
||||||
buf := bytes.NewBuffer(make([]byte, 0))
|
|
||||||
|
|
||||||
opts := &aac.Options{}
|
|
||||||
opts.SampleRate = sampleRate
|
|
||||||
opts.NumChannels = numChannels
|
|
||||||
|
|
||||||
enc, err := aac.NewEncoder(buf, opts)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
reader := bytes.NewReader(pCapturedSamples)
|
|
||||||
|
|
||||||
err = enc.Encode(reader)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = enc.Close()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = ioutil.WriteFile("capture.aac", buf.Bytes(), 0644)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Press Enter to quit...")
|
|
||||||
fmt.Scanln()
|
|
||||||
|
|
||||||
os.Exit(0)
|
|
||||||
}
|
|
BIN
testdata/test.wav
vendored
BIN
testdata/test.wav
vendored
Binary file not shown.
Loading…
Reference in a new issue