将S16LE的PCM转成FLTP的PCM 源码,输入和输出为char*
时间: 2024-10-24 13:10:32 浏览: 24
将S16LE (16位小端字节序的 PCM) 格式的音频数据转换为FLTP (无压缩的 8 位线性 PCM) 数据,通常涉及到内存操作和数据格式的解析。这里是一个简单的示例,假设输入和输出都是指针指向的 char 类型数组,每个字符代表一个 8 位值:
```c
#include <stdint.h>
// 假设源数据大小固定,例如每帧有 1024 个样本
#define INPUT_SAMPLE_SIZE 1024
#define BITS_PER_SAMPLE 16
#define INPUT_BYTES_PER_SAMPLE (BITS_PER_SAMPLE / 8)
#define INPUT_FRAME_SIZE (INPUT_SAMPLE_SIZE * INPUT_BYTES_PER_SAMPLE)
// 转换函数
void s16le_to_fltp(char* input_s16le, char* output_fltp) {
// 检查输入和输出是否足够大
if ((input_s16le == NULL) || (output_fltp == NULL)) {
return;
}
for (int i = 0; i < INPUT_FRAME_SIZE; ++i) {
// S16LE -> 8-bit FLTP: 需要两个char存储16位,然后复制到单个char
uint16_t sample = *((uint16_t*)input_s16le);
*output_fltp = (sample >> 8); // 高8位
*(output_fltp + 1) = sample & 0xFF; // 低8位
input_s16le += INPUT_BYTES_PER_SAMPLE;
output_fltp += 2; // 由于FLTP是单字节
}
}
阅读全文