From 080fae76c89fc7947d46814e37ba7ecbc9889bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9phine=20Wolf=20Oberholtzer?= Date: Tue, 18 Feb 2025 19:15:14 -0500 Subject: [PATCH] Sketching --- .../presentation.ipynb | 423 +++++++++++++++++- 1 file changed, 410 insertions(+), 13 deletions(-) diff --git a/docs/notebooks/supercollider-symposium-2025/presentation.ipynb b/docs/notebooks/supercollider-symposium-2025/presentation.ipynb index 6698128e0..1536a2da7 100644 --- a/docs/notebooks/supercollider-symposium-2025/presentation.ipynb +++ b/docs/notebooks/supercollider-symposium-2025/presentation.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "id": "698deca6-8881-40c3-acb8-8f5aa975858a", "metadata": { "editable": true, @@ -16,9 +16,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Pretty printing has been turned ON\n", - "The supriya.ext.ipython extension is already loaded. To reload it, use:\n", - " %reload_ext supriya.ext.ipython\n" + "Pretty printing has been turned OFF\n" ] } ], @@ -1650,6 +1648,134 @@ "### Requests & responses" ] }, + { + "cell_type": "code", + "execution_count": 39, + "id": "45d47e62-4ccf-4ec7-8171-5519a77d01ca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ABC',\n", + " 'AddAction',\n", + " 'AddActionLike',\n", + " 'AllocateBuffer',\n", + " 'AllocateReadBuffer',\n", + " 'AllocateReadBufferChannel',\n", + " 'AutoReassignSynthID',\n", + " 'ClearSchedule',\n", + " 'CloseBuffer',\n", + " 'CopyBuffer',\n", + " 'Dict',\n", + " 'DoNothing',\n", + " 'DumpOsc',\n", + " 'DumpTree',\n", + " 'FillBuffer',\n", + " 'FillControlBusRange',\n", + " 'FillNode',\n", + " 'FreeAllSynthDefs',\n", + " 'FreeBuffer',\n", + " 'FreeGroupChildren',\n", + " 'FreeGroupDeep',\n", + " 'FreeNode',\n", + " 'FreeSynthDef',\n", + " 'Future',\n", + " 'GenerateBuffer',\n", + " 'GetBuffer',\n", + " 'GetBufferRange',\n", + " 'GetControlBus',\n", + " 'GetControlBusRange',\n", + " 'GetSynthControl',\n", + " 'GetSynthControlRange',\n", + " 'HeaderFormat',\n", + " 'HeaderFormatLike',\n", + " 'List',\n", + " 'Literal',\n", + " 'LoadSynthDefDirectory',\n", + " 'LoadSynthDefs',\n", + " 'MapAudioBusRangeToNode',\n", + " 'MapAudioBusToNode',\n", + " 'MapControlBusRangeToNode',\n", + " 'MapControlBusToNode',\n", + " 'MoveNodeAfter',\n", + " 'MoveNodeBefore',\n", + " 'MoveNodeToGroupHead',\n", + " 'MoveNodeToGroupTail',\n", + " 'NewGroup',\n", + " 'NewParallelGroup',\n", + " 'NewSynth',\n", + " 'NormalizeBuffer',\n", + " 'Optional',\n", + " 'OrderNodes',\n", + " 'OscBundle',\n", + " 'OscMessage',\n", + " 'PathLike',\n", + " 'QueryBuffer',\n", + " 'QueryNode',\n", + " 'QueryStatus',\n", + " 'QueryTree',\n", + " 'QueryVersion',\n", + " 'Quit',\n", + " 'ReadBuffer',\n", + " 'ReadBufferChannel',\n", + " 'ReceiveSynthDefs',\n", + " 'ReleaseNode',\n", + " 'Request',\n", + " 'RequestBundle',\n", + " 'RequestName',\n", + " 'Requestable',\n", + " 'Response',\n", + " 'RunNode',\n", + " 'SampleFormat',\n", + " 'SampleFormatLike',\n", + " 'Sequence',\n", + " 'SetBuffer',\n", + " 'SetBufferRange',\n", + " 'SetControlBus',\n", + " 'SetControlBusRange',\n", + " 'SetNodeControl',\n", + " 'SetNodeControlRange',\n", + " 'SupportsInt',\n", + " 'SupportsOsc',\n", + " 'Sync',\n", + " 'SynthDef',\n", + " 'TYPE_CHECKING',\n", + " 'ToggleErrorReporting',\n", + " 'ToggleNotifications',\n", + " 'TraceNode',\n", + " 'Tuple',\n", + " 'Union',\n", + " 'WriteBuffer',\n", + " 'ZeroBuffer',\n", + " '__builtins__',\n", + " '__cached__',\n", + " '__doc__',\n", + " '__file__',\n", + " '__loader__',\n", + " '__name__',\n", + " '__package__',\n", + " '__spec__',\n", + " 'abstractmethod',\n", + " 'asyncio',\n", + " 'compile_synthdefs',\n", + " 'dataclasses',\n", + " 'logger',\n", + " 'logging',\n", + " 'new']" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import supriya.contexts.requests\n", + "\n", + "dir(supriya.contexts.requests)" + ] + }, { "cell_type": "markdown", "id": "dd384ecb-d1db-4ae8-9ab0-456134ef2eae", @@ -2292,7 +2418,7 @@ }, { "cell_type": "markdown", - "id": "60997dc9-4c61-47a4-ac63-5ae193a05d40", + "id": "ce3a1389-93bd-4bbe-8870-afe22f648098", "metadata": { "editable": true, "slideshow": { @@ -2301,12 +2427,288 @@ "tags": [] }, "source": [ - "## Clocks & Patterns" + "## Non-Realtime" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4b66b483-bad4-4725-87aa-c6c6ff3cd826", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from supriya import Score, default, play\n", + "\n", + "score = Score()\n", + "score # TODO: repr doesn't make a lotta sense" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "766b9127-6c9c-4e34-a06c-bc601d0f22fd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['__abstractmethods__', '__annotations__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__render__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', '_abc_impl', '_add_request_with_completion', '_add_requests', '_allocate_id', '_apply_completions', '_audio_bus_allocator', '_boot_status', '_buffer_allocator', '_client_id', '_control_bus_allocator', '_free_id', '_get_allocator', '_get_moment', '_get_next_sync_id', '_get_request_context', '_latency', '_lock', '_name', '_node_id_allocator', '_options', '_pop_completion', '_pop_moment', '_push_completion', '_push_moment', '_requests', '_resolve_node', '_setup_allocators', '_sync_id', '_sync_id_maximum', '_sync_id_minimum', '_thread_local', '_validate_can_request', '_validate_moment_timestamp', 'add_buffer', 'add_buffer_group', 'add_bus', 'add_bus_group', 'add_group', 'add_synth', 'add_synthdefs', 'at', 'audio_input_bus_group', 'audio_output_bus_group', 'boot_status', 'clear_schedule', 'client_id', 'close_buffer', 'copy_buffer', 'default_group', 'do_nothing', 'fill_buffer', 'fill_bus_range', 'free_all_synthdefs', 'free_buffer', 'free_buffer_group', 'free_bus', 'free_bus_group', 'free_group_children', 'free_node', 'free_synthdefs', 'generate_buffer', 'iterate_datagrams', 'iterate_osc_bundles', 'iterate_request_bundles', 'latency', 'load_synthdefs', 'load_synthdefs_directory', 'map_node', 'move_node', 'name', 'normalize_buffer', 'options', 'order_nodes', 'pause_node', 'read_buffer', 'render', 'root_node', 'send', 'set_buffer', 'set_buffer_range', 'set_bus', 'set_bus_range', 'set_node', 'set_node_range', 'setup_system_synthdefs', 'unpause_node', 'write_buffer', 'zero_buffer']" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# inspect the score's namespace\n", + "# note: no queries, only mutations\n", + "dir(score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24f49ba2-1ec7-43d1-9915-c6e5afeab220", + "metadata": {}, + "outputs": [], + "source": [ + "# add a synthdef at timestamp 0\n", + "with score.at(0):\n", + " score.add_synthdefs(default)\n", + "\n", + "# strum a series of \n", + "synths = []\n", + "for i in range(12):\n", + " with score.at(i / 4):\n", + " synth = score.add_synth(synthdef=default, frequency=111 * (i + 1))\n", + "\n", + "with score.at(3):\n", + " for synth in synths:\n", + " synth.free()\n", + "\n", + "with score.at(4):\n", + " score.do_nothing()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "a82eb2ca-16b7-4b0f-bf2b-a384bb483d75", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# play the score (and capture into the notebook)\n", + "_ = await play(score)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "b29ffd11-d38c-4bdb-a055-a2b2e44d19bc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(PosixPath('/Users/josephine/Library/Caches/supriya/score-b5e6166319aa99a4a61cb3ce6e5e79fda03de211129e3ea3043e3dfda894feb8.aiff'), 0)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# render the score, returning the path and exit code\n", + "await score.render()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "86a441f9-e6d7-42ab-b6ff-ef1b1d2b8355", + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'Score' object has no attribute 'query_tree'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[15], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m score\u001b[38;5;241m.\u001b[39mat(\u001b[38;5;241m0\u001b[39m):\n\u001b[0;32m----> 2\u001b[0m \u001b[43mscore\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mquery_tree\u001b[49m()\n", + "\u001b[0;31mAttributeError\u001b[0m: 'Score' object has no attribute 'query_tree'" + ] + } + ], + "source": [ + "# no queries, only mutations\n", + "with score.at(0):\n", + " score.query_tree()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "1263ff3a-3314-4825-a943-1cfc0966363a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "OscBundle(\n", + " contents=(\n", + " OscMessage('/d_recv', b'SCgf\\x00\\x00\\x00\\x02\\x00\\x01\\x07default\\x00\\x00\\x00\\x0c\\x00\\x00\\x00\\x00>\\x99\\x99\\x9a<#\\xd7\\n?333@\\x00\\x00\\x00\\xbe\\xcc\\xcc\\xcd>\\xcc\\xcc\\xcdEz\\x00\\x00E\\x9c@\\x00E\\x1c@\\x00EH\\x00\\x00?\\x80\\x00\\x00\\x00\\x00\\x00\\x05=\\xcc\\xcc\\xcdC\\xdc\\x00\\x00?\\x80\\x00\\x00?\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\tamplitude\\x00\\x00\\x00\\x00\\tfrequency\\x00\\x00\\x00\\x01\\x04gate\\x00\\x00\\x00\\x02\\x03pan\\x00\\x00\\x00\\x03\\x03out\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x14\\x07Control\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x04\\x00\\x00\\x01\\x01\\x01\\x01\\x06VarSaw\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\x02\\x05Linen\\x01\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x02\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x03\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x04\\x01\\x07Control\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x04\\x00\\x04Rand\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x05\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x0cBinaryOpUGen\\x01\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x00\\x01\\x06VarSaw\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\x02\\x04Rand\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x06\\x00\\x0cBinaryOpUGen\\x01\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x07\\x00\\x00\\x00\\x00\\x01\\x06VarSaw\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x08\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\x02\\x04Sum3\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\t\\x00\\x00\\x00\\x00\\x02\\x0cBinaryOpUGen\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x02\\x00\\x00\\x00\\n\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x01\\x02\\x04Rand\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x07\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x08\\x00\\x04Rand\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\t\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\n\\x00\\x05XLine\\x01\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x0c\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\r\\x00\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x0b\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x01\\x03LPF\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x0b\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0e\\x00\\x00\\x00\\x00\\x02\\x0cBinaryOpUGen\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x02\\x00\\x00\\x00\\x0f\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x02\\x0cBinaryOpUGen\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x02\\x00\\x00\\x00\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x04Pan2\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x11\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x0b\\x02\\x02\\tOffsetOut\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x12\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x12\\x00\\x00\\x00\\x01\\x00\\x00'),\n", + " OscMessage('/s_new', 'default', 1000, 0, 0, 'frequency', 111.0),\n", + " ),\n", + " timestamp=0.0,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1001, 0, 0, 'frequency', 222.0),\n", + " ),\n", + " timestamp=0.25,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1002, 0, 0, 'frequency', 333.0),\n", + " ),\n", + " timestamp=0.5,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1003, 0, 0, 'frequency', 444.0),\n", + " ),\n", + " timestamp=0.75,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1004, 0, 0, 'frequency', 555.0),\n", + " ),\n", + " timestamp=1.0,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1005, 0, 0, 'frequency', 666.0),\n", + " ),\n", + " timestamp=1.25,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1006, 0, 0, 'frequency', 777.0),\n", + " ),\n", + " timestamp=1.5,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1007, 0, 0, 'frequency', 888.0),\n", + " ),\n", + " timestamp=1.75,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1008, 0, 0, 'frequency', 999.0),\n", + " ),\n", + " timestamp=2.0,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1009, 0, 0, 'frequency', 1110.0),\n", + " ),\n", + " timestamp=2.25,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1010, 0, 0, 'frequency', 1221.0),\n", + " ),\n", + " timestamp=2.5,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage('/s_new', 'default', 1011, 0, 0, 'frequency', 1332.0),\n", + " ),\n", + " timestamp=2.75,\n", + ")\n", + "OscBundle(\n", + " contents=(\n", + " OscMessage(0),\n", + " ),\n", + " timestamp=4.0,\n", + ")\n" + ] + } + ], + "source": [ + "# TODO: let's fix OSC reprs once and for all\n", + "for bundle in score.iterate_osc_bundles():\n", + " print(repr(bundle))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "d5d68806-1b50-49fe-ab6b-256fcd417ea0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RequestBundle(contents=[ReceiveSynthDefs(synthdefs=(,), on_completion=None), NewSynth(synthdef=, synth_id=1000, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 111.0})], timestamp=0.0)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1001, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 222.0})], timestamp=0.25)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1002, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 333.0})], timestamp=0.5)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1003, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 444.0})], timestamp=0.75)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1004, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 555.0})], timestamp=1.0)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1005, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 666.0})], timestamp=1.25)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1006, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 777.0})], timestamp=1.5)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1007, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 888.0})], timestamp=1.75)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1008, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 999.0})], timestamp=2.0)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1009, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 1110.0})], timestamp=2.25)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1010, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 1221.0})], timestamp=2.5)\n", + "RequestBundle(contents=[NewSynth(synthdef=, synth_id=1011, add_action=AddAction.ADD_TO_HEAD, target_node_id=0, controls={'frequency': 1332.0})], timestamp=2.75)\n", + "RequestBundle(contents=[DoNothing()], timestamp=4.0)\n" + ] + } + ], + "source": [ + "for bundle in score.iterate_request_bundles():\n", + " print(bundle)" ] }, { "cell_type": "markdown", - "id": "ce3a1389-93bd-4bbe-8870-afe22f648098", + "id": "60997dc9-4c61-47a4-ac63-5ae193a05d40", "metadata": { "editable": true, "slideshow": { @@ -2315,12 +2717,7 @@ "tags": [] }, "source": [ - "## Non-Realtime\n", - "\n", - "- server\n", - "- session\n", - "- mutations vs queries\n", - "- rendering (async)" + "## Clocks & Patterns" ] }, {