使用Golang将电脑音频存储到文件中
使用Golang将电脑音频存储到文件中 是否有办法捕获计算机音频并将其存储到文件中?计算机音频可以是任何带有声音的内容,例如YouTube音频、Zoom通话音频。
如果需要更多信息,请告诉我。任何指导都将不胜感激。
1 回复
更多关于使用Golang将电脑音频存储到文件中的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,可以使用Golang捕获计算机音频并存储到文件中。这通常需要调用操作系统的音频接口,以下是一个使用PortAudio库的示例:
package main
import (
"encoding/binary"
"os"
"time"
"github.com/gordonklaus/portaudio"
)
func main() {
portaudio.Initialize()
defer portaudio.Terminate()
// 获取默认输入设备
inputDevice, err := portaudio.DefaultInputDevice()
if err != nil {
panic(err)
}
// 创建WAV文件
file, err := os.Create("audio.wav")
if err != nil {
panic(err)
}
defer file.Close()
// 写入WAV文件头
writeWAVHeader(file, 44100, 16, 1)
// 音频参数
params := portaudio.HighLatencyParameters(nil, inputDevice)
params.Input.Channels = 1
params.SampleRate = 44100
params.FramesPerBuffer = 1024
// 打开音频流
stream, err := portaudio.OpenStream(params, func(in []float32) {
// 将float32转换为int16并写入文件
for _, sample := range in {
intSample := int16(sample * 32767)
binary.Write(file, binary.LittleEndian, intSample)
}
})
if err != nil {
panic(err)
}
defer stream.Close()
// 开始录制
stream.Start()
// 录制10秒
time.Sleep(10 * time.Second)
stream.Stop()
}
func writeWAVHeader(file *os.File, sampleRate, bitsPerSample, channels int) {
// WAV文件头结构
header := make([]byte, 44)
// RIFF标识
copy(header[0:4], "RIFF")
// 文件大小(稍后填充)
binary.LittleEndian.PutUint32(header[4:8], 0)
copy(header[8:12], "WAVE")
// fmt子块
copy(header[12:16], "fmt ")
binary.LittleEndian.PutUint32(header[16:20], 16) // PCM格式
binary.LittleEndian.PutUint16(header[20:22], 1) // 音频格式(PCM)
binary.LittleEndian.PutUint16(header[22:24], uint16(channels))
binary.LittleEndian.PutUint32(header[24:28], uint32(sampleRate))
byteRate := sampleRate * channels * bitsPerSample / 8
binary.LittleEndian.PutUint32(header[28:32], uint32(byteRate))
blockAlign := channels * bitsPerSample / 8
binary.LittleEndian.PutUint16(header[32:34], uint16(blockAlign))
binary.LittleEndian.PutUint16(header[34:36], uint16(bitsPerSample))
// data子块
copy(header[36:40], "data")
binary.LittleEndian.PutUint32(header[40:44], 0) // 数据大小(稍后填充)
file.Write(header)
}
这个示例使用PortAudio库捕获系统音频并保存为WAV文件。需要先安装依赖:
go get github.com/gordonklaus/portaudio
注意:在macOS上可能需要安装portaudio库:
brew install portaudio
这个示例会录制10秒的系统音频并保存为audio.wav文件。你可以根据需要调整录制时长、采样率和声道数。

