107 lines
2.2 KiB
Go
107 lines
2.2 KiB
Go
package openal_test
|
|
|
|
import (
|
|
"fmt"
|
|
"git.stormux.org/storm/barnard/gumble/go-openal/openal"
|
|
"io/ioutil"
|
|
"time"
|
|
)
|
|
|
|
func ExamplePlay() {
|
|
device := openal.OpenDevice("")
|
|
defer device.CloseDevice()
|
|
|
|
context := device.CreateContext()
|
|
defer context.Destroy()
|
|
context.Activate()
|
|
|
|
source := openal.NewSource()
|
|
defer source.Pause()
|
|
source.SetLooping(false)
|
|
|
|
buffer := openal.NewBuffer()
|
|
|
|
if err := openal.Err(); err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
data, err := ioutil.ReadFile("data/welcome.wav")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
buffer.SetData(openal.FormatMono16, data, 44100)
|
|
|
|
source.SetBuffer(buffer)
|
|
source.Play()
|
|
for source.State() == openal.Playing {
|
|
// loop long enough to let the wave file finish
|
|
time.Sleep(time.Millisecond * 100)
|
|
}
|
|
source.Delete()
|
|
fmt.Println("sound played")
|
|
// Output: sound played
|
|
}
|
|
|
|
func ExampleMonitor() {
|
|
const (
|
|
frequency = 44100
|
|
format = openal.FormatStereo16
|
|
captureSize = 512
|
|
buffersCount = 10
|
|
)
|
|
mic := openal.CaptureOpenDevice("", frequency, format, frequency*2)
|
|
mic.CaptureStart()
|
|
defer mic.CloseDevice()
|
|
|
|
device := openal.OpenDevice("")
|
|
defer device.CloseDevice()
|
|
|
|
context := device.CreateContext()
|
|
context.Activate()
|
|
defer context.Destroy()
|
|
|
|
source := openal.NewSource()
|
|
source.SetLooping(false)
|
|
defer source.Stop()
|
|
|
|
buffers := openal.NewBuffers(buffersCount)
|
|
samples := make([]byte, captureSize*format.SampleSize())
|
|
|
|
start := time.Now()
|
|
for time.Since(start) < time.Second { // play for 1 second
|
|
if err := openal.Err(); err != nil {
|
|
fmt.Println("error:", err)
|
|
return
|
|
}
|
|
// Get any free buffers
|
|
if prcessed := source.BuffersProcessed(); prcessed > 0 {
|
|
buffersNew := make(openal.Buffers, prcessed)
|
|
source.UnqueueBuffers(buffersNew)
|
|
buffers = append(buffers, buffersNew...)
|
|
}
|
|
if len(buffers) == 0 {
|
|
continue
|
|
}
|
|
|
|
if mic.CapturedSamples() >= captureSize {
|
|
mic.CaptureTo(samples)
|
|
buffer := buffers[len(buffers)-1]
|
|
buffers = buffers[:len(buffers)-1]
|
|
buffer.SetData(format, samples, frequency)
|
|
source.QueueBuffer(buffer)
|
|
|
|
// If we have enough buffers, start playing
|
|
if source.State() != openal.Playing {
|
|
if source.BuffersQueued() > 2 {
|
|
source.Play()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
fmt.Println(source.State())
|
|
// Output: Playing
|
|
}
|