Я использую Winforms и WindowsMediaPlayer для создания c проигрывателя musi. В форме у меня есть pictureBox с формой волны, отрисованной NAudio, которая сохраняется в изображение и загружается при изменении песни. когда mouseDown, песня currentPosition изменяется на положение мыши над изображением сигнала.
С mp3 это работает очень точно, но когда я проигрываю файл fla c, позиция очень неточная.
( изображение осциллограммы для mp3 и fla c идентично)
Должно ли это иметь какое-то отношение к битрейту?
mp3 = 256 Кбит / с - Длина = 07:44
fla c = 892 Кбит / с - Длина = 07: 44
fi:
fla c (х) | mp3 (y)
[x и y представляют положение мыши и текущую позицию песни, которые находятся в той же реальной позиции песни (что вы слышите)]
- где-то в начале:
- Позиция мыши: (x) 30 | (y) 44
- currentSongPosition: (x) 109 | (у) 159
ближе к концу:
- mousePosition: (x) 453 | (y) 450
- currentSongPosition: (x) 1623 | (y) 1607
Это мой mouseDownEvent:
private void pbWaveForm_MouseDown(object sender, MouseEventArgs e)
{
double timePos = 0;
pnlWaveScrub.Height = pbWaveForm.Height;
double MousePosition = e.X;
double dur = musicPlayer.currentMedia.duration;
double ratio = MousePosition / (pbWaveForm.Width );
timePos = ratio * dur;
musicPlayer.controls.currentPosition = (int)timePos;
//MessageBox.Show(Convert.ToString((int)timePos) + " " + MousePosition.ToString());
}
Я планирую оператор if с:
FileInfo f = new FileInfo()
if (f.Extention.Equals(".flac"))
{
// code to calculate different timePos
timePos = differentTimepos
musicPlayer.controls.currentPosition = (int)timePos;
}
Если кто-то может улучшить мой код Буду рада, спасибо!