Exemple #1
0
    def test_06(self):
        "Buffer operators with different lengths"

        sine = ns.Sine(100)

        b1 = ns.Buffer(100)
        b1 = sine.drawLine(1.0, 2.0, 2.0)

        b2 = ns.Buffer(100)
        b2 = sine.drawLine(2.0, 3.0, 3.0)

        result = b1 * b2

        self.assertEqual(b1.getLength(), result.getLength())

        for x in result:
            self.assertAlmostEqual(6.0, x, self.GAMMA)

        result = b2 * b1

        self.assertEqual(b2.getLength(), result.getLength())

        for i in xrange(b1.getLength()):
            self.assertAlmostEqual(6.0, result[i], self.GAMMA)

        for i in xrange(b1.getLength(), result.getLength()):
            self.assertAlmostEqual(3.0, result[i], self.GAMMA)
Exemple #2
0
    def test_10(self):
        "AudioStream operators with different lengths ..."

        sine = ns.Sine(100)

        a1 = ns.AudioStream(100, 2)
        a1 << sine.drawLine(1.0, 2.0, 2.0)

        a2 = ns.AudioStream(100, 2)
        a2 << sine.drawLine(2.0, 3.0, 3.0)

        result = a1 * a2

        self.assertNotEqual(a2[0].getLength(), result[0].getLength())

        for x in result[0]:
            self.assertAlmostEqual(6.0, x, self.GAMMA)

        result = a2 * a1

        self.assertEqual(a2[0].getLength(), result[0].getLength())

        for i in xrange(a1[0].getLength()):
            self.assertAlmostEqual(6.0, result[0][i])

        for i in xrange(a1[0].getLength(), result[0].getLength()):
            self.assertAlmostEqual(3.0, result[0][i], self.GAMMA)
Exemple #3
0
    def test_11(self):
        "AudioStream slices ..."

        print "\n"

        sine = ns.Sine(100)

        a1 = ns.AudioStream(100, 3)
        a1 << sine.drawLine(1.0, 1.0, 1.0)

        a1[0] += 1.0
        a1[2] += 1.0

        for b in a1[0]:
            self.assertAlmostEqual(2.0, b, self.GAMMA)

        for b in a1[1]:
            self.assertAlmostEqual(1.0, b, self.GAMMA)

        for b in a1[2]:
            self.assertAlmostEqual(2.0, b, self.GAMMA)

        selection = a1.select(0, 2) # selects channels 0,1
        selection -= 1.0

        for b in a1[0]:
            self.assertAlmostEqual(1.0, b, self.GAMMA)

        for b in a1[1]:
            self.assertAlmostEqual(0.0, b, self.GAMMA)

        for b in a1[2]:
            self.assertAlmostEqual(2.0, b, self.GAMMA)
Exemple #4
0
    def test_3(self):
        "Test 3"

        SR = 44100
        T = 0.01
        N = int(round(T * SR, 1))

        pb = ns.AudioPlaybackRt(SR, 1, 10, T)

        info = pb.get_debug_info()

        self.assertEqual(10, info.pool_size)
        self.assertEqual(N, info.samples_per_buffer)

        self.assertEqual(0, info.rd_ptr)
        self.assertEqual(0, info.wr_ptr)
        self.assertEqual(0, info.wr_index)
        self.assertEqual(0, info.n_ready)
        self.assertEqual(False, info.is_streaming)

        gen = ns.Sine(SR)

        dur = 1 * T

        buf = gen.silence(dur)

        pb.play(buf)

        time.sleep(dur)
