Go语言技术文章
-
用 github.com/mewkiz/flac 读取 FLAC 的 STREAMINFO,解释 Open 与 ParseFile 的范围差异,以及采样率、声道、位深、总采样数和 MD5 字段的工程用法。323 收藏 -
Go go-audio/wav 的 Encoder.Close 会回写 RIFF 与 PCM data 长度,因此输出必须支持 io.WriteSeeker。本文用 os.File 示例说明 Write、Close 和底层文件关闭的正确顺序,并比较内存与管道输出的边界。282 收藏 -
Go go-wav 中,WAV 每帧字节数由每通道采样字节数和声道数共同决定。本文用公式解释位深、Block Align、Byte Rate 的关系,并给出读取 Decoder 字段的示例。316 收藏 -
go-audio/wav 的 PCMBuffer 和 FullPCMBuffer 都能读取 WAV 样本,但前者由调用方控制批次和内存,后者一次性聚合全部 PCM。本文从内存上涨的故障症状出发,说明两种方法的触发条件、循环写法和选择清单。264 收藏 -
Go go-wav 写 WAV 的关键是让 IntBuffer 的采样率、声道数和位深与 Encoder 参数一致,并在 Write 后调用 Close 刷新文件头。本文给出临时文件、错误回滚和格式记录的实用写法。495 收藏 -
用 go-audio/wav 的 PCMBuffer 固定容量读取 WAV 整数 PCM,掌握 n、声道帧边界、EOF 与 Err 的处理方式,避免 FullPCMBuffer 带来的整段内存占用。179 收藏 -
Go go-wav通过ReadInfo解析格式信息,再从Format读取采样率与声道、从SampleBitDepth读取位深。本文提供原创函数,说明错误检查、编码标识、文件关闭及格式声明与完整解码的区别。463 收藏 -
go-mp3 是纯 Go 的 MP3 解码器,负责把输入源解码为 16 位小端双声道 PCM 数据,并不直接打开声卡或播放设备。本文用职责边界、读取示例和排障清单说明如何把解码结果交给独立播放后端。447 收藏 -
go-mp3 的 Seek 使用解码流字节偏移,输出为 16 位小端双声道 PCM;本文说明为什么要按 4 字节 sample 对齐,并给出 Seek、Read 和生产边界处理示例。110 收藏 -
go-mp3 的 Decoder.Length 统计的是解码流总字节数,不是 MP3 压缩文件大小。本文说明可寻址输入中的 Length、非 io.Seeker 输入的 -1、Read 累计方式,以及 16 位小端双声道输出的单位边界。406 收藏 -
Go go-mp3 的 Seek 面向解码后的 PCM 字节流,不是 MP3 压缩文件偏移。本文说明如何使用可定位输入、按4字节 sample 边界换算偏移,并处理 Length=-1 与跳转后的 Read。310 收藏 -
go-mp3 的时长应按解码后的字节数、每个采样的4字节格式和首帧采样率计算。本文给出可寻址文件与非可寻址流两种处理方式,并说明 Length 返回 -1 时的累计策略。240 收藏 -
Go go-mp3通过NewDecoder包装输入,再用Read逐块取得PCM字节。本文给出原创同步消费函数,说明16位小端双声道格式、有效缓冲区、EOF处理、长度未知及输入文件关闭的边界。380 收藏 -
Go beep Streamer返回false只表示耗尽,正常读完和读取失败都可能进入该状态。本文说明n、ok与Err的分工,给出原创同步消费示例,并解释组合器错误传播、主动停止和资源关闭的区别。187 收藏 -
Go beep 中 Seq 用于按顺序衔接音频,Mix 用于同时混合多个 Streamer。本文从播放场景、采样率和错误边界说明两者区别,并给出选择表。302 收藏