Move some DSPish code into functions in dsp.c
This commit is contained in:
parent
424b68f044
commit
928780a820
|
@ -68,7 +68,7 @@ Audio_File::read_peaks( float fpp, nframes_t start, nframes_t end, int *peaks, P
|
|||
|
||||
*pbuf = new Peak[ *peaks * *channels ];
|
||||
|
||||
/* deinterlace */
|
||||
/* deintereave peaks */
|
||||
int k = 0;
|
||||
for ( int i = 0; i < *channels; i++ )
|
||||
for ( int j = i; j < *peaks * *channels; j += *channels )
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
#include "Audio_Track.H"
|
||||
|
||||
#include "dsp.h"
|
||||
|
||||
#include <Fl/fl_ask.H>
|
||||
|
||||
static
|
||||
|
@ -142,18 +144,9 @@ Audio_Track::play ( sample_t *buf, nframes_t frame, nframes_t nframes, int chann
|
|||
continue;
|
||||
|
||||
if ( channels == 1 )
|
||||
{
|
||||
// memcpy( buf, cbuf, nframes * sizeof( sample_t ) );
|
||||
for ( unsigned int j = 0; j < nfr; ++j )
|
||||
buf[ j ] += cbuf[ j ];
|
||||
}
|
||||
buffer_mix( buf, cbuf, nframes );
|
||||
else
|
||||
{
|
||||
/* mix and interleave */
|
||||
int k = 0;
|
||||
for ( unsigned int j = i; k < nfr; j += channels )
|
||||
buf[ j ] += cbuf[ k++ ];
|
||||
}
|
||||
buffer_interleave_one_channel_and_mix( buf, cbuf, i, channels, nframes );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ SRCS= \
|
|||
Audio_File_SF.C \
|
||||
Port.C \
|
||||
Disk_Stream.C \
|
||||
dsp.c \
|
||||
Engine.C \
|
||||
Transport.C \
|
||||
Loggable.C \
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include "Timeline.H"
|
||||
#include "Waveform.H"
|
||||
|
||||
#include "dsp.h"
|
||||
|
||||
#include <FL/fl_draw.H>
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Group.H>
|
||||
|
@ -850,9 +852,7 @@ Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channel ) co
|
|||
|
||||
/* apply gain */
|
||||
|
||||
if ( _scale != 1.0f )
|
||||
for ( int i = cnt; i--; )
|
||||
buf[i] *= _scale;
|
||||
buffer_apply_gain( buf, cnt, _scale );
|
||||
|
||||
/* perform declicking if necessary */
|
||||
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
|
||||
/*******************************************************************************/
|
||||
/* Copyright (C) 2008 Jonathan Moore Liles */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify it */
|
||||
/* under the terms of the GNU General Public License as published by the */
|
||||
/* Free Software Foundation; either version 2 of the License, or (at your */
|
||||
/* option) any later version. */
|
||||
/* */
|
||||
/* This program is distributed in the hope that it will be useful, but WITHOUT */
|
||||
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
|
||||
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */
|
||||
/* more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU General Public License along */
|
||||
/* with This program; see the file COPYING. If not,write to the Free Software */
|
||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
/*******************************************************************************/
|
||||
|
||||
/* General DSP related functions. */
|
||||
|
||||
#include "dsp.h"
|
||||
|
||||
/* TODO: these functions are all targets for optimization (SSE?) */
|
||||
|
||||
void
|
||||
buffer_apply_gain ( sample_t *buf, nframes_t nframes, float g )
|
||||
{
|
||||
if ( g != 1.0f )
|
||||
while ( nframes-- )
|
||||
*(buf++) *= g;
|
||||
}
|
||||
|
||||
void
|
||||
buffer_apply_gain_buffer ( sample_t *buf, sample_t *gainbuf, nframes_t nframes )
|
||||
{
|
||||
while ( nframes-- )
|
||||
*(buf++) *= *(gainbuf++);
|
||||
}
|
||||
|
||||
void
|
||||
buffer_mix ( sample_t *dst, sample_t *src, nframes_t nframes )
|
||||
{
|
||||
while ( nframes-- )
|
||||
*(dst++) += *(src++);
|
||||
}
|
||||
|
||||
void
|
||||
buffer_mix_with_gain ( sample_t *dst, sample_t *src, nframes_t nframes, float g )
|
||||
{
|
||||
while ( nframes-- )
|
||||
*(dst++) += *(src++) * g;
|
||||
}
|
||||
|
||||
void
|
||||
buffer_interleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes )
|
||||
{
|
||||
nframes *= channels;
|
||||
|
||||
dst += channel;
|
||||
|
||||
while ( nframes-- )
|
||||
{
|
||||
*dst = *(src++);
|
||||
dst += channels;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
buffer_interleave_one_channel_and_mix ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes )
|
||||
{
|
||||
nframes *= channels;
|
||||
|
||||
dst += channel;
|
||||
|
||||
while ( nframes-- )
|
||||
{
|
||||
*dst += *(src++);
|
||||
dst += channels;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
buffer_deinterleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes )
|
||||
{
|
||||
nframes *= channels;
|
||||
src += channel;
|
||||
|
||||
while ( nframes-- )
|
||||
{
|
||||
*(dst++) = *src;
|
||||
src += channels;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
/*******************************************************************************/
|
||||
/* Copyright (C) 2008 Jonathan Moore Liles */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify it */
|
||||
/* under the terms of the GNU General Public License as published by the */
|
||||
/* Free Software Foundation; either version 2 of the License, or (at your */
|
||||
/* option) any later version. */
|
||||
/* */
|
||||
/* This program is distributed in the hope that it will be useful, but WITHOUT */
|
||||
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
|
||||
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */
|
||||
/* more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU General Public License along */
|
||||
/* with This program; see the file COPYING. If not,write to the Free Software */
|
||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
/*******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
void buffer_apply_gain ( sample_t *buf, nframes_t nframes, float g );
|
||||
void buffer_apply_gain_buffer ( sample_t *buf, sample_t *gainbuf, nframes_t nframes );
|
||||
void buffer_mix ( sample_t *dst, sample_t *src, nframes_t nframes );
|
||||
void buffer_mix_with_gain ( sample_t *dst, sample_t *src, nframes_t nframes, float g );
|
||||
void buffer_interleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes );
|
||||
void buffer_interleave_one_channel_and_mix ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes );
|
||||
void buffer_deinterleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes );
|
Loading…
Reference in New Issue