@@ -17,18 +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. */ | ||||
/*******************************************************************************/ | /*******************************************************************************/ | ||||
/* FIXME: need locking for when disk thread and peak reader are | |||||
* interested in the same source? */ | |||||
#include "Audio_File.H" | #include "Audio_File.H" | ||||
#include "Audio_File_SF.H" | #include "Audio_File_SF.H" | ||||
#include "Audio_File_Dummy.H" | |||||
#include "debug.h" | |||||
std::map <std::string, Audio_File*> Audio_File::_open_files; | std::map <std::string, Audio_File*> Audio_File::_open_files; | ||||
Audio_File::~Audio_File ( ) | Audio_File::~Audio_File ( ) | ||||
{ | { | ||||
_open_files[ std::string( _filename ) ] = NULL; | _open_files[ std::string( _filename ) ] = NULL; | ||||
if ( _filename ) | |||||
free( _filename ); | |||||
} | } | ||||
void | void | ||||
@@ -58,14 +59,15 @@ Audio_File::from_file ( const char * filename ) | |||||
// TODO: other formats | // TODO: other formats | ||||
return NULL; | |||||
DWARNING( "creating dummy source for \"%s\"", filename ); | |||||
done: | |||||
/* FIXME: wrong place for this? */ | |||||
if ( ( a = Audio_File_Dummy::from_file( filename ) ) ) | |||||
goto done; | |||||
/* a->_peaks = new Peaks; */ | |||||
return NULL; | |||||
/* a->_peaks->clip( a ); */ | |||||
/* a->_peaks->open(); */ | |||||
done: | |||||
_open_files[ std::string( filename ) ] = a; | _open_files[ std::string( filename ) ] = a; | ||||
@@ -78,21 +80,26 @@ Audio_File::read_peaks( float fpp, nframes_t start, nframes_t end, int *peaks, P | |||||
{ | { | ||||
// Peaks pk; | // Peaks pk; | ||||
*peaks = 0; | |||||
*channels = 0; | |||||
*pbuf = NULL; | |||||
// pk.clip( this ); | |||||
if ( dummy() ) | |||||
{ | |||||
*peaks = (end - start) / fpp; | |||||
*channels = 0; | |||||
*pbuf = NULL; | |||||
/* /\* only open peaks (and potentially generate) when first requested *\/ */ | |||||
/* if ( ! _peaks.open() ) */ | |||||
/* return false; */ | |||||
return false; | |||||
} | |||||
else | |||||
{ | |||||
*peaks = 0; | |||||
*channels = 0; | |||||
*pbuf = NULL; | |||||
*peaks = _peaks.fill_buffer( fpp, start, end ); | |||||
*peaks = _peaks.fill_buffer( fpp, start, end ); | |||||
*channels = this->channels(); | |||||
*channels = this->channels(); | |||||
*pbuf = _peaks.peakbuf(); | |||||
*pbuf = _peaks.peakbuf(); | |||||
return true; | |||||
return true; | |||||
} | |||||
} | } |
@@ -50,7 +50,7 @@ protected: | |||||
unsigned long id; | unsigned long id; | ||||
}; | }; | ||||
const char *_filename; | |||||
char *_filename; | |||||
volatile nframes_t _length; /* length of file in samples */ | volatile nframes_t _length; /* length of file in samples */ | ||||
nframes_t _samplerate; /* sample rate */ | nframes_t _samplerate; /* sample rate */ | ||||
int _channels; | int _channels; | ||||
@@ -79,6 +79,8 @@ public: | |||||
virtual ~Audio_File ( ); | virtual ~Audio_File ( ); | ||||
virtual bool dummy ( void ) const { return false; } | |||||
static void all_supported_formats ( std::list <const char *> &formats ); | static void all_supported_formats ( std::list <const char *> &formats ); | ||||
static Audio_File *from_file ( const char *filename ); | static Audio_File *from_file ( const char *filename ); | ||||
@@ -0,0 +1,53 @@ | |||||
/*******************************************************************************/ | |||||
/* 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 "Audio_File.H" | |||||
class Audio_File_Dummy : public Audio_File | |||||
{ | |||||
Audio_File_Dummy ( ) | |||||
{ | |||||
} | |||||
public: | |||||
/* static const Audio_File::format_desc supported_formats[]; */ | |||||
static Audio_File_Dummy *from_file ( const char *filename ) | |||||
{ | |||||
Audio_File_Dummy *d = new Audio_File_Dummy; | |||||
d->_filename = strdup( filename ); | |||||
return d; | |||||
} | |||||
bool dummy ( void ) const { return true; } | |||||
~Audio_File_Dummy ( ) | |||||
{ | |||||
} | |||||
bool open ( void ) { return true; } | |||||
void close ( void ) { } | |||||
void seek ( nframes_t ) { } | |||||
nframes_t read ( sample_t *, int, nframes_t len ) { return len; } | |||||
nframes_t read ( sample_t *, int, nframes_t start, nframes_t end ) { return end - start; } | |||||
nframes_t write ( sample_t *, nframes_t nframes ) { return nframes; } | |||||
}; |
@@ -58,10 +58,7 @@ Audio_File_SF::from_file ( const char *filename ) | |||||
memset( &si, 0, sizeof( si ) ); | memset( &si, 0, sizeof( si ) ); | ||||
if ( ! ( in = sf_open( filename, SFM_READ, &si ) ) ) | if ( ! ( in = sf_open( filename, SFM_READ, &si ) ) ) | ||||
{ | |||||
printf( "couldn't open file\n" ); | |||||
return NULL; | return NULL; | ||||
} | |||||
/* if ( si.samplerate != timeline->sample_rate() ) */ | /* if ( si.samplerate != timeline->sample_rate() ) */ | ||||
/* { */ | /* { */ | ||||
@@ -17,6 +17,8 @@ | |||||
/* 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 | |||||
#include "Audio_File.H" | #include "Audio_File.H" | ||||
#include <sndfile.h> | #include <sndfile.h> | ||||
@@ -636,7 +636,14 @@ Audio_Region::draw ( void ) | |||||
/* fl_line( rx, Y, rx, Y + H ); */ | /* fl_line( rx, Y, rx, Y + H ); */ | ||||
/* fl_line( rx + rw - 1, Y, rx + rw - 1, Y + H ); */ | /* fl_line( rx + rw - 1, Y, rx + rw - 1, Y + H ); */ | ||||
draw_label( _clip->name(), align() ); | |||||
if ( _clip->dummy() ) | |||||
{ | |||||
char pat[256]; | |||||
snprintf( pat, sizeof( pat ), "Missing Source!: %s", _clip->name() ); | |||||
draw_label( pat, align() ); | |||||
} | |||||
else | |||||
draw_label( _clip->name(), align() ); | |||||
/* if ( current() ) */ | /* if ( current() ) */ | ||||
/* { */ | /* { */ | ||||