Example #1
0
class AudioApp(App):

    def build(self):
        root = GridLayout(padding=20, spacing=10, cols=4)
        self.stream = AudioStream(channels=2, buffersize=1024)
        self.gens = {}

        for x in xrange(20):
            sample = AudioSample(partial(self.audio_callback, x))
            self.stream.add_sample(sample)
            btn = Button(text='Sample %d' % x)
            btn.bind(state=partial(self.update_state, x))
            slider = Slider(min=110, max=880, value=440)
            slider.bind(value=partial(self.update_freq, x))
            root.add_widget(btn)
            root.add_widget(slider)

            # generators
            gen_left = sine_wave()
            gen_right = sine_wave(frequency=220.0)
            self.gens[x] = [sample, gen_left, gen_right, None, None]

        return root

    def update_freq(self, x, slider, value):
        self.gens[x][3] = value
        self.gens[x][4] = value / 2

    def update_state(self, x, instance, value):
        if value == 'down':
            self.gens[x][0].play()
        elif value == 'normal':
            self.gens[x][0].stop()

    def audio_callback(self, x, sample, index, bufsize):
        buf = []
        f = (2 ** 16) / pi
        lvl = lvr = None
        g = self.gens[x]
        gen_left, gen_right, next_freq_left, next_freq_right = g[1:]
        while len(buf) < bufsize / 2:
            vl = int(gen_left.next() * f)
            vr = int(gen_right.next() * f)
            if next_freq_left and lvl == 0 and vl > 0:
                g[1] = gen_left = sine_wave(frequency=next_freq_left)
                g[3] = next_freq_left = None
                vl = int(gen_left.next() * f)
            if next_freq_right and lvr == 0 and vr > 0:
                g[2] = gen_right = sine_wave(frequency=next_freq_right)
                g[4] = next_freq_right = None
                vr = int(gen_right.next() * f)
            lvl = vl
            lvr = vr
            buf.append(vl)
            buf.append(vr)
        return pack('h' * len(buf), *buf)
Example #2
0
class AudioApp(App):
    def build(self):
        root = GridLayout(padding=20, spacing=10, cols=4)
        self.stream = AudioStream(channels=2, buffersize=1024)
        self.gens = {}

        for x in xrange(20):
            sample = AudioSample(partial(self.audio_callback, x))
            self.stream.add_sample(sample)
            btn = Button(text='Sample %d' % x)
            btn.bind(state=partial(self.update_state, x))
            slider = Slider(min=110, max=880, value=440)
            slider.bind(value=partial(self.update_freq, x))
            root.add_widget(btn)
            root.add_widget(slider)

            # generators
            gen_left = sine_wave()
            gen_right = sine_wave(frequency=220.0)
            self.gens[x] = [sample, gen_left, gen_right, None, None]

        return root

    def update_freq(self, x, slider, value):
        self.gens[x][3] = value
        self.gens[x][4] = value / 2

    def update_state(self, x, instance, value):
        if value == 'down':
            self.gens[x][0].play()
        elif value == 'normal':
            self.gens[x][0].stop()

    def audio_callback(self, x, sample, index, bufsize):
        buf = []
        f = (2**16) / pi
        lvl = lvr = None
        g = self.gens[x]
        gen_left, gen_right, next_freq_left, next_freq_right = g[1:]
        while len(buf) < bufsize / 2:
            vl = int(gen_left.next() * f)
            vr = int(gen_right.next() * f)
            if next_freq_left and lvl == 0 and vl > 0:
                g[1] = gen_left = sine_wave(frequency=next_freq_left)
                g[3] = next_freq_left = None
                vl = int(gen_left.next() * f)
            if next_freq_right and lvr == 0 and vr > 0:
                g[2] = gen_right = sine_wave(frequency=next_freq_right)
                g[4] = next_freq_right = None
                vr = int(gen_right.next() * f)
            lvl = vl
            lvr = vr
            buf.append(vl)
            buf.append(vr)
        return pack('h' * len(buf), *buf)
Example #3
0
    def build(self):
        root = GridLayout(padding=20, spacing=10, cols=4)
        self.stream = AudioStream(channels=2, buffersize=1024)
        self.gens = {}

        for x in xrange(20):
            sample = AudioSample(partial(self.audio_callback, x))
            self.stream.add_sample(sample)
            btn = Button(text='Sample %d' % x)
            btn.bind(state=partial(self.update_state, x))
            slider = Slider(min=110, max=880, value=440)
            slider.bind(value=partial(self.update_freq, x))
            root.add_widget(btn)
            root.add_widget(slider)

            # generators
            gen_left = sine_wave()
            gen_right = sine_wave(frequency=220.0)
            self.gens[x] = [sample, gen_left, gen_right, None, None]

        return root
Example #4
0
    def build(self):
        root = GridLayout(padding=20, spacing=10, cols=4)
        self.stream = AudioStream(channels=2, buffersize=1024)
        self.gens = {}

        for x in xrange(20):
            sample = AudioSample(partial(self.audio_callback, x))
            self.stream.add_sample(sample)
            btn = Button(text='Sample %d' % x)
            btn.bind(state=partial(self.update_state, x))
            slider = Slider(min=110, max=880, value=440)
            slider.bind(value=partial(self.update_freq, x))
            root.add_widget(btn)
            root.add_widget(slider)

            # generators
            gen_left = sine_wave()
            gen_right = sine_wave(frequency=220.0)
            self.gens[x] = [sample, gen_left, gen_right, None, None]

        return root