Bringing the Tidalcycles Mini-Notation to the Browser

Total Page:16

File Type:pdf, Size:1020Kb

Bringing the Tidalcycles Mini-Notation to the Browser Bringing the TidalCycles Mini-Notation to the Browser Charles Roberts Mariana Pachon-Puentes Interactive Media & Game Development Department of Computer Science Department of Computer Science Worcester Polytechnic Institute Worcester Polytechnic Institute [email protected] [email protected] ABSTRACT panying library, and their integration into various browser- TidalCycles has rapidly become the most popular system for based creative coding systems. We then discuss techniques many styles of live coding performance, in particular Algo- for visually annotating the playback of TidalCycle patterns, raves. We created a JavaScript dialect of its mini-notation taking advantage of the browser's flexible markup capabili- for pattern, enabling easy integration with creative cod- ties. We conclude with a short discussion of open questions, ing tools. Our research pairs a formalism describing the and possible directions for future work. mini-notation with a small JavaScript library for generat- ing events over time; this library is suitable for generating 2. BACKGROUND events inside of an AudioWorkletProcessor thread and for Live coding is growing in popularity, with new systems in- assisting with scheduling in JavaScript environments more troduced every year and an growing number of local interest generally. We describe integrating the library into the two groups and performances. The browser has become a popu- live coding systems, Gibber and Hydra, and discuss an ac- lar target for many live coding systems, thanks to its ubiq- companying technique for visually annotating the playback uity, powerful graphics capabilities, and increasingly power- of TidalCycles patterns over time. ful audio features. In this section we discuss existing live coding tools and their notations for music|with an empha- 1. INTRODUCTION sis on TidalCycles|and the state of current browser-based live coding systems. In canonical live coding performances, performers create artistic output by programming it in front of an audience, 2.1 TidalCycles often projecting their source code for the audience to follow TidalCycles is a domain-specific language embedded within [21]. Such performances have increased in popularity over Haskell [11]. It has proven to be one of the most popular the years; for example, organizers have promoted hundreds choices for live coding, particularly in the Algorave genre, of concerts in one genre of live coding performance, Algo- perhaps due to its strong emphasis on time and rhythm [10]. rave[4], where performers take turns live coding (predom- For example, in a recent four-day streamed live coding event, inantly) dance music. The browser is a popular platform sixty-five of approximately one hundred and sixty perfor- for developers creating live coding systems, with many en- mances primarily used TidalCycles[19]. The next most pop- vironments that primarily target music, visuals, and chore- ular end-user language in the event was SuperCollider[9], ography, in addition to hybrid systems enabling performers with eighteen live coding performances1. to generate both audio and visual content (see Section 2). TidalCycles outputs OSC or MIDI messages, and perform- Our research takes the pattern mini-notation of TidalCy- ers have used it to control a wide variety of applications. It cles[11] and brings it to JavaScript as a library that can be is most often used to remotely control SuperDirt, an audio incorporated into browser-based live coding environments. sample playback and manipulation engine written in Super- The TidalCycles mini-notation is a terse and expressive way Collider. to describe patterns of values over time, and we hope that bringing this popular representation to the browser will en- 2.2 Live Coding and Patterns courage adoption across many systems. Section 4 describes There are a variety of techniques for generating patterns some of the integrations we and other developers have cre- in live coding systems. In ixi lang[6], a mini-language that ated to date. controls the SuperCollider audio server, patterns (or scores But first we begin by describing the state of live coding in in ixi lang terminology) are defined using strings, with the the browser, alongside a brief introduction to TidalCycles. location of each token determining the timing of notes and We describe our implementation of the parser and accom- sample playback. In both Gibber[15] and in Conductive[3], a Haskell live coding environment where the programmer controls semi-autonomous agents, there are separate pat- terns for values in sequences and controlling the timing of Licensed under a Creative Commons Attribution 4.0 International License (CC BY 4.0). Attribution: owner/author(s). 1Although live coding in the SuperCollider language is ar- Web Audio Conference WAC-2019, December 4–6, 2019, Trondheim, Norway. guably not as popular as live coding in TidalCycles, many © 2019 Copyright held by the owner/author(s). live coding systems provide an alternative language that uses the SuperCollider audio server for synthesis and processing. sequence output. For example, in Listing 1, the pattern it is easy to incorporate into browser-based projects without [0,1,2,3] selects notes from a default global scale while requiring the use of a Haskell compiler5, potentially easing the pattern [1/4,1/2] specifies that these notes will have adoption into other systems. alternating durations of a quarter note and a half note. 3. IMPLEMENTATION syn= Synth() We created two modules, designed to work in tandem, en- syn.note.seq( [0,1,2,3], [1/4,1/2] ) abling the use of the TidalCycles patterns in the browser. Listing 1: A sequence in Gibber The first module is a parser for the TidalCycles mini- notation. This parser was written using the parsing expres- Other systems opt for more verbose temporal recursions sion grammar formalism (or PEG); we have prior experi- (functions that invoke themselves over time[17]) or corou- ence using this formalism to teach workshops on live coding tines that provide low-level control of timing and output. language design [20]. The PEG.js library 6 translates the For example, the Extempore and Imporomptu systems use TidalCycles grammar into a parser that generates appropri- verbose temporal recursions to generate patterns, often ate JavaScript data structures for querying, which is handled based on sampling continuous waveforms [18]. While these by our second module. Following the general structure of the recursions are lengthy to type by hand (at least in the con- TidalCycles library, this module exposes a queryArc func- text of a live performance), the environments include text- tion which accepts three arguments: a pattern, a start time, editing macros that make insertion and editing fast and and a duration 7. From these three arguments a list of val- fluid. Sonic Pi[1] uses a terser design similar to a coroutine ues and timestamps is generated; the timestamps are offsets named the live_loop, where loops can sleep and are ed- from the starting phase argument passed to queryArc and itable. Gibber and Gibberwocky[13] also support temporal the values typically correspond to either indices in a scale recursions, in addition to their shared pattern affordances. denoting a pitch to be played or an identifier for a sam- The mini-notation in TidalCycles is based on the Bol Pro- ple/sound to be triggered. The code example below shows cessor (BP2)[2]. Polyrhythms, polymeter, repetition, and these two modules in use employing the CommonJS module rhythmic subgrouping can all be described quite tersely. For syntax. example, the pattern string ‘[kd sd, ch ch oh]’ describes a pattern where a kick drum and a snare drum are each half a cycle in duration, while the closed hihat and open hihat parser= require(’./dist/tidal.js’) sounds are each a third of a cycle, creating a two against queryArc= require(’./src/queryArc’).queryArc three polyrhythm. The expression of both timing and out- put values in the same text string provides a terseness that pattern= parser.parse(’0 [1 2]’) events= queryArc( pattern, 0, 1 ) lends itself well to live coding. In our experience develop- /∗ ing and performing with Gibber, we found that while defin- ∗ events=[ ing output and timing separately has it merits, we often ∗ { value:0, arc:{ wanted the expressiveness of a combined notation similar to ∗ start:Fraction(0), end:Fraction(1,2)} the TidalCycles mini-notation. ∗ }, ∗ { value:1, arc:{ 2.3 Browser-based Live Coding Environ- ∗ start:Fraction(1,2), end:Fraction(3,4)} ments ∗ }, ∗ { value:2, arc:{ There are at least a dozen browser-based environments for ∗ start:Fraction(3,4), end:Fraction(1)} live coding performance2. Some are geared heavily towards ∗ } audio3, while others emphasize graphics [5, 16], and at least ∗ ] one targets choreography4. Our hope is that the research ∗/ presented here will be broadly applicable to a variety of such Listing 2: Using the parser and query function systems. In this vein, we discuss the integration of our li- brary into two browser-based live coding environments, Hy- We combined the two modules together into a single dra and Gibber, in Section 4. Pattern object for easier use. The Pattern constructor ac- Of particular relevance to this paper is Estuary[12], which cepts an argument pattern written using the TidalCycles provides a projectional editing interface for TidalCycles (in mini-notation; the generated pattern object can then be addition to other live coding systems), and runs in the queried by passing a starting phase and a duration to its browser. The authors developed the software in Haskell, query method. The Pattern.query method also sorts its which was then compiled into JavaScript. One notable ad- output by the temporal proximity of each event to the start vantage of this approach is that almost all of the features time of the query. Listing 3 shows this in action, assuming of TidalCycles were immediately available to the authors, that the Pattern object has been imported into the global while our approach requires implementing each of TidalCy- namespace.
Recommended publications
  • Synchronous Programming in Audio Processing Karim Barkati, Pierre Jouvelot
    Synchronous programming in audio processing Karim Barkati, Pierre Jouvelot To cite this version: Karim Barkati, Pierre Jouvelot. Synchronous programming in audio processing. ACM Computing Surveys, Association for Computing Machinery, 2013, 46 (2), pp.24. 10.1145/2543581.2543591. hal- 01540047 HAL Id: hal-01540047 https://hal-mines-paristech.archives-ouvertes.fr/hal-01540047 Submitted on 15 Jun 2017 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. A Synchronous Programming in Audio Processing: A Lookup Table Oscillator Case Study KARIM BARKATI and PIERRE JOUVELOT, CRI, Mathématiques et systèmes, MINES ParisTech, France The adequacy of a programming language to a given software project or application domain is often con- sidered a key factor of success in software development and engineering, even though little theoretical or practical information is readily available to help make an informed decision. In this paper, we address a particular version of this issue by comparing the adequacy of general-purpose synchronous programming languages to more domain-specific
    [Show full text]
  • An AI Collaborator for Gamified Live Coding Music Performances
    View metadata, citation and similar papers at core.ac.uk brought to you by CORE provided by Falmouth University Research Repository (FURR) Autopia: An AI Collaborator for Gamified Live Coding Music Performances Norah Lorway,1 Matthew Jarvis,1 Arthur Wilson,1 Edward J. Powley,2 and John Speakman2 Abstract. Live coding is \the activity of writing (parts of) regards to this dynamic between the performer and audience, a program while it runs" [20]. One significant application of where the level of risk involved in the performance is made ex- live coding is in algorithmic music, where the performer mod- plicit. However, in the context of the system proposed in this ifies the code generating the music in a live context. Utopia3 paper, we are more concerned with the effect that this has on is a software tool for collaborative live coding performances, the performer themselves. Any performer at an algorave must allowing several performers (each with their own laptop pro- be prepared to share their code publicly, which inherently en- ducing its own sound) to communicate and share code during courages a mindset of collaboration and communal learning a performance. We propose an AI bot, Autopia, which can with live coders. participate in such performances, communicating with human performers through Utopia. This form of human-AI collabo- 1.2 Collaborative live coding ration allows us to explore the implications of computational creativity from the perspective of live coding. Collaborative live coding takes its roots from laptop or- chestra/ensemble such as the Princeton Laptop Orchestra (PLOrk), an ensemble of computer based instruments formed 1 Background at Princeton University [19].
    [Show full text]
  • Try Coding with These Fun Books!
    Try Coding with These Fun Books! www.mywpl.ca Coding From Scratch Code like a Girl By Rachel Ziter By Miriam Peskowitz Learn to create your own Get started on the games, animations or adventure of coding with other projects in no time! cool projects and step by Whether you’re just step tips. learning to code or need a refresher, this visual guide Find in library: will cover all of the basics J 005.13082 PES of Scratch programming. Find in library: J 005.133 ZIT A Beginner’s Guide to How to Code Coding By Max Wainewright By Marc Scott Teaches you all the basic An easy-to-follow guide to concepts like Loops, basics of coding, using free Variables and Selections programs like Scratch and and make your own Python. Includes step by website. Learn how to use step instructions to make Lego, build games in your own chatbot or video Scratch or experiment with game. HTML. Find in library: J 005.1 SCO Find in library: J 000.1 WAI Creative Coding in Coding Onstage By Kristin Fontichiaro Python By Sheena Vaidyanathan Presents early learners Kids will learn the with a theatre story fundamentals of challenge they can solve computer programming in using Scratch 3. Book is 30+ fun projects with the aligned to curriculum standards and includes intuitive programming language of Python extension activities. Find as a Hoopla eBook. Find in library: J 005.133 VAI Algorithms with Frozen Coding Basics By Allyssa Loya By George Anthony Kulz An easy to understand Explains how coding is used introduction to looping for today, key concepts include young readers.
    [Show full text]
  • Chuck: a Strongly Timed Computer Music Language
    Ge Wang,∗ Perry R. Cook,† ChucK: A Strongly Timed and Spencer Salazar∗ ∗Center for Computer Research in Music Computer Music Language and Acoustics (CCRMA) Stanford University 660 Lomita Drive, Stanford, California 94306, USA {ge, spencer}@ccrma.stanford.edu †Department of Computer Science Princeton University 35 Olden Street, Princeton, New Jersey 08540, USA [email protected] Abstract: ChucK is a programming language designed for computer music. It aims to be expressive and straightforward to read and write with respect to time and concurrency, and to provide a platform for precise audio synthesis and analysis and for rapid experimentation in computer music. In particular, ChucK defines the notion of a strongly timed audio programming language, comprising a versatile time-based programming model that allows programmers to flexibly and precisely control the flow of time in code and use the keyword now as a time-aware control construct, and gives programmers the ability to use the timing mechanism to realize sample-accurate concurrent programming. Several case studies are presented that illustrate the workings, properties, and personality of the language. We also discuss applications of ChucK in laptop orchestras, computer music pedagogy, and mobile music instruments. Properties and affordances of the language and its future directions are outlined. What Is ChucK? form the notion of a strongly timed computer music programming language. ChucK (Wang 2008) is a computer music program- ming language. First released in 2003, it is designed to support a wide array of real-time and interactive Two Observations about Audio Programming tasks such as sound synthesis, physical modeling, gesture mapping, algorithmic composition, sonifi- Time is intimately connected with sound and is cation, audio analysis, and live performance.
    [Show full text]
  • Confessions-Of-A-Live-Coder.Pdf
    Proceedings of the International Computer Music Conference 2011, University of Huddersfield, UK, 31 July - 5 August 2011 CONFESSIONS OF A LIVE CODER Thor Magnusson ixi audio & Faculty of Arts and Media University of Brighton Grand Parade, BN2 0JY, UK ABSTRACT upon writing music with programming languages for very specific reasons and those are rarely comparable. This paper describes the process involved when a live At ICMC 2007, in Copenhagen, I met Andrew coder decides to learn a new musical programming Sorensen, the author of Impromptu and member of the language of another paradigm. The paper introduces the aa-cell ensemble that performed at the conference. We problems of running comparative experiments, or user discussed how one would explore and analyse the studies, within the field of live coding. It suggests that process of learning a new programming environment an autoethnographic account of the process can be for music. One of the prominent questions here is how a helpful for understanding the technological conditioning functional programming language like Impromptu of contemporary musical tools. The author is conducting would influence the thinking of a computer musician a larger research project on this theme: the part with background in an object orientated programming presented in this paper describes the adoption of a new language, such as SuperCollider? Being an avid user of musical programming environment, Impromptu [35], SuperCollider, I was intrigued by the perplexing code and how this affects the author’s musical practice. structure and work patterns demonstrated in the aa-cell performances using Impromptu [36]. I subsequently 1. INTRODUCTION decided to embark upon studying this environment and perform a reflexive study of the process.
    [Show full text]
  • Proceedings of the Fourth International Csound Conference
    Proceedings of the Fourth International Csound Conference Edited by: Luis Jure [email protected] Published by: Escuela Universitaria de Música, Universidad de la República Av. 18 de Julio 1772, CP 11200 Montevideo, Uruguay ISSN 2393-7580 © 2017 International Csound Conference Conference Chairs Paper Review Committee Luis Jure (Chair) +yvind Brandtsegg Martín Rocamora (Co-Chair) Pablo Di Liscia John -tch Organization Team Michael Gogins Jimena Arruti Joachim )eintz Pablo Cancela Alex )ofmann Guillermo Carter /armo Johannes Guzmán Calzada 0ictor Lazzarini Ignacio Irigaray Iain McCurdy Lucía Chamorro Rory 1alsh "eli#e Lamolle Juan Martín L$#ez Music Review Committee Gusta%o Sansone Pablo Cetta Sofía Scheps Joel Chadabe Ricardo Dal "arra Sessions Chairs Pablo Di Liscia Pablo Cancela "olkmar )ein Pablo Di Liscia Joachim )eintz Michael Gogins Clara Ma3da Joachim )eintz Iain McCurdy Luis Jure "lo Menezes Iain McCurdy Daniel 4##enheim Martín Rocamora Juan Pampin Steven *i Carmelo Saitta Music Curator Rodrigo Sigal Luis Jure Clemens %on Reusner Index Preface Keynote talks The 60 years leading to Csound 6.09 Victor Lazzarini Don Quijote, the Island and the Golden Age Joachim Heintz The ATS technique in Csound: theoretical background, present state and prospective Oscar Pablo Di Liscia Csound – The Swiss Army Synthesiser Iain McCurdy How and Why I Use Csound Today Steven Yi Conference papers Working with pch2csd – Clavia NM G2 to Csound Converter Gleb Rogozinsky, Eugene Cherny and Michael Chesnokov Daria: A New Framework for Composing, Rehearsing and Performing Mixed Media Music Guillermo Senna and Juan Nava Aroza Interactive Csound Coding with Emacs Hlöðver Sigurðsson Chunking: A new Approach to Algorithmic Composition of Rhythm and Metre for Csound Georg Boenn Interactive Visual Music with Csound and HTML5 Michael Gogins Spectral and 3D spatial granular synthesis in Csound Oscar Pablo Di Liscia Preface The International Csound Conference (ICSC) is the principal biennial meeting for members of the Csound community and typically attracts worldwide attendance.
    [Show full text]
  • Computer Music
    THE OXFORD HANDBOOK OF COMPUTER MUSIC Edited by ROGER T. DEAN OXFORD UNIVERSITY PRESS OXFORD UNIVERSITY PRESS Oxford University Press, Inc., publishes works that further Oxford University's objective of excellence in research, scholarship, and education. Oxford New York Auckland Cape Town Dar es Salaam Hong Kong Karachi Kuala Lumpur Madrid Melbourne Mexico City Nairobi New Delhi Shanghai Taipei Toronto With offices in Argentina Austria Brazil Chile Czech Republic France Greece Guatemala Hungary Italy Japan Poland Portugal Singapore South Korea Switzerland Thailand Turkey Ukraine Vietnam Copyright © 2009 by Oxford University Press, Inc. First published as an Oxford University Press paperback ion Published by Oxford University Press, Inc. 198 Madison Avenue, New York, New York 10016 www.oup.com Oxford is a registered trademark of Oxford University Press All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior permission of Oxford University Press. Library of Congress Cataloging-in-Publication Data The Oxford handbook of computer music / edited by Roger T. Dean. p. cm. Includes bibliographical references and index. ISBN 978-0-19-979103-0 (alk. paper) i. Computer music—History and criticism. I. Dean, R. T. MI T 1.80.09 1009 i 1008046594 789.99 OXF tin Printed in the United Stares of America on acid-free paper CHAPTER 12 SENSOR-BASED MUSICAL INSTRUMENTS AND INTERACTIVE MUSIC ATAU TANAKA MUSICIANS, composers, and instrument builders have been fascinated by the expres- sive potential of electrical and electronic technologies since the advent of electricity itself.
    [Show full text]
  • FAUST Tutorial for Functional Programmers
    FAUST Tutorial for Functional Programmers Y. Orlarey, S. Letz, D. Fober, R. Michon ICFP 2017 / FARM 2017 What is Faust ? What is Faust? A programming language (DSL) to build electronic music instruments Some Music Programming Languages DARMS Kyma 4CED MCL DCMP LOCO PLAY2 Adagio MUSIC III/IV/V DMIX LPC PMX AML Elody Mars MusicLogo POCO AMPLE EsAC MASC Music1000 POD6 Antescofo Euterpea Max MUSIC7 POD7 Arctic Extempore Musictex PROD Autoklang MidiLisp Faust MUSIGOL Puredata Bang MidiLogo MusicXML PWGL Canon Flavors Band MODE Musixtex Ravel CHANT Fluxus MOM NIFF FOIL Moxc SALIERI Chuck NOTELIST FORMES MSX SCORE CLCE Nyquist FORMULA MUS10 ScoreFile CMIX OPAL Fugue MUS8 SCRIPT Cmusic OpenMusic Gibber MUSCMP SIREN CMUSIC Organum1 GROOVE MuseData SMDL Common Lisp Outperform SMOKE Music GUIDO MusES Overtone SSP Common HARP MUSIC 10 PE Music Haskore MUSIC 11 SSSP Patchwork Common HMSL MUSIC 360 ST Music PILE Notation INV MUSIC 4B Supercollider Pla invokator MUSIC 4BF Symbolic Composer Csound PLACOMP KERN MUSIC 4F Tidal CyberBand PLAY1 Keynote MUSIC 6 Brief Overview to Faust Faust offers end-users a high-level alternative to C to develop audio applications for a large variety of platforms. The role of the Faust compiler is to synthesize the most efficient implementations for the target language (C, C++, LLVM, Javascript, etc.). Faust is used on stage for concerts and artistic productions, for education and research, for open sources projects and commercial applications : What Is Faust Used For ? Artistic Applications Sonik Cube (Trafik/Orlarey), Smartfaust (Gracia), etc. Open-Source projects Guitarix: Hermann Meyer WebAudio Applications YC20 Emulator Thanks to the HTML5/WebAudio API and Asm.js it is now possible to run synthesizers and audio effects from a simple web page ! Sound Spatialization Ambitools: Pierre Lecomte, CNAM Ambitools (Faust Award 2016), 3-D sound spatialization using Ambisonic techniques.
    [Show full text]
  • Isupercolliderkit: a Toolkit for Ios Using an Internal Supercollider Server As a Sound Engine
    ICMC 2015 – Sept. 25 - Oct. 1, 2015 – CEMI, University of North Texas iSuperColliderKit: A Toolkit for iOS Using an Internal SuperCollider Server as a Sound Engine Akinori Ito Kengo Watanabe Genki Kuroda Ken’ichiro Ito Tokyo University of Tech- Watanabe-DENKI Inc. Tokyo University of Tech- Tokyo University of Tech- nology [email protected] nology nology [email protected]. [email protected]. [email protected]. ac.jp ac.jp ac.jp The editor client sends the OSC code-fragments to its server. ABSTRACT Due to adopting the model, SuperCollider has feature that a iSuperColliderKit is a toolkit for iOS using an internal programmer can dynamically change some musical ele- SuperCollider Server as a sound engine. Through this re- ments, phrases, rhythms, scales and so on. The real-time search, we have adapted the exiting SuperCollider source interactivity is effectively utilized mainly in the live-coding code for iOS to the latest environment. Further we attempt- field. If the iOS developers would make their application ed to detach the UI from the sound engine so that the native adopting the “sound-server” model, using SuperCollider iOS visual objects built by objective-C or Swift, send to the seems to be a reasonable choice. However, the porting situa- internal SuperCollider server with any user interaction tion is not so good. SonicPi[5] is the one of a musical pro- events. As a result, iSuperColliderKit makes it possible to gramming environment that has SuperCollider server inter- utilize the vast resources of dynamic real-time changing nally. However, it is only for Raspberry Pi, Windows and musical elements or algorithmic composition on SuperCol- OSX.
    [Show full text]
  • Pynchon's Sound of Music
    Pynchon’s Sound of Music Christian Hänggi Pynchon’s Sound of Music DIAPHANES PUBLISHED WITH SUPPORT BY THE SWISS NATIONAL SCIENCE FOUNDATION 1ST EDITION ISBN 978-3-0358-0233-7 10.4472/9783035802337 DIESES WERK IST LIZENZIERT UNTER EINER CREATIVE COMMONS NAMENSNENNUNG 3.0 SCHWEIZ LIZENZ. LAYOUT AND PREPRESS: 2EDIT, ZURICH WWW.DIAPHANES.NET Contents Preface 7 Introduction 9 1 The Job of Sorting It All Out 17 A Brief Biography in Music 17 An Inventory of Pynchon’s Musical Techniques and Strategies 26 Pynchon on Record, Vol. 4 51 2 Lessons in Organology 53 The Harmonica 56 The Kazoo 79 The Saxophone 93 3 The Sounds of Societies to Come 121 The Age of Representation 127 The Age of Repetition 149 The Age of Composition 165 4 Analyzing the Pynchon Playlist 183 Conclusion 227 Appendix 231 Index of Musical Instruments 233 The Pynchon Playlist 239 Bibliography 289 Index of Musicians 309 Acknowledgments 315 Preface When I first read Gravity’s Rainbow, back in the days before I started to study literature more systematically, I noticed the nov- el’s many references to saxophones. Having played the instru- ment for, then, almost two decades, I thought that a novelist would not, could not, feature specialty instruments such as the C-melody sax if he did not play the horn himself. Once the saxophone had caught my attention, I noticed all sorts of uncommon references that seemed to confirm my hunch that Thomas Pynchon himself played the instrument: McClintic Sphere’s 4½ reed, the contra- bass sax of Against the Day, Gravity’s Rainbow’s Charlie Parker passage.
    [Show full text]
  • Interactive Csound Coding with Emacs
    Interactive Csound coding with Emacs Hlöðver Sigurðsson Abstract. This paper will cover the features of the Emacs package csound-mode, a new major-mode for Csound coding. The package is in most part a typical emacs major mode where indentation rules, comple- tions, docstrings and syntax highlighting are provided. With an extra feature of a REPL1, that is based on running csound instance through the csound-api. Similar to csound-repl.vim[1] csound- mode strives to enable the Csound user a faster feedback loop by offering a REPL instance inside of the text editor. Making the gap between de- velopment and the final output reachable within a real-time interaction. 1 Introduction After reading the changelog of Emacs 25.1[2] I discovered a new Emacs feature of dynamic modules, enabling the possibility of Foreign Function Interface(FFI). Being insired by Gogins’s recent Common Lisp FFI for the CsoundAPI[3], I decided to use this new feature and develop an FFI for Csound. I made the dynamic module which ports the greater part of the C-lang’s csound-api and wrote some of Steven Yi’s csound-api examples for Elisp, which can be found on the Gihub page for CsoundAPI-emacsLisp[4]. This sparked my idea of creating a new REPL based Csound major mode for Emacs. As a composer using Csound, I feel the need to be close to that which I’m composing at any given moment. From previous Csound front-end tools I’ve used, the time between writing a Csound statement and hearing its output has been for me a too long process of mouseclicking and/or changing windows.
    [Show full text]
  • Estuary: Browser-Based Collaborative Projectional Live Coding of Musical Patterns
    Estuary: Browser-based Collaborative Projectional Live Coding of Musical Patterns David Ogborn Jamie Beverley Luis Navarro del Angel McMaster University McMaster University McMaster University [email protected] [email protected] [email protected] Eldad Tsabary Alex McLean Concordia University Deutsches Museum [email protected] [email protected] ABSTRACT This paper describes the initial design and development of Estuary, a browser-based collaborative projectional editing environment built on top of the popular TidalCycles language for the live coding of musical pattern. Key features of Estuary include a strict form of structure editing (making syntactical errors impossible), a click-only border-free approach to interface design, explicit notations to modulate the liveness of different parts of the code, and a server-based network collaboration system that can be used for many simultaneous collaborative live coding performances, as well as to present different views of the same live coding activity. Estuary has been developed using Reflex-DOM, a Haskell-based framework for web development whose strictness promises robustness and security advantages. 1 Goals 1.1 Projectional Editing and Live Coding The interface of the text editor is focused on alphabetic characters rather than on larger tokens that directly represent structures specific to a certain way of notating algorithms. Programmers using text editors, including live coding artists using text-based programming languages as their media, then have to devote cognitive resources to dealing with various kinds of mistakes and delays, including but not limited to accidentally typing the wrong character, not recalling the name of an entity, attempting to use a construct from one language in another, and misrecognition of “where one is” in the hierarchy of structures, among many other possible challenges.
    [Show full text]