various libraries.tags/non-daw-v1.1.0
@@ -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. */ | /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
/*******************************************************************************/ | /*******************************************************************************/ | ||||
#include "Clip.H" | |||||
#include "Audio_File_SF.H" | |||||
#include "Timeline.H" | #include "Timeline.H" | ||||
#include <sndfile.h> | #include <sndfile.h> | ||||
@@ -25,56 +25,13 @@ | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.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; | SNDFILE *in; | ||||
SF_INFO si; | SF_INFO si; | ||||
Clip *c = NULL; | |||||
Audio_File_SF *c = NULL; | |||||
memset( &si, 0, sizeof( si ) ); | memset( &si, 0, sizeof( si ) ); | ||||
@@ -96,18 +53,15 @@ Clip::from_file ( const char *filename ) | |||||
goto invalid; | goto invalid; | ||||
} | } | ||||
c = new Clip; | |||||
c = new Audio_File_SF; | |||||
c->_filename = filename; | c->_filename = filename; | ||||
c->_length = si.frames; | c->_length = si.frames; | ||||
sf_close( in ); | sf_close( in ); | ||||
c->_peaks.open(); | |||||
return c; | return c; | ||||
invalid: | invalid: | ||||
sf_close( in ); | sf_close( in ); | ||||
@@ -115,7 +69,7 @@ invalid: | |||||
} | } | ||||
bool | bool | ||||
Clip::open ( void ) | |||||
Audio_File_SF::open ( void ) | |||||
{ | { | ||||
SF_INFO si; | SF_INFO si; | ||||
@@ -128,27 +82,26 @@ Clip::open ( void ) | |||||
} | } | ||||
void | void | ||||
Clip::close ( void ) | |||||
Audio_File_SF::close ( void ) | |||||
{ | { | ||||
sf_close( _in ); | sf_close( _in ); | ||||
} | } | ||||
void | void | ||||
Clip::seek ( nframes_t offset ) | |||||
Audio_File_SF::seek ( nframes_t offset ) | |||||
{ | { | ||||
sf_seek( _in, offset, SEEK_SET ); | sf_seek( _in, offset, SEEK_SET ); | ||||
} | } | ||||
nframes_t | 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 ); | return sf_read_float ( _in, buf, len ); | ||||
} | } | ||||
/** read samples from /start/ to /end/ into /buf/ */ | /** read samples from /start/ to /end/ into /buf/ */ | ||||
nframes_t | 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(); | open(); | ||||
@@ -17,36 +17,19 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* 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> | #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; | SNDFILE *_in; | ||||
public: | 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 ); | bool open ( void ); | ||||
void close ( void ); | void close ( void ); |
@@ -66,7 +66,7 @@ public: | |||||
printf( "pasted file \"%s\"\n", file ); | printf( "pasted file \"%s\"\n", file ); | ||||
Clip *c = Clip::from_file( file ); | |||||
Audio_File *c = Audio_File::from_file( file ); | |||||
if ( ! c ) | if ( ! c ) | ||||
{ | { | ||||
@@ -5,7 +5,7 @@ CXXFLAGS=-ggdb -Wall -O0 | |||||
LIBS=-lsndfile `fltk-config --ldflags` | LIBS=-lsndfile `fltk-config --ldflags` | ||||
# CXXFLAGS=`fltk-config -cxxflags` | # 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) | OBJS=$(SRCS:.C=.o) | ||||
@@ -24,7 +24,7 @@ test: $(OBJS) | |||||
$(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ | $(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ | ||||
clean: | clean: | ||||
rm -f $(OBJS) test | |||||
rm -f $(OBJS) test makedepend | |||||
valgrind: | valgrind: | ||||
valgrind ./test | valgrind ./test | ||||
@@ -31,7 +31,7 @@ | |||||
#include <sndfile.h> | #include <sndfile.h> | ||||
#include "Clip.H" | |||||
#include "Audio_File.H" | |||||
#include "assert.h" | #include "assert.h" | ||||
@@ -28,7 +28,7 @@ struct Peak { | |||||
float max; | float max; | ||||
}; | }; | ||||
class Clip; | |||||
class Audio_File; | |||||
class Peaks | class Peaks | ||||
{ | { | ||||
@@ -56,7 +56,7 @@ class Peaks | |||||
static peakbuffer peakbuf; | static peakbuffer peakbuf; | ||||
Clip *_clip; | |||||
Audio_File *_clip; | |||||
peakdata *_peaks; | peakdata *_peaks; | ||||
@@ -67,9 +67,11 @@ class Peaks | |||||
Peak & peak ( nframes_t start, nframes_t end ) const; | Peak & peak ( nframes_t start, nframes_t end ) const; | ||||
Peaks ( ); | |||||
public: | public: | ||||
Peaks ( Clip *c ) | |||||
Peaks ( Audio_File *c ) | |||||
{ | { | ||||
_peaks = new peakdata; | _peaks = new peakdata; | ||||
@@ -81,7 +81,7 @@ Region::Region ( const Region & rhs ) | |||||
_scale = rhs._scale; | _scale = rhs._scale; | ||||
} | } | ||||
Region::Region ( Clip *c ) | |||||
Region::Region ( Audio_File *c ) | |||||
{ | { | ||||
init(); | init(); | ||||
_clip = c; | _clip = c; | ||||
@@ -23,7 +23,7 @@ | |||||
// #include "Waveform.H" | // #include "Waveform.H" | ||||
#include "Clip.H" | |||||
#include "Audio_File.H" | |||||
#include "Track.H" | #include "Track.H" | ||||
#include "Timeline.H" | #include "Timeline.H" | ||||
@@ -38,7 +38,7 @@ using namespace std; | |||||
class Region : public Track_Widget | class Region : public Track_Widget | ||||
{ | { | ||||
Clip *_clip; /* clip this region represents */ | |||||
Audio_File *_clip; /* clip this region represents */ | |||||
float _scale; /* amplitude adjustment */ | float _scale; /* amplitude adjustment */ | ||||
@@ -56,7 +56,7 @@ public: | |||||
Fl_Boxtype box ( void ) const { return Region::_box; } | Fl_Boxtype box ( void ) const { return Region::_box; } | ||||
Region ( const Region & rhs ); | Region ( const Region & rhs ); | ||||
Region ( Clip *c ); | |||||
Region ( Audio_File *c ); | |||||
int handle ( int m ); | int handle ( int m ); | ||||
void draw_box( int X, int Y, int W, int H ); | void draw_box( int X, int Y, int W, int H ); | ||||
@@ -24,7 +24,7 @@ | |||||
#include <FL/Fl_Scrollbar.H> | #include <FL/Fl_Scrollbar.H> | ||||
#include <FL/Fl_Widget.H> | #include <FL/Fl_Widget.H> | ||||
#include "Clip.H" | |||||
#include "Audio_File.H" // just for nframes_t | |||||
#include <math.h> | #include <math.h> | ||||
#include <assert.h> | #include <assert.h> | ||||
@@ -24,27 +24,14 @@ | |||||
#include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
#include "Timeline.H" | #include "Timeline.H" | ||||
// #include "Waveform.H" | |||||
#include "Clip.H" | |||||
#include "Audio_File.H" | |||||
// extern Timeline timeline; | |||||
// #include "Timeline.H" | |||||
#include <math.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 */ | /** draw a portion of /clip/'s waveform. coordinates are the portion to draw */ | ||||
void | 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 ); | fl_push_clip( X, Y, W, H ); | ||||
@@ -24,6 +24,6 @@ | |||||
#include "Timeline.H" | #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 ); |