Exemple #5
0
    def test_06(self):
        "::operator+,-,*,/ ..."

        a1 = ns.AudioStream(100, 1)
        a2 = ns.AudioStream(100, 1)

        for i in xrange(10):
            a1 << i + 1
            a2 << i + 1

        self.assertEqual(1 + a1 * 2, 2 * a2 + 1)
        self.assertEqual(1 - a1 / 2, -1 * a2 / 2 + 1)

        t1 = 2.0 / a1
        t2 = 4.0 * (0.5 / a2)

        for i in xrange(t1[0].getLength()):
            self.assertAlmostEqual(t1[0][i], t2[0][i], self.GAMMA)

        a1 = -1.0 * a2
        a2 += a1

        for buf in a2:
            for x in buf:
                self.assertAlmostEqual(x, 0.0, self.GAMMA)
Exemple #6
0
    def test_2(self):
        "Test 2"

        fn_gold_in = fn("gold/Wavefile_out1.wav")
        fn_gold_out = fn("gold/Wavefile_out2.wav")
        fn_data = fn("test_wavefile2.wav")

        data = ns.AudioStream(fn_gold_in)

        ns.Wavefile.setDefaultSampleSize(24)

        data >> fn_data

        data = ns.AudioStream(fn_data)

        #~        # Create gold file
        #~        data >> fn_gold_out

        gold = ns.AudioStream(fn_gold_out)

        diff = data - gold

        abs_diff = diff.getAbs()

        if abs_diff.getMax() > self.GAMMA:

            abs_diff.plot("Absolute diff (data - gold)")
            ns.Plotter.show()

            raise ValueError("Broken!")
Exemple #7
0
    def remake_oscillator(self, widget):

        self._need_redraw_lock.acquire()

        if widget.type == OscType.SINE:
            self._oscillators[widget._id] = Nsound.Sine(self._sample_rate)

        elif widget.type == OscType.SAWTOOTH:
            self._oscillators[widget._id] = Nsound.Sawtooth(
                self._sample_rate, widget.harmonics)

        elif widget.type == OscType.SQUARE:
            self._oscillators[widget._id] = Nsound.Square(
                self._sample_rate, widget.harmonics)

        elif widget.type == OscType.PULSE:

            self._oscillators[widget._id] = Nsound.Pulse(
                self._sample_rate, widget.pulse_width)

        if widget.sync:
            self._oscillators[0].addSlaveSync(self._oscillators[widget._id])

        self._need_redraw = True
        self._need_redraw_lock.release()
Exemple #8
0
def play_sound():
    buff = ns.Buffer()
    i = 0
    for x in inc_freq:
        if (x):
            buff = buff + ns.Sine(sr).generate(1,
                                               (freq[i] +
                                                (scale_val / 100.0) * freq[i]))
        i += 1

    while (True in inc_freq):
        buff >> ns.AudioPlayback(sr, 2, 32)
Exemple #9
0
    def test_04(self):
        "Buffer::reverse()"

        b = ns.Buffer()
        b << 1.1 << 2.2 << 3.3 << 4.4
        b.reverse()

        gold = ns.Buffer()
        gold << 4.4 << 3.3 << 2.2 << 1.1

        for i in xrange(b.getLength()):
            self.assertAlmostEqual(gold[i], b[i], self.GAMMA)
Exemple #10
0
    def test_02(self):
        "Buffer copy constructor"

        b1 = ns.Buffer()
        b1 << 1.1 << 2.2 << 3.3 << 4.4

        b2 = ns.Buffer(b1)

        try:
            self.assertEqual(b1, b2)
            self.assertEqual(b2, b1)

        except:
            self._plot_diff(b1, b2, "b1", "b2")
            raise

        b3 = ns.Buffer(b2)
        b4 = ns.Buffer(b3)

        b4 << b1
        b3 << b1

        try:
            self.assertEqual(b3, b4)
            self.assertEqual(b4, b3)

        except:
            self._plot_diff(b3, b4, "b1", "b2")
            raise

        size = b4.getLength()

        for i in xrange(size):

            try:
                self.assertAlmostEqual(b4[i], b3[i], self.GAMMA)

            except:
                self._plot_diff(b3, b4, "b3", "b4")
                raise

        self.assertEqual(1 + b4 * 2, 2 * b3 + 1)
        self.assertEqual(1 - b4 / 2, -1 * b3 / 2 + 1)
        self.assertEqual(2.0 / b4, 4.0 * (0.5 / b3))

        b3 = -1.0 * b4

        b4 += b3

        for i in xrange(b4.getLength()):
            self.assertAlmostEqual(b4[i], 0.0, self.GAMMA)
