appearantly this is working
This commit is contained in:
parent
c748985f3d
commit
e417ff18a0
5 changed files with 234 additions and 38 deletions
|
|
@ -5,14 +5,16 @@
|
|||
|
||||
static void* audio;
|
||||
pthread_mutex_t audio_mutex;
|
||||
queue_t* queue = NULL;
|
||||
queue_t* queue = NULL;
|
||||
int queue_seek = -1;
|
||||
int paused = 0;
|
||||
|
||||
static void handler(void* handle, void* user, void* data, int frames) {
|
||||
memset(data, 0, frames * 2 * 2);
|
||||
|
||||
pthread_mutex_lock(&audio_mutex);
|
||||
if(arrlen(queue) > 0) {
|
||||
int from_frames = frames * queue[0].sfi.samplerate / MDEAudioRate;
|
||||
if(queue_seek != -1 && !paused) {
|
||||
int from_frames = frames * queue[queue_seek].sfi.samplerate / MDEAudioRate;
|
||||
float* from = malloc(from_frames * sizeof(*from) * 2);
|
||||
float* to = malloc(frames * sizeof(*to) * 2);
|
||||
SRC_DATA d;
|
||||
|
|
@ -22,18 +24,21 @@ static void handler(void* handle, void* user, void* data, int frames) {
|
|||
d.data_out = to;
|
||||
d.input_frames = from_frames;
|
||||
d.output_frames = frames;
|
||||
d.src_ratio = (double)MDEAudioRate / queue[0].sfi.samplerate;
|
||||
d.src_ratio = (double)MDEAudioRate / queue[queue_seek].sfi.samplerate;
|
||||
|
||||
f = sf_readf_float(queue[0].sf, from, from_frames);
|
||||
f = sf_readf_float(queue[queue_seek].sf, from, from_frames);
|
||||
src_simple(&d, SRC_SINC_BEST_QUALITY, 2);
|
||||
src_float_to_short_array(to, data, frames * 2);
|
||||
queue[0].frames += f;
|
||||
queue[queue_seek].frames += f;
|
||||
|
||||
free(from);
|
||||
free(to);
|
||||
|
||||
if(f < from_frames) {
|
||||
arrdel(queue, 0);
|
||||
queue_seek++;
|
||||
if(queue_seek >= arrlen(queue)) {
|
||||
queue_seek = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&audio_mutex);
|
||||
|
|
@ -55,5 +60,8 @@ void audio_queue(const char* path) {
|
|||
|
||||
pthread_mutex_lock(&audio_mutex);
|
||||
arrput(queue, q);
|
||||
if(queue_seek == -1) queue_seek = arrlen(queue) - 1;
|
||||
|
||||
ui_set_play_queue(arrlen(queue));
|
||||
pthread_mutex_unlock(&audio_mutex);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue