Files
game-driver/internal/common/link_audio.go
2024-11-05 18:39:03 +08:00

55 lines
1005 B
Go

package common
import (
"bytes"
"io"
"log"
"net/http"
"net/url"
"os"
"strings"
)
func open(u string) io.ReadCloser {
p, _ := strings.CutPrefix(u, "file://")
f, e := os.Open(p)
if e != nil {
log.Printf("音频文件 [%v] 打开错误: %v\n", u, e)
return nil
}
return f
}
func get(u string) io.ReadCloser {
resp, e := http.Get(u)
if e != nil {
log.Printf("音频文件 [%v] 下载失败: %v\n", u, e)
return nil
}
return resp.Body
}
func toBuffer(b io.ReadCloser) io.ReadCloser {
data := &bytes.Buffer{}
_, _ = data.ReadFrom(b)
defer b.Close()
return io.NopCloser(data)
}
func LinkAudio(link string) (bgm io.ReadCloser) {
u, err := url.Parse(link)
if err != nil {
log.Println("音频 URL 解析错误: ", err)
} else {
if u.Scheme == "file" {
bgm = open(u.String())
} else if u.Scheme == "http" || u.Scheme == "https" {
bgm = get(u.String())
} else {
log.Printf("不支持的音频文件协议: %v\n", u.String())
}
bgm = toBuffer(bgm)
}
return
}