Exemple #11
0
    def test_08(self):
        "Buffer advanced slicing"

        b1 = ns.Buffer([1, 2, 3, 4, 5])

        b2 = b1[1:]

        self.assertEqual(b2, ns.Buffer([2, 3, 4, 5]))

        b2 = b1[:1]

        self.assertEqual(b2, ns.Buffer([1.0]))

        b2 = b1[1:2]

        self.assertEqual(b2, ns.Buffer([2.0]))

        b2 = b1[2:1]

        self.assertEqual(b2, ns.Buffer([]))

        b2 = b1[-1:]

        self.assertEqual(b2, ns.Buffer([5.0]))

        b2 = b1[-1:-2]

        self.assertEqual(b2, ns.Buffer([]))

        b2 = b1[-2:-1]

        self.assertEqual(b2, ns.Buffer([4]))
Exemple #12
0
    def test_02(self):
        "AudioStream copy constructor"

        a1 = ns.AudioStream(100, 1)
        a1 << 1.1 << 2.2 << 3.3 << 4.4

        a2 = ns.AudioStream(a1)

        try:
            self.assertEqual(a1, a2)
            self.assertEqual(a2, a1)
        except:
            self._plot_diff(a1[0], a2[0], "a1", "a2")
            raise
Exemple #13
0
    def test_13(self):
        "AudioStream buffer assignment and transpose"

        b = ns.Buffer()
        b << 1 << 2 << 3 << 4

        a = ns.AudioStream(1, 2)

        a[0] = b
        a[1] = b.getReverse()

        self.assertEqual(2, a.getNChannels())
        self.assertEqual(4, a.getLength())

        self.assertAlmostEqual(a[0], ns.Buffer([1,2,3,4]), self.GAMMA)
        self.assertAlmostEqual(a[1], ns.Buffer([4,3,2,1]), self.GAMMA)

        a.transpose()

        self.assertEqual(4, a.getNChannels())
        self.assertEqual(2, a.getLength())

        self.assertAlmostEqual(a[0], ns.Buffer([1,4]), self.GAMMA)
        self.assertAlmostEqual(a[1], ns.Buffer([2,3]), self.GAMMA)
        self.assertAlmostEqual(a[2], ns.Buffer([3,2]), self.GAMMA)
        self.assertAlmostEqual(a[3], ns.Buffer([4,1]), self.GAMMA)
    def test_03(self):
        "FilterMedian stuff"

        fm = ns.FilterMedian(4)

        b1 = ns.Buffer([6, 4, 2, 1, 7, 3, 5, 9, 4, 6, 2])

        data = fm.filter(b1)

        gold = [6, 6, 6, 4, 4, 3, 3, 5, 5, 5, 5]

        # convert to int for comparison conviences
        data = [int(x) for x in data]

        self.assertEqual(gold, data)
    def test_01(self):
        "FilterMedian stuff"

        fm = ns.FilterMedian(3)

        b1 = ns.Buffer([1, 2, 3, 4, 5, 6, 7])

        data = fm.filter(b1)

        gold = [1, 1, 2, 3, 4, 5, 6]

        # convert to int for comparison conviences
        data = [int(x) for x in data]

        self.assertEqual(gold, data)
