Go语言技术文章
-
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 收藏 -
用 Go beep 把有限音频包装为循环流,关键是先取得可 Seek 的 StreamSeeker,再用 Loop(-1) 循环,并用 Take、Err 和 Close 处理播放边界。326 收藏 -
Go beep 暂停音频流不需要改写底层 Streamer,使用 beep.Ctrl 包装后切换 Paused 即可;播放中的对象要在 speaker.Lock 与 Unlock 之间修改,并区分暂停静音、继续播放和彻底停止。278 收藏