# opus_demo **Repository Path**: johnnyzzz/opus_demo ## Basic Information - **Project Name**: opus_demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-27 - **Last Updated**: 2025-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WAV文件有损压缩与解压缩库 这是一个针对单片机等资源受限环境设计的WAV文件有损压缩和解压缩库,完全符合C89/C90标准。该库可以将WAV文件压缩到原始大小的约1/10,同时尽可能保持音频质量。 ## 压缩原理 该库使用以下几种技术来压缩WAV文件: 1. **降低采样率** - 默认将采样率降低到原始采样率的一半,使用简单的抽取法进行下采样 2. **降低位深度** - 默认将16位音频转换为8位,减少每个样本的存储空间 3. **ADPCM编码** - 使用自适应差分脉冲编码调制算法,将每个样本从16位减少到4位(每字节可存储两个样本) 通过结合这些技术,可以实现约1/10的压缩率,具体压缩率取决于音频内容和特性。 ## 编译 使用以下命令编译项目: ``` make ``` 编译后会生成可执行文件 `wav_demo`。 ## 使用方法 程序提供两种操作模式: 1. 压缩模式: ``` ./wav_demo -c <输入WAV文件> <压缩输出文件> ``` 2. 解压缩模式: ``` ./wav_demo -d <输入压缩文件> <解压输出WAV文件> ``` 例如: ``` # 压缩WAV文件 ./wav_demo -c input.wav compressed.bin # 解压缩为WAV文件 ./wav_demo -d compressed.bin output.wav ``` ## API说明 库提供了以下主要函数: - `void codec_init_config(CodecConfig* config)` - 初始化默认压缩配置 - 默认将采样率降低到原始采样率的一半 - 默认将位深度设置为8位 - 默认启用ADPCM编码 - `int wav_compress(const unsigned char* in_buffer, unsigned int in_size, unsigned char* out_buffer, unsigned int* out_size, const CodecConfig* config)` - 压缩WAV数据(包含文件头) - `int wav_decompress(const unsigned char* in_buffer, unsigned int in_size, unsigned char* out_buffer, unsigned int* out_size)` - 解压缩WAV数据(还原为包含文件头的WAV格式) - `int pcm_compress(const short* in_data, unsigned int in_samples, unsigned char* out_buffer, unsigned int* out_size, const CodecConfig* config)` - 压缩PCM原始数据(不包含文件头处理) - `int pcm_decompress(const unsigned char* in_buffer, unsigned int in_size, short* out_data, unsigned int* out_samples, unsigned char use_adpcm, unsigned short target_bits)` - 解压缩PCM原始数据(不包含文件头处理) 详细API说明请参考 `wav_codec.h` 文件。 ## 错误码定义 库定义了以下错误码: - `WAV_OK (0)` - 操作成功 - `WAV_ERROR (-1)` - 一般错误 - `WAV_NO_MEMORY (-2)` - 内存不足 - `WAV_INVALID_ARG (-3)` - 参数无效 - `WAV_IO_ERROR (-4)` - I/O错误 ## 性能与限制 1. 该库专为单片机等资源受限环境设计,内存使用率低 2. 仅支持PCM格式的WAV文件 3. 为了减小代码大小,下采样采用简单的抽取法而非更复杂的滤波器 4. 由于是有损压缩,解压后的音频与原始音频会有一定的质量损失 5. 使用ADPCM编码以在低位深度下保持更好的音质 ## 兼容性 - 完全符合C89/C90标准 - 核心库不使用动态内存分配(仅示例程序中使用) - 不依赖标准库以外的其他库 - 可在各种平台上编译,包括嵌入式系统