当我尝试构建一个使用“github.com/gordonklaus/portaudio”和“github.com/AllenDang/giu”的 Go 程序时,我得到了C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running x86_64-w64-mingw32-g++ failed: exit status 1 当我测试使用这些分开的包构建 Go 程序时(“github.com/gordonklaus/ portaudio”和“github.com/AllenDang/giu”)程序正确构建并按预期运行。
我想知道它是否与 MINGW4 中编译的 portaudio 有关
可重现的例子:
import (
"log"
"os"
"os/signal"
g "github.com/AllenDang/giu"
"github.com/go-audio/audio"
"github.com/go-audio/generator"
"github.com/gordonklaus/portaudio"
)
func RunAudio() {
portaudio.Initialize()
defer portaudio.Terminate()
out := make([]float32, 2048)
buf := &audio.FloatBuffer{
Data: make([]float64, 2048),
Format: audio.FormatStereo44100,
}
//***************************
currentNote := 440.0
osc := generator.NewOsc(generator.WaveSine, currentNote, buf.Format.SampleRate)
osc.Amplitude = 1
osc.Freq = 440.0
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, os.Kill)
stream, err := portaudio.OpenDefaultStream(0, 2, 44100, len(out), &out)
if err != nil {
log.Fatal(err)
}
log.Println("dsp running")
defer stream.Close()
if err := stream.Start(); err != nil {
log.Fatal(err)
}
defer stream.Stop()
for {
if err := osc.Fill(buf); err != nil {
log.Printf("error filling up the buffer")
}
f64ToF32Mixing(out, buf)
// write to the stream
if err := stream.Write(); err != nil {
log.Printf("error writing to stream : %v\n", err)
}
}
}
func f64ToF32Mixing(dst []float32, buf *audio.FloatBuffer) {
for i := range buf.Data {
dst[i] = float32(buf.Data[i])
}
}
func loop() {
g.Window("test").Layout(
g.Label("hello world"),
)
}
func main() {
wnd := g.NewMasterWindow("Hello synth", 700, 700, g.MasterWindowFlagsTransparent)
go wnd.Run(loop)
RunAudio()
}
蝴蝶刀刀
相关分类