Replace Clip class with Audio_File abstract class who's children are interfaces to
various libraries.
This commit is contained in:
parent
8b92eb9318
commit
97b344d3dd
|
@ -0,0 +1,43 @@
|
|||
|
||||
/*******************************************************************************/
|
||||
/* 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. */
|
||||
/*******************************************************************************/
|
||||
|
||||
#include "Audio_File.H"
|
||||
#include "Audio_File_SF.H"
|
||||
|
||||
/** attmpet to open any supported filetype */
|
||||
Audio_File *
|
||||
Audio_File::from_file ( const char * filename )
|
||||
{
|
||||
|
||||
Audio_File *a;
|
||||
|
||||
if ( ( a = Audio_File_SF::from_file( filename ) ) )
|
||||
goto done;
|
||||
|
||||
a->_peaks.open();
|
||||
|
||||
// TODO: other formats
|
||||
|
||||
return NULL;
|
||||
|
||||
done:
|
||||
|
||||
a->_peaks.open();
|
||||
return a;
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
|
||||
/*******************************************************************************/
|
||||
/* 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
|
||||
|
||||
/* Base class for all audio file library interfaces */
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef unsigned long nframes_t;
|
||||
typedef float sample_t;
|
||||
|
||||
#include "Peaks.H"
|
||||
|
||||
class Audio_File
|
||||
{
|
||||
|
||||
protected:
|
||||
|
||||
Peaks _peaks;
|
||||
const char *_filename;
|
||||
nframes_t _length; /* length of file in samples */
|
||||
|
||||
public:
|
||||
|
||||
Audio_File ( ) : _peaks( this )
|
||||
{
|
||||
_filename = NULL;
|
||||
_length = 0;
|
||||
}
|
||||
|
||||
static Audio_File *from_file ( const char *filename );
|
||||
|
||||
Peaks const * peaks ( void ) { return &_peaks; }
|
||||
const char *name ( void ) { return _filename; }
|
||||
nframes_t length ( void ) { return _length; }
|
||||
|
||||
// Peaks const * peaks ( void ) { return &_peaks; }
|
||||
|
||||
virtual bool open ( void ) = 0;
|
||||
virtual void close ( void ) = 0;
|
||||
virtual void seek ( nframes_t offset ) = 0;
|
||||
virtual nframes_t read ( sample_t *buf, nframes_t len ) = 0;
|
||||
virtual nframes_t read ( sample_t *buf, nframes_t start, nframes_t end ) = 0;
|
||||
|
||||
};
|
|
@ -17,7 +17,7 @@
|
|||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
/*******************************************************************************/
|
||||
|
||||
#include "Clip.H"
|
||||
#include "Audio_File_SF.H"
|
||||
#include "Timeline.H"
|
||||
|
||||
#include <sndfile.h>
|
||||
|
@ -25,56 +25,13 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
Clip::Clip ( void ) : _peaks( this )
|
||||
{
|
||||
_filename = NULL;
|
||||
_length = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Clip::Clip ( const char *filename ) : _peaks( this ) */
|
||||
/* { */
|
||||
/* _filename = filename; */
|
||||
|
||||
/* SNDFILE *in; */
|
||||
/* SF_INFO si; */
|
||||
|
||||
/* memset( &si, 0, sizeof( si ) ); */
|
||||
|
||||
/* if ( ! ( in = sf_open( filename, SFM_READ, &si ) ) ) */
|
||||
/* { */
|
||||
/* printf( "couldn't open file\n" ); */
|
||||
/* return; */
|
||||
/* } */
|
||||
|
||||
/* if ( si.channels != 1 ) */
|
||||
/* { */
|
||||
/* printf( "error: incompatible format\n" ); */
|
||||
/* return; */
|
||||
/* } */
|
||||
|
||||
/* if ( si.samplerate != timeline->sample_rate ) */
|
||||
/* { */
|
||||
/* printf( "error: samplerate mismatch!\n" ); */
|
||||
/* return; */
|
||||
/* } */
|
||||
|
||||
/* _length = si.frames; */
|
||||
|
||||
/* sf_close( in ); */
|
||||
|
||||
/* _peaks.open(); */
|
||||
/* } */
|
||||
|
||||
|
||||
Clip *
|
||||
Clip::from_file ( const char *filename )
|
||||
Audio_File_SF *
|
||||
Audio_File_SF::from_file ( const char *filename )
|
||||
{
|
||||
SNDFILE *in;
|
||||
SF_INFO si;
|
||||
|
||||
Clip *c = NULL;
|
||||
Audio_File_SF *c = NULL;
|
||||
|
||||
memset( &si, 0, sizeof( si ) );
|
||||
|
||||
|
@ -96,18 +53,15 @@ Clip::from_file ( const char *filename )
|
|||
goto invalid;
|
||||
}
|
||||
|
||||
c = new Clip;
|
||||
c = new Audio_File_SF;
|
||||
|
||||
c->_filename = filename;
|
||||
c->_length = si.frames;
|
||||
|
||||
sf_close( in );
|
||||
|
||||
c->_peaks.open();
|
||||
|
||||
return c;
|
||||
|
||||
|
||||
invalid:
|
||||
|
||||
sf_close( in );
|
||||
|
@ -115,7 +69,7 @@ invalid:
|
|||
}
|
||||
|
||||
bool
|
||||
Clip::open ( void )
|
||||
Audio_File_SF::open ( void )
|
||||
{
|
||||
SF_INFO si;
|
||||
|
||||
|
@ -128,27 +82,26 @@ Clip::open ( void )
|
|||
}
|
||||
|
||||
void
|
||||
Clip::close ( void )
|
||||
Audio_File_SF::close ( void )
|
||||
{
|
||||
sf_close( _in );
|
||||
}
|
||||
|
||||
void
|
||||
Clip::seek ( nframes_t offset )
|
||||
Audio_File_SF::seek ( nframes_t offset )
|
||||
{
|
||||
sf_seek( _in, offset, SEEK_SET );
|
||||
}
|
||||
|
||||
|
||||
nframes_t
|
||||
Clip::read ( sample_t *buf, nframes_t len )
|
||||
Audio_File_SF::read ( sample_t *buf, nframes_t len )
|
||||
{
|
||||
return sf_read_float ( _in, buf, len );
|
||||
}
|
||||
|
||||
/** read samples from /start/ to /end/ into /buf/ */
|
||||
nframes_t
|
||||
Clip::read ( sample_t *buf, nframes_t start, nframes_t end )
|
||||
Audio_File_SF::read ( sample_t *buf, nframes_t start, nframes_t end )
|
||||
{
|
||||
open();
|
||||
|
|
@ -17,36 +17,19 @@
|
|||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
/*******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
typedef unsigned long nframes_t;
|
||||
typedef float sample_t;
|
||||
|
||||
#include "Peaks.H"
|
||||
#include "Audio_File.H"
|
||||
|
||||
#include <sndfile.h>
|
||||
|
||||
class Clip
|
||||
class Audio_File_SF : public Audio_File
|
||||
{
|
||||
const char *_filename;
|
||||
|
||||
Peaks _peaks;
|
||||
|
||||
nframes_t _length; /* length of clip in samples */
|
||||
// Audio_File_SF ( const char *filename )
|
||||
|
||||
SNDFILE *_in;
|
||||
|
||||
public:
|
||||
|
||||
Clip ( );
|
||||
|
||||
// Clip ( const char *filename );
|
||||
|
||||
static Clip *from_file ( const char *filename );
|
||||
|
||||
Peaks const * peaks ( void ) { return &_peaks; }
|
||||
const char *name ( void ) { return _filename; }
|
||||
nframes_t length ( void ) { return _length; }
|
||||
static Audio_File_SF *from_file ( const char *filename );
|
||||
|
||||
bool open ( void );
|
||||
void close ( void );
|
|
@ -66,7 +66,7 @@ public:
|
|||
|
||||
printf( "pasted file \"%s\"\n", file );
|
||||
|
||||
Clip *c = Clip::from_file( file );
|
||||
Audio_File *c = Audio_File::from_file( file );
|
||||
|
||||
if ( ! c )
|
||||
{
|
||||
|
|
4
Makefile
4
Makefile
|
@ -5,7 +5,7 @@ CXXFLAGS=-ggdb -Wall -O0
|
|||
LIBS=-lsndfile `fltk-config --ldflags`
|
||||
# CXXFLAGS=`fltk-config -cxxflags`
|
||||
|
||||
SRCS= Clip.C Waveform.C Region.C Peaks.C main.C Track.C Timeline.C
|
||||
SRCS= Waveform.C Region.C Peaks.C main.C Track.C Timeline.C Audio_File.C Audio_File_SF.C
|
||||
|
||||
OBJS=$(SRCS:.C=.o)
|
||||
|
||||
|
@ -24,7 +24,7 @@ test: $(OBJS)
|
|||
$(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) test
|
||||
rm -f $(OBJS) test makedepend
|
||||
|
||||
valgrind:
|
||||
valgrind ./test
|
||||
|
|
2
Peaks.C
2
Peaks.C
|
@ -31,7 +31,7 @@
|
|||
|
||||
#include <sndfile.h>
|
||||
|
||||
#include "Clip.H"
|
||||
#include "Audio_File.H"
|
||||
|
||||
#include "assert.h"
|
||||
|
||||
|
|
8
Peaks.H
8
Peaks.H
|
@ -28,7 +28,7 @@ struct Peak {
|
|||
float max;
|
||||
};
|
||||
|
||||
class Clip;
|
||||
class Audio_File;
|
||||
|
||||
class Peaks
|
||||
{
|
||||
|
@ -56,7 +56,7 @@ class Peaks
|
|||
|
||||
static peakbuffer peakbuf;
|
||||
|
||||
Clip *_clip;
|
||||
Audio_File *_clip;
|
||||
|
||||
peakdata *_peaks;
|
||||
|
||||
|
@ -67,9 +67,11 @@ class Peaks
|
|||
|
||||
Peak & peak ( nframes_t start, nframes_t end ) const;
|
||||
|
||||
Peaks ( );
|
||||
|
||||
public:
|
||||
|
||||
Peaks ( Clip *c )
|
||||
Peaks ( Audio_File *c )
|
||||
{
|
||||
_peaks = new peakdata;
|
||||
|
||||
|
|
2
Region.C
2
Region.C
|
@ -81,7 +81,7 @@ Region::Region ( const Region & rhs )
|
|||
_scale = rhs._scale;
|
||||
}
|
||||
|
||||
Region::Region ( Clip *c )
|
||||
Region::Region ( Audio_File *c )
|
||||
{
|
||||
init();
|
||||
_clip = c;
|
||||
|
|
6
Region.H
6
Region.H
|
@ -23,7 +23,7 @@
|
|||
|
||||
// #include "Waveform.H"
|
||||
|
||||
#include "Clip.H"
|
||||
#include "Audio_File.H"
|
||||
#include "Track.H"
|
||||
#include "Timeline.H"
|
||||
|
||||
|
@ -38,7 +38,7 @@ using namespace std;
|
|||
class Region : public Track_Widget
|
||||
{
|
||||
|
||||
Clip *_clip; /* clip this region represents */
|
||||
Audio_File *_clip; /* clip this region represents */
|
||||
|
||||
float _scale; /* amplitude adjustment */
|
||||
|
||||
|
@ -56,7 +56,7 @@ public:
|
|||
Fl_Boxtype box ( void ) const { return Region::_box; }
|
||||
|
||||
Region ( const Region & rhs );
|
||||
Region ( Clip *c );
|
||||
Region ( Audio_File *c );
|
||||
|
||||
int handle ( int m );
|
||||
void draw_box( int X, int Y, int W, int H );
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <FL/Fl_Scrollbar.H>
|
||||
#include <FL/Fl_Widget.H>
|
||||
|
||||
#include "Clip.H"
|
||||
#include "Audio_File.H" // just for nframes_t
|
||||
#include <math.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
|
17
Waveform.C
17
Waveform.C
|
@ -24,27 +24,14 @@
|
|||
#include <FL/fl_draw.H>
|
||||
|
||||
#include "Timeline.H"
|
||||
// #include "Waveform.H"
|
||||
#include "Clip.H"
|
||||
#include "Audio_File.H"
|
||||
|
||||
// extern Timeline timeline;
|
||||
// #include "Timeline.H"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* void */
|
||||
/* Waveform::draw ( void ) */
|
||||
/* { */
|
||||
/* int X, Y, W, H; */
|
||||
|
||||
/* fl_clip_box( x(), y(), w(), h(), X, Y, W, H ); */
|
||||
|
||||
/* draw( X, y(), W, h() ); */
|
||||
/* } */
|
||||
|
||||
/** draw a portion of /clip/'s waveform. coordinates are the portion to draw */
|
||||
void
|
||||
draw_waveform ( int X, int Y, int W, int H, Clip *_clip, nframes_t _start, nframes_t _end, float _scale, Fl_Color color )
|
||||
draw_waveform ( int X, int Y, int W, int H, Audio_File *_clip, nframes_t _start, nframes_t _end, float _scale, Fl_Color color )
|
||||
{
|
||||
fl_push_clip( X, Y, W, H );
|
||||
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
|
||||
#include "Timeline.H"
|
||||
|
||||
#include "Clip.H"
|
||||
#include "Audio_File.H"
|
||||
|
||||
void draw_waveform ( int X, int Y, int W, int H, Clip *_clip, nframes_t _start, nframes_t _end, float _scale, Fl_Color color );
|
||||
void draw_waveform ( int X, int Y, int W, int H, Audio_File *_clip, nframes_t _start, nframes_t _end, float _scale, Fl_Color color );
|
||||
|
|
Loading…
Reference in New Issue