Documentation
¶
Index ¶
- Constants
- Variables
- func ApplyCMVN(features [][]float32, negMean []float32, invStd []float32)
- func FFT(x []complex128) []complex128
- func Float32ToPcmBytes(data []float32, bitsPerSample int) ([]byte, error)
- func Float32ToWavBytes(data []float32, sampleRate, channels, bitsPerSample int) ([]byte, error)
- func HammingWindow(size int) []float32
- func HannWindow(size int) []float32
- func MelFilters(sampleRate, fftSize, melBinCount int, fMin, fMax float64) [][]float32
- func PcmBytesToFloat32(data []byte, bitPerSample int) ([]float32, error)
- func PreEmphasis(samples []float32, alpha float32) []float32
- func ReformatWavBytes(wavData []byte, targetRate, targetChannels, targetBitPerSample int) ([]byte, error)
- func SaveWav(filePath string, pcmData []byte, sampleRate, channels, bitsPerSample int) error
- func WriteWav(w io.Writer, pcmData []byte, sampleRate, channels, bitsPerSample int) error
- type WavHeader
Constants ¶
View Source
const ( // SampleRate8K 采样率 8KHz SampleRate8K = 8000 // SampleRate16K 采样率 16KHz SampleRate16K = 16000 // SampleRate44K 采样率 44.1KHz SampleRate44K = 44100 // SampleRate48K 采样率 48KHz SampleRate48K = 48000 // SampleRate96K 采样率 96KHz SampleRate96K = 96000 // BitsPerSample16 位深 16 BitsPerSample16 = 16 // BitsPerSample24 位深 24 BitsPerSample24 = 24 // BitsPerSample32 位深 32 BitsPerSample32 = 32 )
Variables ¶
View Source
var ( // ErrNotWavFile 不是有效的 WAV 文件 ErrNotWavFile = errors.New("not a valid RIFF/WAVE file") // ErrUnsupportedBitDepth 不支持的位深 ErrUnsupportedBitDepth = errors.New("unsupported bit depth: only 16, 24, 32 are supported") )
常见错误定义
Functions ¶
func ApplyCMVN ¶
ApplyCMVN 倒谱均值方差归一化 (Cepstral Mean and Variance Normalization)
公式: result = (x + negMean) * invStd
Params: ¶
features: 特征矩阵 negMean: 负均值向量 invStd: 逆标准差向量
func Float32ToPcmBytes ¶
Float32ToPcmBytes 将标准浮点音频数据转换为指定位深的 PCM 字节流
Params: ¶
data: - 音频采样点数组 (Amplitudes) - 值域理论上应在 -1.0 到 +1.0 之间 (0.0 表示静音) - 超出范围的值会被削波 (Clipping) 处理 bitsPerSample: 位深,例如: 16(CD音质), 24(专业录音), 32
func Float32ToWavBytes ¶
Float32ToWavBytes 将标准浮点音频数据转换为完整的 WAV 文件字节流 包含 WAV 头部 (Header) 和 PCM 数据体
Params: ¶
data: 原始音频数据 - 单声道 (Mono): [样本1, 样本2, 样本3, ...] - 双声道 (Stereo): [左1, 右1, 左2, 右2, 左3, 右3, ...] sampleRate: 采样率 channels: 声道数 bitsPerSample: 位深
func HammingWindow ¶
HammingWindow 生成汉明窗,减少频谱泄漏
Hamming 公式: 0.54 - 0.46 * cos(2πn / (N-1))
Params: ¶
size: 窗口大小
func MelFilters ¶
MelFilters 生成 Mel 滤波器组权重矩阵,将线性频率映射到Mel刻度
Params: ¶
sampleRate: 采样率 fftSize: FFT 窗口大小 melBinCount: Mel 频带数量 fMin: 最小频率 fMax: 最大频率
func PcmBytesToFloat32 ¶
PcmBytesToFloat32 PCM 字节流转 float32 数组
Params: ¶
data: 原始 PCM 数据 bitPerSample: 位深,支持 16, 24, 32 bit
func PreEmphasis ¶
PreEmphasis 预加重滤波器,提升高频部分,平衡频谱能量
差分公式: y[t] = x[t] - alpha * x[t-1]
Params: ¶
samples: 输入的音频数据 alpha: 预加重系数,推荐 0.97
func ReformatWavBytes ¶
func ReformatWavBytes(wavData []byte, targetRate, targetChannels, targetBitPerSample int) ([]byte, error)
ReformatWavBytes WAV 字节流格式转换
支持:位深转换、采样率转换、声道转换
Params: ¶
wavData: 原始 WAV 文件数据 targetRate: 目标采样率 targetChannels: 目标声道数 targetBitPerSample: 目标位深
Types ¶
type WavHeader ¶
type WavHeader struct {
// RIFF Chunk
ChunkID [4]byte // "RIFF"
ChunkSize uint32 // 文件总大小 - 8 字节
Format [4]byte // "WAVE"
// fmt Chunk
Subchunk1ID [4]byte // "fmt "
Subchunk1Size uint32 // 通常为 16 (针对 PCM)
AudioFormat uint16 // 音频格式: 1 = PCM (无损), 3 = IEEE Float
NumChannels uint16 // 声道数: 1 = Mono, 2 = Stereo
SampleRate uint32 // 采样率: e.g., 44100, 16000
ByteRate uint32 // 传输速率: SampleRate * NumChannels * BitsPerSample / 8
BlockAlign uint16 // 块对齐: NumChannels * BitsPerSample / 8
BitsPerSample uint16 // 位深: e.g., 16, 24, 32
// data Chunk
Subchunk2ID [4]byte // "data"
Subchunk2Size uint32 // 音频数据的字节大小
}
WavHeader 定义了标准的 WAV 文件头 (44 bytes) 对应 RIFF WAVE 格式标准
func (*WavHeader) GetDuration ¶
GetDuration 根据头部信息计算音频时长
Click to show internal directories.
Click to hide internal directories.