【问题标题】:Implementing an Augmented Reality Piano实现增强现实钢琴
【发布时间】:2015-06-10 10:18:26
【问题描述】:

我正在制作 AR 钢琴,但我一直在努力解决这个问题。该项目包含一台纸钢琴,用户可以在其中弹奏纸钢琴,并通过 AR 识别正在弹奏的琴键。

我的图像目标与这个非常相似:

我在项目中使用 Vuforia 和 Unity 3D,到目前为止我所做的是为每个键添加一个虚拟按钮。这在图像目标正上方的相机上效果很好,但我遇到的问题是,当用户弹奏和弦时,还有其他隐藏的键,使应用程序播放不应该播放的音符。当用户按下黑键时也会发生同样的情况。

我在 youtube 上看到了其他类似的项目,发现这个项目在识别黑色音符和和弦方面做得非常好:

https://www.youtube.com/watch?v=FHJ_I6DmFNw

视频和我的项目之间的最大区别在于他们没有将手机放在图像目标的正上方。像视频中那样将手机放在钢琴前面会有所帮助,因为相机现在可以看到正在按下哪些特定键,而其他手不会隐藏其他键。我注意到的另一件事是钢琴键上没有字母,在我的项目中,如果我删除音符的名称,我无法让虚拟按钮工作,因为虚拟按钮必须放置在丰富的图像上与图像目标的其余部分不同。

问题是当我将图像目标和相机放在这个位置时,我无法让应用程序识别图像目标或按钮。

我是否必须更改图像目标才能透视?或者我为此目的使用了错误的 AR SDK?另外,我怎样才能删除笔记名称并识别用户手指的位置?

我现在已经尝试了很多东西,任何关于如何解决这个问题并实现类似于上面视频的东西的帮助对我来说真的很有用。

谢谢

【问题讨论】:

    标签: android vuforia


    【解决方案1】:

    我刚看到视频。看起来像个骗局。但既然你要让它成为现实,我注意到的一件事是他们不弹黑键。

    因此,如果您尝试弹奏黑键,您可能会遇到block() 函数检测黑键以及其下方/旁边的两个白键何时被覆盖的问题。因此,如果发生这种情况,只播放黑键的音调。

    例如:如果播放 F#,则

    if(pressed(Fsharp) && pressed(F) && pressed(G)){
    playsound(Fsharp);
    }
    

    为了让它有效地工作,请尝试确保在检查是否单击单个键之前先检查这些条件。这样,您可以从CheckNumberofKeysDown(); 开始,然后才启动一个线程,通过使用枚举或数组keys[] 中的键并使用诸如

    之类的条件来检查键是否在一起
    //Second touched key compared with the first key's neighbor
    if(key[touched[1]]!=key[touched+1]){ 
    playsound(touched[0]);
    playsound(touched[1]);
    }
    

    所以这些只是我在尝试解决问题时脑海中闪过的一些想法。他们使用它的角度几乎是不真实的。但是让摄像头从另一侧面向您是理想的,因为您可以更好地查看所有按键。

    是的,显然你需要大量的研发才能完美地工作。希望这对你有所帮助。还有祝你好运!

    【讨论】:

    • 非常感谢您的帮助 :),我会尝试您的想法并发布我得到的任何发现。
    猜你喜欢
    • 2011-11-12
    • 2011-06-15
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多