{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sounds as Vectors" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as pt\n", "\n", "from html5_audio import DEFAULT_RATE, get_html5_wave_player" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a function that produces a 'beep' with a parabola as an 'envelope':" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def make_beep(freq, duration=0.3):\n", " nsamples = DEFAULT_RATE * duration\n", "\n", " t = np.linspace(0, duration, nsamples)\n", " data = np.sin(freq*2*np.pi*t)\n", "\n", " ramp = np.linspace(0, 1, nsamples)\n", " data = data * (1-ramp)**2\n", " \n", " return data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's put one into the variable `beep`:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "beep = make_beep(440)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's just a numpy array:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "numpy.ndarray" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(beep)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A pretty long one though:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(13230,)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beep.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pt.plot(beep)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This consists of 44100 'samples' (=data points) per second of sound." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_html5_wave_player(beep)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "-----------------------\n", "Can we compose some simple 'music' with this? Let's shoot for three seconds..." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "music = np.zeros(DEFAULT_RATE * 3, dtype=np.float32)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "beep1 = make_beep(880, duration=0.8)\n", "beep2 = make_beep(880 * 1.5, duration=0.8)\n", "beep3 = make_beep(880 * 2, duration=0.8)\n", "l = len(beep1)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "music.fill(0)\n", "music[0:l] += beep1\n", "s = int(0.3*DEFAULT_RATE)\n", "music[s:s+l] += 0.1*beep2\n", "s = int(0.6*DEFAULT_RATE)\n", "music[s:s+l] += 0.5*beep3" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_html5_wave_player(0.3*music)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 }