added: frame timing
This commit is contained in:
parent
501b3ddabc
commit
10c55c8db4
3 changed files with 21 additions and 5 deletions
|
@ -181,11 +181,12 @@ void CBitVis::ProcessSignalfd()
|
|||
void CBitVis::ProcessAudio()
|
||||
{
|
||||
const int bins = 1024;
|
||||
const int lines = 46;
|
||||
const int lines = 40;
|
||||
const float decay = 0.5;
|
||||
int samplerate;
|
||||
int samples;
|
||||
if ((samples = m_jackclient.GetAudio(m_buf, m_bufsize, samplerate)) > 0)
|
||||
int64_t audiotime;
|
||||
if ((samples = m_jackclient.GetAudio(m_buf, m_bufsize, samplerate, audiotime)) > 0)
|
||||
{
|
||||
m_fft.Allocate(bins * 2);
|
||||
if (!m_fftbuf)
|
||||
|
@ -248,7 +249,14 @@ void CBitVis::ProcessAudio()
|
|||
start = next;
|
||||
add += increase;
|
||||
}
|
||||
printf("start\n%send\n", out.c_str());
|
||||
|
||||
int64_t sleeptime = audiotime + Round64(1000000.0 / (double)samplerate * (double)i) - GetTimeUs();
|
||||
USleep(sleeptime);
|
||||
static int64_t prev;
|
||||
int64_t now = GetTimeUs();
|
||||
int64_t interval = now - prev;
|
||||
prev = now;
|
||||
printf("samples:%i\nsleeptime:%" PRIi64"\ninterval:%" PRIi64 "\nstart\n%send\n", samples, sleeptime, interval, out.c_str());
|
||||
fflush(stdout);
|
||||
|
||||
memset(m_fftbuf, 0, bins * sizeof(float));
|
||||
|
|
|
@ -50,6 +50,7 @@ CJackClient::CJackClient()
|
|||
m_bufsize = 0;
|
||||
m_srcstate = NULL;
|
||||
m_outsamples = 0;
|
||||
m_audiotime = 0;
|
||||
|
||||
if (pipe2(m_pipe, O_NONBLOCK) == -1)
|
||||
{
|
||||
|
@ -249,6 +250,9 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes)
|
|||
|
||||
CLock lock(m_condition);
|
||||
|
||||
if (m_outsamples == 0)
|
||||
m_audiotime = GetTimeUs();
|
||||
|
||||
float* jackptr = (float*)jack_port_get_buffer(m_jackport, nframes);
|
||||
|
||||
SRC_DATA srcdata = {};
|
||||
|
@ -265,7 +269,7 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes)
|
|||
m_condition.Signal();
|
||||
}
|
||||
|
||||
int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate)
|
||||
int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate, int64_t& audiotime)
|
||||
{
|
||||
CLock lock(m_condition);
|
||||
m_condition.Wait(1000000, m_outsamples, 0);
|
||||
|
@ -286,6 +290,8 @@ int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate)
|
|||
int outsamples = m_outsamples;
|
||||
m_outsamples = 0;
|
||||
|
||||
audiotime = m_audiotime;
|
||||
|
||||
return outsamples;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "fft.h"
|
||||
#include "clientmessage.h"
|
||||
#include "util/condition.h"
|
||||
#include "util/inclstdint.h"
|
||||
|
||||
class CJackClient
|
||||
{
|
||||
|
@ -44,7 +45,7 @@ class CJackClient
|
|||
const std::string& ExitReason() { return m_exitreason; }
|
||||
|
||||
int Samplerate() { return m_samplerate; }
|
||||
int GetAudio(float*& buf, int& bufsize, int& samplerate);
|
||||
int GetAudio(float*& buf, int& bufsize, int& samplerate, int64_t& audiotime);
|
||||
|
||||
private:
|
||||
bool m_connected;
|
||||
|
@ -63,6 +64,7 @@ class CJackClient
|
|||
unsigned int m_bufsize;
|
||||
SRC_STATE* m_srcstate;
|
||||
int m_outsamples;
|
||||
int64_t m_audiotime;
|
||||
|
||||
bool ConnectInternal();
|
||||
void CheckMessages();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue