如何在音频处理中使用超能力时间拉伸类
How to use superpowered time stretching class on audio process
我在使用超能力时间拉伸更改音频速率时遇到问题。 我知道我需要处理时间拉伸速率乘以帧数,因为输出帧数。
例如:如果我将时间拉伸速率设置为 1.5(增加原始速度的 50%(,并且帧数为 144,则所需的帧数为 1.5144=216。当我将时间拉伸速率设置为 1.3(增加原始速度的 30% 时,就会出现问题:1.5144=187.2 - 十进制金额。
我的音频处理方法如下:
bool MultiTracksPlayer::process(
short int *output,
unsigned int numberOfFrames,
unsigned int samplerate
) {
int i = 0;
for (i = 0; i < tracksAmount; i++) {
tracks[i]->outputSamplerate = samplerate;
tracks[i]->syncMode = Superpowered::SyncMode_TempoAndBeat;
}
auto numberOfInputFramesNeeded = (int) (timeStretching->rate * (float) numberOfFrames);
float buffer[3][numberOfInputFramesNeeded * 8 + 64];
bool silence[3];
silence[0] = silence[1] = silence[2] = true;
for (i = tracksAmount - 1; i >= 0; i--) {
if (tracks[i]->leftVolume > 0) {
if (tracks[i]->rightVolume > 0) {
if (tracks[i]->processStereo(buffer[2], !silence[2], numberOfInputFramesNeeded))
silence[2] = false;
} else if (tracks[i]->processStereo(buffer[0], !silence[0], numberOfInputFramesNeeded))
silence[0] = false;
} else if (tracks[i]->processStereo(buffer[1], !silence[1], numberOfInputFramesNeeded, true))
silence[1] = false;
}
audioMixer.process(
silence[0] ? nullptr : buffer[0],
silence[1] ? nullptr : buffer[1],
silence[2] ? nullptr : buffer[2],
nullptr,
buffer[0],
numberOfInputFramesNeeded
);
silence[0] &= silence[1] && silence[2];
timeStretching->addInput(buffer[0], (int) numberOfInputFramesNeeded);
timeStretching->getOutput(buffer[0], (int) numberOfFrames);
if (!silence[0])
Superpowered::FloatToShortInt(buffer[0], output, numberOfFrames);
return !silence[0];
}
我将时间延长的方法更改为高级音频播放器播放速率属性。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- 如何在音频处理中使用超能力时间拉伸类
- 将超能力高级音频播放器同步到绝对位置
- 尝试在构造函数中超限时间
- 超能力 NDK 安卓:返回 int 在"extern"块中成功,在调用函数中失败
- 超能力安卓JNI:了解"JNI(jintArray ..."格式
- 如何使用 NDK 小于 23 的超能力库构建应用
- NDK-build 在最近的 NDK 更新后无法构建超能力音频库
- 是否有时间不调用超类的构造函数C++?