Exemple #16
0
    def test_09(self):
        "AudioStream::substream() ..."

        a1 = ns.AudioStream(100, 2)

        chunk = 100

        for i in range(chunk * 2 + 1):
            a1 << i

        test_size = 99 / 100.0

        substream = a1.substream(0, test_size)

        self.assertAlmostEqual(test_size, substream.getDuration(), self.GAMMA/2)

        test_size = 1.0

        substream = a1.substream(0, test_size)

        self.assertAlmostEqual(test_size, substream.getDuration(), self.GAMMA)

        test_size = a1.getDuration() + 1.0

        substream = a1.substream(0, test_size)

        self.assertAlmostEqual(a1.getDuration(), substream.getDuration(), self.GAMMA)

        test_size = (chunk + 10) / 100.0

        for i in xrange(10):

            substream = a1.substream(i/100.0, test_size)

            self.assertAlmostEqual(test_size, substream.getDuration())

        substream = a1.substream(0, 0.10)

        for i in xrange(10):
            self.assertAlmostEqual(i, substream[0][i], self.GAMMA)

        substream = a1.substream(0.031, 0.031)

        for i in xrange(3):
            self.assertAlmostEqual(i + 3, substream[0][i])

        substream = a1.substream(3.1/100.0)

        self.assertEqual(a1[0].getLength() - 3, substream[0].getLength())

        substream = a1.substream(0)

        self.assertEqual(a1[0].getLength(), substream[0].getLength())

        for i in xrange(10):
            self.assertAlmostEqual(i, substream[0][i], self.GAMMA)

        substream = a1.substream(5.1/100.0,5.1/100.0)

        self.assertEqual(5, substream[0].getLength())
Exemple #17
0
    def test_10(self):
        "Buffer::circular_iterator forward"

        b1 = ns.Buffer([1, 2, 3])

        c = b1.cbegin()

        b2 = ns.Buffer()

        for i in xrange(10):
            b2 << float(c)
            c += 1

        gold = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]

        np.testing.assert_almost_equal(gold, b2)
Exemple #18
0
    def test_12(self):
        "AudioStream pickling"

        gold = [1.1, 2.2, 3.3, 4.4, 5.5]

        as1 = ns.AudioStream(2, 2)

        as1 << gold

        fn = 'audio_stream.pkl'

        with open(fn, 'w') as fd:
            pickle.dump(as1, fd)

        with open(fn, 'r') as fd:
            obj = pickle.load(fd)

        self.assertEqual(2, int(obj.getSampleRate()))
        self.assertEqual(2, obj.getNChannels())

        for i in xrange(2):
            data = obj[i].toList()
            np.testing.assert_almost_equal(gold, data)

        if os.path.isfile(fn):
            os.remove(fn)
Exemple #19
0
    def test_10(self):
        "Buffer::circular_iterator backward"

        b1 = ns.Buffer([1,2,3])

        c = b1.cbegin()

        b2 = ns.Buffer()

        for i in range(10):
            c -= 1

            b2 << float(c)

        gold = [3,2,1,3,2,1,3,2,1,3]

        np.testing.assert_almost_equal(gold, b2)
Exemple #20
0
    def open_reference(self, widget, filename=None):

        if filename == None:

            dialog = gtk.FileChooserDialog(
                "Open Reference .wav file",
                action=gtk.FILE_CHOOSER_ACTION_OPEN,
                buttons=(gtk.STOCK_OPEN, gtk.RESPONSE_OK, gtk.STOCK_CANCEL,
                         gtk.RESPONSE_CANCEL))

            if self._last_path != None:
                dialog.set_current_folder(self._last_path)

            file_filter = gtk.FileFilter()
            file_filter.set_name("Wavefiles")
            file_filter.add_pattern("*.wav")
            dialog.add_filter(file_filter)

            response = dialog.run()

            if response != gtk.RESPONSE_OK:
                dialog.destroy()
                return

            filename = dialog.get_filename()
            dirname = os.path.dirname(filename)
            dialog.destroy()
            self._last_path = dirname

        # Load the wavefile
        try:
            a = Nsound.AudioStream(filename)
        except:
            raise RuntimeError("Could not read wavefile '%s'" % filename)

        a.normalize()

        ref_sr = a.getSampleRate()
        self._duration = a.getDuration()

        # Set the global self._sample_rate
        if self._sample_rate != ref_sr:

            self._sample_rate = ref_sr

            for widget in self._osc_widgets:
                self.remake_oscillator(widget)

            for widget in self._filter_widgets:
                self.remake_filter(widget)

        # Save the reference Nsound.Buffer object
        self._need_redraw_lock.acquire()
        self._reference_wave = a[0]
        self._need_redraw = True
        self._need_redraw_lock.release()
