Files
mediadevices/pkg/io/audio/mixer.go
2020-10-29 00:04:12 -07:00

41 lines
1.0 KiB
Go

package audio
import (
"github.com/pion/mediadevices/pkg/wave"
"github.com/pion/mediadevices/pkg/wave/mixer"
)
// NewChannelMixer creates audio transform to mix audio channels.
func NewChannelMixer(channels int, mixer mixer.ChannelMixer) TransformFunc {
return func(r Reader) Reader {
return ReaderFunc(func() (wave.Audio, func(), error) {
buff, _, err := r.Read()
if err != nil {
return nil, func() {}, err
}
ci := buff.ChunkInfo()
if ci.Channels == channels {
return buff, func() {}, nil
}
ci.Channels = channels
var mixed wave.Audio
switch buff.(type) {
case *wave.Int16Interleaved:
mixed = wave.NewInt16Interleaved(ci)
case *wave.Int16NonInterleaved:
mixed = wave.NewInt16NonInterleaved(ci)
case *wave.Float32Interleaved:
mixed = wave.NewFloat32Interleaved(ci)
case *wave.Float32NonInterleaved:
mixed = wave.NewFloat32NonInterleaved(ci)
}
if err := mixer.Mix(mixed, buff); err != nil {
return nil, func() {}, err
}
return mixed, func() {}, nil
})
}
}