Разница в позициях песен между mp3 и fla c. Как это исправить? C# - PullRequest
1 голос
/ 02 августа 2020

Я использую 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 представляют положение мыши и текущую позицию песни, которые находятся в той же реальной позиции песни (что вы слышите)]

  1. где-то в начале:
  • Позиция мыши: (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;
}

Если кто-то может улучшить мой код Буду рада, спасибо!

...