-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNEWS
845 lines (633 loc) · 31.6 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
Loris is an open source library implementing sound analysis,
synthesis, and morphing, developed by Kelly Fitz and Lippold Haken
at the CERL Sound Group. Loris includes a C++ class library, a
Python module, a C-linkable interface, and documentation.
Loris 1.8 includes minor bug fixes and API enhancements.
A detailed list of major changes is given in the change
history, below.
Loris can be downloaded from http://sourceforge.net/projects/loris
For more information about Loris, contact the developers at
[email protected], or visit them at
http://www.cerlsoundgroup.org/Loris
Please send bug reports to [email protected]
Loris is free software. Please see the file COPYING for details.
Loris is Copyright (c) 1999-2010 by Kelly Fitz and Lippold Haken.
History of visible changes, organized by release number:
-------------------------------------------------------
changes since 1.7 release:
- Enabled channelization with a constant reference frequency
specification in Python interface.
- Fixed errors in the names of some analyzer bandwidth enhancement
configuration functions in the C interface.
- Improved data type size specification in SdifFile.C -- can now
define symbols like SIZEOF_INT during build to specify the
sizes of 2- and 4- byte integer types (if not using the
autotools, which do this automatically).
- Fixed a bug in the Csound5 opcodes that prevented morphing
from producing any output.
-------------------------------------------------------
changes since 1.6 release:
- Improved behavior of cropping in Python and procedural interfaces
such that Partials left empty after cropping are removed from the
PartialList.
- Corrected a logic error in Cropper that caused Breakpoints to be
introduced into Partials that should be left empty by cropping (no
Breakpoints in the cropping range).
- Added support for resampling according to a timing envelope
to the Resampler class. This allows time reversal and scrubbing
effects, in addition to straightforware time dilation.
- Fixed a header inclusion error that prevented building with some
compilers.
-------------------------------------------------------
changes since 1.5.4 release:
- Corrected several sources of significant phase errors in
synthesis, and in phase reporting from analysis data.
- Improved the Resampler implementation of Breakpoint time
quantization (previously called "sparse resampling"), no longer
adding extra Breakpoints unpredictably to lessen differences
between the original and resampled envelopes.
- Added capability to perform logarithmic frequency morphing --
log or linear morphing can be selected independently for both
amplitude/bandwidth and frequency envelopes. (This might be
especially useful if you are morphing two different pitches to
obtain a third pitch.)
- Cleaned up Filter interface and implementation, made it more
consistent with other common tools (like Matlab and scipy).
- Added a Parameters struct to the Synthesizer class that can
be used to specify a full configuration of the Synthesizer.
- Added a default parameter set to the class, which can be
modified to change the default Synthesizer configuration (used
by AiffFile, for example, to render Partials).
- Added access to the Filter used by bandwidth-enhanced
Oscillators through the Synthesizer class, as well as the
Oscillator class, so that different filters can be designed
and employed in bandwidth enhanced synthesis.
- Added access to global default synthesis parameters through
loris.SynthesisParameters in the Python interface.
-------------------------------------------------------
changes since 1.5.3 release:
- Fixed a bug involving the use of the nonstandard extension
std::isfinite that prevented compilation with some compilers.
- Implemented LinearEnvelope iterators in Python.
- Implemented addition and subtraction of two LinearEnvelopes
in C++ and Python.
-------------------------------------------------------
changes since 1.5.2 release:
- Analyzer can have time-varying frequency resolution
specified by an Envelope.
- Replaced Fundamental class with a pair of classes for
estimating fundamental frequency, FundamentalFromSamples
performs reassigned spectral analysis and estimates the
fundamental from the spectral peaks, and FundamentalFromPartials
estimates the fundamental from the frequency and amplitude
envelopes of a collection of Partials.
- Added Fundamental classes to scripting (Python) interface.
- Look for Csound5 headers at config time, and prefer to
build Csound5 opcode library, fall back to Csound4.
- Added Visual Studio 2008 projects for building the simple
morphing test and the Python module under windows.
- Improved 64-bit compatibility.
-------------------------------------------------------
changes since 1.5.1 release:
- Analyzer always constructs amplitude and fundamental
frequency envelopes during analysis (cannot disable).
- fixed broken SpcFile::addPartial members in Python
interface.
- improved resampling in the Python interface, now
have options for sparse (default) and dense (good
for use with CNMAT sinusoids~ external for Max/MSP)
resampling.
-------------------------------------------------------
changes since 1.5 release:
- updated command-line analysis utility (loris-analyze)
to estimate the fundamental frequency reference envelope
during analysis when distilling or sifting.
- updated command-line analysis utility (loris-analyze)
to provide a choice between spectral residue (-bwresidue)
and sinusoidal convergence (mixed derivative of phase)
(-bwconvergence) algorithms for computing bandwidth
envelopes.
- changed parameter for specifying convergence bandwidth
tolerance from percent (0 to 100) to absolute (0 to 1)
to be more intuitive and consistent with the rest of
Loris (which doesn't use percent anywhere). Affects
C++, Python, and C interfaces. For now, a value greater
than one is scaled down by 1/100 with a notification of
the change.
- made Distiller, Sieve, and Collator default fade and
gap (silent) times consistent, and made those defaults
consistent in all contexts (Python, C++, and the
command line utilities).
- added bandwidth scaling option to synthesis command
line utility (good for turning off bandwidth-enhanced
synthesis, scale by 0).
-------------------------------------------------------
changes since 1.4 release:
- enabled fundamental estimation by default in Analyzer
- added mixed phase derivative estimator option for
bandwidth association. Added corresponding Analyzer member
functions for selecting a bandwidth association option:
storeResidueBandwidth (bandwidth association algorithm
in previous versions of Loris), storeConvergenceBandwidth
(mixed derivative), or storeNoBandwidth (no bandwidth
association).
- fixed typos in AiffFile.h that prevented compiling on
some systems.
- added option in Channelizer to use amplitude weighting
in the computation of the apropriate channel for a Partial.
- added Channelizer members for computing channel center
frequencies and channel numbers corresponding to a
specified frequency.
- improved accuracy of stretched harmonic channelization.
- improved fundamental estimation algorithm to use estimator
confidence level to determine the validity of f0 estimates
(used in FrequencyReference and Analyzer).
-------------------------------------------------------
changes since 1.3 release:
- phase/frequency correction incorporated into Analyzer
and Morpher so that both now generate phase-correct
Partials.
- Channelizer made more reliable by using a non-weighted
frequency average. Also added capability to channelize
stretched harmonics, as in piano tones, by computing a
strecthing factor and using it to align the frequency
channels on non-integer multiples of the fundamental
frequency.
- made Resampler preserve phases by making small frequency
adjustments so that the resampled phases are matched as nearly
as possible. Resampler now generates phase-correct Partials.
- added a class Harmonifier that uses a reference frequency
envelope to make the frequencies of labeled Partials harmonic.
- added phase correction utilities to the PartialUtils
namespace, for restoring phase-correctness to Partials
after modification.
- added a class SpectralSurface representing a smoothed
time-frequency surface that can be used to perform
cross-synthesis, the filtering of one sound by the
time-varying spectrum of another. Can also be used to
perform formant-corrected pitch shifting.
- Resampler can now perform dense (Breakpoint every
interval) or sparse (Breakpoints only at intervals
near to original Breakpoints) resampling.
- fixed bug in Distiller that caused occassional unpredictable
behavior.
- added platform-neutral FourierTransform implementation,
in case FFTW is not available.
- added optional fundamental tracking during analysis,
and improved the old frequency reference and fundamental
tracking algorithms.
-------------------------------------------------------
changes since 1.2 release:
Command-line utilities:
Several command-line utility programs have been added to
loris_analyze (now called loris-analyze) and
loris_spewmarkers (now called loris-spewmarkers), which
were introduced in Loris 1.2. The new utilities include:
- loris-dilate - a utility for dilating partials stored
in a SDIF file and saving the dilated partials in
another SDIF file.
- loris-mark and loris-unmark - utilities for adding and
removing markers in AIFF, SDIF, and Spc files.
- loris-synthesize - a synthesis utility for rendering
Partials stored in a SDIF file, optionally with dilation
and constant amplitude and frequency scaling.
Morphing improvements:
- changed amplitude morphing to use a shaping parameter
that allows much smoother-sounding morphs, by performing
multiplicative (additiive in log scale) amplitude
morphing. The old linear behavior can be achieved (or
very-nearly approximated) by setting this parameter to
something big (like 10000), but setting it to something
on the order of 1E-5 often sounds more natural, and
setting it very small like 1E-12 causes very
abrupt-sounding transitions. Bandwidth is morphed using
the same shaping scheme.
- added frequency reference envelope parameter to
Morpher, so that a strong reference Partial can be used
to estimate frequencies of very weak ones (only works
for harmonically-labeled Partials). A threshold
parameter for idetifying weak Partials goes with this.
- added a Morpher parameter for controlling the minimum
time between Breakpoints in a morphed Partial, to reduce
the abundance of Breakpoint data that the Morpher can
generate.
- extended morphing functionality in scripting and
procedural interfaces to allow morphing with refernce
envelopes and access to the amplitude morph shaping
parameter.
Csound opcode improvements:
- updated Csound opcodes to be compatible with current
versions of Csound that support dynamic loading of
opcode libraries, so it is no longer necessary to
rebuild the csound application to integrate the Loris
opcodes. Added csound detection and building of the
opcode librarty to autobuild process. This works most
reliably with ABS distributions of Csound version 4.
(Many thanks to Michael Gogins and John Ramsdell for
making this possible.)
- csound opcodes are built into the Loris library,
when csound is available. No separate opcode library
is needed.
- included versions of the opcode source that are
compatible with Csound 5 (though these are not yet used
in the build, they can be used to build an opcode
library for Csound 5, many thanks to Michael Gogins for
contributing these.)
Bug fixes:
- improved phase accuracy of synthesis.
- fixed floating point rounding errors in SDIF export
that were causing some breakpoints to be lost in the
export process (thanks to Michael Klingbeil for help
finding these errors!). Part of this fix is to use
double precision floating point numbers in SDIF files
from now on, so Loris SDIF files are twice as big as
they used to be. Old SDIF files (with single-precision
floats) are still imported, but export is always double
precision.
- fixed phase interpolation in the phaseAt operation,
and improved it in the Morpher.
Other changes and enhancements:
- improved scripting interface to take advantage of new
capabilities of SWIG, including support for C++ STL
vectors. SampleVector is now just a DoubleVector, and it
acts like a list in the native language, instead of
having its own idiosyncratic behavior. THIS BREAKS OLD
CODE, but makes it much easier to work with samples
in the scripting interface.
- overhauled PartialUtils. All functors have been
renamed and all have corresponding functions. Names are
now consistent and predictable. THIS BREAKS OLD CODE,
but the old PartialUtils were such a mess...
- Dilator now can compute new times for Markers, using
the same interface as for dilating Partials.
- renamed BreakpointEnvelope to LinearEnvelope, to
eliminate confusion with the Breakpoint envelopes that
make up Partials. BreakpointEnvelope is still around as
a deprecated typedef, but related operations in the
procedural and scripting interfaces have been renamed.
THIS BREAKS OLD CODE, but it is less confusing.
- added experimental fundamental frequency estimator,
called Fundamental.
- C++ api is now mostly documented using doxygen,
and HTML docs are build automatically when doxygen
is available. The Python module is fully documented
using pydoc.
-------------------------------------------------------
changes since 1.1 release:
- added rewritten AiffFile and SpcFile classes, with
interfaces that allow Partials to be added directly
and automatically rendered, and that include access
to Aiff-style Markers (time-string pairs, represented
by the new class Marker).
- added rewritten SdifFile classes that look and
feel like the AiffFile and SpcFile classes, and
support Markers, and no longer use the IRCAM
SDIF library.
- Tcl module is no longer built by default, only the
Python module.
- added AiffFile Marker access to scripting module.
- added sampleVector_fill to procedural interface, and
to its documentation.
- removed depdendency on the IRCAM SDIF library.
- added capability to build the Loris Csound generators
as a dynamically-loaded module, on platforms that support
them. (Cannot seem to get them to work under OS X.)
- added FFTW3 compatibilty, version detected at configure
time.
- added utilities directory, including a program for spewing markers
(loris_spewmarkers) and another for performing Loris analysis
(loris_analyze).
-------------------------------------------------------
changes since 1.0.2 release:
- added window sidelobeLevel parameter to Analyzer,
decoupled it from the amplitude floor.
- bandwidth (noise) association can now be disabled in
Analyzer by setting bwRegionWidth to 0.
- softened amplitude floor in Analyzer, now amplitudes
near (within 10dB) of the amplitude floor are faded out,
instead of suddenly being eliminated at the threshold.
- added split member function to Partial, for breaking
a Partial at a specified position (iterator).
- added absorb member function to Partial, for absorbing
another Partial's energy as noise (bandwidth).
- changed Partial::erase to return an iterator refering
to the position after the erasure, or end if the last
Breakpoint it erased.
- added Partial constructor from a half-open range
delimited by Partial::const_iterators (documented too).
- added new, simpler, Python 2.2-style iterators to the
scripting interface. Eventually these will replace the
old STL-style ones, but for now they coexist.
- added some new functors to PartialUtils and
BreakpointUtils.
- added Resampler class for sampling Partial data at a
uniform rate, making it easier to use with real-time
rendering systems. Also added resample function to scripting
and procedural interfaces.
- updated documentation
-------------------------------------------------------
changes since 1.0.1 release:
- moved compile-time type checks from FourierTransform.C
to configure.in, so the former now compiles even with
wimpy compilers
- added check for template member support to configure.in
- changed name of (Python) loriscmodule to _loris, to
keep up with changes to SWIG
- added "collating" of unlabeled Partials to the
distillation operation. This combines unlabeled Partials
into groups of non-overlapping (in time) Partials, assigned
an unused label (greater than the label associated with any
frequency channel), and fused into a single Partial per
group. "Collating" is a bit like "sifting" but
non-overlapping Partials are grouped without regard to
frequency proximity. This algorithm produces the
smallest-possible number of collated Partials. Thanks to
Ulrike Axen for providing this optimal algorithm.
- Perl module can now be built, optionally, with the
--with-perl option to configure. It is still untested,
but a very minimal test is performed in make check,just
to make sure that it can be loaded. The perl module
is (temporarily) called perLoris.
- Python sequences can be used as arguments to dilate,
other languages still need strings, but typemaps could
be added for them too.
- autodetection of scripting langauges has been improved
-------------------------------------------------------
changes since 1.0 release:
- added compile-time checks to ensure that fftw_complex
is compatible with std::compelx<double>, in
FourierTransform.C.
- fixed sloppy coding (bad use of vector iterators to get
pointers) that caused compile errors under new versions
of CodeWarrior and gcc (3).
- added prebinding to Darwin build, though it won't
do anything until prebound versions of SDIF and FFTW
are available.
- removed old Mac OS project files, etc, since they
were never up-to-date anyway, and too difficult to
maintain.
-------------------------------------------------------
changes since 1.0beta9 release:
- Updated documentation (finally) including C++
API documentation (finally).
- added assignment operator to Oscillator so that STL
containers of them can be used
- made FrequencyReference a subclass (implementor) of
the Envelope interface, restricted access to its
BreakpointEnvelope to const.
- made FrequencyReference use all Breakpoints in the
reference Partial when the number of samples is not
specified.
- Sieve no longer sorts Partial list, and therefore no
longer needs the list itself as an argument to sift(),
can pass just iterators.
- Greatly improved the Sieve interface, made it generic
(container-type independent).
- Morpher interface radically improved to expose much
more morphing functionality.
- Added PartialPtrs class, a container of pointers to
Partials, used internally to make algorithms more generic.
- Removed FadeTime() member from class Partial, added fade
time as a parameter to classes Distiller, Synthesizer, and
Sieve (replacing minGapTime, which is twice the fade time).
-------------------------------------------------------
changes since 1.0beta8 release:
- fixed Dilator to insert Breakpoints in new Partials at
times corresponding to dilation target time points. Without
these new Breakpoints, and since our Breakpoints are
non-uniformly distributed in time, Partials could go
breifly out of tune with each other as a result of
dilation.
- added PartialList.h defining the type PartialList as
a name for std::list< Partial >, in the Loris namespace.
- replaced all instances of #if HAVE_M_PI with
#if defined(HAVE_M_PI) && (HAVE_M_PI), which seems
better.
- put everything in procedural interface (loris.h) in
Loris namespace, when compiling C++.
-------------------------------------------------------
changes since 1.0beta7 release:
- fixed phase error in SpcFile.C, introduced by replacing
TwoPi symbol by 2. * Pi in the denominator without proper
parenthesis.
- eliminated many spurious compiler warnings
- improved error handling and reporting in SDIF reading
- autobuilding of Loris library and the Python module
under Darwin is now possible
- added version symbols in loris.h (automatically generated
by automake) and a version() function in the scripting interface
(returns a version string)
- Totally new SDIF file format -- we now define our own
matrix types so that we can read and write our partials,
even if we label them (!), which was not previously possible
due to silliness with the SDIF library. Optionally, 1TRC
files can still be exported, but they are the sine-only
ones that are described by the SdifTypes.STYP file. Our
matrices contain irregularly-spaced bandwidth-enhanced
data, but no interpolated (bogus) data, so a frame may
not contain breakpoints for all active Partials.
- Simplified loris.h slightly by removing the silly
LORIS_OPAQUE_POINTERS symbol, whose purpose is a mystery.
- Cleaned up the SWIG interface somewhat to reflect modern
developments in SWIG (like the elimination of the documentation
facility).
- Analyzer can be constructed and configured with two
parameters now, the frequency resolution and the width
of the analysis window. It seems that most commonly,
those parameters need to be set independently, and
other parameters derived from them. The single-argument
version of configure() no longer exists, but can be
simulated by calling configure() with two identical
arguments.
- The configure method in the Analyzer scripting interface
has been removed (just create a new Analyzer when you need
to reconfigure). analyzer_configure() has been removed from
the procedural interface, as has the single-argument version
of createAnalyzer(). In the scripting interface, the Analyzer
constructor can be called with a single argument, and the
window width will be set equal to the specified resolution.
- Analysis configures the analysis window to have sidelobe
attenuation equal to the amplitude floor, instead of always
using 95 dB. The amplitude floor still defaults to 90 dB.
- KaiserWindow::computeLength() now takes the Kaiser shaping
parameter as its second parameter, instead of the attenuation
(from which it computes the shaping parameter).
- Added spliceByLabel() to procedural interface, for splicing
Partials having a specified label into a separate list.
- Added extractLabeled( PartialList *, label ) to the
scripting interface, returns Partials having the specified
label in a new PartialList.
- Added PartialUtils::timeSpan(iterator, iterator) to
find the time spanned by all Partials in an iterator
range. Used this to implement a timeSpan method for
PartialList in the scripting interface.
- Removed all the preprocessor scaffolding involving
NO_LORIS_NAMESPACE, since it offered only a false sense
of security. There's no reason to believe that Loris will
build with a compiler that is not namespace-savvy.
- Added default values for sample rate (44100) in synthesize
and exportAiff, and for number of channels (1) and
sample size (16 bits) in exportAiff in scripting interface.
- Fixed Distiller to correctly preserve Partials with label 0.
- Improved efficiency and consistency of Sieve and sifting operation,
and added default gap equal to 0.
- FrequencyReference class can be constructed with a specified
number of samples of the longest Partial's frequency envelope
(the old way) or sampled every 30ms (the recent way). In the
procedural interface, specifying a number of samples equal
to 0 causes the 30ms sampling. In the scripting interface,
the number of samples argument is optional, and if unspecified,
the 30 ms sampling is used. In the scripting and procedural
interfaces, the number of samples is the last argument to
createFreqReference(), whereas is used to be the third. THIS
MAY BREAK OLD CODE.
-------------------------------------------------------
changes since 1.0beta6 release:
- Improved Distiller operation.
- Changed iterator behavior in scripting interface (NOTE: this
may break previously-working code!) next and prev methods
for PartialIterators and PartialListIterators no longer advance
and return themselves, they now return a new iterator at the
next/prev position, more like pointers, less like STL iterators,
easier to use.
- Improvements and cleanup in Analyzer, Filter, Oscillator,
FourierTransform, Synthesizer.
- Updated Mac project for CW7 and carbon.
- Added FrequencyReference class.
- Improved autoconfiguration.
-------------------------------------------------------
changes since 1.0beta5 release:
- The ReassignedSpectrum class has been modified to compute
the reassignment data using fewer transforms, and thus to
run faster.
- The files used by the GNU autotools to generate distribution
tarballs have been modified to include Mac OS-specific files in
the full source distribution.
-------------------------------------------------------
changes since 1.0beta4 release:
- The Distiller now incorporates the formerly-experimental sifting
process, that had been implemented in the Sieve class, which is
now obsolete. The sifting process now is more predictable: it retains
the longest Partial of an overlapping pair, instead of the first one
it encountered.
- Loris has been autoconfiscated. This is a first attempt to use
the GNU autotools to configure Loris for Unix and Linux (and
windows?) builds.
- Loris and FFTW are now separate CodeWarrior projects for Mac
build. Both are distributed as XML exports.
- Loris now requires release 3.4 or later of the SDIF library
from IRCAM. Earlier versions had problems that prevented Loris
from using them as intended.
- The Loris demo and Loris Mac source releases have
been terminated. The demo is now attached to the Loris
web page (www.cerlsoundgroup.org/Loris), and the Mac
source is now incldued with the full source distribution.
-------------------------------------------------------
changes since 1.0beta3 release:
- Tcl and Perl interfaces and documentation have been added to the
scripting support. The Tcl module can be tested using the morphtest.tcl
script in the test directory. The Perl module has not been tested yet
and is awaiting a competent Perl programmer to provide a Perl version of
the test script.
- the macro LORIS_VERSION has been added to a prefix file included in
all Loris headers and sources. So it is now possible to determine the
Loris release version programmatically and at compile time. See the
header Loris_prefix.h for a description of the format of this macro. The
Loris version is also accessible using the versionString function in the
scripting interface.
- the PartialList and Partial iterators in the scripting interface have
been rewritten and now mimic the C++ STL classes they wrap. Most
importantly, iterators do _no_ memory or reference management. So that
in Python, if you loose the last reference to a PartialList and the list
gets deleted, you may be left with invalid Partials, Iterators, and
Breakpoints, that formerly corrsponded to contents of that PartialList.
See the documentation for more details. This implementation is very
different from the implementation in release 1.0beta3, but is more or
less the one that we expect to stick with.
- the non-object functions in the scripting interface for accessing AIFF
format sample files (ImportAiff, and infoAiff) have been removed. Use the
AiffFile class added in the previous release. See the test and demo scripts
for examples.
- the ExportSpc class has been removed from the scripting interface and
replaced by non-object importSpc and exportSpc functions. See the
documenation for details. In the C++ class library the ExportSpc class
has been replaced by the SpcFile class, the ImportSdif and ExportSdif
classes have been replaced by the SdifFile class.
- the CodeWarrior project itself is no longer distributed for the MacOS.
Instead, the exported XML description is distributed. This file can be
used to build (mostly) a CodeWarrior project using any recent version of
the IDE, using the Import Project option on the File menu.
-------------------------------------------------------
change since 1.0beta2 release:
- preliminary implementation of PartialList iteration and access to
individual Partials in a PartialList in the scripting interface. This
implementation is incomplete and experimental, and should be expected
to change.
- AiffFile class added to scripting interface, so there is no longer a
separate function (and disk access) for querying the sample rate, bit
depth, and number of channels in a samples file. These parameters are
now obtained from an AiffFile object that also provides access to the
SampleVector.
- Sieve class has been added to Loris class library, invoked through
sift() function in the scripting interface. The sifting operation is
an experimental process that sometimes improves the fidelity of morphs
and syntheses from distilled PartialLists. Sifting is performed after
channelization and before distillation, and has the effect of
relabeling some Partials to zero (0). These Partials are left behind
unmodified by the distillation process, and can be removed from the
PartialList, or retained and synthesized. (Partials labeled zero do
not participate in morphing, they are instead faded in and out.) This
implementation is experimental and should be expected to change.
- errors in test and demo scripts have been fixed.
- Python interface documentation has been updated and improved.
- updated to use the version 3.2.2 of the SDIF library from IRCAM,
obtain from the IRCAM SDIF website (www.ircam.fr/sdif). This version
is incompatible with version 3.2.0, used in by earlier Loris releases.
Update to version 3.2.2, or compile with the flag SDIF_VERSION defined
to have the value 320 to use version 3.2.0 of the SDIF library. See
the README file or more information.
- SWIG 1.3a5 is being used to generate the Python wrappers now, so
anyone wishing to try generating wrappers for other languages can now
choose from Java, Guile, Ruby, and others, in addition to Tcl and Perl.
- other minor changes in the scripting interface, see the demo and
test scripts for examples.
-------------------------------------------------------
change since 1.0beta1 release:
- added .spc file support for real-time bandwidth-enhanced additive
synthesis and sound morphing using the Symbolic Sound Kyma System.
Documentation updated accordingly (though not very extensive).
- Loris module tested and verified with Python 2.0, now the default
build (to build or another Python release, change the Makefile, or,
in the MacOS Codewarrior project, the Access Path, to reflect the
correct version number).
- static library target added to Codewarrior project for MacOS.
- MacOS Python module now uses a static library instead of a shared
libarary (DLL), since static libraries seem much more stable and are
less restrictive. (This should alleviate some instability related to
memory management across library boundaries.)
- test directory has been added with the simple morph test, distinct
from the longer test in the demo directory (and package).
-------------------------------------------------------
changes since 1.0alpha release:
- the core Loris library is mostly unchanged from the alpha release,
but the scripting interface has been completely rewritten to provide
a generic interface to a variety of scriping languages using SWIG
(www.swig.org) At this time, only the Python module has been
tested, and only with Python 1.5.2, though Loris is also reported to
work with Python 1.6.
- a c-linkable procedural interface has been implemented.
- a first-cut of (html) documentation for the procedural interface and
for the Python module is included, and posted to SourceForge
(sourceforge.net/projects/loris).
-------------------------------------------------------
Copying information:
Loris is Copyright (c) 1999-2010 by Kelly Fitz and Lippold Haken
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
copyright notice and this permission notice are preserved,
thus giving the recipient permission to redistribute in turn.
Permission is granted to distribute modified versions
of this document, or of portions of it,
under the above conditions, provided also that they
carry prominent notices stating who last changed them.