What's new in Nsound 0.9.4
Sep 15, 2020
- 11 now required for compiling Nsound
- Fixed an AudioStream pickling bug, wasn't loading n channels or sample rate
- Switched to setuptools to build wheel packages on windows (maybe os x)
- Moved circular_iterator out of Buffer.h
- Fixed #76: DelayLine: add dynamic delay
- Fixed #63: Add 'classic' filters with resonance control
- FilterLowPassMoogVcf added
- AudioStream now using std::vector<Buffer *> instead of raw array
- Fixed Python expressions for returning references
- Fixed Python expressions for iterating over Buffer in AudioStreams
- Reworked circular_iterator, added unit tests
- Created delayline demo video: https://www.youtube.com/watch?v=9m3KA6JBDH8
- Created tapedeck demo video: https://www.youtube.com/watch?v=Al6aHlwyEuA
New in Nsound 0.9.1 (Jul 2, 2014)
- Real-time audio playback via AudioPlaybackRt class
- Requires low-latency driver like JACK Audio Connection Kit for smooth playback
- Added real-time playback example called piano.py
- Added real-time playback example called bebot.py Which mimics the iPhone App called 'Bebot'
- Compiles on Mac again (#55)
- Closed #49: Buffer::getPow() undefined in python module
- Closed #50: AudioPlayback: use double buffering (added AudioPlaybackRt)
- Closed #55: nsound_config: update Mac version
- Closed #60: Filters: add a parameter 'bool is_realtime' like the Generator class (added setRealtime(bool) instead)
- Closed #61: Remove 'reset_first' and add member variable is_realtime for the Generator class (added setRealtime(bool) instead)
New in Nsound 0.9.0 (Jul 2, 2014)
- Added precompiled static libs of libao & libportaudio for Windows
- Added Visual Studio compiler again for Windows builds, 64-bit builds
- Can now build 64-bit Python module for Windows (no cygwin\mingw required)
- Added Visual Studio 2010+ project files (using VS 2012 Express) in msvs/
- Refactored SCons configuration a bit (nsound_config.py).
- Added some SCons custom builds in site_scons/site_tools
- Fixed an init problem with Moving Average Filter
- Added Buffer.mul() for multiplying over a sub-region of the buffer.
- Added getFrequencyOffset(f1, octaves, cents)
- Added kwargs to most Plotter functions
- Added Macros.h and C++ exceptions
- Added Python module C++ exception wrapping
- Added Python Buffer.toList() method, converts Buffer to Python List
- Added Utils.h, computes octaves and cents away from reference frequency
- Improved the Vocoder band-pass filter bank, vocoder example sounds much better
- Refactored some code to assert values and pointers, throwing exception or error
- Refactored lots of Plotter methods, now supports kwargs, added Axes class
- Changed Plotter::subplot(), now supports sharex, sharey (see example5.cc)
- Renamed AdsrEnvelope to EnvelopeAdsr and reworked completely to be more useful, calculates sustain time automatically.
- Removed duplicate plotting code, Nsound Python module calls the smae C++ code (Pylab.cc)
New in Nsound 0.8.2 (Jun 9, 2012)
- Fixed bug 3341096 FFTransform windowing
- Added Spectrogram class for calculating and plotting spectrograms
- Added AudioPlayback::getStateString()
- Added AudioPlayback::scanDevices() which will try to play a sample on all the available audio drivers detected
- Added Nsound::use(AudioBackendtype)
- Added Nsound::getBackends(), returns a list of strings of avaiable audio backends (libao or libportaudio).
- Updated AudioBackendLibao::setOptions(), now can select specific driver
- Updated AudioBackendLibportaudio::setOptions(), now can select specific driver
- Added AudioStream::pad(), ensures channels in the AudioStream are the same length
- Added AudioStream::transpose(), performs a matrix transpose by treating the AudioStream like a 2D matrix
- Added AudioStream::pow() & operator^ for powers
- Added Buffer::pow() & operator^ for powers
- Added Buffer::log(), log10()"
- Added Buffer::findPeaks() to find indicies of local peaks
- Removed some FFTChunk functions
- Added Generator::gausssianNoise() that draws random number from the normal distribution
- Added Plotter::imagesc() to plot AudioStreams, treating them like a 2D matrix, used by Spectrogram::plot()
- Enhanced Wavefile::read() to decode the format tag, but still only reads uncompressed PCM wavefiles
- Added example cepstral_pitch_estimate that calculates the cepstrum for pitch estimation
New in Nsound 0.8.1 (Jun 27, 2011)
- Added basic sound card playback via libao or libportaudio!
- Examples now play to the sound card!
- Made the scons build system smater in searching for the correct python
- lib to link with
- Enhanced the Wavefile class to handle unknown chunk ids and skip them
- Added User's Guide documenteation for Audio Playback and Instruments
New in Nsound 0.8.0 (Mar 28, 2011)
- Fixed Python Buffer slicing (bug 3204997)
- Fixed scons error with setup.py (bug 3168738)
- Fixed Generator::operator= (bug 3163766)
- Closed Hat::play() demo has small artifact (bug 3148915)
- Fixed Python AudioStream expressions
- Added Buffer(const FloatVector & list) constructor, allows Python expressions like "b = Buffer([1,2,3,4,5])"
- Added notice to SCons build to contact Nick with bugs and help requests
- Added lots of documentation to Generator including LaTeX formulas!
- Added small section "Getting Started" in the User's Guide
- Changed the signature to Generator::drawGaussian(), now specifies duration, mu, sigma
- Added Buffer::exp(), std(), zNorm()
- Added Buffer::operator^, operator^=
- Added Buffer::getNBytes()
- Added Generator::drawSine(), uses math, not a wavetable for precise waveforms with dynamic frequency.
- Added Generator::drawSine2(), uses math, not a wavetable for precise waveforms with dynamic frequency and phase.
- Added Generator::generate2(), waveforms with dynamic frequency and phase.
- Added CudaTool.py, for compiling Cuda .cu files (EXPERIMENTAL)
- Added StretcherCuda.cu, Cuda accelerated functions. (EXPERIMENTAL)
- Renamed Plotter::axisX to xlim, axisY to ylim
- Updated Doxyfile and set formula font size.
- Changed example1 to sound like Pac Man.
New in Nsound 0.7.5 (Jan 4, 2011)
- Minor interface changes
- Changed AudioStream::getMono(), now returns an AudioStream
- Changed Buffer.toPythonList() to Buffer.toList()
- Added the first draft of the Nsound User's Guide!
- Fixed a bug in Wavefile, ID3v1 tag called fclose() twice
- Fixed the Stretcher class for time shiffting Buffers.
- Fixed Wavefile bug, now able to read usigned 8 bit wavefiles.
- Added convenience functions zeros, ones, rand, for Buffers & AudioStreams
- Added AudioStream::select(), returns AudioStreamSelection
- Added Buffer::getResample(), dynamic case
- Added Buffer::select(), returns BufferSelection
- Added chorus setting to generators
- Added ability to sync generators together like an analog synth
- Added dynamics to FilterDelay, variable delay
- Added Sawtooth Generator class
- Added WindowTypes.h
- Added Generator::drawWindow()
- Added FilterLeastSquaresFIR::setWindow()
- Added FFTransform::setWindow(Window)
- Added FFTChunk::getFrequencyAxis()
- Added Plotter::grid()
- Added Plotter::hold()
- Added Plotter::set_xscale(), set_yscale()
- Added Square(sr, n_harmonics) construtor, sum of sine waves
- Added FilterFlanger
- Added FilterPhaser
- Added BufferWindowSearch
- Enhanced Buffer::getResample() to use windows of the input buffer,
- conserving memory useage.
- Allow Filter plot data in dB to go to -60 dB
- In the Python module, updated __getitem__() and __setitem__() functions
- to handle slice objects, returns new copy of a Buffer or AudioStream
New in Nsound 0.7.4 (Jan 4, 2011)
- Fixed bug 2944836 GCC 4.4.1+ errors
- Fixed bug 2948680 NsoundConfig_Cygwin.py
- Fixed bug 2944837 Python: FilterLowPassIIR.plot() fails
- Fixed bug 2974228: Wavefile read
- Fixed some byte swapping in Wavefile
- Fixed Buffer::getResample(), now matches Matlab's resample.m
- Added BufferResample_UnitTest()
- Added Buffer::operator
New in Nsound 0.7.4 (Jul 10, 2010)
- Fixed bug 2944836 GCC 4.4.1+ errors
- Fixed bug 2948680 NsoundConfig_Cygwin.py
- Fixed bug 2944837 Python: FilterLowPassIIR.plot() fails
- Fixed bug 2974228: Wavefile read
- Fixed some byte swapping in Wavefile
- Fixed Buffer::getResample(), now matches Matlab's resample.m
- Added BufferResample_UnitTest()
- Added Buffer::operator
New in Nsound 0.7.3 (Feb 10, 2010)
- Added Python2.6 support on Windows
- Added typedef std::vector< boolean > BooleanVector
- Added typedef std::vector< BooleanVector > BooleanVectorVector
- Added AudioStream::mono()
- Added AudioStream::getMono()
- Added class AudioStreamSelection
- Added class BufferSelection
- Added example7
- Added FilterStageIIR::operator=()
- Added Generator::drawWindowBartlett()
- Added Generator::drawWindowBlackman()
- Added Generator::drawWindowBlackmanHarris()
- Added Generator::drawWindowHamming()
- Added Generator::drawWindowHanning()
- Added Generator::drawWindowNuttall()
- Added Generator::drawWindowParzen()
- Added Generator::drawWindowRectangular()
- Added Instrument Hat
- Added Instrument OrganPipe (A pipe organ)
- Added TODO.txt, a list of things Nick would like to see get done
- Added Wavefile 64 & 32 floating point support (Most apps can't open
- 64-bit, but usefull for unit testing or saving high percision waveforms)
- Removed AudioStream::setLessThan(), new operators replace functionality
- Removed AudioStream::setGreaterThan(), new operators replace functionality
- Removed Buffer::setLessThan(), new operators replace functionality
- Removed Buffer::setGreaterThan(), new operators replace functionality
- Fixed FilterLowPassFIR::filter(AudioStream, float64) infinite recursion
- error
- Fixed FilterLowPassFIR::filter(x,y), was calling itself
- Fixed Generator::ctor(sample_rate, Buffer) memory copy
- Fixed NsoundConfig.py::checkForMatplotlibCAPI() bug, need to return 0;
- Fixed swig/plotting.i to report a warning when paylab is not avaliable
New in Nsound 0.7.2 (Feb 10, 2010)
- Code fixes to compile with GCC 4.3.3
- Added AudioStream::AudioStream(sample_rate, channels,
- preallocate)
- Added AudioStream::convolve() convolves the signal with any
- other signal
- Added AudioStream::downSample()
- Added AudioStream::limit(Buffer min, Buffer max)
- Added AudioStream::limit(min, max)
- Added AudioStream::resample()
- Added AudioStream::setGreaterThan(threshold, value)
- Added AudioStream::setLessThan(threshold, value)
- Added AudioStream::sqrt()
- Added AudioStream::upSample()
- Added Buffer::circular_iterator operators += and -=
- Added Buffer::convolve() convolves the signal with any other signal
- Added Buffer::downSample()
- Added Buffer::limit(Buffer min, Buffer max)
- Added Buffer::limit(min, max)
- Added Buffer::preallocate(n)
- Added Buffer::resample()
- Added Buffer::round()
- Added Buffer::setGreaterThan(threshold, value)
- Added Buffer::setLessThan(theshold, value)
- Added Buffer::sqrt()
- Added Buffer::upSample()
- Added Cosine generator
- Added DrumBD01 based on Istvan Varga's drum kits
- Added Docs/How_To_Reverse_Engineer_Csound_Instrument.odt
- Added FFTransform::fft(Buffer) and FFTransform::ifft(Buffer)
- Added Filter::filter(AudioStream, float64)
- Added Filter::filter(Buffer, float64)
- Added FilterBandPassFIR::filter(AudioStream, float64, float64)
- Added FilterBandPassIIR::filter(AudioStream, float64, float64)
- Added FilterBandRejectFIR::filter(Buffer, float64, float64)
- Added FilterBandRejectIIR::filter(Buffer, float64, float64)
- Added FilterHighPassFIR::filter(Buffer, float64)
- Added FilterHighPassIIR::filter(Buffer, float64)
- Added FilterLowPassFIR::filter(AudioStream, float64)
- Added FilterLowPassIIR::filter(AudioStream, float64)
- Added FilterStageIIR::filter(AudioStream, float64)
- Added Generator::buzz(), generates a set of harmonics
- Added Generator::buzz() unit tests
- Added Generator::reset()
- Added Generator::setPhase()
- Added Generator::tell()
- Added Plotter::run_string(string), sends raw string command to
- Python
- Fixed FilterTone::filter(), a bug when using dynamic frequencies
- Fixed Generator::generate_(), changed some if's to while's
- Fixed Plotter, added an internal state to avoid initializing the Python
- interpreter multiple times, prevents crashes
- Removed DMALLOC stuff from NsoundConfig.py