c++ - 更新功能中的跳跃 Action 播放声音(openframework)

标签 c++ audio openframeworks leap-motion

我使用跳动 Action 弹奏乐器音符,并使用palmPosition触发播放的声音,但这不是我想要的,palmPosition具有更新功能,声音将根据帧频反复播放。太快了,我希望跳跃 Action 就像鼠标向上和向下一样...当palmPosition更改时播放声音。
这是我的代码,

    void ofApp::update(){
        ...
    if (hands[i].palmPosition().z < 50) {
                    isTouch = true;
                        if ((hands[i].palmPosition().x > -240)&& (hands[i].palmPosition().x < -160)) {
                                pianoE.setVolume(1);
                                pianoE.play();
                        }

                        if ((hands[i].palmPosition().x >-120)&& (hands[i].palmPosition().x <-60)) {
                            pianoE.setVolume(1);
                            pianoE.play();
                        }

                        if ((hands[i].palmPosition().x >-20)&& (hands[i].palmPosition().x < 20)) {
                            pianoC.setVolume(1);
                            pianoC.play();
                        }

                        if ((hands[i].palmPosition().x > 90)&& (hands[i].palmPosition().x < 120)) {
                            pianoC.setVolume(1);
                            pianoC.play();
                        }

                        if ((hands[i].palmPosition().x >180)&& (hands[i].palmPosition().x < 240)) {
                            pianoC.setVolume(1);
                            pianoC.play();
                        }
                    }else{
                    isTouch = false;

                }
...
    }

最佳答案

您检查声音 isPlaying() 是否存在,并仅在尚未播放时才播放。

例如

if (hands[i].palmPosition().z < 50) {
                    isTouch = true;
                        if ((hands[i].palmPosition().x > -240)&& (hands[i].palmPosition().x < -160)) {
                                pianoE.setVolume(1);
                                if(!pianoE.isPlaying()) pianoE.play();
                        }

                        if ((hands[i].palmPosition().x >-120)&& (hands[i].palmPosition().x <-60)) {
                            pianoE.setVolume(1);
                            if(!pianoE.isPlaying()) pianoE.play();
                        }

                        if ((hands[i].palmPosition().x >-20)&& (hands[i].palmPosition().x < 20)) {
                            pianoC.setVolume(1);
                            if(!pianoC.isPlaying()) pianoC.play();
                        }

                        if ((hands[i].palmPosition().x > 90)&& (hands[i].palmPosition().x < 120)) {
                            pianoC.setVolume(1);
                            if(!pianoC.isPlaying()) pianoC.play();
                        }

                        if ((hands[i].palmPosition().x >180)&& (hands[i].palmPosition().x < 240)) {
                            pianoC.setVolume(1);
                            if(!pianoC.isPlaying()) pianoC.play();
                        }
                    }else{
                    isTouch = false;

                }

关于c++ - 更新功能中的跳跃 Action 播放声音(openframework),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43623142/

相关文章:

c++ - 将变量作为类对象返回

C++通过另一个库链接一个库

c++ - 复制 boost::function 是否也复制闭包?

iphone - 如何反转音频文件?

对象本身作为参数的对象上的 C++ 调用方法

c++ - 如何使这段代码不易发生内存泄漏?

qt - Qt,仅显示大型QImage一部分的低成本方法

c# - 根据格式信息对wave文件列表进行排序

Xcode - 找不到 'openssl/opensslconf.h' 文件

c++ - 声明一个字符串数组并查找其中的元素数 (openFrameworks)