gpt4 book ai didi

java - 计算音乐搜索栏的轨道位置

转载 作者:行者123 更新时间:2023-12-02 05:06:01 25 4
gpt4 key购买 nike

如何计算搜索栏上的音乐轨道位置?

我已经创建了一个普通的音乐播放器 GUI 作为 midi 音频播放器的演示,我想为其创建一个搜索栏。我已经为它创建了所有内容,但我一直在努力计算搜索位置指示器的 x 位置。

播放了 2 秒(尺寸:640x480)(TrackPosX:260/475,其中 475 是搜索栏 endX)

我的渲染方法的片段

int trackPosY = this.getHeight()/2+this.getHeight()/4+40; //Y coordinate of seek bar/seek indicator/end and begin points

//Draws seek bar with end points
g.drawLine(this.getWidth()/4, trackPosY, this.getWidth()/2+this.getWidth()/4, trackPosY); //Draws Seek bar
g.drawLine(this.getWidth()/4, trackPosY-10, this.getWidth()/4, trackPosY+10); //Draws Begin point
g.drawLine(this.getWidth()/2+this.getWidth()/4+1, trackPosY-10, this.getWidth()/2+this.getWidth()/4+1, trackPosY+10); //Draws End line (Not sure why I have to add 1 to the x but if I don't the seek bar breaches the width of the end line.)

if(midiPlayer != null && (midiPlayer.getState() == SimpleMidiPlayer.PLAY || midiPlayer.getState() == SimpleMidiPlayer.PAUSE)){
int trackLineLength = (this.getWidth()/4+this.getWidth()/2 - this.getWidth()/4); //Length of the line, not sure if necessary
int trackPosX = (int) ((midiPlayer.getTickPosition()/trackLineLength*midiPlayer.getTicksTotal()/trackLineLength) + (this.getWidth()/4)); //Attempt at finding X Coordinate
g.fillOval( trackPosX-3, trackPosY-3, 6, 6); //Draws Seek position indicator
debugTrackPos.setDebugText("TrackPosX: "+trackPosX+"/"+(this.getWidth()/4+this.getWidth()/2)+" Tick: "+midiPlayer.getTickPosition()+"/"+midiPlayer.getTicksTotal()); //Debugging purposes (top left of pic)
}

最佳答案

看起来你已经很接近了,基本原理是这样的:

ratio = var/total;
position = (max-min)*ratio +min

您的变量是:

var = midiPlayer.getTickPosition()
total = midiPlayer.getTicksTotal()
ratio = midiPlayer.getTickPosition()/midiPlayer.getTicksTotal()

(you already have max-min defined as trackLineLength)
max = this.getWidth()/4+this.getWidth()/2
min = this.getWidth()/4

因此,使用这些变量,您将得到以下结果:

int trackPosX = (int)( ((double)midiPlayer.getTickPosition())/midiPlayer.getTicksTotal()
* trackLineLength + this.getWidth()/4)

注意,我在 getTickPosition/getTicksTotal 上的划分中添加了 (double) 转换。我的猜测是这些是返回的整数值,除非将其转换为 double 值,否则每次除法都会得到 0。

关于java - 计算音乐搜索栏的轨道位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com