{ "metadata": { "name": "Csound6 Tutorial POC" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": "Csound Tutorial with IPython Proof of Concept" }, { "cell_type": "markdown", "metadata": {}, "source": "By Jacob Joaquin<br />\nMay 2013<br />\nRevised May 7th, 2013" }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Introduction" }, { "cell_type": "markdown", "metadata": {}, "source": "Welcome to this the \"Csound Tutorial with IPython Proof of Concept\". This isn't meant to be a full tutorial, though it certainly does showcase some of the basic requirements of using the Csound6 API.\n\nBefore we get started, I want to thank the devs for all their insight on the Csound Mailing List. I would have not been able to get the Csound6 API up and running without their help.\n\nI would also like to thank Fran\u00e7ois Pinot for his Csound Journal article <a href=\"http://www.csounds.com/journal/issue14/realtimeCsoundPython.html\">Real-time Coding Using the Python API: Score Events</a>. If you ever want to use IPython with Csound, I highly recommend you start with this." }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Setting Up IPython Notebook" }, { "cell_type": "markdown", "metadata": {}, "source": "To get things going, we need to be able to import the Python Csound6 library. Since Csound6 is still isn't released and you're most likely running your own build, there is some additional setup required. This may vary from system to system, but here are somethings to try in OS X and possibly other Unix based environments.\n\nThe first thing is to make sure you have your paths set correctly. Before launching IPython Notebook, I set the OPCODE6DIR64 environmental variable to the correct opcode directory." }, { "cell_type": "raw", "metadata": {}, "source": "export OPCODE6DIR64=/Users/clu/code/csound/csound-csound6-git/build/CsoundLib64.framework/Resources/Opcodes" }, { "cell_type": "markdown", "metadata": {}, "source": "When I launch IPython notebook, I also make sure to include additional arguments to ensure that graphs are created and embedded inline with the followind command-line action." }, { "cell_type": "raw", "metadata": {}, "source": "ipython notebook --pylab inline" }, { "cell_type": "markdown", "metadata": {}, "source": "Now we can get things going." }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Using Csound6 API" }, { "cell_type": "markdown", "metadata": {}, "source": "One more path needs to be set for this to work, and that's the path of the Csound6 build. You'll you need to change out the path in the following cell to point to the build location of Csound6 on your machine." }, { "cell_type": "code", "collapsed": false, "input": "import sys\nsys.path.append(\"/Users/clu/code/csound/csound-csound6-git/build/\")\nimport csnd6", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": "Next, we create a csnd6 object as well as a csnd6 performance thread. Other things such as sending audio to the DAC, setting the rates, the channels, and 0dbfs." }, { "cell_type": "code", "collapsed": false, "input": "cs = csnd6.Csound()\ncsPerf = csnd6.CsoundPerformanceThread(cs)\ncs.SetOption('-odac')\ncs.CompileOrc('''\nsr = 44100\nkr = 4410\nksmps = 10\nnchnls = 1\n0dbfs = 1.0\n''')", "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 2, "text": "0" } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": "Finally, we press the play button, which involves calling the csnd6 Start() method and the performance thread Play() method. (if there's a better way, let me know)" }, { "cell_type": "code", "collapsed": false, "input": "cs.Start()\ncsPerf.Play()", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": "Csound is now running. At this point, there are no instruments loaded. Using the CompileOrc() method, we can load instruments dynamically into a runnind Csound process." }, { "cell_type": "code", "collapsed": false, "input": "cs.CompileOrc('''\ninstr 1\n idur = p3\n iamp = p4\n ifreq = p5\n\n k1 line 1, idur, 0\n a1 oscils iamp, ifreq, 1\n out a1 * k1\nendin\n''')", "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 4, "text": "0" } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": "Score events can be via the ReadScore() mehtod." }, { "cell_type": "code", "collapsed": false, "input": "cs.ReadScore('i 1 0 1 0.5 440')", "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 5, "text": "0" } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": "Or events can be created in the orchestra like this:" }, { "cell_type": "code", "collapsed": false, "input": "cs.CompileOrc('''event_i \"i\", 1, 0, 1, 0.5, 262''')", "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 6, "text": "0" } ], "prompt_number": 6 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Playing with Python" }, { "cell_type": "markdown", "metadata": {}, "source": "This is just a small example of using the Python language to generate score events. First, I'm going to define a custom function that will make generating events a little more pythonic." }, { "cell_type": "code", "collapsed": false, "input": "def event(*args):\n e = ' '.join(map(str, args))\n cs.ReadScore(e)\n print e", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": "This definition allows us to create parameterized events rather than having to concatenate strings. Additionally, this prints the actual score event string being generated." }, { "cell_type": "code", "collapsed": false, "input": "event('i', 1, 0, 0.25, 0.707, 262)", "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": "i 1 0 0.25 0.707 262\n" } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": "Let's generate some random frequencies. First, we import the Python random() function." }, { "cell_type": "code", "collapsed": false, "input": "from random import random", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": "Then we create a loop that generates 8 notes with a random frequeny between 440Hz and 880Hz." }, { "cell_type": "code", "collapsed": false, "input": "for t in xrange(8):\n event('i', 1, t, 1, 0.707, 440 + 440 * random())", "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": "i 1 0 1 0.707 595.345239993\ni 1 1 1 0.707 584.875655908\ni 1 2 1 0.707 664.103711761\ni 1 3 1 0.707 643.93130537\ni 1 4 1 0.707 852.790209143\ni 1 5 1 0.707 720.383147878\ni 1 6 1 0.707 598.042138928\ni 1 7 1 0.707 524.759562968\n" } ], "prompt_number": 10 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Plotting Tables" }, { "cell_type": "markdown", "metadata": {}, "source": "One of the beautiful aspects of IPython Notebook is the ability to easily create and display graphs. This can be applied to Csound f-tables. Below are two functions. The first, make_table(), creates a Csound f-table. The second, get_table_data(), returns a list of values contained in an f-table." }, { "cell_type": "code", "collapsed": false, "input": "def make_table(*args):\n data = ', '.join(map(str, list(args)))\n data = 'gitemp ftgen ' + data\n print data\n cs.CompileOrc(data)\n\ndef get_table_data(t):\n length = cs.TableLength(t)\n array = csnd6.doubleArray(length)\n cs.TableCopyOut(t, array)\n table = []\n \n for i in xrange(length):\n table.append(array[i])\n\n return table", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": "Let's go ahead and generate a sine wave table with 256 points of data." }, { "cell_type": "code", "collapsed": false, "input": "make_table(1, 0, 256, 10, 1)", "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": "gitemp ftgen 1, 0, 256, 10, 1\n" } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": "Now, let's retrieve the data from Csound." }, { "cell_type": "code", "collapsed": false, "input": "sine_table = get_table_data(1)", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": "Finally, let's plot it with the plot() function." }, { "cell_type": "code", "collapsed": false, "input": "plot(sine_table)", "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 14, "text": "[<matplotlib.lines.Line2D at 0x41c91b0>]" }, { "output_type": "display_data", "png": "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\nAElFTkSuQmCC\n" } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": "That was fairly easily. Let's do it one more time, but let's generate an envelope shape with GEN07." }, { "cell_type": "code", "collapsed": false, "input": "make_table(2, 0, 16, 7, 0, 4, 1, 2, 0.5, 7, 0.5, 2, 0)\nt2 = get_table_data(2)\nplot(t2)", "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": "gitemp ftgen 2, 0, 16, 7, 0, 4, 1, 2, 0.5, 7, 0.5, 2, 0\n" }, { "output_type": "pyout", "prompt_number": 15, "text": "[<matplotlib.lines.Line2D at 0x2cc4570>]" }, { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 15 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Stopping Csound" }, { "cell_type": "markdown", "metadata": {}, "source": "We can stop the Csound performance thread with the following action." }, { "cell_type": "code", "collapsed": false, "input": "csPerf.Stop()", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": "Conclusion" }, { "cell_type": "markdown", "metadata": {}, "source": "And that's it for now." } ], "metadata": {} } ] }