yomguy [Wed, 3 Mar 2010 12:29:10 +0000 (12:29 +0000)]
- fix waveform peaks and centroid
- remove unnecessary adapters
- tested WAV, FLAC, OGG and MP3, mono and stereo. decoder OK
- TODO : breaks spectrogram linearity
yomguy [Tue, 23 Feb 2010 16:31:41 +0000 (16:31 +0000)]
- adapt graph core to the new api
- WARNING, at the moment, the waveform peaks don't scale to the image width. Will be fixed later.
- add a test : tests/api/test_pipe_waveform.py
- rm tests/api/test_pipe2.py
- add example processor illustrating FixedSizeInputAdapter usage
- require IProcessor.processor() to always return a 2D array (even for 1 channel)
- fix example FileDecoder, so that it properly returns a 2D array when channels=1
- add FixedSizeInputAdapter utility
- make nframes() a common IProcessor method, and add an nframes argument to IProcessor.setup()
- release processors from Processor destructor
- remove IDecoder.duration(), redundant with nframes and samplerate
- add processing pipes support, using ProcessPipe and operator overloading
- add tests/api/test_pipe.py and rename tests/api/test.py to test_lolevel.py
- remove all buffersize constraints in core/api
- replace IProcessor.set_input_format() with setup(), which also resets the processor
- suppress IProcessor.input_format()
- replace IProcessor.output_format() with channels() and samplerate()
- remove IGrapher.set_nframes(), this is implementation specific
- add short guitar.wav (sweep samples drives my crazy ;)
- shorten example processor names (GainEffect -> Gain, etc...)
component:
- add ability ro register abstract classes. These can register as implementing
some interfaces, but are by default not listed by implementations()
- add automatic interface-to-component __doc__ propagation, with the
@interfacedoc method decorator
api:
- general idea: prepare for processor "pipes" high-level api
- move process() into IProcessor, make it a generic method
- add IProcessors methods that relate to buffersize, and input/output format
- add IDecoder.nframes()
- add IEffect, an interface for effect processors
tests:
- fix testnewcore.py
- add test and examples of processors implementing the new api and component
system
core: add processor buffersize (default 65536), required to be a power of 2 and >= 4096
for proper support of fft-based analyzers and similar
refactor api:
- improve documentation
- remove IEncoder.finish(), same as process() with nframes < buffersize
- remove format(), description() and such from IDecoder, a decoder can handle multiple
formats so this information is dynamic
- add duration(), samplerate(), channels() etc... to IDecoder, obsoleting all
corresponding analyzers
- add IGrapher.process()
- require IGrapher.render() to return a PIL image instead of streaming binary data,
and move the width/height arguments into the constructor
- add IAnalyzer.process()
- add IValueAnalyzer and let dc, maxlevel and meanlevel analyzers implement it
- move result() into IValueAnalyzer. This method may not be adequate for other types of analyzers
- merge all api's into timeside.api
- add core.get_processor()
- put all exceptions into exceptions.py
- use SubProcessError instead of EncodeProcesError, DecodeProcessError and VampProcessError
- rename TimeSideError to Error (= timeside.Error)
- move id() into to IProcessor, all processors are required to implement this static method
- MetaProcessor now ensures that all id's are wellformed and unique and raise an exception otherwise
- add id() to all encoders and decoders, and make it static in analyzers and graphers
- remove underscores and shorten a couple of id's, see the doc of IProcessor.id()
- move generic component/interface architecture from core to component.py
- add Processor, MetaProcessor and processors() to core
- add IProcessor base interface for all processor interfaces
- let IAnalyzer, IGrapher, IEncoder and IDecoder subclass IProcessor
- let all actual processor classes descend from Processor
- use processors() instead of implementations() in test.py
- add listprocessors.py test script
- turn all such methods as name(), id(), file_extension() into static methods
- add the self argument to non static methods in interfaces for clarity
- encode api: the constructor doesn't conflict anymore with the new core, fixme gone
replace the core with the new core:
- requires absolutely no change in the encode, decode, analyze and graph code
- the test scripts needed a few changes
add new core:
- less intrusive component/interface mechanism
- no need for a component manager
- one can create several instances of a component (no singleton)
- component constructors do not need component manager anymore
- unit test included