我正在尝试在Golang中播放.wav文件的声音,并希望使用packr将.wav文件打包到可执行文件中。
我已经创建了一个非常小的项目packr-test repository,其中包含代码。
当我在默认文件夹中运行可执行文件(./packr-test)时,声音会播放。但是,当我将可执行文件移动到另一个目录时,尝试播放声音文件时出现错误。我认为这可能意味着声音文件没有与可执行文件捆绑在一起。
这是在Ubuntu上。我正在使用“play”命令,该命令通常是默认安装的,但如果不存在,则可以通过以下方式完成:
使用play命令:
为了节省您查找的时间,这是我的Go代码:
这是我的输出:
我已经创建了一个非常小的项目packr-test repository,其中包含代码。
当我在默认文件夹中运行可执行文件(./packr-test)时,声音会播放。但是,当我将可执行文件移动到另一个目录时,尝试播放声音文件时出现错误。我认为这可能意味着声音文件没有与可执行文件捆绑在一起。
这是在Ubuntu上。我正在使用“play”命令,该命令通常是默认安装的,但如果不存在,则可以通过以下方式完成:
sudo apt-get install sox
sudo apt-get install sox libsox-fmt-all
使用play命令:
play file_name.extension
为了节省您查找的时间,这是我的Go代码:
package main
import (
"fmt"
"os/exec"
"github.com/gobuffalo/packr"
)
func main() {
soundsBox := packr.NewBox("./sounds")
if soundsBox.Has("IEEE_float_mono_32kHz.wav") {
fmt.Println("It's there.")
} else {
fmt.Println("It's not there.")
}
args := []string{"-v20", "./sounds/IEEE_float_mono_32kHz.wav"}
output, err := exec.Command("play", args...).Output()
if err != nil {
// Play command was not successful
fmt.Println("Got an error.")
fmt.Println(err.Error())
} else {
fmt.Println(string(output))
}
}
这是我的输出:
sudo ./packr-test
It's there.
Got an error.
exit status 2
[]byte
参数的函数。您正在调用操作系统调用的exec
,因此您必须以与在命令行上调用play
相同的方式传递声音文件(即作为文件系统路径)。 - Matt