ADI BF706从48K音频采样频率降低到8K音频采样频率以及将8K音频采样频率提高到48K音频采样频率的CCES C代码程序
下面是将48K音频采样频率降低到8K音频采样频率的CCES C代码程序:
#include <stdio.h>
#define INPUT_SAMPLE_RATE 48000
#define OUTPUT_SAMPLE_RATE 8000
#define SAMPLES_PER_FRAME 1024
void resample_48k_to_8k(float* input, float* output, int num_samples) {
float ratio = (float)OUTPUT_SAMPLE_RATE / INPUT_SAMPLE_RATE;
int num_output_samples = num_samples * ratio;
for (int i = 0; i < num_output_samples; i++) {
float index = i / ratio;
int index_floor = (int)index;
float index_fraction = index - index_floor;
output[i] = input[index_floor] * (1 - index_fraction) + input[index_floor + 1] * index_fraction;
}
}
int main() {
// 48K audio input samples
float input_samples[SAMPLES_PER_FRAME] = { /* input samples here */ };
// 8K audio output samples
float output_samples[SAMPLES_PER_FRAME * (OUTPUT_SAMPLE_RATE / INPUT_SAMPLE_RATE)];
resample_48k_to_8k(input_samples, output_samples, SAMPLES_PER_FRAME);
// Print the output samples
for (int i = 0; i < SAMPLES_PER_FRAME * (OUTPUT_SAMPLE_RATE / INPUT_SAMPLE_RATE); i++) {
printf("%f ", output_samples[i]);
}
return 0;
}
下面是将8K音频采样频率提高到48K音频采样频率的CCES C代码程序:
#include <stdio.h>
#define INPUT_SAMPLE_RATE 8000
#define OUTPUT_SAMPLE_RATE 48000
#define SAMPLES_PER_FRAME 1024
void resample_8k_to_48k(float* input, float* output, int num_samples) {
float ratio = (float)OUTPUT_SAMPLE_RATE / INPUT_SAMPLE_RATE;
int num_output_samples = num_samples * ratio;
for (int i = 0; i < num_output_samples; i++) {
float index = i / ratio;
int index_floor = (int)index;
float index_fraction = index - index_floor;
output[i] = input[index_floor] * (1 - index_fraction) + input[index_floor + 1] * index_fraction;
}
}
int main() {
// 8K audio input samples
float input_samples[SAMPLES_PER_FRAME] = { /* input samples here */ };
// 48K audio output samples
float output_samples[SAMPLES_PER_FRAME * (OUTPUT_SAMPLE_RATE / INPUT_SAMPLE_RATE)];
resample_8k_to_48k(input_samples, output_samples, SAMPLES_PER_FRAME);
// Print the output samples
for (int i = 0; i < SAMPLES_PER_FRAME * (OUTPUT_SAMPLE_RATE / INPUT_SAMPLE_RATE); i++) {
printf("%f ", output_samples[i]);
}
return 0;
}
在以上代码中,你需要替换注释部分的输入样本数据。这些代码使用线性插值的方法进行音频采样率的转换
原文地址: http://www.cveoy.top/t/topic/h72i 著作权归作者所有。请勿转载和采集!