将超能力高级音频播放器同步到绝对位置
Syncing SuperpoweredAdvancedAudioPlayer to absolute position
SuperpoweredAdvancedAudioPlayer
内置节拍同步功能,效果很好。但是我想将播放器同步到节拍器的绝对位置,并尝试通过在每个处理循环中使用播放器setPosition (double ms, bool andStop, bool synchronisedStart)
方法设置此位置来做到这一点。只要玩家以原始 bpm 播放,这就可以工作。当我改变速度并且播放时间延长时,我会得到失真的音频。
我试图将位置设置为大师的位置以及玩家在其原始速度(masterPositionMs
* playerBpm
/masterBpm
(下计算的位置。我也尝试了打开和关闭节拍同步。
我做错了什么?有更好的方法来进行绝对同步吗?
bool MyAudioSession::process(short int *in_out, unsigned int numberOfInputSamples) {
float currentBPM = metronome->getBpm();
double msElapsedSinceLastMasterBeat = metronome->getMsElapsedSinceLastBeat();
double msPositionMaster = metronome->getPositionMs();
bool silence = true;
if(metronome->process(stereoOutputBuffer, !silence, numberOfInputSamples, volMetronome))
silence = false;
for (int i = 0; i < audioPlayers.size(); i++) {
if(audioPlayers[i]->playing) {
audioPlayers[i]->setPosition(
(msPositionMaster * audioPlayers[i]->bpm / currentBPM) + audioPlayers[i]->firstBeatMs,
!metronome->isPlaying(),
SYNCHRONISED_START);
}
if(audioPlayers[i]->process(stereoOutputBuffer, !silence, numberOfInputSamples, audioPlayers[i]->volume, currentBPM, msElapsedSinceLastMasterBeat))
silence = false;
}
[...]
不需要 setPosition,播放器将同步到下一个节拍。只需调用 play(true( 即可重新同步。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 松弛原子与无同步情况下的记忆连贯性
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- git:将同一文件的两个位置保持同步
- 将超能力高级音频播放器同步到绝对位置