Golang麦克风输入功能的实现与应用
Golang麦克风输入功能的实现与应用 是否有办法使用Go实时从麦克风读取语音?
2 回复
是的,有办法。看看这篇帖子,它可能正是你想要的:
Golang : Record voice(audio) from microphone to .WAV file

Golang : Record voice(audio) from microphone to .WAV file
Golang : Record voice(audio) from microphone to .WAV file
更多关于Golang麦克风输入功能的实现与应用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,Go语言可以通过PortAudio或ALSA等库实现实时麦克风输入。以下是一个使用PortAudio库的示例:
package main
import (
"fmt"
"time"
"github.com/gordonklaus/portaudio"
)
const (
sampleRate = 44100
bufferSize = 1024
)
func main() {
portaudio.Initialize()
defer portaudio.Terminate()
stream, err := portaudio.OpenDefaultStream(1, 0, sampleRate, bufferSize, processAudio)
if err != nil {
panic(err)
}
defer stream.Close()
if err := stream.Start(); err != nil {
panic(err)
}
time.Sleep(5 * time.Second) // 录制5秒
if err := stream.Stop(); err != nil {
panic(err)
}
}
func processAudio(in []float32) {
// 实时处理音频数据
for i, sample := range in {
// 示例:简单的音量检测
if sample > 0.5 {
fmt.Printf("高音量检测: 索引=%d, 值=%.3f\n", i, sample)
}
}
}
需要先安装PortAudio绑定:
go get github.com/gordonklaus/portaudio
对于更高级的音频处理,可以结合github.com/go-audio/audio库进行格式转换和编码:
import (
"bytes"
"github.com/go-audio/audio"
"github.com/go-audio/wav"
)
func encodeToWAV(audioData []float32) []byte {
buf := new(bytes.Buffer)
encoder := wav.NewEncoder(buf, sampleRate, 16, 1, 1)
intBuffer := make([]int, len(audioData))
for i, v := range audioData {
intBuffer[i] = int(v * 32767) // 转换为16位PCM
}
pcmBuffer := &audio.IntBuffer{
Format: &audio.Format{
NumChannels: 1,
SampleRate: sampleRate,
},
Data: intBuffer,
}
encoder.Write(pcmBuffer)
encoder.Close()
return buf.Bytes()
}
这个实现提供了基本的实时音频捕获功能,采样率设为44.1kHz,缓冲区大小为1024个样本。processAudio回调函数会在每个音频缓冲区就绪时被调用,你可以在其中添加实时语音处理逻辑。

