mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-26 20:41:46 +08:00
41 lines
1.0 KiB
Go
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
|
|
})
|
|
}
|
|
}
|