Add micgrab example
This commit is contained in:
parent
a73e490cf0
commit
f384f1398d
|
@ -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
|
||||
|
|
92
examples/micgrab/micgrab.go
Normal file
92
examples/micgrab/micgrab.go
Normal 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)
|
||||
}
|
Loading…
Reference in a new issue