Nsound Changelog

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