Golang麦克风输入功能的实现与应用

Golang麦克风输入功能的实现与应用 是否有办法使用Go实时从麦克风读取语音?

2 回复

是的,有办法。看看这篇帖子,它可能正是你想要的:

socketloop图标

Golang : Record voice(audio) from microphone to .WAV file

socketloop标志

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回调函数会在每个音频缓冲区就绪时被调用,你可以在其中添加实时语音处理逻辑。

回到顶部