classify audio open source errors

This commit is contained in:
Dmitry Sergeev
2026-08-26 23:47:57 +03:00
parent 9220bb1e7b
commit 078f866234
+35 -7
View File
@@ -178,36 +178,64 @@ type AudioFrame struct {
func OpenAudio(domain, flowID string) (*AudioSource, error) {
inst, err := mxl.NewInstance(domain, "")
if err != nil {
return nil, fmt.Errorf("NewInstance: %w", err)
return nil, wrapError("new MXL instance", ErrorKindUnavailable, err)
}
r, err := inst.NewReader(flowID)
if err != nil {
inst.Close()
return nil, fmt.Errorf("NewReader: %w", err)
return nil, wrapError("open audio reader", ErrorKindUnavailable, err)
}
info, err := r.Info()
if err != nil {
r.Close()
inst.Close()
return nil, fmt.Errorf("Info: %w", err)
return nil, wrapError("get audio info", ErrorKindUnavailable, err)
}
if info.Config.Common.Format.IsDiscrete() {
r.Close()
inst.Close()
return nil, fmt.Errorf("flow is discrete (not audio)")
return nil, wrapError(
"validate audio flow",
ErrorKindInvalidConfig,
errors.New("audio flow is discrete"),
)
}
channels := uint64(info.Config.Continuous.ChannelCount)
if channels == 0 {
r.Close()
inst.Close()
return nil, wrapError(
"validate audio flow",
ErrorKindInvalidConfig,
errors.New("audio flow has no channels"),
)
}
rate := info.Config.Common.GrainRate
if rate.Num <= 0 || rate.Den <= 0 {
r.Close()
inst.Close()
return nil, wrapError(
"validate audio flow",
ErrorKindInvalidConfig,
fmt.Errorf("invalid audio rate: %d/%d", rate.Num, rate.Den),
)
}
idx := info.Runtime.HeadIndex
if idx == 0 {
r.Close()
inst.Close()
return nil, fmt.Errorf("flow has no head yet (no producer?)")
return nil, wrapError(
"open audio reader",
ErrorKindUnavailable,
errors.New("audio flow has no producer data"),
)
}
return &AudioSource{
inst: inst,
r: r,
info: info,
rate: info.Config.Common.GrainRate,
chans: uint64(info.Config.Continuous.ChannelCount),
rate: rate,
chans: channels,
idx: idx,
}, nil
}