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()
|
void CBitVis::ProcessAudio()
|
||||||
{
|
{
|
||||||
const int bins = 1024;
|
const int bins = 1024;
|
||||||
const int lines = 46;
|
const int lines = 40;
|
||||||
const float decay = 0.5;
|
const float decay = 0.5;
|
||||||
int samplerate;
|
int samplerate;
|
||||||
int samples;
|
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);
|
m_fft.Allocate(bins * 2);
|
||||||
if (!m_fftbuf)
|
if (!m_fftbuf)
|
||||||
|
@ -248,7 +249,14 @@ void CBitVis::ProcessAudio()
|
||||||
start = next;
|
start = next;
|
||||||
add += increase;
|
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);
|
fflush(stdout);
|
||||||
|
|
||||||
memset(m_fftbuf, 0, bins * sizeof(float));
|
memset(m_fftbuf, 0, bins * sizeof(float));
|
||||||
|
|
|
@ -50,6 +50,7 @@ CJackClient::CJackClient()
|
||||||
m_bufsize = 0;
|
m_bufsize = 0;
|
||||||
m_srcstate = NULL;
|
m_srcstate = NULL;
|
||||||
m_outsamples = 0;
|
m_outsamples = 0;
|
||||||
|
m_audiotime = 0;
|
||||||
|
|
||||||
if (pipe2(m_pipe, O_NONBLOCK) == -1)
|
if (pipe2(m_pipe, O_NONBLOCK) == -1)
|
||||||
{
|
{
|
||||||
|
@ -249,6 +250,9 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes)
|
||||||
|
|
||||||
CLock lock(m_condition);
|
CLock lock(m_condition);
|
||||||
|
|
||||||
|
if (m_outsamples == 0)
|
||||||
|
m_audiotime = GetTimeUs();
|
||||||
|
|
||||||
float* jackptr = (float*)jack_port_get_buffer(m_jackport, nframes);
|
float* jackptr = (float*)jack_port_get_buffer(m_jackport, nframes);
|
||||||
|
|
||||||
SRC_DATA srcdata = {};
|
SRC_DATA srcdata = {};
|
||||||
|
@ -265,7 +269,7 @@ void CJackClient::PJackProcessCallback(jack_nframes_t nframes)
|
||||||
m_condition.Signal();
|
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);
|
CLock lock(m_condition);
|
||||||
m_condition.Wait(1000000, m_outsamples, 0);
|
m_condition.Wait(1000000, m_outsamples, 0);
|
||||||
|
@ -286,6 +290,8 @@ int CJackClient::GetAudio(float*& buf, int& bufsize, int& samplerate)
|
||||||
int outsamples = m_outsamples;
|
int outsamples = m_outsamples;
|
||||||
m_outsamples = 0;
|
m_outsamples = 0;
|
||||||
|
|
||||||
|
audiotime = m_audiotime;
|
||||||
|
|
||||||
return outsamples;
|
return outsamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "fft.h"
|
#include "fft.h"
|
||||||
#include "clientmessage.h"
|
#include "clientmessage.h"
|
||||||
#include "util/condition.h"
|
#include "util/condition.h"
|
||||||
|
#include "util/inclstdint.h"
|
||||||
|
|
||||||
class CJackClient
|
class CJackClient
|
||||||
{
|
{
|
||||||
|
@ -44,7 +45,7 @@ class CJackClient
|
||||||
const std::string& ExitReason() { return m_exitreason; }
|
const std::string& ExitReason() { return m_exitreason; }
|
||||||
|
|
||||||
int Samplerate() { return m_samplerate; }
|
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:
|
private:
|
||||||
bool m_connected;
|
bool m_connected;
|
||||||
|
@ -63,6 +64,7 @@ class CJackClient
|
||||||
unsigned int m_bufsize;
|
unsigned int m_bufsize;
|
||||||
SRC_STATE* m_srcstate;
|
SRC_STATE* m_srcstate;
|
||||||
int m_outsamples;
|
int m_outsamples;
|
||||||
|
int64_t m_audiotime;
|
||||||
|
|
||||||
bool ConnectInternal();
|
bool ConnectInternal();
|
||||||
void CheckMessages();
|
void CheckMessages();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue