2016-04-17 2 views
0

В основном, что делает im, используя NAudio для получения пиковой информации. Я сделал набор из 20 изображений, которые будут представлять EQ. Я сделал код для проверки пикового значения и изменения изображения в кадре в реальном времени с помощью таймера. Хотя иногда я вижу визуальное отставание, и я думаю, что код довольно неэффективен. Есть ли более эффективный код, чем этот большой кусок сослагательного наклоненияБолее эффективный код для отображения изображений эквалайзера от значения

private void EQ_TIMER_Tick(object sender, EventArgs e) 
    { 
     int vol = (int)((float)(device.AudioMeterInformation.MasterPeakValue * 100)); 
     if ((vol > 0) && (vol < 5)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ5; 
     } 
     else if ((vol > 5) && (vol < 10)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ10; 
     } 
     else if ((vol > 10) && (vol < 15)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ15; 
     } 
     else if ((vol > 15) && (vol < 20)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ20; 
     } 
     else if ((vol > 20) && (vol < 25)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ25; 
     } 
     else if ((vol > 25) && (vol < 30)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ30; 
     } 
     else if ((vol > 30) && (vol < 35)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ35; 
     } 
     else if ((vol > 35) && (vol < 40)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ40; 
     } 
     else if ((vol > 40) && (vol < 45)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ45; 
     } 
     else if ((vol > 45) && (vol < 50)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ50; 
     } 
     else if ((vol > 50) && (vol < 55)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ55; 
     } 
     else if ((vol > 55) && (vol < 60)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ60; 
     } 
     else if ((vol > 60) && (vol < 65)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ65; 
     } 
     else if ((vol > 65) && (vol < 70)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ70; 
     } 
     else if ((vol > 70) && (vol < 75)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ75; 
     } 
     else if ((vol > 75) && (vol < 80)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ80; 
     } 
     else if ((vol > 80) && (vol < 85)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ85; 
     } 
     else if ((vol > 85) && (vol < 90)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ90; 
     } 
     else if ((vol > 90) && (vol < 95)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ95; 
     } 
     else if ((vol > 95) && (vol < 100)) 
     { 
      WINGS_FRAME.Image = Properties.Resources.RES_EQ100; 
     } 
     else if (vol == 0) 
     { 
      WINGS_FRAME.Image = null; 
     } 
    } 

ответ

2

Попробуйте что-то вроде этого:

int vol = 38; 
int imgnum = vol/5*5; 
string imgname = string.Format("RES_EQ{0}", imgnum); 

var image = Properties.Resources.ResourceManager.GetObject(imgname); 

целочисленное деление «раундов» громкость на номер шага, а затем умножением на 5 дает фактическое номер для изображения.

+0

Thats perfect! Работает намного лучше! – ModuleLFS