- 声明
SoundTouch
对象和内存变量,根据声道数和采样率初始化对象和内存
1 | SoundTouch *soundTouch = NULL; |
- 把
PCM
数据给SoundTouch
处理
1 | //采样个数,具体怎么获取看具体情况 |
- 设置变速和变调
1 | soundTouch->setPitch(1.0); //变调 |
SoudTouch
选择处理数据是16bit
还是32bit
,在STTypes.h
里面找到
1 | #if !(SOUNDTOUCH_INTEGER_SAMPLES || SOUNDTOUCH_FLOAT_SAMPLES) |
根据你的类型注释选择对应的宏定义即可
ffmpeg
里面使用的时候需要注意的点:因为FFmpeg
解码出来的PCM
数据是8bit (uint8)
的,而SoundTouch
中最低
是16bit( 16bit integer samples
),所以我们需要将8bit
的数据转换成16bit
后再给SoundTouch
处理。
8bit->16bit
处理方式:1
2
3
4
5
6
7
8
9
10
11SAMPLETYPE *sampleBuffer=NULL ;
uint8_t *out_buffer = NULL;
//....初始化等
//获取音频数据到out_buffer
int data_size = resampleAudio(reinterpret_cast<void **>(&out_buffer));
for(int i = 0; i < data_size / 2 + 1; i++)
{
sampleBuffer[i] = (buffer[i * 2] | ((buffer[i * 2 + 1]) << 8));
}
- 官方示例,将一个文件变速变调转为另外一个文件
1 | static void |
ffmpeg
示例
1 |
|