将播放的声音流式传输或保存到文件或 http 端点

问题描述 投票:0回答:1

我正在使用这个模块在我的项目中播放声音 - https://github.com/faiface/beep 我想播放声音以及将声音播放到文件或 http 端点的流。

I am adding streams to mixer like this:
soundMixer.Add(stream)

speaker.Play(s.soundMixer)

有人可以帮我吗? 任何帮助表示赞赏

我想要此更改的确切代码 - https://github.com/ikemen-engine/Ikemen-GO/blob/9fcfb350fc5a1255ab74d264e96b773187e8ad71/src/sound.go#L222-L225

示例代码

package main

import (
    "log"
    "os"
    "time"

    "github.com/faiface/beep"
    "github.com/faiface/beep/mp3"
    "github.com/faiface/beep/speaker"
)

func main() {

    s1 := getStream("./Lame_Drivers_-_01_-_Frozen_Egg.mp3")
    s2 := getStream("./Miami_Slice_-_04_-_Step_Into_Me.mp3")

    defer s1.Close()
    defer s2.Close()

    speaker.Init(48000, 2048)
    mixer := &beep.Mixer{}
    // done := make(chan bool)
    speaker.Play(mixer)

    mixer.Add(s1)
    mixer.Add(s2)

    time.Sleep(2 * time.Minute)
}

func getStream(file string) beep.StreamSeekCloser {
    f, err := os.Open(file)
    if err != nil {
        log.Fatal(err)
    }

    streamer, _, err := mp3.Decode(f)
    if err != nil {
        log.Fatal(err)
    }

    return streamer
}

go audio beep
1个回答
0
投票

您的程序在声音播放之前就已完成。

    f, err := os.Open("music.mp3")
    if err != nil {
        log.Fatal(err)
    }

    streamer, format, err := mp3.Decode(f)
    if err != nil {
        log.Fatal(err)
    }
    defer streamer.Close()

    speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))

    done := make(chan bool)
    speaker.Play(beep.Seq(streamer, beep.Callback(func() {
        done <- true
    })))
    <-done
© www.soinside.com 2019 - 2024. All rights reserved.