Exemple #21
0
    def test_04(self):
        "AudioStream::operator<<(const AudioStream &) ..."

        a1 = ns.AudioStream(100, 1)

        for i in xrange(10):
            a1 << i

        a2 = ns.AudioStream(a1)
        a3 = ns.AudioStream(a2)

        a2 << a1
        a3 << a1

        try:
            self.assertEqual(a2, a3)
        except:
            self._plot_diff(a2[0], a3[0], "a2", "a3")
            raise
Exemple #22
0
    def test_05(self):
        "AudioStream::operator[](uint32) ..."

        a1 = ns.AudioStream(100, 1)
        a2 = ns.AudioStream(100, 1)

        for i in xrange(10):
            a1 << i
            a2 << i

        size = a1[0].getLength()

        try:
            for i in xrange(size):
                self.assertAlmostEqual(a1[0][i], a2[0][i], self.GAMMA)

        except:
            self._plot_diff(a1[0], a2[0], "a1", "a2")
            raise
Exemple #23
0
    def test_1(self):
        "Test 1"

        fn_gold = fn("gold/Wavefile_out1.wav")
        fn_data = fn("test_wavefile1.wav")

        sr = 100
        n_channels = 3

        ns.Wavefile.setDefaultSampleSize(48)

        sin = ns.Sine(sr)

        data = ns.AudioStream(sr, n_channels)

        data << sin.generate(1.0, 13.0)

        data[1] *= 0.666666666666666
        data[2] *= 0.333333333333333

        # Write data to disk, read it back in.

        data >> fn_data

        #~        # Create gold file
        #~        data >> fn_gold

        data = ns.AudioStream(fn_data)
        gold = ns.AudioStream(fn_gold)

        diff = data - gold

        abs_diff = diff.getAbs()

        if abs_diff.getMax() > self.GAMMA:

            abs_diff.plot("Absolute diff (data - gold)")

            ns.Plotter.show()

            raise ValueError("Broken!")
Exemple #24
0
    def test_03(self):
        "AudioStream::operator<<(Buffer)"

        a1 = ns.AudioStream(100, 1)
        b1 = ns.Buffer()

        for i in xrange(10):
            a1 << i
            b1 << i

        a2 = ns.AudioStream(a1)
        a3 = ns.AudioStream(a2)

        a2 << b1
        a3 << b1

        try:
            self.assertEqual(a2, a3)
        except:
            self._plot_diff(a2[0], a3[0], "a2", "a3")
            raise
Exemple #25
0
    def test_2(self):
        "Test 2"

        SR = 44100
        T = 0.01
        N = int(round(T * SR, 1))

        pb = ns.AudioPlaybackRt(SR, 1, 10, T)

        info = pb.get_debug_info()

        self.assertEqual(10, info.pool_size)
        self.assertEqual(N, info.samples_per_buffer)

        self.assertEqual(0, info.rd_ptr)
        self.assertEqual(0, info.wr_ptr)
        self.assertEqual(0, info.wr_index)
        self.assertEqual(0, info.n_ready)
        self.assertEqual(False, info.is_streaming)

        # Play some samples

        for i in xrange( 10 * N):
            pb.play(0)

        # Note: not sleepping, trying to capture n_ready from 10 to 0

        info = pb.get_debug_info()

        self.assertEqual(False, info.is_streaming)
        self.assertEqual(10, info.n_ready)

        x = set()

        for i in xrange(1 << 10):
            pb.play(0)
            info = pb.get_debug_info()
            if info.is_streaming: break

        self.assertEqual(True, info.is_streaming)

        while info.n_ready != 0:
            self.assertEqual(True, info.is_streaming)
            info = pb.get_debug_info()
            x.add(info.n_ready)

        gold = set(range(11))

        # print "gold = ", gold
        # print "x    = ", x

        self.assertEqual(gold, x)
