如何播放与速度或弧线共同产生的旋转轮的音效

Arj*_*ini 5 java android canvas android-canvas

我想在旋转车轮时播放声音根据角度和坐标轮的旋转速度

当Pin触​​摸在线触摸Arc时,我想在正确的时间播放Sound Play.

此外,想要动画在Pin上像触摸一样震动.

声音是播放但是声音连续播放并且根据画布轮不寻求坐标

 @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    drawWheelBackground(canvas);
    initComponents();

    float tempAngle = 0;
    float sweepAngle = 360 / mWheelItems.size();
    if (this.mWheelItems != null) {

        Log.e("mWheelItems.size()", String.valueOf(mWheelItems.size()));
        for (int i = 0; i < mWheelItems.size(); i++) {
            archPaint.setColor(mWheelItems.get(i).color);
            archPaint1.setColor(Color.WHITE);

            canvas.drawArc(range, tempAngle, sweepAngle, true, archPaint2);
            canvas.drawArc(range, tempAngle, sweepAngle, true, archPaint);

            drawImage(canvas, tempAngle, mWheelItems.get(i).bitmap, mWheelItems.get(i).mvalue, sweepAngle);

        }

       if (!(this.resourcePlayer == null)) {

            if (this.resourcePlayer.isPlaying()) {
                resourcePlayer.setVolume(100, 100);
                this.resourcePlayer.seekTo(0);

            } else {

                this.resourcePlayer.start();

            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

根据wheelItemCenter和360度旋转

   final float wheelItemCenter = 180 - getAngleOfIndexTarget(target) + (360 / mWheelItems.size()) / 2;

   animate().setInterpolator(new DecelerateInterpolator())
            .setDuration(DEFAULT_ROTATION_TIME)
            .rotation((360*5) + wheelItemCenter)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

dam*_*ian 2

因此,如果我理解正确的话,您需要根据轮子的速度调整声音,并在轮子击中其中一个销钉时播放它。

我认为,每当它击中其中一个销钉时就播放它应该是一个数学问题,如果它连续播放,则意味着您的轮子旋转得很快,并且您正在播放的声音比击中两个销钉之间的持续时间更长。

您可以随意调整声音的speed和。pitch如果您使用的是,您可以根据MediaPlayer更改- 查看setPitchsetSpeedPlaybackParams

轮子越快,声音的速度/音调就越高。速度越慢,声音的速度就越慢。