set framecount in portaudio record to 882 (~20ms),

copy analysis buffer only if needed
This commit is contained in:
Alexander Eckart committed 2012-05-02 20:23:25 +02:00
1 parent b2ebf20c5f
commit b056ab1ce8
2 files changed
+31 -66

No files matched your search

+30 -65
View File
@@ -302,7 +302,7 @@ namespace Vocaluxe.Base
private int _Tone = 0; private int _Tone = 0;
private int _ToneAbs = 0; private int _ToneAbs = 0;
private double _MaxVolume = 0.0; private double _MaxVolume = 0.0;
private bool _NewSamples = false; private bool _NewSamples;
private MemoryStream _Stream; // full buffer private MemoryStream _Stream; // full buffer
@@ -310,6 +310,7 @@ namespace Vocaluxe.Base
{ {
_ToneWeigth = new float[_NumHalfTones]; _ToneWeigth = new float[_NumHalfTones];
_Stream = new MemoryStream(); _Stream = new MemoryStream();
_NewSamples = false;
} }
public int NumHalfTones public int NumHalfTones
@@ -417,14 +418,24 @@ namespace Vocaluxe.Base
lock (_AnalysisBufferLock) lock (_AnalysisBufferLock)
{ {
Add(buffer); Add(buffer);
_NewSamples = true;
}
}
public void AnalyzeBuffer()
{
if (!_NewSamples)
return;
lock (_AnalysisBufferLock)
{
int len = _AnalysisBuffer.Length * 2; int len = _AnalysisBuffer.Length * 2;
if (_Stream.Length >= len) if (_Stream.Length >= len)
{ {
byte[] buf = new byte[len]; byte[] buf = new byte[len];
_Stream.Position -= len; _Stream.Position -= len;
_Stream.Read(buf, 0, len); _Stream.Read(buf, 0, len);
byte[] b = new byte[2]; byte[] b = new byte[2];
for (int i = 0; i < _AnalysisBuffer.Length; i++) for (int i = 0; i < _AnalysisBuffer.Length; i++)
{ {
@@ -433,40 +444,30 @@ namespace Vocaluxe.Base
_AnalysisBuffer[i] = BitConverter.ToInt16(b, 0); _AnalysisBuffer[i] = BitConverter.ToInt16(b, 0);
} }
_NewSamples = true;
} }
_NewSamples = false;
} }
}
public void AnalyzeBuffer() try
{
lock (_AnalysisBufferLock)
{ {
if (!_NewSamples) // find maximum volume
return; _MaxVolume = 0;
for (int i = 0; i < _AnalysisBuffer.Length / 4; i++)
try
{ {
// find maximum volume float Volume = Math.Abs((float)_AnalysisBuffer[i]) / (float)Int16.MaxValue;
_MaxVolume = 0; if (Volume > MaxVolume)
for (int i = 0; i < _AnalysisBuffer.Length/4; i++) _MaxVolume = Volume;
{
float Volume = Math.Abs((float)_AnalysisBuffer[i]) / (float)Int16.MaxValue;
if (Volume > MaxVolume)
_MaxVolume = Volume;
}
if (_MaxVolume >= 0.02f)
AnalyzeByAutocorrelation(true);
else
AnalyzeByAutocorrelation(false);
_NewSamples = false;
} }
catch (Exception)
{
} if (_MaxVolume >= 0.02f)
AnalyzeByAutocorrelation(true);
else
AnalyzeByAutocorrelation(false);
}
catch (Exception)
{
} }
} }
@@ -515,42 +516,6 @@ namespace Vocaluxe.Base
} }
else else
_ToneValid = false; _ToneValid = false;
/*
if (valid && MaxWeight - MinWeight > 0.01)
{
int m = -1;
float prev = -1f;
bool raising = false;
for (int i = 0; i < Weigth.Length; i++)
{
if (i > 0 && Weigth[i] > prev)
raising = true;
if (Weigth[i] < prev && raising)
{
m = i-1;
MaxTone = i-1;
raising = false;
}
prev = Weigth[i];
_ToneWeigth[i] = Weigth[i];
}
if (m != -1)
{
_ToneAbs = MaxTone;
_Tone = MaxTone % 12;
_ToneValid = true;
}
else
_ToneValid = false;
}
else
_ToneValid = false;
* */
} }
private double AnalyzeAutocorrelationFreq(double Freq) private double AnalyzeAutocorrelationFreq(double Freq)
+1 -1
View File
@@ -153,7 +153,7 @@ namespace Vocaluxe.Lib.Sound
ref inputParams, ref inputParams,
IntPtr.Zero, IntPtr.Zero,
44100, 44100,
1024, 882,
PortAudio.PaStreamFlags.paNoFlag, PortAudio.PaStreamFlags.paNoFlag,
_myRecProc, _myRecProc,
new IntPtr(i)))) new IntPtr(i))))