Exemple #26
0
 def play(self, duration, frequency):
     samplerate = self.samplerate
     if not frequency:
         return Nsound.Buffer.zeros(int(samplerate * duration))
     out = Nsound.AudioStream(samplerate, 1)  # mono
     cycles = int(samplerate / frequency)
     ring = collections.deque(Nsound.Buffer.rand(cycles).toList())
     for i in xrange(int(samplerate * duration)):
         out << ring[0]
         avg = 0.996 * 0.5 * (ring[0] + ring[1])
         ring.append(avg)
         ring.popleft()
     return 0.25 * out
Exemple #27
0
    def remake_filter(self, widget):

        self._need_redraw_lock.acquire()

        if widget.ir_type == IRType.IIR:

            if widget.filter_type == FilterType.LOW_PASS:
                f = Nsound.FilterLowPassIIR(self._sample_rate, widget.order,
                                            widget.fc_low, widget.ripple)

            elif widget.filter_type == FilterType.HIGH_PASS:
                f = Nsound.FilterHighPassIIR(self._sample_rate, widget.order,
                                             widget.fc_high, widget.ripple)

            elif widget.filter_type == FilterType.BAND_PASS:
                f = Nsound.FilterBandPassIIR(self._sample_rate, widget.order,
                                             widget.fc_low, widget.fc_high,
                                             widget.ripple)

            elif widget.filter_type == FilterType.BAND_REJECT:
                f = Nsound.FilterBandRejectIIR(self._sample_rate, widget.order,
                                               widget.fc_low, widget.fc_high,
                                               widget.ripple)

        elif widget.ir_type == IRType.FIR:

            if widget.filter_type == FilterType.LOW_PASS:
                f = Nsound.FilterLowPassFIR(self._sample_rate, widget.order,
                                            widget.fc_low)

            elif widget.filter_type == FilterType.HIGH_PASS:
                f = Nsound.FilterHighPassFIR(self._sample_rate, widget.order,
                                             widget.fc_high)

            elif widget.filter_type == FilterType.BAND_PASS:
                f = Nsound.FilterBandPassFIR(self._sample_rate, widget.order,
                                             widget.fc_low, widget.fc_high)

            elif widget.filter_type == FilterType.BAND_REJECT:
                f = Nsound.FilterBandRejectFIR(self._sample_rate, widget.order,
                                               widget.fc_low, widget.fc_high)

        self._filters[widget._id] = f

        self._need_redraw = True
        self._need_redraw_lock.release()
Exemple #28
0
    def test_08(self):
        "AudioStream::reverse() ..."

        a1 = ns.AudioStream(100, 2)

        for f in xrange(100):
            a1 << f

        a1.reverse()

        for buf in a1:
            index = 0;
            for f in xrange(99, -1, -1):
                self.assertAlmostEqual(float(f), buf[index], self.GAMMA)
                index += 1
Exemple #29
0
    def test_01(self):
        "AudioStream::operator<<(float64)"

        a1 = ns.AudioStream(100, 2)

        i = 0.0
        while  i < 100.0:
            a1 << i
            i += 1.1

        for buf in a1:
            i = 0.0
            for x in buf:
                self.assertAlmostEqual(x, i, self.GAMMA)
                i += 1.1
Exemple #30
0
    def test_01(self):
        "Basic buffer stuff"

        ns.Wavefile.setDefaultSampleSize(48)

        b1 = ns.Buffer(29)

        i = 0.0
        while i < 100.0:
            b1 << i
            i += 1.1

        i = 0.0
        for x in b1:
            self.assertAlmostEqual(x, i, self.GAMMA)
            i += 1.1