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 ); | |||||