Add micgrab example

This commit is contained in:
Milan Nikolic 2018-03-06 13:41:47 +01:00
parent a73e490cf0
commit f384f1398d
2 changed files with 97 additions and 1 deletions

View file

@ -10,7 +10,11 @@
go get -u github.com/gen2brain/aac-go
### Example
### Examples
See [micgrab](https://github.com/gen2brain/aac-go/blob/master/examples/micgrab/micgrab.go) example.
### Usage
```go
package main

View file

@ -0,0 +1,92 @@
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 {
panic(err)
}
reader := bytes.NewReader(pCapturedSamples)
err = enc.Encode(reader)
if err != nil {
panic(err)
}
err = enc.Close()
if err != nil {
panic(err)
}
err = ioutil.WriteFile("capture.aac", buf.Bytes(), 0644)
if err != nil {
panic(err)
}
fmt.Println("Press Enter to quit...")
fmt.Scanln()
os.Exit(0)
}