Make own class for Record-Delay testing fixing some bugs
This commit is contained in:
1 parent
88364ce64b
commit
10ecc361e2
1 file changed
+95
-63
@@ -15,6 +15,7 @@
|
|||||||
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
|
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@@ -26,10 +27,93 @@ using VocaluxeLib.Menu;
|
|||||||
|
|
||||||
namespace Vocaluxe.Screens
|
namespace Vocaluxe.Screens
|
||||||
{
|
{
|
||||||
struct SDelayTest
|
class CDelayTest
|
||||||
{
|
{
|
||||||
public Stopwatch Timer;
|
private struct SDelayChannel
|
||||||
public float Delay;
|
{
|
||||||
|
public int Channel;
|
||||||
|
public bool Finished;
|
||||||
|
}
|
||||||
|
|
||||||
|
private const float _MaxDelayTime = 1000;
|
||||||
|
public bool Running { get; private set; }
|
||||||
|
private readonly Stopwatch _Timer = new Stopwatch();
|
||||||
|
private int _Stream = -1;
|
||||||
|
|
||||||
|
private readonly SDelayChannel[] _DelaysChannel = new SDelayChannel[2];
|
||||||
|
public readonly int[] Delays = new int[2];
|
||||||
|
|
||||||
|
public void Start(int[] channels)
|
||||||
|
{
|
||||||
|
if (Running)
|
||||||
|
return;
|
||||||
|
Reset();
|
||||||
|
for (int i = 0; i < _DelaysChannel.Length; i++)
|
||||||
|
{
|
||||||
|
if (i < channels.Length)
|
||||||
|
{
|
||||||
|
_DelaysChannel[i].Finished = false;
|
||||||
|
_DelaysChannel[i].Channel = channels[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_DelaysChannel[i].Finished = true;
|
||||||
|
}
|
||||||
|
_Stream = CSound.PlaySound(ESounds.T440, false);
|
||||||
|
Running = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
Running = false;
|
||||||
|
for (int i = 0; i < _DelaysChannel.Length; i++)
|
||||||
|
Delays[i] = 0;
|
||||||
|
_CloseStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _CloseStream()
|
||||||
|
{
|
||||||
|
if (_Stream != -1)
|
||||||
|
{
|
||||||
|
CSound.Close(_Stream);
|
||||||
|
_Stream = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
if (!Running)
|
||||||
|
return;
|
||||||
|
if (!_Timer.IsRunning)
|
||||||
|
{
|
||||||
|
if (CSound.GetPosition(_Stream) > 0f)
|
||||||
|
_Timer.Restart();
|
||||||
|
}
|
||||||
|
if (!_Timer.IsRunning)
|
||||||
|
return;
|
||||||
|
Console.WriteLine("Vol=" + CSound.RecordGetMaxVolume(0) + " Tone=" + CSound.RecordGetTone(0) + " Valid=" + CSound.RecordToneValid(0));
|
||||||
|
bool isActive = false;
|
||||||
|
if (_Timer.ElapsedMilliseconds <= _MaxDelayTime)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _DelaysChannel.Length; i++)
|
||||||
|
{
|
||||||
|
if (_DelaysChannel[i].Channel < 0 || _DelaysChannel[i].Finished)
|
||||||
|
continue;
|
||||||
|
if (CSound.RecordGetMaxVolume(_DelaysChannel[i].Channel) > 0.1f && CSound.RecordGetTone(_DelaysChannel[i].Channel) == 9)
|
||||||
|
{
|
||||||
|
Delays[i] = (int)_Timer.ElapsedMilliseconds;
|
||||||
|
_DelaysChannel[i].Finished = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
isActive = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isActive)
|
||||||
|
{
|
||||||
|
Running = false;
|
||||||
|
_CloseStream();
|
||||||
|
_Timer.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CScreenOptionsRecord : CMenu
|
class CScreenOptionsRecord : CMenu
|
||||||
@@ -40,7 +124,6 @@ namespace Vocaluxe.Screens
|
|||||||
get { return 4; }
|
get { return 4; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private const float _MaxDelayTime = 1f;
|
|
||||||
private const string _SelectSlideRecordDevices = "SelectSlideRecordDevices";
|
private const string _SelectSlideRecordDevices = "SelectSlideRecordDevices";
|
||||||
|
|
||||||
private const string _SelectSlideRecordChannel1 = "SelectSlideRecordChannel1";
|
private const string _SelectSlideRecordChannel1 = "SelectSlideRecordChannel1";
|
||||||
@@ -68,9 +151,7 @@ namespace Vocaluxe.Screens
|
|||||||
private ReadOnlyCollection<CRecordDevice> _Devices;
|
private ReadOnlyCollection<CRecordDevice> _Devices;
|
||||||
private int _DeviceNr;
|
private int _DeviceNr;
|
||||||
|
|
||||||
private SDelayTest[] _DelayTest;
|
private readonly CDelayTest _DelayTest = new CDelayTest();
|
||||||
private bool _DelayTestRunning;
|
|
||||||
private int _DelaySound;
|
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
@@ -224,46 +305,13 @@ namespace Vocaluxe.Screens
|
|||||||
for (int i = 0; i < CSettings.MaxNumPlayer; i++)
|
for (int i = 0; i < CSettings.MaxNumPlayer; i++)
|
||||||
CSound.AnalyzeBuffer(i);
|
CSound.AnalyzeBuffer(i);
|
||||||
|
|
||||||
if (_DelayTest != null)
|
if (_DelayTest.Running)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _DelayTest.Length - 1; i++)
|
_DelayTest.Update();
|
||||||
{
|
_Texts[_TextDelayChannel1].Text = _DelayTest.Delays[0].ToString("000") + " ms";
|
||||||
if (_DelayTestRunning && !_DelayTest[i].Timer.IsRunning)
|
_Texts[_TextDelayChannel2].Text = _DelayTest.Delays[1].ToString("000") + " ms";
|
||||||
{
|
|
||||||
if (CSound.GetPosition(_DelaySound) > 0f)
|
|
||||||
{
|
|
||||||
_DelayTest[i].Timer.Reset();
|
|
||||||
_DelayTest[i].Timer.Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_DelayTest[i].Timer.IsRunning)
|
|
||||||
{
|
|
||||||
int player = 0;
|
|
||||||
if (i == 0)
|
|
||||||
player = _SelectSlides[_SelectSlideRecordChannel1].Selection;
|
|
||||||
|
|
||||||
if (i == 1)
|
|
||||||
player = _SelectSlides[_SelectSlideRecordChannel2].Selection;
|
|
||||||
|
|
||||||
if (_DelayTest[i].Timer.ElapsedMilliseconds > _MaxDelayTime * 1000f || player == 0)
|
|
||||||
{
|
|
||||||
_DelayTest[i].Delay = 0f;
|
|
||||||
_DelayTest[i].Timer.Stop();
|
|
||||||
_DelayTestRunning = false;
|
|
||||||
}
|
|
||||||
else if (CSound.RecordGetMaxVolume(player - 1) > 0.1f && CSound.RecordGetToneAbs(player - 1) % 12 == 9)
|
|
||||||
{
|
|
||||||
_DelayTest[i].Delay = _DelayTest[i].Timer.ElapsedMilliseconds;
|
|
||||||
_DelayTest[i].Timer.Stop();
|
|
||||||
_DelayTestRunning = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_Texts[_TextDelayChannel1].Text = _DelayTest[0].Delay.ToString("000") + " ms";
|
|
||||||
_Texts[_TextDelayChannel2].Text = _DelayTest[1].Delay.ToString("000") + " ms";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (_CheckMicConfig())
|
if (_CheckMicConfig())
|
||||||
{
|
{
|
||||||
_ChannelEnergy[0] = 0f;
|
_ChannelEnergy[0] = 0f;
|
||||||
@@ -327,21 +375,9 @@ namespace Vocaluxe.Screens
|
|||||||
_Statics[_StaticWarning].Visible = false;
|
_Statics[_StaticWarning].Visible = false;
|
||||||
_Texts[_TextWarning].Visible = false;
|
_Texts[_TextWarning].Visible = false;
|
||||||
|
|
||||||
_DelayTest = null;
|
_DelayTest.Reset();
|
||||||
if (_Devices != null)
|
|
||||||
{
|
|
||||||
_DelayTest = new SDelayTest[2];
|
|
||||||
for (int i = 0; i < _DelayTest.Length - 1; i++)
|
|
||||||
{
|
|
||||||
_DelayTest[i].Timer = new Stopwatch();
|
|
||||||
_DelayTest[i].Delay = 0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_SelectSlides[_SelectSlideDelay].Selection = CConfig.MicDelay / 20;
|
_SelectSlides[_SelectSlideDelay].Selection = CConfig.MicDelay / 20;
|
||||||
|
|
||||||
_DelayTestRunning = false;
|
|
||||||
_DelaySound = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnShowFinish()
|
public override void OnShowFinish()
|
||||||
@@ -393,7 +429,7 @@ namespace Vocaluxe.Screens
|
|||||||
base.OnClose();
|
base.OnClose();
|
||||||
CSound.RecordStop();
|
CSound.RecordStop();
|
||||||
|
|
||||||
_DelayTest = null;
|
_DelayTest.Reset();
|
||||||
CBackgroundMusic.Disabled = false;
|
CBackgroundMusic.Disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,11 +541,7 @@ namespace Vocaluxe.Screens
|
|||||||
{
|
{
|
||||||
_SaveMicConfig();
|
_SaveMicConfig();
|
||||||
|
|
||||||
if (_DelayTest == null)
|
_DelayTest.Start(new int[] {_SelectSlides[_SelectSlideRecordChannel1].Selection - 1, _SelectSlides[_SelectSlideRecordChannel2].Selection - 1});
|
||||||
return;
|
|
||||||
|
|
||||||
_DelaySound = CSound.PlaySound(ESounds.T440);
|
|
||||||
_DelayTestRunning = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _GetFirstConfiguredRecordDevice(ref int device)
|
private void _GetFirstConfiguredRecordDevice(ref int device)
|
||||||
|
|||||||
Reference in new issue
Block a user