mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-11 19:48:54 +01:00
audio: Reduce 'make' for performance (#183)
This commit is contained in:
parent
8b8eb855a7
commit
f07702746c
@ -29,6 +29,7 @@ const (
|
|||||||
maxBufferNum = 8
|
maxBufferNum = 8
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO: This should be in player
|
||||||
var totalBufferNum = 0
|
var totalBufferNum = 0
|
||||||
|
|
||||||
type player struct {
|
type player struct {
|
||||||
@ -60,7 +61,14 @@ func startPlaying(src io.Reader, sampleRate int) (*player, error) {
|
|||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
const bufferSize = 1024
|
const (
|
||||||
|
bufferSize = 1024
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
tmpBuffer = make([]byte, bufferSize)
|
||||||
|
tmpAlBuffers = make([]al.Buffer, maxBufferNum)
|
||||||
|
)
|
||||||
|
|
||||||
func (p *player) proceed() error {
|
func (p *player) proceed() error {
|
||||||
if err := al.Error(); err != 0 {
|
if err := al.Error(); err != 0 {
|
||||||
@ -68,7 +76,7 @@ func (p *player) proceed() error {
|
|||||||
}
|
}
|
||||||
processedNum := p.alSource.BuffersProcessed()
|
processedNum := p.alSource.BuffersProcessed()
|
||||||
if 0 < processedNum {
|
if 0 < processedNum {
|
||||||
bufs := make([]al.Buffer, processedNum)
|
bufs := tmpAlBuffers[:processedNum]
|
||||||
p.alSource.UnqueueBuffers(bufs...)
|
p.alSource.UnqueueBuffers(bufs...)
|
||||||
if err := al.Error(); err != 0 {
|
if err := al.Error(); err != 0 {
|
||||||
panic(fmt.Sprintf("audio: Unqueue in process: %d", err))
|
panic(fmt.Sprintf("audio: Unqueue in process: %d", err))
|
||||||
@ -77,12 +85,11 @@ func (p *player) proceed() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for 0 < len(p.alBuffers) {
|
for 0 < len(p.alBuffers) {
|
||||||
b := make([]byte, bufferSize)
|
n, err := p.source.Read(tmpBuffer)
|
||||||
n, err := p.source.Read(b)
|
|
||||||
if 0 < n {
|
if 0 < n {
|
||||||
buf := p.alBuffers[0]
|
buf := p.alBuffers[0]
|
||||||
p.alBuffers = p.alBuffers[1:]
|
p.alBuffers = p.alBuffers[1:]
|
||||||
buf.BufferData(al.FormatStereo16, b[:n], int32(p.sampleRate))
|
buf.BufferData(al.FormatStereo16, tmpBuffer[:n], int32(p.sampleRate))
|
||||||
p.alSource.QueueBuffers(buf)
|
p.alSource.QueueBuffers(buf)
|
||||||
if err := al.Error(); err != 0 {
|
if err := al.Error(); err != 0 {
|
||||||
panic(fmt.Sprintf("audio: Queue in process: %d", err))
|
panic(fmt.Sprintf("audio: Queue in process: %d", err))
|
||||||
|
Loading…
Reference in New Issue
Block a user