Csound5.13 Manual
Csound5.13 Manual
Csound5.13 Manual
Version 5.13
Table of Contents
Preface .................................................................................................................. xxx Preface to the Csound Manual ........................................................................... xxx History of the Canonical Csound Reference Manual ..............................................xxxi Copyright Notice ...........................................................................................xxxii Getting Started with Csound ............................................................................ xxxiv What's new in Csound 5.13 ............................................................................. xxxvi I. Overview ................................................................................................................ 1 Introduction ....................................................................................................... 4 Recent Developments .......................................................................................... 5 Features of Csound 5 ................................................................................... 5 Features of CsoundAC ................................................................................. 6 The Csound Command ......................................................................................... 8 Order of Precedence .................................................................................... 8 Description of the command syntax ................................................................ 8 Csound command line ................................................................................ 10 Command-line Flags (by Category) .............................................................. 19 Csound Environment Variables .................................................................... 29 Unified File Format for Orchestras and Scores ................................................ 31 Description ...................................................................................... 31 Example .......................................................................................... 33 Command Line Parameter File (.csoundrc) ..................................................... 34 Score File Preprocessing ............................................................................. 34 The Extract Feature ........................................................................... 34 Independent Pre-Processing with Scsort ................................................ 34 Using Csound ................................................................................................... 36 Csound's Console Output ............................................................................ 36 How Csound5 works .................................................................................. 37 Amplitude values in Csound ................................................................ 38 Real-Time Audio ...................................................................................... 40 Realtime I/O on Linux ....................................................................... 40 Windows ......................................................................................... 46 Mac ................................................................................................ 47 Optimizing Audio I/O Latency .................................................................... 47 Configuring ..................................................................................................... 49 Syntax of the Orchestra ...................................................................................... 50 Orchestra Header Statements ....................................................................... 51 Instrument and Opcode Block Statements ...................................................... 51 Ordinary Statements .................................................................................. 52 Types, Constants and Variables ................................................................... 52 Variable Initialization ........................................................................ 53 Expressions .............................................................................................. 53 Directories and Files .................................................................................. 54 Nomenclature ........................................................................................... 54 Macros .................................................................................................... 55 Named Instruments ................................................................................... 55 User Defined Opcodes (UDO) ..................................................................... 58 The Standard Numeric Score ............................................................................... 59 Preprocessing of Standard Scores ................................................................. 59 Carry .............................................................................................. 59 Tempo ............................................................................................ 60 Sort ................................................................................................ 60 Score Statements ....................................................................................... 61 Next-P and Previous-P Symbols ................................................................... 61 iv
Ramping ................................................................................................. 62 Score Macros ........................................................................................... 63 Multiple File Score .................................................................................... 65 Evaluation of Expressions ........................................................................... 66 Strings in p-fields ...................................................................................... 67 Front Ends ....................................................................................................... 68 CsoundAC ............................................................................................... 69 CsoundVST ............................................................................................. 71 TclCsound ....................................................................................................... 73 The Tcl interpreter: cstclsh .......................................................................... 73 Cswish: the windowing shell ....................................................................... 73 A Csound server ....................................................................................... 74 A Scripting Environment ............................................................................ 75 TclCsound as a language wrapper ................................................................ 76 TclCsound Command Reference .................................................................. 76 Building Csound ............................................................................................... 79 Csound Links ................................................................................................... 84 II. Opcodes Overview ................................................................................................ 85 Signal Generators .............................................................................................. 89 Additive Synthesis/Resynthesis .................................................................... 89 Basic Oscillators ....................................................................................... 89 Dynamic Spectrum Oscillators ..................................................................... 89 FM Synthesis ........................................................................................... 90 Granular Synthesis .................................................................................... 90 Hyper Vectorial Synthesis .......................................................................... 91 Linear and Exponential Generators ............................................................... 91 Envelope Generators .................................................................................. 92 Models and Emulations .............................................................................. 92 Phasors ................................................................................................... 93 Random (Noise) Generators ........................................................................ 94 Sample Playback ....................................................................................... 95 Soundfonts ...................................................................................... 95 Scanned Synthesis ..................................................................................... 97 Table Access ............................................................................................ 98 Wave Terrain Synthesis .............................................................................. 99 Waveguide Physical Modeling ..................................................................... 99 Signal Input and Output .................................................................................... 100 File Input and Output ............................................................................... 100 Signal Input ........................................................................................... 100 Signal Output ......................................................................................... 100 Software Bus .......................................................................................... 101 Printing and Display ................................................................................ 101 Sound File Queries .................................................................................. 101 Signal Modifiers ............................................................................................. 103 Amplitude Modifiers and Dynamic processing .............................................. 103 Convolution and Morphing ....................................................................... 103 Delay .................................................................................................... 103 Panning and Spatialization ........................................................................ 104 Reverberation ......................................................................................... 106 Sample Level Operators ........................................................................... 106 Signal Limiters ....................................................................................... 107 Special Effects ........................................................................................ 107 Standard Filters ...................................................................................... 107 Specialized Filters ................................................................................... 109 Waveguides ........................................................................................... 109 Waveshaping and Phase Distortion ............................................................. 109 Instrument Control .......................................................................................... 111 Clock Control ......................................................................................... 111 v
Conditional Values .................................................................................. Duration Control Statements ..................................................................... FLTK Widgets and GUI controllers ............................................................ FLTK Containers ............................................................................ FLTK Valuators .............................................................................. Other FLTK Widgets ....................................................................... Modifying FLTK Widget Appearance ................................................. General FLTK Widget-related Opcodes ............................................... Instrument Invocation .............................................................................. Program Flow Control ............................................................................. Real-time Performance Control .................................................................. Initialization and Reinitialization ................................................................ Sensing and Control ................................................................................ Stacks ................................................................................................... Sub-instrument Control ............................................................................ Time Reading ......................................................................................... Function Table Control .................................................................................... Table Queries ......................................................................................... Read/Write Operations ............................................................................. Table Reading with Dynamic Selection ....................................................... Mathematical Operations .................................................................................. Amplitude Converters .............................................................................. Arithmetic and Logic Operations ................................................................ Comparators and Accumulators ................................................................. Mathematical Functions ........................................................................... Opcode Equivalents of Functions ............................................................... Random Functions .................................................................................. Trigonometric Functions .......................................................................... Linear Algebra Opcodes ........................................................................... Pitch Converters ............................................................................................. Functions ............................................................................................... Tuning Opcodes ...................................................................................... Real-time MIDI Support ................................................................................... Virtual MIDI Keyboard ............................................................................ MIDI input ............................................................................................ MIDI Message Output ............................................................................. Generic Input and Output .......................................................................... Converters ............................................................................................. Event Extenders ...................................................................................... Note-on/Note-off Output .......................................................................... MIDI/Score Interoperability opcodes .......................................................... System Realtime Messages ....................................................................... Slider Banks ........................................................................................... Spectral Processing ......................................................................................... Short-time Fourier Transform (STFT) Resynthesis ........................................ Linear Predictive Coding (LPC) Resynthesis ................................................ Non-standard Spectral Processing .............................................................. Tools for Real-time Spectral Processing (pvs opcodes) ................................... ATS Spectral Processing .......................................................................... Loris Opcodes ........................................................................................ Strings .......................................................................................................... String Manipulation Opcodes .................................................................... String Conversion Opcodes ....................................................................... Vectorial Opcodes ........................................................................................... Tables of vectors operators ....................................................................... Operations Between a Vectorial and a Scalar Signal ....................................... Operations Between two Vectorial Signals ................................................... Vectorial Envelope Generators .................................................................. vi
111 111 111 114 114 115 115 116 116 117 118 118 119 120 120 121 122 122 122 123 124 124 124 124 125 125 126 126 127 137 137 137 138 139 142 142 143 143 143 143 143 145 145 146 146 147 147 147 148 149 153 154 154 156 156 156 157 157
Limiting and wrapping of vectorial control signals ........................................ Vectorial Control-rate Delay Paths ............................................................. Vectorial Random Signal Generators .......................................................... Zak Patch System ............................................................................................ Plugin Hosting ................................................................................................ DSSI and LADSPA for Csound ................................................................. VST for Csound ...................................................................................... OSC and Network ........................................................................................... OSC ..................................................................................................... Network ................................................................................................ Remote Opcodes ..................................................................................... Mixer Opcodes ............................................................................................... Signal Flow Graph Opcodes .............................................................................. Jacko Opcodes ................................................................................................ Python Opcodes .............................................................................................. Introduction ........................................................................................... Orchestra Syntax ..................................................................................... Image processing opcodes ................................................................................ Miscellaneous opcodes ..................................................................................... III. Reference ......................................................................................................... Orchestra Opcodes and Operators ....................................................................... != ......................................................................................................... #define .................................................................................................. #include ................................................................................................ #undef .................................................................................................. #ifdef .................................................................................................... #ifndef .................................................................................................. $NAME ................................................................................................ % ......................................................................................................... && ...................................................................................................... > .......................................................................................................... >= ........................................................................................................ < .......................................................................................................... <= ........................................................................................................ * .......................................................................................................... + .......................................................................................................... - ........................................................................................................... / ........................................................................................................... = .......................................................................................................... == ........................................................................................................ ^ .......................................................................................................... || .......................................................................................................... 0dbfs .................................................................................................... << ........................................................................................................ >> ........................................................................................................ & ......................................................................................................... | ........................................................................................................... .......................................................................................................... # .......................................................................................................... a .......................................................................................................... abetarand ............................................................................................... abexprnd ............................................................................................... abs ....................................................................................................... acauchy ................................................................................................. active .................................................................................................... adsr ...................................................................................................... adsyn .................................................................................................... adsynt ................................................................................................... vii
158 158 158 160 161 161 161 163 163 163 163 164 165 168 171 171 171 173 174 175 199 200 202 206 208 209 211 212 215 217 218 220 222 224 226 228 230 232 234 236 238 240 242 245 247 248 250 251 252 253 255 256 257 259 260 264 267 269
adsynt2 ................................................................................................. aexprand ............................................................................................... aftouch .................................................................................................. agauss ................................................................................................... agogobel ............................................................................................... alinrand ................................................................................................. alpass .................................................................................................... alwayson ............................................................................................... ampdb ................................................................................................... ampdbfs ................................................................................................ ampmidi ................................................................................................ ampmidid .............................................................................................. apcauchy ............................................................................................... apoisson ................................................................................................ apow .................................................................................................... areson ................................................................................................... aresonk ................................................................................................. atone .................................................................................................... atonek ................................................................................................... atonex ................................................................................................... atrirand ................................................................................................. ATSadd ................................................................................................. ATSaddnz ............................................................................................. ATSbufread ........................................................................................... ATScross ............................................................................................... ATSinfo ................................................................................................ ATSinterpread ........................................................................................ ATSread ................................................................................................ ATSreadnz ............................................................................................ ATSpartialtap ......................................................................................... ATSsinnoi ............................................................................................. aunirand ................................................................................................ aweibull ................................................................................................ babo ..................................................................................................... balance ................................................................................................. bamboo ................................................................................................. barmodel ............................................................................................... bbcutm .................................................................................................. bbcuts ................................................................................................... betarand ................................................................................................ bexprnd ................................................................................................. bformenc ............................................................................................... bformenc1 ............................................................................................. bformdec ............................................................................................... bformdec1 ............................................................................................. binit ...................................................................................................... biquad ................................................................................................... biquada ................................................................................................. birnd ..................................................................................................... bqrez .................................................................................................... butbp .................................................................................................... butbr ..................................................................................................... buthp .................................................................................................... butlp ..................................................................................................... butterbp ................................................................................................. butterbr ................................................................................................. butterhp ................................................................................................. butterlp ................................................................................................. viii
272 275 276 278 279 280 281 283 286 288 290 292 294 295 296 297 299 301 303 305 307 308 311 313 315 318 321 323 325 328 330 332 333 334 338 340 342 344 349 352 355 357 359 361 363 365 367 371 372 374 376 377 378 379 380 382 384 386
button ................................................................................................... buzz ..................................................................................................... cabasa ................................................................................................... cauchy .................................................................................................. ceil ....................................................................................................... cent ...................................................................................................... cggoto ................................................................................................... chanctrl ................................................................................................. changed ................................................................................................. chani .................................................................................................... chano .................................................................................................... chebyshevpoly ........................................................................................ checkbox ............................................................................................... chn ....................................................................................................... chnclear ................................................................................................ chnexport .............................................................................................. chnget ................................................................................................... chnmix .................................................................................................. chnparams ............................................................................................. chnrecv ................................................................................................. chnsend ................................................................................................. chnset ................................................................................................... chuap .................................................................................................... cigoto ................................................................................................... ckgoto ................................................................................................... clear ..................................................................................................... clfilt ..................................................................................................... clip ....................................................................................................... clock .................................................................................................... clockoff ................................................................................................. clockon ................................................................................................. cngoto ................................................................................................... comb .................................................................................................... compress ............................................................................................... connect ................................................................................................. control .................................................................................................. convle ................................................................................................... convolve ............................................................................................... cos ....................................................................................................... cosh ...................................................................................................... cosinv ................................................................................................... cps2pch ................................................................................................. cpsmidi ................................................................................................. cpsmidib ............................................................................................... cpsmidinn .............................................................................................. cpsoct ................................................................................................... cpspch .................................................................................................. cpstmid ................................................................................................. cpstun ................................................................................................... cpstuni .................................................................................................. cpsxpch ................................................................................................. cpuprc ................................................................................................... cross2 ................................................................................................... crossfm ................................................................................................. crunch ................................................................................................... ctrl14 .................................................................................................... ctrl21 .................................................................................................... ctrl7 ...................................................................................................... ix
388 389 391 393 395 397 399 401 403 405 406 407 410 412 414 415 417 419 420 421 423 425 427 431 433 435 437 440 443 444 446 448 450 452 454 457 458 459 463 465 467 469 473 475 477 481 484 487 490 493 496 500 503 505 508 510 512 514
ctrlinit ................................................................................................... cuserrnd ................................................................................................ dam ...................................................................................................... date ...................................................................................................... dates ..................................................................................................... db ........................................................................................................ dbamp ................................................................................................... dbfsamp ................................................................................................ dcblock ................................................................................................. dcblock2 ............................................................................................... dconv .................................................................................................... delay .................................................................................................... delay1 ................................................................................................... delayk ................................................................................................... delayr ................................................................................................... delayw .................................................................................................. deltap .................................................................................................... deltap3 .................................................................................................. deltapi ................................................................................................... deltapn .................................................................................................. deltapx .................................................................................................. deltapxw ............................................................................................... denorm ................................................................................................. diff ....................................................................................................... diskgrain ............................................................................................... diskin .................................................................................................... diskin2 .................................................................................................. dispfft ................................................................................................... display .................................................................................................. distort ................................................................................................... distort1 ................................................................................................. divz ...................................................................................................... doppler ................................................................................................. downsamp ............................................................................................. dripwater ............................................................................................... dssiactivate ............................................................................................ dssiaudio ............................................................................................... dssictls .................................................................................................. dssiinit .................................................................................................. dssilist .................................................................................................. dumpk .................................................................................................. dumpk2 ................................................................................................. dumpk3 ................................................................................................. dumpk4 ................................................................................................. duserrnd ................................................................................................ else ...................................................................................................... elseif .................................................................................................... endif ..................................................................................................... endin .................................................................................................... endop .................................................................................................... envlpx ................................................................................................... envlpxr ................................................................................................. ephasor ................................................................................................. eqfil ...................................................................................................... event .................................................................................................... event_i .................................................................................................. exitnow ................................................................................................. exp ....................................................................................................... x
516 517 519 522 524 526 528 530 532 534 536 538 540 542 544 546 548 551 554 557 559 561 564 566 568 571 574 578 580 582 584 586 588 590 592 594 596 598 600 602 604 606 608 610 612 614 616 618 620 622 625 628 630 631 633 636 638 639
expcurve ............................................................................................... expon .................................................................................................... exprand ................................................................................................. expseg .................................................................................................. expsega ................................................................................................. expsegr ................................................................................................. fareylen ................................................................................................. fareyleni ................................................................................................ ficlose ................................................................................................... filebit .................................................................................................... filelen ................................................................................................... filenchnls ............................................................................................... filepeak ................................................................................................. filesr ..................................................................................................... filevalid ................................................................................................. filter2 .................................................................................................... fin ........................................................................................................ fini ....................................................................................................... fink ...................................................................................................... fiopen ................................................................................................... flanger .................................................................................................. flashtxt .................................................................................................. FLbox ................................................................................................... FLbutBank ............................................................................................ FLbutton ............................................................................................... FLcloseButton ........................................................................................ FLcolor ................................................................................................. FLcolor2 ............................................................................................... FLcount ................................................................................................ FLexecButton ......................................................................................... FLgetsnap .............................................................................................. FLgroup ................................................................................................ FLgroupEnd ........................................................................................... FLgroup_end .......................................................................................... FLhide .................................................................................................. FLhvsBox .............................................................................................. FLhvsBoxSetValue ................................................................................. FLjoy .................................................................................................... FLkeyIn ................................................................................................ FLknob ................................................................................................. FLlabel ................................................................................................. FLloadsnap ............................................................................................ FLmouse ............................................................................................... flooper .................................................................................................. flooper2 ................................................................................................ floor ..................................................................................................... FLpack ................................................................................................. FLpackEnd ............................................................................................ FLpack_end ........................................................................................... FLpanel ................................................................................................. FLpanelEnd ........................................................................................... FLpanel_end .......................................................................................... FLprintk ................................................................................................ FLprintk2 .............................................................................................. FLroller ................................................................................................. FLrun ................................................................................................... FLsavesnap ............................................................................................ FLscroll ................................................................................................ xi
641 643 645 647 649 651 653 655 657 659 661 663 665 667 669 671 673 675 677 678 680 682 684 689 692 697 700 702 703 706 709 710 712 713 714 715 716 717 720 722 727 729 730 732 734 736 738 741 742 743 746 747 748 749 750 753 754 759
FLscrollEnd ........................................................................................... FLscroll_end .......................................................................................... FLsetAlign ............................................................................................ FLsetBox ............................................................................................... FLsetColor ............................................................................................ FLsetColor2 ........................................................................................... FLsetFont .............................................................................................. FLsetPosition ......................................................................................... FLsetSize .............................................................................................. FLsetsnap .............................................................................................. FLsetSnapGroup ..................................................................................... FLsetText .............................................................................................. FLsetTextColor ...................................................................................... FLsetTextSize ........................................................................................ FLsetTextType ....................................................................................... FLsetVal_i ............................................................................................. FLsetVal ............................................................................................... FLshow ................................................................................................. FLslidBnk ............................................................................................. FLslidBnk2 ............................................................................................ FLslidBnkGetHandle ............................................................................... FLslidBnkSet ......................................................................................... FLslidBnkSetk ....................................................................................... FLslidBnk2Set ....................................................................................... FLslidBnk2Setk ...................................................................................... FLslider ................................................................................................ FLtabs .................................................................................................. FLtabsEnd ............................................................................................. FLtabs_end ............................................................................................ FLtext ................................................................................................... FLupdate ............................................................................................... fluidAllOut ............................................................................................ fluidCCi ................................................................................................ fluidCCk ............................................................................................... fluidControl ........................................................................................... fluidEngine ............................................................................................ fluidLoad ............................................................................................... fluidNote ............................................................................................... fluidOut ................................................................................................ fluidProgramSelect .................................................................................. fluidSetInterpMethod ............................................................................... FLvalue ................................................................................................. FLvkeybd .............................................................................................. FLvslidBnk ............................................................................................ FLvslidBnk2 .......................................................................................... FLxyin .................................................................................................. fmb3 ..................................................................................................... fmbell ................................................................................................... fmmetal ................................................................................................. fmpercfl ................................................................................................ fmrhode ................................................................................................ fmvoice ................................................................................................. fmwurlie ............................................................................................... fof ........................................................................................................ fof2 ...................................................................................................... fofilter .................................................................................................. fog ....................................................................................................... fold ...................................................................................................... xii
762 763 764 765 767 769 770 772 773 774 776 777 779 780 781 784 785 786 787 791 794 795 796 798 799 802 808 813 814 815 818 819 822 823 824 825 829 831 833 836 838 840 842 843 847 849 852 855 858 861 864 867 869 872 875 881 883 885
follow ................................................................................................... 887 follow2 ................................................................................................. 889 foscil .................................................................................................... 891 foscili ................................................................................................... 893 fout ...................................................................................................... 895 fouti ..................................................................................................... 900 foutir .................................................................................................... 902 foutk ..................................................................................................... 904 fprintks ................................................................................................. 906 fprints ................................................................................................... 912 frac ...................................................................................................... 914 freeverb ................................................................................................. 916 ftchnls ................................................................................................... 918 ftconv ................................................................................................... 920 ftcps ..................................................................................................... 923 ftfree .................................................................................................... 925 ftgen ..................................................................................................... 926 ftgenonce ............................................................................................... 929 ftgentmp ................................................................................................ 930 ftlen ...................................................................................................... 932 ftload .................................................................................................... 934 ftloadk .................................................................................................. 935 ftlptim ................................................................................................... 936 ftmorf ................................................................................................... 938 ftsave .................................................................................................... 940 ftsavek .................................................................................................. 942 ftsr ....................................................................................................... 943 gain ...................................................................................................... 945 gainslider ............................................................................................... 947 gauss .................................................................................................... 949 gbuzz .................................................................................................... 951 getcfg ................................................................................................... 953 gogobel ................................................................................................. 954 goto ...................................................................................................... 956 grain ..................................................................................................... 958 grain2 ................................................................................................... 960 grain3 ................................................................................................... 964 granule .................................................................................................. 969 guiro ..................................................................................................... 972 harmon ................................................................................................. 974 harmon2 ................................................................................................ 977 hilbert ................................................................................................... 979 hrtfer .................................................................................................... 983 hrtfmove ............................................................................................... 985 hrtfmove2 .............................................................................................. 988 hrtfstat .................................................................................................. 991 hsboscil ................................................................................................. 994 hvs1 ..................................................................................................... 997 hvs2 .................................................................................................... 1001 hvs3 .................................................................................................... 1007 i .......................................................................................................... 1010 ibetarand .............................................................................................. 1011 ibexprnd ............................................................................................... 1012 icauchy ................................................................................................ 1013 ictrl14 .................................................................................................. 1014 ictrl21 .................................................................................................. 1015 ictrl7 .................................................................................................... 1016 iexprand ............................................................................................... 1017 xiii
if ......................................................................................................... 1018 igauss .................................................................................................. 1023 igoto .................................................................................................... 1024 ihold .................................................................................................... 1026 ilinrand ................................................................................................ 1028 imagecreate ........................................................................................... 1029 imagefree ............................................................................................. 1031 imagegetpixel ........................................................................................ 1033 imageload ............................................................................................. 1035 imagesave ............................................................................................. 1037 imagesetpixel ........................................................................................ 1039 imagesize ............................................................................................. 1041 imidic14 ............................................................................................... 1043 imidic21 ............................................................................................... 1044 imidic7 ................................................................................................ 1045 in ........................................................................................................ 1046 in32 ..................................................................................................... 1047 inch ..................................................................................................... 1048 inh ...................................................................................................... 1049 init ...................................................................................................... 1050 initc14 ................................................................................................. 1051 initc21 ................................................................................................. 1052 initc7 ................................................................................................... 1053 inleta ................................................................................................... 1054 inletk ................................................................................................... 1055 inletf .................................................................................................... 1056 ino ...................................................................................................... 1057 inq ...................................................................................................... 1058 inrg ..................................................................................................... 1059 ins ....................................................................................................... 1060 insremot ............................................................................................... 1061 insglobal .............................................................................................. 1063 instimek ............................................................................................... 1064 instimes ................................................................................................ 1065 instr ..................................................................................................... 1066 int ....................................................................................................... 1069 integ .................................................................................................... 1071 interp ................................................................................................... 1073 invalue ................................................................................................. 1076 inx ...................................................................................................... 1077 inz ....................................................................................................... 1078 ioff ...................................................................................................... 1079 ion ...................................................................................................... 1080 iondur .................................................................................................. 1081 iondur2 ................................................................................................ 1082 ioutat ................................................................................................... 1083 ioutc .................................................................................................... 1084 ioutc14 ................................................................................................. 1085 ioutpat ................................................................................................. 1086 ioutpb .................................................................................................. 1087 ioutpc .................................................................................................. 1088 ipcauchy ............................................................................................... 1089 ipoisson ................................................................................................ 1090 ipow .................................................................................................... 1091 is16b14 ................................................................................................ 1092 is32b14 ................................................................................................ 1093 islider16 ............................................................................................... 1094 islider32 ............................................................................................... 1095 xiv
islider64 ............................................................................................... 1096 islider8 ................................................................................................. 1097 itablecopy ............................................................................................. 1098 itablegpw .............................................................................................. 1099 itablemix .............................................................................................. 1100 itablew ................................................................................................. 1101 itrirand ................................................................................................. 1102 iunirand ................................................................................................ 1103 iweibull ................................................................................................ 1104 JackoAudioIn ........................................................................................ 1105 JackoAudioInConnect ............................................................................. 1106 JackoAudioOut ...................................................................................... 1107 JackoAudioOutConnect ........................................................................... 1108 JackoFreewheel ..................................................................................... 1109 JackoInfo .............................................................................................. 1110 JackoInit .............................................................................................. 1111 JackoMidiInConnect ............................................................................... 1112 JackoMidiOutConnect ............................................................................ 1113 JackoMidiOut ........................................................................................ 1114 JackoNoteOut ........................................................................................ 1115 JackoOn ............................................................................................... 1116 JackoTransport ...................................................................................... 1117 jacktransport ......................................................................................... 1118 jitter .................................................................................................... 1120 jitter2 ................................................................................................... 1122 jspline .................................................................................................. 1124 k ......................................................................................................... 1125 kbetarand .............................................................................................. 1126 kbexprnd .............................................................................................. 1127 kcauchy ................................................................................................ 1128 kdump ................................................................................................. 1129 kdump2 ................................................................................................ 1130 kdump3 ................................................................................................ 1131 kdump4 ................................................................................................ 1132 kexprand .............................................................................................. 1133 kfilter2 ................................................................................................. 1134 kgauss .................................................................................................. 1135 kgoto ................................................................................................... 1136 klinrand ................................................................................................ 1138 kon ...................................................................................................... 1139 koutat .................................................................................................. 1140 koutc ................................................................................................... 1141 koutc14 ................................................................................................ 1142 koutpat ................................................................................................. 1143 koutpb ................................................................................................. 1144 koutpc .................................................................................................. 1145 kpcauchy .............................................................................................. 1146 kpoisson ............................................................................................... 1147 kpow ................................................................................................... 1148 kr ........................................................................................................ 1149 kread ................................................................................................... 1150 kread2 .................................................................................................. 1151 kread3 .................................................................................................. 1152 kread4 .................................................................................................. 1153 ksmps .................................................................................................. 1154 ktableseg .............................................................................................. 1155 ktrirand ................................................................................................ 1156 kunirand ............................................................................................... 1157 xv
kweibull ............................................................................................... 1158 lfo ....................................................................................................... 1159 limit .................................................................................................... 1161 line ...................................................................................................... 1162 linen .................................................................................................... 1164 linenr ................................................................................................... 1166 lineto ................................................................................................... 1167 linrand ................................................................................................. 1168 linseg ................................................................................................... 1170 linsegr .................................................................................................. 1173 locsend ................................................................................................ 1176 locsig ................................................................................................... 1178 log ...................................................................................................... 1180 log10 ................................................................................................... 1182 logbtwo ................................................................................................ 1184 logcurve ............................................................................................... 1186 loop_ge ................................................................................................ 1188 loop_gt ................................................................................................ 1189 loop_le ................................................................................................. 1190 loop_lt ................................................................................................. 1191 loopseg ................................................................................................ 1192 loopsegp ............................................................................................... 1194 looptseg ............................................................................................... 1196 loopxseg ............................................................................................... 1198 lorenz .................................................................................................. 1200 lorisread ............................................................................................... 1203 lorismorph ............................................................................................ 1205 lorisplay ............................................................................................... 1206 loscil ................................................................................................... 1207 loscil3 .................................................................................................. 1210 loscilx .................................................................................................. 1213 lowpass2 .............................................................................................. 1214 lowres .................................................................................................. 1216 lowresx ................................................................................................ 1218 lpf18 .................................................................................................... 1220 lpfreson ................................................................................................ 1222 lphasor ................................................................................................. 1223 lpinterp ................................................................................................ 1225 lposcil .................................................................................................. 1226 lposcil3 ................................................................................................ 1227 lposcila ................................................................................................ 1228 lposcilsa ............................................................................................... 1229 lposcilsa2 ............................................................................................. 1230 lpread .................................................................................................. 1231 lpreson ................................................................................................. 1233 lpshold ................................................................................................. 1234 lpsholdp ............................................................................................... 1236 lpslot ................................................................................................... 1237 mac ..................................................................................................... 1239 maca .................................................................................................... 1240 madsr ................................................................................................... 1241 mandel ................................................................................................. 1244 mandol ................................................................................................. 1245 marimba ............................................................................................... 1247 massign ................................................................................................ 1250 max ..................................................................................................... 1252 maxabs ................................................................................................ 1253 maxabsaccum ........................................................................................ 1254 xvi
maxaccum ............................................................................................ 1255 maxalloc .............................................................................................. 1256 max_k .................................................................................................. 1258 mclock ................................................................................................. 1259 mdelay ................................................................................................. 1260 median ................................................................................................. 1262 mediank ............................................................................................... 1264 metro ................................................................................................... 1266 midic14 ................................................................................................ 1268 midic21 ................................................................................................ 1270 midic7 ................................................................................................. 1272 midichannelaftertouch ............................................................................. 1274 midichn ................................................................................................ 1276 midicontrolchange .................................................................................. 1279 midictrl ................................................................................................ 1281 mididefault ........................................................................................... 1282 midiin .................................................................................................. 1283 midinoteoff ........................................................................................... 1286 midinoteoncps ....................................................................................... 1288 midinoteonkey ....................................................................................... 1290 midinoteonoct ....................................................................................... 1292 midinoteonpch ....................................................................................... 1294 midion ................................................................................................. 1296 midion2 ................................................................................................ 1299 midiout ................................................................................................ 1300 midipitchbend ....................................................................................... 1302 midipolyaftertouch ................................................................................. 1304 midiprogramchange ................................................................................ 1306 miditempo ............................................................................................ 1307 midremot .............................................................................................. 1308 midglobal ............................................................................................. 1311 min ..................................................................................................... 1312 minabs ................................................................................................. 1313 minabsaccum ........................................................................................ 1314 minaccum ............................................................................................. 1315 mincer ................................................................................................. 1316 mirror .................................................................................................. 1318 MixerSetLevel ....................................................................................... 1319 MixerSetLevel_i .................................................................................... 1321 MixerGetLevel ...................................................................................... 1322 MixerSend ............................................................................................ 1323 MixerReceive ........................................................................................ 1324 MixerClear ........................................................................................... 1326 mode ................................................................................................... 1327 modmatrix ............................................................................................ 1330 monitor ................................................................................................ 1335 moog ................................................................................................... 1336 moogladder ........................................................................................... 1338 moogvcf ............................................................................................... 1340 moogvcf2 ............................................................................................. 1342 moscil .................................................................................................. 1344 mp3in .................................................................................................. 1346 mpulse ................................................................................................. 1347 mrtmsg ................................................................................................ 1349 multitap ................................................................................................ 1350 mute .................................................................................................... 1351 mxadsr ................................................................................................. 1353 nchnls .................................................................................................. 1355 xvii
nchns_i ................................................................................................ 1356 nestedap ............................................................................................... 1357 nlfilt .................................................................................................... 1360 noise .................................................................................................... 1362 noteoff ................................................................................................. 1365 noteon .................................................................................................. 1366 noteondur ............................................................................................. 1367 noteondur2 ........................................................................................... 1369 notnum ................................................................................................ 1371 nreverb ................................................................................................ 1373 nrpn ..................................................................................................... 1376 nsamp .................................................................................................. 1377 nstrnum ................................................................................................ 1379 ntrpol ................................................................................................... 1380 octave .................................................................................................. 1381 octcps .................................................................................................. 1383 octmidi ................................................................................................ 1386 octmidib ............................................................................................... 1388 octmidinn ............................................................................................. 1390 octpch .................................................................................................. 1393 opcode ................................................................................................. 1396 OSCsend .............................................................................................. 1401 OSCinit ................................................................................................ 1403 OSClisten ............................................................................................. 1404 oscbnk ................................................................................................. 1408 oscil .................................................................................................... 1413 oscil1 ................................................................................................... 1415 oscil1i .................................................................................................. 1416 oscil3 ................................................................................................... 1417 oscili ................................................................................................... 1419 oscilikt ................................................................................................. 1421 osciliktp ............................................................................................... 1423 oscilikts ................................................................................................ 1425 osciln ................................................................................................... 1427 oscils ................................................................................................... 1428 oscilx ................................................................................................... 1430 out ...................................................................................................... 1431 out32 ................................................................................................... 1432 outc ..................................................................................................... 1433 outch ................................................................................................... 1434 outh ..................................................................................................... 1435 outiat ................................................................................................... 1436 outic .................................................................................................... 1437 outic14 ................................................................................................. 1438 outipat ................................................................................................. 1440 outipb .................................................................................................. 1441 outipc .................................................................................................. 1442 outkat .................................................................................................. 1443 outkc ................................................................................................... 1444 outkc14 ................................................................................................ 1445 outkpat ................................................................................................. 1446 outkpb ................................................................................................. 1447 outkpc .................................................................................................. 1448 outleta .................................................................................................. 1451 outletk ................................................................................................. 1452 outletf .................................................................................................. 1453 outo ..................................................................................................... 1454 outq ..................................................................................................... 1455 xviii
outq1 ................................................................................................... 1456 outq2 ................................................................................................... 1457 outq3 ................................................................................................... 1458 outq4 ................................................................................................... 1459 outrg .................................................................................................... 1460 outs ..................................................................................................... 1461 outs1 ................................................................................................... 1462 outs2 ................................................................................................... 1463 outvalue ............................................................................................... 1464 outx ..................................................................................................... 1465 outz ..................................................................................................... 1466 p ......................................................................................................... 1467 p5gconnect ........................................................................................... 1469 p5gdata ................................................................................................ 1471 pan ...................................................................................................... 1473 pan2 .................................................................................................... 1475 pareq ................................................................................................... 1476 partials ................................................................................................. 1479 partikkel ............................................................................................... 1481 partikkelsync ......................................................................................... 1490 passign ................................................................................................. 1491 pcauchy ................................................................................................ 1493 pchbend ............................................................................................... 1495 pchmidi ................................................................................................ 1497 pchmidib .............................................................................................. 1499 pchmidinn ............................................................................................ 1501 pchoct .................................................................................................. 1504 pconvolve ............................................................................................. 1507 pcount .................................................................................................. 1510 pdclip .................................................................................................. 1512 pdhalf .................................................................................................. 1515 pdhalfy ................................................................................................ 1518 peak .................................................................................................... 1521 peakk ................................................................................................... 1523 pgmassign ............................................................................................ 1524 phaser1 ................................................................................................ 1528 phaser2 ................................................................................................ 1531 phasor .................................................................................................. 1535 phasorbnk ............................................................................................. 1537 pindex .................................................................................................. 1539 pinkish ................................................................................................. 1541 pitch .................................................................................................... 1544 pitchamdf ............................................................................................. 1547 planet ................................................................................................... 1550 pluck ................................................................................................... 1552 poisson ................................................................................................ 1554 polyaft ................................................................................................. 1558 polynomial ........................................................................................... 1560 pop ...................................................................................................... 1562 pop_f ................................................................................................... 1563 port ..................................................................................................... 1564 portk .................................................................................................... 1565 poscil ................................................................................................... 1567 poscil3 ................................................................................................. 1569 pow ..................................................................................................... 1572 powershape ........................................................................................... 1574 powoftwo ............................................................................................. 1576 prealloc ................................................................................................ 1578 xix
prepiano ............................................................................................... 1580 print .................................................................................................... 1583 printf ................................................................................................... 1585 printk ................................................................................................... 1586 printk2 ................................................................................................. 1588 printks ................................................................................................. 1590 prints ................................................................................................... 1593 product ................................................................................................ 1595 pset ..................................................................................................... 1596 ptrack .................................................................................................. 1597 puts ..................................................................................................... 1599 push .................................................................................................... 1600 push_f .................................................................................................. 1601 pvadd ................................................................................................... 1602 pvbufread ............................................................................................. 1605 pvcross ................................................................................................ 1607 pvinterp ................................................................................................ 1609 pvoc .................................................................................................... 1611 pvread .................................................................................................. 1613 pvsadsyn .............................................................................................. 1615 pvsanal ................................................................................................ 1617 pvsarp .................................................................................................. 1620 pvsbandp .............................................................................................. 1623 pvsbandr .............................................................................................. 1625 pvsbin .................................................................................................. 1627 pvsblur ................................................................................................. 1629 pvsbuffer .............................................................................................. 1631 pvsbufread ............................................................................................ 1632 pvscale ................................................................................................. 1635 pvscent ................................................................................................ 1637 pvscross ............................................................................................... 1639 pvsdemix .............................................................................................. 1641 pvsdiskin .............................................................................................. 1643 pvsdisp ................................................................................................ 1644 pvsfilter ................................................................................................ 1646 pvsfread ............................................................................................... 1649 pvsfreeze .............................................................................................. 1650 pvsftr ................................................................................................... 1652 pvsftw .................................................................................................. 1654 pvsfwrite .............................................................................................. 1656 pvshift ................................................................................................. 1658 pvsifd .................................................................................................. 1660 pvsinfo ................................................................................................. 1662 pvsinit .................................................................................................. 1663 pvsin ................................................................................................... 1664 pvslock ................................................................................................ 1665 pvsmaska .............................................................................................. 1667 pvsmix ................................................................................................. 1669 pvsmorph ............................................................................................. 1670 pvsmooth .............................................................................................. 1673 pvsout .................................................................................................. 1675 pvsosc .................................................................................................. 1676 pvspitch ............................................................................................... 1679 pvstanal ................................................................................................ 1682 pvstencil ............................................................................................... 1684 pvsvoc ................................................................................................. 1686 pvsynth ................................................................................................ 1688 pvswarp ............................................................................................... 1690 xx
pyassign Opcodes ................................................................................... 1692 pycall Opcodes ...................................................................................... 1693 pyeval Opcodes ..................................................................................... 1697 pyexec Opcodes ..................................................................................... 1698 pyinit Opcodes ...................................................................................... 1701 pyrun Opcodes ...................................................................................... 1702 rand ..................................................................................................... 1704 randh ................................................................................................... 1706 randi .................................................................................................... 1708 random ................................................................................................ 1710 randomh ............................................................................................... 1712 randomi ................................................................................................ 1714 rbjeq .................................................................................................... 1716 readclock .............................................................................................. 1719 readk ................................................................................................... 1721 readk2 .................................................................................................. 1723 readk3 .................................................................................................. 1725 readk4 .................................................................................................. 1727 reinit .................................................................................................... 1729 release ................................................................................................. 1731 remoteport ............................................................................................ 1732 remove ................................................................................................. 1733 repluck ................................................................................................. 1734 reson ................................................................................................... 1736 resonk .................................................................................................. 1738 resonr .................................................................................................. 1739 resonx .................................................................................................. 1742 resonxk ................................................................................................ 1743 resony .................................................................................................. 1744 resonz .................................................................................................. 1746 resyn ................................................................................................... 1748 reverb .................................................................................................. 1750 reverb2 ................................................................................................ 1752 reverbsc ............................................................................................... 1753 rewindscore .......................................................................................... 1755 rezzy ................................................................................................... 1756 rigoto ................................................................................................... 1758 rireturn ................................................................................................. 1759 rms ...................................................................................................... 1761 rnd ...................................................................................................... 1763 rnd31 ................................................................................................... 1765 round ................................................................................................... 1770 rspline .................................................................................................. 1771 rtclock ................................................................................................. 1772 s16b14 ................................................................................................. 1774 s32b14 ................................................................................................. 1776 scale .................................................................................................... 1778 samphold .............................................................................................. 1780 sandpaper ............................................................................................. 1781 scanhammer .......................................................................................... 1783 scans ................................................................................................... 1784 scantable .............................................................................................. 1786 scanu ................................................................................................... 1788 scoreline ............................................................................................... 1790 scoreline_i ............................................................................................ 1792 schedkwhen .......................................................................................... 1793 schedkwhennamed ................................................................................. 1796 schedule ............................................................................................... 1798 xxi
schedwhen ............................................................................................ 1801 seed ..................................................................................................... 1804 sekere .................................................................................................. 1805 semitone ............................................................................................... 1807 sense ................................................................................................... 1809 sensekey ............................................................................................... 1810 seqtime ................................................................................................ 1814 seqtime2 ............................................................................................... 1817 setctrl ................................................................................................... 1819 setksmps .............................................................................................. 1821 setscorepos ........................................................................................... 1823 sfilist ................................................................................................... 1824 sfinstr .................................................................................................. 1825 sfinstr3 ................................................................................................. 1827 sfinstr3m .............................................................................................. 1829 sfinstrm ................................................................................................ 1831 sfload ................................................................................................... 1833 sflooper ................................................................................................ 1834 sfpassign .............................................................................................. 1836 sfplay ................................................................................................... 1837 sfplay3 ................................................................................................. 1839 sfplay3m .............................................................................................. 1841 sfplaym ................................................................................................ 1843 sfplist ................................................................................................... 1845 sfpreset ................................................................................................ 1846 shaker .................................................................................................. 1848 sin ....................................................................................................... 1850 sinh ..................................................................................................... 1852 sininv ................................................................................................... 1854 sinsyn .................................................................................................. 1856 sleighbells ............................................................................................ 1858 slider16 ................................................................................................ 1860 slider16f ............................................................................................... 1862 slider32 ................................................................................................ 1864 slider32f ............................................................................................... 1866 slider64 ................................................................................................ 1868 slider64f ............................................................................................... 1870 slider8 .................................................................................................. 1872 slider8f ................................................................................................ 1874 slider16table ......................................................................................... 1876 slider16tablef ........................................................................................ 1878 slider32table ......................................................................................... 1880 slider32tablef ........................................................................................ 1882 slider64table ......................................................................................... 1884 slider64tablef ........................................................................................ 1886 slider8table ........................................................................................... 1888 slider8tablef .......................................................................................... 1890 sliderKawai ........................................................................................... 1892 sndload ................................................................................................ 1893 sndloop ................................................................................................ 1895 sndwarp ............................................................................................... 1897 sndwarpst ............................................................................................. 1901 socksend .............................................................................................. 1904 sockrecv ............................................................................................... 1906 soundin ................................................................................................ 1908 soundout .............................................................................................. 1911 soundouts ............................................................................................. 1913 space ................................................................................................... 1915 xxii
spat3d .................................................................................................. 1919 spat3di ................................................................................................. 1927 spat3dt ................................................................................................. 1931 spdist ................................................................................................... 1935 specaddm ............................................................................................. 1939 specdiff ................................................................................................ 1940 specdisp ............................................................................................... 1941 specfilt ................................................................................................. 1942 spechist ................................................................................................ 1943 specptrk ............................................................................................... 1944 specscal ................................................................................................ 1946 specsum ............................................................................................... 1947 spectrum .............................................................................................. 1948 splitrig ................................................................................................. 1950 spsend .................................................................................................. 1952 sprintf .................................................................................................. 1955 sprintfk ................................................................................................ 1956 sqrt ...................................................................................................... 1958 sr ........................................................................................................ 1960 stack .................................................................................................... 1961 statevar ................................................................................................ 1962 stix ...................................................................................................... 1964 STKBandedWG ..................................................................................... 1966 STKBeeThree ....................................................................................... 1968 STKBlowBotl ....................................................................................... 1970 STKBlowHole ....................................................................................... 1972 STKBowed ........................................................................................... 1974 STKBrass ............................................................................................. 1976 STKClarinet .......................................................................................... 1978 STKDrummer ....................................................................................... 1980 STKFlute .............................................................................................. 1982 STKFMVoices ...................................................................................... 1984 STKHevyMetl ....................................................................................... 1986 STKMandolin ....................................................................................... 1988 STKModalBar ....................................................................................... 1990 STKMoog ............................................................................................ 1992 STKPercFlut ......................................................................................... 1994 STKPlucked .......................................................................................... 1996 STKResonate ........................................................................................ 1998 STKRhodey .......................................................................................... 2000 STKSaxofony ........................................................................................ 2002 STKShakers .......................................................................................... 2004 STKSimple ........................................................................................... 2006 STKSitar .............................................................................................. 2008 STKStifKarp ......................................................................................... 2010 STKTubeBell ........................................................................................ 2012 STKVoicForm ....................................................................................... 2014 STKWhistle .......................................................................................... 2016 STKWurley .......................................................................................... 2018 strchar .................................................................................................. 2020 strchark ................................................................................................ 2021 strcpy ................................................................................................... 2022 strcpyk ................................................................................................. 2023 strcat ................................................................................................... 2024 strcatk .................................................................................................. 2025 strcmp .................................................................................................. 2026 strcmpk ................................................................................................ 2027 streson ................................................................................................. 2028 xxiii
strget ................................................................................................... 2030 strindex ................................................................................................ 2031 strindexk .............................................................................................. 2032 strlen ................................................................................................... 2033 strlenk .................................................................................................. 2034 strlower ................................................................................................ 2035 strlowerk .............................................................................................. 2036 strrindex ............................................................................................... 2037 strrindexk ............................................................................................. 2038 strset .................................................................................................... 2039 strsub ................................................................................................... 2041 strsubk ................................................................................................. 2043 strtod ................................................................................................... 2044 strtodk ................................................................................................. 2045 strtol .................................................................................................... 2046 strtolk .................................................................................................. 2047 strupper ................................................................................................ 2048 strupperk .............................................................................................. 2049 subinstr ................................................................................................ 2050 subinstrinit ............................................................................................ 2053 sum ..................................................................................................... 2054 svfilter ................................................................................................. 2055 syncgrain .............................................................................................. 2058 syncloop ............................................................................................... 2060 syncphasor ............................................................................................ 2062 system ................................................................................................. 2066 tb ........................................................................................................ 2068 tab ....................................................................................................... 2071 tabrec ................................................................................................... 2072 table .................................................................................................... 2073 table3 ................................................................................................... 2075 tablecopy .............................................................................................. 2076 tablefilter .............................................................................................. 2077 tablefilteri ............................................................................................. 2079 tablegpw .............................................................................................. 2081 tablei ................................................................................................... 2082 tableicopy ............................................................................................. 2083 tableigpw .............................................................................................. 2084 tableikt ................................................................................................. 2085 tableimix .............................................................................................. 2087 tableiw ................................................................................................. 2089 tablekt .................................................................................................. 2091 tablemix ............................................................................................... 2093 tableng ................................................................................................. 2095 tablera .................................................................................................. 2097 tableseg ................................................................................................ 2100 tableshuffle ........................................................................................... 2101 tablew .................................................................................................. 2103 tablewa ................................................................................................ 2106 tablewkt ............................................................................................... 2109 tablexkt ................................................................................................ 2112 tablexseg .............................................................................................. 2115 tabmorph .............................................................................................. 2116 tabmorpha ............................................................................................ 2118 tabmorphak ........................................................................................... 2120 tabmorphi ............................................................................................. 2122 tabplay ................................................................................................. 2124 tabsum ................................................................................................. 2125 xxiv
tambourine ........................................................................................... 2126 tan ....................................................................................................... 2128 tanh ..................................................................................................... 2130 taninv .................................................................................................. 2132 taninv2 ................................................................................................. 2134 tbvcf .................................................................................................... 2136 tempest ................................................................................................ 2139 tempo .................................................................................................. 2142 temposcal ............................................................................................. 2144 tempoval .............................................................................................. 2146 tigoto ................................................................................................... 2148 timedseq ............................................................................................... 2149 timeinstk .............................................................................................. 2151 timeinsts ............................................................................................... 2153 timek ................................................................................................... 2155 times ................................................................................................... 2157 timout .................................................................................................. 2159 tival ..................................................................................................... 2160 tlineto .................................................................................................. 2161 tone ..................................................................................................... 2162 tonek ................................................................................................... 2163 tonex ................................................................................................... 2164 trandom ................................................................................................ 2165 tradsyn ................................................................................................. 2166 transeg ................................................................................................. 2168 transegr ................................................................................................ 2170 trcross .................................................................................................. 2171 trfilter .................................................................................................. 2173 trhighest ............................................................................................... 2175 trigger .................................................................................................. 2176 trigseq .................................................................................................. 2178 trirand .................................................................................................. 2180 trlowest ................................................................................................ 2182 trmix ................................................................................................... 2183 trscale .................................................................................................. 2184 trshift ................................................................................................... 2185 trsplit ................................................................................................... 2186 turnoff ................................................................................................. 2188 turnoff2 ................................................................................................ 2190 turnon .................................................................................................. 2191 unirand ................................................................................................ 2192 upsamp ................................................................................................ 2194 urandom ............................................................................................... 2195 urd ...................................................................................................... 2198 vadd .................................................................................................... 2199 vadd_i .................................................................................................. 2202 vaddv ................................................................................................... 2204 vaddv_i ................................................................................................ 2207 vaget ................................................................................................... 2209 valpass ................................................................................................. 2211 vaset .................................................................................................... 2212 vbap16 ................................................................................................. 2214 vbap16move ......................................................................................... 2216 vbap4 ................................................................................................... 2218 vbap4move ........................................................................................... 2220 vbap8 ................................................................................................... 2222 vbap8move ........................................................................................... 2224 vbaplsinit .............................................................................................. 2227 xxv
vbapz ................................................................................................... 2229 vbapzmove ........................................................................................... 2231 vcella ................................................................................................... 2233 vco ...................................................................................................... 2236 vco2 .................................................................................................... 2239 vco2ft .................................................................................................. 2243 vco2ift ................................................................................................. 2245 vco2init ................................................................................................ 2246 vcomb .................................................................................................. 2248 vcopy ................................................................................................... 2251 vcopy_i ................................................................................................ 2254 vdelay .................................................................................................. 2256 vdelay3 ................................................................................................ 2258 vdelayx ................................................................................................ 2260 vdelayxq .............................................................................................. 2262 vdelayxs ............................................................................................... 2264 vdelayxw .............................................................................................. 2266 vdelayxwq ............................................................................................ 2268 vdelayxws ............................................................................................ 2270 vdivv ................................................................................................... 2272 vdivv_i ................................................................................................ 2275 vdelayk ................................................................................................ 2277 vecdelay ............................................................................................... 2278 veloc ................................................................................................... 2279 vexp .................................................................................................... 2281 vexp_i .................................................................................................. 2284 vexpseg ................................................................................................ 2286 vexpv ................................................................................................... 2288 vexpv_i ................................................................................................ 2291 vibes .................................................................................................... 2293 vibr ..................................................................................................... 2295 vibrato ................................................................................................. 2297 vincr .................................................................................................... 2300 vlimit ................................................................................................... 2301 vlinseg ................................................................................................. 2302 vlowres ................................................................................................ 2304 vmap ................................................................................................... 2306 vmirror ................................................................................................ 2308 vmult ................................................................................................... 2309 vmult_i ................................................................................................ 2313 vmultv ................................................................................................. 2315 vmultv_i ............................................................................................... 2318 voice ................................................................................................... 2320 vosim ................................................................................................... 2323 vphaseseg ............................................................................................. 2328 vport .................................................................................................... 2330 vpow ................................................................................................... 2331 vpow_i ................................................................................................. 2334 vpowv .................................................................................................. 2336 vpowv_i ............................................................................................... 2339 vpvoc ................................................................................................... 2341 vrandh ................................................................................................. 2343 vrandi .................................................................................................. 2346 vstaudio, vstaudiog ................................................................................. 2349 vstbankload ........................................................................................... 2351 vstedit .................................................................................................. 2352 vstinit .................................................................................................. 2354 vstinfo ................................................................................................. 2356 xxvi
vstmidiout ............................................................................................ 2358 vstnote ................................................................................................. 2360 vstparamset,vstparamget .......................................................................... 2362 vstprogset ............................................................................................. 2364 vsubv ................................................................................................... 2365 vsubv_i ................................................................................................ 2368 vtable1k ............................................................................................... 2370 vtablei .................................................................................................. 2372 vtablek ................................................................................................. 2374 vtablea ................................................................................................. 2376 vtablewi ............................................................................................... 2378 vtablewk .............................................................................................. 2379 vtablewa ............................................................................................... 2381 vtabi .................................................................................................... 2383 vtabk ................................................................................................... 2385 vtaba ................................................................................................... 2387 vtabwi .................................................................................................. 2389 vtabwk ................................................................................................. 2390 vtabwa ................................................................................................. 2391 vwrap .................................................................................................. 2392 waveset ................................................................................................ 2393 weibull ................................................................................................. 2395 wgbow ................................................................................................. 2397 wgbowedbar ......................................................................................... 2399 wgbrass ................................................................................................ 2401 wgclar .................................................................................................. 2403 wgflute ................................................................................................ 2405 wgpluck ............................................................................................... 2407 wgpluck2 .............................................................................................. 2410 wguide1 ............................................................................................... 2412 wguide2 ............................................................................................... 2414 wiiconnect ............................................................................................ 2417 wiidata ................................................................................................. 2419 wiirange ............................................................................................... 2422 wiisend ................................................................................................ 2423 wrap .................................................................................................... 2425 wterrain ................................................................................................ 2426 xadsr ................................................................................................... 2428 xin ...................................................................................................... 2430 xout ..................................................................................................... 2432 xscanmap ............................................................................................. 2434 xscansmap ............................................................................................ 2435 xscans .................................................................................................. 2436 xscanu ................................................................................................. 2438 xtratim ................................................................................................. 2441 xyin ..................................................................................................... 2444 zacl ..................................................................................................... 2446 zakinit .................................................................................................. 2448 zamod .................................................................................................. 2451 zar ....................................................................................................... 2453 zarg ..................................................................................................... 2455 zaw ..................................................................................................... 2457 zawm ................................................................................................... 2459 zfilter2 ................................................................................................. 2462 zir ....................................................................................................... 2464 ziw ...................................................................................................... 2466 ziwm ................................................................................................... 2468 zkcl ..................................................................................................... 2470 xxvii
zkmod .................................................................................................. 2472 zkr ...................................................................................................... 2474 zkw ..................................................................................................... 2476 zkwm ................................................................................................... 2478 Score Statements and GEN Routines .................................................................. 2481 Score Statements .................................................................................... 2481 a Statement (or Advance Statement) .......................................................... 2482 b Statement ........................................................................................... 2483 e Statement ........................................................................................... 2484 f Statement (or Function Table Statement) .................................................. 2485 i Statement (Instrument or Note Statement) ................................................. 2487 m Statement (Mark Statement) ................................................................. 2491 n Statement ........................................................................................... 2493 q Statement ........................................................................................... 2495 r Statement (Repeat Statement) ................................................................. 2496 s Statement ........................................................................................... 2498 t Statement (Tempo Statement) ................................................................. 2499 v Statement ........................................................................................... 2500 x Statement ........................................................................................... 2502 { Statement ........................................................................................... 2503 } Statement ........................................................................................... 2506 GEN Routines ....................................................................................... 2506 GEN01 ................................................................................................ 2510 GEN02 ................................................................................................ 2513 GEN03 ................................................................................................ 2515 GEN04 ................................................................................................ 2517 GEN05 ................................................................................................ 2518 GEN06 ................................................................................................ 2520 GEN07 ................................................................................................ 2522 GEN08 ................................................................................................ 2524 GEN09 ................................................................................................ 2526 GEN10 ................................................................................................ 2529 GEN11 ................................................................................................ 2531 GEN12 ................................................................................................ 2533 GEN13 ................................................................................................ 2535 GEN14 ................................................................................................ 2537 GEN15 ................................................................................................ 2540 GEN16 ................................................................................................ 2541 GEN17 ................................................................................................ 2544 GEN18 ................................................................................................ 2545 GEN19 ................................................................................................ 2546 GEN20 ................................................................................................ 2548 GEN21 ................................................................................................ 2550 GEN22 ................................................................................................ 2552 GEN23 ................................................................................................ 2553 GEN24 ................................................................................................ 2554 GEN25 ................................................................................................ 2555 GEN27 ................................................................................................ 2556 GEN28 ................................................................................................ 2557 GEN30 ................................................................................................ 2559 GEN31 ................................................................................................ 2560 GEN32 ................................................................................................ 2561 GEN33 ................................................................................................ 2563 GEN34 ................................................................................................ 2565 GEN40 ................................................................................................ 2567 GEN41 ................................................................................................ 2568 GEN42 ................................................................................................ 2569 GEN43 ................................................................................................ 2570 xxviii
GEN49 ................................................................................................ 2571 GEN51 ................................................................................................ 2573 GEN52 ................................................................................................ 2574 GENtanh .............................................................................................. 2575 GENexp ............................................................................................... 2577 GENsone .............................................................................................. 2579 GENfarey ............................................................................................. 2581 The Utility Programs ...................................................................................... 2584 Directories. ........................................................................................... 2584 Soundfile Formats. ................................................................................. 2584 Analysis File Generation (ATSA, CVANAL, HETRO, LPANAL, PVANAL) .................................................................................................... 2585 File Queries (SNDINFO) ................................................................. 2596 File Conversion (HET_IMPORT, HET_EXPORT, PVLOOK, PV_EXPORT, PV_IMPORT, SDIF2AD, SRCONV) ................................................ 2597 Other Csound Utilities (CS, CSB64ENC, ENVEXT, EXTRACTOR, MAKECSD, MIXER, SCALE) ..................................................................... 2613 Cscore ......................................................................................................... 2626 Events, Lists, and Operations .................................................................... 2626 Writing a Cscore Control Program ............................................................. 2629 Compiling a Cscore Program .................................................................... 2633 More Advanced Examples ....................................................................... 2636 Beats ........................................................................................................... 2639 ............................................................................................................ 2639 ............................................................................................................ 2640 Extending Csound .......................................................................................... 2642 Adding Unit Generators .......................................................................... 2642 Creating a Builtin Unit Generator ...................................................... 2642 Adding a Plugin Unit Generator ........................................................ 2645 OENTRY Reference ........................................................................... 2646 IV. Opcode Quick Reference .................................................................................... 2649 Opcode Quick Reference ................................................................................. 2651 A. List of examples ................................................................................................ 2695 B. Pitch Conversion ................................................................................................ 2720 C. Sound Intensity Values ........................................................................................ 2724 D. Formant Values ................................................................................................. 2725 E. Modal Frequency Ratios ...................................................................................... 2730 F. Window Functions .............................................................................................. 2732 G. SoundFont2 File Format ...................................................................................... 2737 H. Csound Double (64-bit) vs. Float (32-bit) ............................................................... 2738 Glossary ............................................................................................................... 2739
xxix
Preface
Table of Contents
Preface to the Csound Manual ................................................................................... xxx History of the Canonical Csound Reference Manual ......................................................xxxi Copyright Notice ...................................................................................................xxxii Getting Started with Csound .................................................................................... xxxiv What's new in Csound 5.13 ..................................................................................... xxxvi
Preface
iterative performance. The 1995 release introduced an expanded MIDI set with MIDI-based linseg, butterworth filters, granular synthesis, and an improved spectral-based pitch tracker. Of special importance was the addition of run-time event generating tools (Cscore and MIDI) allowing run-time sensing and response setups that enable interactive composition and experiment. It appeared that real-time software synthesis was now showing some real promise.
Preface
Richard Karpen Anthony Kozar Victor Lazzarini Allan Lee David Macintyre Gabriel Maldonado Max Mathews Hans Mikelson Peter Neubcker Peter Nix Ville Pulkki Maurizio Umberto Puxeddu John Ramsdell Marc Resibois Rob Shaw Paris Smaragdis Greg Sullivan Istvan Varga Bill Verplank Robin Whittle Steven Yi Franois Pinot Andrs Cabrera Gareth Edwards Joachim Heinz John ffitch Oeyvind Brandstegg Felipe Sateler And many others. This list is by no means complete. More information can be gathered from the Changelog file in the manual's sources repository.
Copyright Notice
This version of the Csound Manual ("The Canonical Csound Manual") is released under the GNU Free Documentation Licence [http://www.gnu.org/licenses/fdl.txt]. Below are listed, for historical purposes, previous copyrights and requests for credit from previous authors.
Preface
Manual
Copyright (c) 2003 by Kevin Conder for modifications made to the Public Csound Reference Manual. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of this license is available in the examples sub-directory [examples/fdl.txt] or at: www.gnu.org/licenses/fdl.txt [http://www.gnu.org/licenses/fdl.txt]. This Csound language documentation in this manual is derived from Kevin Conder's Alternative Csound Reference Manual, which in turn is derived from the Public Csound Reference Manual. Copyright 2004-2005 by Michael Gogins for modifications made to the Alternative Csound Reference Manual. This legal notice is from the Public Csound Reference Manual: The original Hypertext Edition of the MIT Csound Manual was prepared for the World Wide Web by Peter J. Nix of the Department of Music at the University of Leeds and Jean Pich of the Facult de musique de l'Universit de Montral. A Print Edition, in Adobe Acrobat format, was then maintained by David M. Boothe. The editors fully acknowledge the rights of the authors of the original documentation and programs, as set out above, and further request that this notice appear wherever this material is held. The Public Csound Reference Manual's last known tp://www.lakewoodsound.com/csound/hypertext/manual.htm. network location was ht-
The Alternative Csound Reference Manual's network location, for both the Transparent and Opaque copies, is http://kevindumpscore.com/download.html#csound-manual. The Csound and CsoundAC Manual's network location is http://sourceforge.net/projects/csound.
xxxiii
Preface
Running
Csound can be run in different ways. Since Csound is a command line program (DOS in Windows terms), just clicking on the csound executable will have no effect. Csound must be called either from the computer's command line or from a front end. To use Csound from the command line, you must open a Terminal (Command Prompt or DOS Prompt on Windows, or Terminal on MacOS). Using Csound from the command line can be difficult if you've never used a terminal, so you may want to try to use one of the front ends, either QuteCsound, which is included with the latest distributions, or another front end. A front end is a window-based (not necessarily Windows-based) program that assists running Csound. Most front ends include text editors with which you can edit csound files, and many include other useful features. Whether being run from a front end or being executed from the command line, Csound needs two things: A Csound file ('.csd' or possibly an '.orc' and a '.sco' file) A list of command line flags (or configuration options) that configure execution. They determine things like output filename and format, whether real-time audio and MIDI are enabled, which audio output to use for real-time audio, the buffer size, the types of messages printed, etc. These options can be included in the '.csd' file itself, so for the examples included in this manual you shouldn't need to worry about them. Front end programs often have dialog boxes in which the command line flags can be set. The complete and very long list of available command flags can be found here, but you might want to have a look there later... See the section Configuring if Csound is giving you trouble. This documentation includes many '.csd' files which you can try out, and which should work directly from the command line or from any front end. A simple example is oscil.csd [examples/oscil.csd], which can be found in the examples folder of this documentation. Your front end should allow you to load the file, and the front end should have a 'play' or 'render' button that will allow you to hear the file. If you want to experiment with the file, you're well advised to use the front end's 'Save As..." command to copy it to some other directory on your hard drive, such as a 'csound scores' directory that you create.
Preface
ectory of the manual using something like this on Windows (assuming the manual is located at c:\Program Files\Csound\manual\):
cd "c:\Program Files\Csound\doc\manual\examples"
or something like:
cd /manualdirectory/manual/examples
The example files are configured to run in real time by default, so with this command you should hear a two-second sine wave.
Csound's .csd files have three main sections between the <CsSynthesizer> and </CsSynthesizer> tags: CsOptions - Includes the Command Line flags specific to this particular file. These options can also be set using the .csoundrc file, which you can edit in a text editor, or directly in the command line. Some front ends also provide ways to specify global or local options. CsInstruments - Contains the instruments or processes available in the file. Instruments are defined xxxv
Preface
using the instr and endin opcodes. The CsInstruments section also contains the Orchestra Header, which defines things like sample rate, the number of samples in a control period, and the number of output channels. CsScore - Contains the 'notes' to be played, and optionally the definition of f-tables. Notes are created using the i statement, and f-tables are created using the f statement. Several other score statements are available. Anything after a semicolon (;) until the end of the line is a comment, and is ignored by Csound. You can write .csd files in any plain text editor, such as Notepad or Textedit. If you use a word processor (not recommended), be sure to save the file as plain text (not rich text). Many front ends include advanced editing capabilities, such as syntax highlighting and auto-completion of code. You can find an in-depth tutorial on getting started with Csound written by Michael Gogins here [http://michael-gogins.com/archives/tutorial.pdf].
Preface
Bug fixes and improvements: Count of lines fixed in orchestras, and \ inside strings Fast tab opcodes made safe from crashes % in formated printing could crash Double free in fgen fixed sndwarp quietened (gave too many messages) gen41 deals with positive probabilities adsynt reworked removing many bugs adsynt2 phase error fixed Bug in max number of gens fixed Better checking in grain4 Better checking in adsyn modulus was wrong in new parser atonex/tonex did wrong operation mp3in could repeat sound at end of file changed opcode initialised to zero Serious bug in tabmorpha fixed GEN49 has serious bug removed, so no longer incorrect silences. partikkel opcode: fixed bug in sub-sample grain placement when using grain rate FM Internal Changes: In the new parser only there are operator @ and @@ to round up the next integer to a power of 2 or powerof2+1 Score sorting made much faster lineto improved Named gens allowed Various printing include instrument name if available Command option to omit loading a library Number of out channels no longer constrained to be number of in Many fixes to new parser More use of Warnings than Messages (allows for them to be switched off) csoundSetMessageCallback reset if callback set to null xxxvii
Preface
Preface
mp3in allows reading of mp3 files directly in the orchestra. wiiconnect, wiidata, wiisend, wiirange opcodes by john ffitch to recieve and send data to a wiimote controller. New opcodes to receive data directly from a p5glove by john ffitch p5gdata tabsum sums sections of ftables MixerSetLevel_i an init-time only version of MixerSetLevel doppler implements a simulation of the doppler effect. filebit reports the file depth of a file. The new Signal Flow opcodes enable the usage of signal flow graphs in Csound. New functionality New panning type for pan2 opcode New csd score tag <CsExScore>. New -Ma option for ALSA RT MIDI module which listens to all devices. There is a gen49 to read mp3 files Added rounding bin code to pvscale Added non-power-of-2 table support for ftload and ftsave GEN23 totally rewritten to be more consistent in what constitutes a separator and comments. (Still no /* */ comments) Bug fixes and improvements: New examples for pvs opcodes by Joachim Heintz: pvsarp, pvscent, pvsbandp, pvsbandr, pvsbufread, pvsadsyn, pvsynth, pvsblur, pvscale, pvscross, pvsfilter, pvsfreeze, pvshift, pvsmaska, pvsmorph Use of automatic numbering of ftables reuses table numbers seed with positive argument was wrong sprintf with an empty string printed wrong data mute now works with both numeric and named instruments Small fixes in diskin, and in tablexkt Internal Changes: SConstruct now builds completely independent shared libraries for Python, Lua, and Java wrappers. New Parser almost usable Redrawing of graphs fixed so that only selected ones get redrawn.
xxxix
Preface
RT-alsa more forgiving on near sample rates It is possible to have the score generated by an external program rather than using standard score format using <CScore bin="translater"> to call the program translater on the score data lpc_export fixed Removed limit on macro names length PMAX, the number of arguments to a score event has been reduced by 2, and an overflow system introduced so GENs can have arbitrary numbers of arguments. Increased API version to 2.1. New API function pointer ldmemfile2withCB() which is a version of ldmemfile() allowing a callback to be set and called exactly once to process the MEMFIL buffer after it is loaded. csound->floatsize set; zero in earlier versions GetChannelLock added
Preface
sible to keep both an earlier version of the Csound library and an API 2.0 version on the same machine together so that new and old Csound-based applications can run side-by-side. These changes do not in any way affect the compatibility of Csound orchestras and scores: all old documents should continue to work as before. Time now counted internally in samples, overcoming a longstanding bug with rounding of time to k-rate. Many internal changes related to branch prediction. Some opcodes are substantially quicker.
Preface
printk and printks check that opcode is initialised. Deprecate soundout and soundouts in favour of fout. Fixed space opcode to accept non-pow-2 (deferred) tables. Fixed pvsmorph bug. Internal Changes: New parser has #include and argumentless macros. Less casting between floats and doubles in float version. Includes experimental multicore support. buzz opcode rewritten. Many other internal changes and small bug fixes.
xlii
Preface
Major changes to score error reporting; now accurately reports the line numbers for the chain of inputs for most errors. Corrected pan2 so it agrees with documentation. <CsVersion> tag works again according to the manual. Fixed the { and } score looping statements. Added missing documentation for them and ~, &, |, and # operators in score expressions. hilbert had its outputs reversed, now correct. Manual example updated. Internal Changes: Change to gettext localisation; French and Columbian-Spanish translations available. Internal changes to partikkel, interpolation of waveform read and windowing, allowing more precise pitch synchronous granular synthesis. Updated examples for partikkel. pvscale: Improved algorithm for SDFT case so no ampltitude variation.
Preface
Ambisonics (bformdec, bformenc) has more options for controlled opposites. Bug in turnoff2 fixed. het_export: invalid check caused export to fail. Internal Changes: Improved Windows installer. CsoundVST replaced by CsoundAC, that does not depend on the VST SDK headers. Less messages in Windows(MM) startup. P argument type added (k-rate defaults to 1) for opcode in and out types.
xliv
Part I. Overview
Table of Contents
Introduction ............................................................................................................... 4 Recent Developments .................................................................................................. 5 Features of Csound 5 ................................................................................... 5 Features of CsoundAC ................................................................................. 6 The Csound Command ................................................................................................. 8 Order of Precedence .................................................................................... 8 Description of the command syntax ................................................................ 8 Csound command line ................................................................................ 10 Command-line Flags (by Category) .............................................................. 19 Csound Environment Variables .................................................................... 29 Unified File Format for Orchestras and Scores ................................................ 31 Description .............................................................................................. 31 Example .................................................................................................. 33 Command Line Parameter File (.csoundrc) ..................................................... 34 Score File Preprocessing ............................................................................. 34 The Extract Feature ................................................................................... 34 Independent Pre-Processing with Scsort ........................................................ 34 Using Csound ........................................................................................................... 36 Csound's Console Output ............................................................................ 36 How Csound5 works .................................................................................. 37 Amplitude values in Csound ........................................................................ 38 Real-Time Audio ...................................................................................... 40 Realtime I/O on Linux ............................................................................... 40 Windows ................................................................................................. 46 Mac ........................................................................................................ 47 Optimizing Audio I/O Latency .................................................................... 47 Configuring ............................................................................................................. 49 Syntax of the Orchestra .............................................................................................. 50 Orchestra Header Statements ....................................................................... 51 Instrument and Opcode Block Statements ...................................................... 51 Ordinary Statements .................................................................................. 52 Types, Constants and Variables ................................................................... 52 Variable Initialization ................................................................................ 53 Expressions .............................................................................................. 53 Directories and Files .................................................................................. 54 Nomenclature ........................................................................................... 54 Macros .................................................................................................... 55 Named Instruments ................................................................................... 55 User Defined Opcodes (UDO) ..................................................................... 58 The Standard Numeric Score ....................................................................................... 59 Preprocessing of Standard Scores ................................................................. 59 Carry ...................................................................................................... 59 Tempo .................................................................................................... 60 Sort ........................................................................................................ 60 Score Statements ....................................................................................... 61 Next-P and Previous-P Symbols ................................................................... 61 Ramping ................................................................................................. 62 Score Macros ........................................................................................... 63 Multiple File Score .................................................................................... 65 Evaluation of Expressions ........................................................................... 66 Strings in p-fields ...................................................................................... 67 Front Ends ............................................................................................................... 68 CsoundAC ............................................................................................... 69 2
Overview
CsoundVST ............................................................................................. 71 TclCsound ............................................................................................................... 73 The Tcl interpreter: cstclsh .......................................................................... 73 Cswish: the windowing shell ....................................................................... 73 A Csound server ....................................................................................... 74 A Scripting Environment ............................................................................ 75 TclCsound as a language wrapper ................................................................ 76 TclCsound Command Reference .................................................................. 76 Building Csound ....................................................................................................... 79 Csound Links ........................................................................................................... 84
Introduction
Csound is a unit generator-based, user-programmable computer music system. It was originally written by Barry Vercoe at the Massachusetts Institute of Technology in 1984 as the first C language version of this type of software. Since then Csound has received numerous contributions from researchers, programmers, and musicians from around the world. Around 1991, John ffitch ported Csound to Microsoft DOS. Csound currently runs on many varieties of UNIX and Linux, Microsoft DOS and Windows, all versions of the Macintosh operating system including Mac OS X, and others. There are newer computer music systems that have graphical patch editors (e.g. Max/MSP, PD, jMax, or Open Sound World), or that use more advanced techniques of software engineering (e.g. Nyquist or SuperCollider). Yet Csound still has the largest and most varied set of unit generators, is the best documented, runs on the most platforms, and is the easiest to extend. It is possible to compile Csound using double-precision arithmetic throughout for superior sound quality. In short, Csound must be considered one of the most powerful musical instruments ever created. In addition to this "canonical" version of Csound and CsoundAC, there are other versions of Csound and other front ends for Csound, many of which can be found at http://csounds.com.
Recent Developments
In the time since Barry Vercoe wrote the original Preface to this manual, printed above, many further contributions have been made to Csound. CsoundAC is an extended version of Csound 5.
Features of Csound 5
Csound 5 begins a new major version of Csound that includes the following new features: Now licensed under the GNU Lesser General Public License, an open source license. A new, easier to manage build system using SCons. The use of widely--accepted open source libraries: libsndfile for soundfile input and output. PortAudio with ASIO drivers for low-latency, real-time audio input and output. FLTK for graphical widgets that can be programmed in orchestra code. PortMidi for real-time MIDI input and output. In addition, Istvan Varga has contributed native MIDI and audio drivers for Windows and Linux. Simplified audio buffering system. Status returns from all internal functions, including opcode functions. MIDI interop opcodes, that enable the same instrument definitions to be used interchangeably for either live MIDI performance or off-line, score-driven performance. Plugin opcodes are working and becoming more widely accepted. Many opcodes have been moved to plugins. Most new opcodes are plugins, including: The FluidSynth-based SoundFont opcodes. Python opcodes allowing Python code to execute in the orchestra header or in instrument code, at i-rate or k-rate. Loris opcodes for time/frequency analysis and resynthesis. Control bus opcodes. Audio mixer opcodes. String conversion opcodes. Improved Open Sound Control (OSC) opcodes. Vectorial opcodes. The pvs opcodes for real-time spectral processing, a port of Mark Dolson's phase vocoder code. 5
Recent Developments
The ATS opcodes for spectral Analysis, Transformation, and Synthesis of sound based on a sinusoidal plus critical-band noise model. A sound in ATS is a symbolic object representing a spectral model that can be sculpted using a variety of transformation functions. These opcodes can read, transform and resynthesize ATS analysis files. Please note that you need the ATS application to produce analysis files. The STK opcodes, consisting of Perry Cook's original Synthesis Toolkit in C++ instruments, in C++, adapted as opcodes. DSSI and LADSPA adapter opcodes for hosting DSSI and LADSPA plugins in Csound. vst4cs VST adapter opcodes for hosting VST plugins in Csound. (Distributed in source form only due to the VST SDK licence restrictions.) The OpcodeBase.hpp header file for writing plugin opcodes in C++. This is based on the technique of static polymorphism via template inheritance. Istvan Varga's csound5gui frontend for Csound, simplifying the editing of Csound, the use of Csound especially for live performance, and the monitoring of performances. Victor Lazzarini's Tcl/Tk frontends for Csound, cstclsh and cswish. The Csound API is becoming more standardized and more widely used. There are interfaces or wrappers to the API in the following languages: C (include csound.h). C++ (include csound.hpp)). This API includes Csound score and orchestra file container functions. Python (import Java (import Lua (require
csnd).
csnd.*;). "csnd";).
Lisp (use the CFFI file csound5.lisp). Csound is now truly re-entrant, meaning that multiple instances of Csound can run at the same time, in the same process. John ffitch plans to replace the handwritten parser with one written using a parser generator, which should make it more bug-free and perhaps more efficient.
Features of CsoundAC
CsoundAC is a Python extension module for writing music by programming in Python. CsoundAC is based on Michael Gogins' concept of music graphs, in which a score is represented as hierarchical tree of nodes, which can contain notes, score generators, score transforms, and other nodes. CsoundAC also provides a Python interface to the Csound API. This makes it very easy to use Csound to render CsoundAC compositions. Using Python's triple quotes, it is even possible to embed the formatted Csound orchestra code for a piece directly into the Python code for that piece, so that all programming for a composition can be maintained in a single file. The coordinate system in CsoundAC is based on a Euclidean music space with dimensions {time, duration, event type, instrument number, pitch as MIDI key, loudness as MIDI velocity, phase, spatial X co6
Recent Developments
ordinate, spatial Y coordinate, spatial Z coordinate, pitch-class set, 1}. A point in music space can be a note, an inflection of a note, or even a grain of sound. A music graph is a directed acyclical graph, or tree, of nodes in music space. These nodes are associated with local transformations of coordinate system. There are nodes for containing scores or fragments of scores, for generating scores, and for transforming scores. In addition, any node may contain child nodes that inherit the parent's coordinate system. Thus, it is possible to compose a musical score by containing or generating notes in lower level nodes, assembling them into a score using higher level nodes, and finally rendering the score with Csound. The process is strictly analogous to the construction of a 3-dimensional scene in computer graphics by generating primitive objects such as spheres, cones, and cubes and moving them around in space to assemble a scene. Some of the node classes included in CsoundAC are: ScoreNode: Simply contains a sequence of notes or other points in music space, perhaps imported from a MIDI file. Rescale: Rescales child points to fit a desired range in time, duration, pitch, and/or other dimensions. Cell: Repeats child points in a sequence at regular intervals; the interval can be shorter or longer than the actual duration of the child points. Hocket: Hockets points produced by child nodes. Lindenmayer: Generates scores using O-L Lindenmayer systems. StrangeAttractor: Generates scores from a variety of tunable chaotic dynamical systems. MCRM: Generates scores using the Multiple Copy Reducing Machine algorithm. ImageToScore: Generates scores by translating image files into points in music space. Random: Randomizes child points on any dimension or dimensions of music space, using a variety of random variables. VoiceleadingNode: Generates chord progressions and voice-leadings for child notes, using operations based on the mathematical music theory of Dmitri Tymoczko. Finally, is is possible to derive a new Node class in Python from any existing Node, in order to create new score generators and transforms as part of the composing process.
Order of Precedence
There are five places where options for Csound performance may be set. They are processed in the following order: 1. Csound's own defaults 2. File defined by the CSOUNDRC environment variable, or .csoundrc file in the HOME directory 3. A .csoundrc file in the current directory 4. <CsOptions> tag in a .csd file 5. Passed on the Csound command line The later options in the list will override any earlier ones. As of version 5.01 of Csound, sample and control rate override flags (-r and -k) specified anywhere override sr, kr, and ksmps defined in the orchestra header.
All flags and names are optional. The default values are:
where orchname is a file containing Csound orchestra code, and scorename is a file of score 8
data in standard numeric score format, optionally presorted and time-warped. If scorename is omitted, there are two default options: 1. if real-time input is expected (e.g. -L, -M, -iadc or -F), a dummy score file is substituted consisting of the single statement 'f 0 3600' (i.e. listen for RT input for one hour) 2. else Csound uses the previously processed score.srt in the current directory. Csound reports on the various stages of score and orchestra processing as it executes, performing various syntax and error checks along the way. Once the actual performance has begun, any error messages will derive from either the instrument loader or the unit generators themselves. A CSound command may include any rational combination of flag arguments.
csound oscil.csd
within the examples folder, and realtime audio output should be generated.
Description
The csound command executes Csound.
Syntax
csound csound [flags] [flags] [orchname] [scorename] [csdfilename]
Command-line Flags
-@ FILE -3, --format=24bit -8, --format=uchar --format=type Provide an extended command-line in file FILE Use 24-bit audio samples. Use 8-bit unsigned character audio samples. Set the audio file output format to one of the formats available in libsndfile. At present the list is aiff, au, avr, caf, flac, htk, ircam, mat4, mat5, nis, paf, pvf, raw, sd2, sds, svx, voc, w64, wav, wavex and xi. Can also be used as --format=type:format or -format=format:type to set both the file type (wav, aiff, etc.) and sample format (short, long, float, etc.) at the same time. Write an AIFF format soundfile. Use with the -c, -s, -l, or -f flags. Use a-law audio samples. Number of audio sample-frames held in the DAC hardware buffer. This is a threshold on which software audio I/O (above) will wait before returning. A small number reduces audio I/O delay; but the value is often hardware limited, and small values will risk data lates. In the case of portaudio output (the default real-time output), the -B parameter (more precisely, -B / sr) is passed as the "suggested latency" value. Other than that, Csound has no control over how PortAudio interprets the parameter. The default is 1024 on Linux, 4096 on Mac OS X and 16384 on Windows. 10
-b NUM, --iobufsamps=NUM
Number of audio sample-frames per sound i/o software buffer. Large is efficient, but small will reduce audio I/O delay and improve the accuracy of the timing of real time events. The default is 256 on Linux, 1024 on MacOS X, and 4096 on Windows. In real-time performance, Csound waits on audio I/O on NUM boundaries. It also processes audio (and polls for other input like MIDI) on orchestra ksmps boundaries. The two can be made synchronous. For convenience, if NUM is negative, the effective value is ksmps * -NUM (audio synchronous with k-period boundaries). With NUM small (e.g. 1) polling is then frequent and also locked to fixed DAC sample boundaries. Note: if both -iadc and -odac are used at the same time (full duplex real time audio), the -b option should be set to an integer multiple of ksmps.
Use Cscore processing of the scorefile. Use 8-bit signed character audio samples. Determines how line numbers are counted and displayed for error messages when processing a Csound Unified Document file (.csd). This flag has no effect if separate orchestra and score files are used. (Csound 5.08 and later). 0 = line numbers are relative to the beginning of the orchestra or score sections of the CSD 1 = line numbers are relative to the beginning of the CSD file. This is the default as of Csound 5.08.
Defer GEN01 soundfile loads until performance time. Suppress all displays. See -O if you want to save the log to a file. Enables displays, reverting the effect of any previous -d flag. Reenables adding of directory of CSD/ORC/SCO to search paths, if it has been disabled by a previous --no-default-paths (e.g. in .csoundrc). Set environment variable NAME to VALUE. Note: not all environment variables can be set this way, because some are read before parsing the command line. INCDIR, SADIR, SFDIR, and SSDIR are known to work. Append VALUE to ';' separated list of search paths in environment variable NAME (should be INCDIR, SADIR, SFDIR, or SSDIR). If a file is found in multiple directories, the last will be used. Since Csound 5. Turns on some optimizations in expressions: Redundant assignment operations are eliminated whenever possible. This means that for example this line a1 = a2 + a3 will compile as a1 Add a2, a3 instead of #a0 Add a2, a3 a1 = #a0 saving a temporary variable and an opcode call. Less opcode calls result in reduced CPU usage (an average orchestra may compile about 10% faster with --expression-opt, but it depends 11
--env:NAME=VALUE
--env:NAME+=VALUE
--expression-opt
largely on how many expressions are used, what the control rate is (see also below), etc.; thus, the difference may be less, but also much more). number of a- and k-rate temporary variables is significantly reduced. This expression
(a1 + a2 + a3 + a4)
will compile as
#a0 Add a1, a2 #a0 Add #a0, a3 #a0 Add #a0, a4
instead of
#a0 Add a1, a2 #a1 Add #a0, a3 #a2 Add #a1, a4
The advantages of less temporary variables are: less cache memory is used, which may improve performance of orchestras with many a-rate expressions and a low control rate (e.g. ksmps = 100) large orchestras may load faster due to less different identifier names index overflow errors (i.e. when messages like this Case2: indx=-56004 (ffff253c); (short)indx = 9532 (253c) are printed and odd behavior or a Csound crash occurs) may be fixed, because such errors are triggered by too many different (especially a-rate) variable names in a single instrument. Note that this optimization (due to technical reasons) is not performed on i-rate temporary variables.
Warning
When --expression-opt is turned on, it is not allowed to use the i() function with an expression argument, and relying on the value of k-rate expressions at itime is unsafe. -F FILE, --midifile=FILE Read MIDI events from MIDI file FILE. The file should have only one track in Csound versions 4.xx and earlier; this limitation is removed in Csound 5.00. Use single-format float audio samples (not playable on some systems, but can be read by -i, soundin and GEN01 Suppress graphics, use PostScript displays instead.
12
Suppress graphics, use ASCII displays instead. Print a heartbeat after each soundfile buffer write: no NUM, a rotating bar. NUM = 1, a rotating bar. NUM = 2, a dot (.) NUM = 3, filesize in seconds. NUM = 4, sound a bell.
No header on output soundfile. Don't write a file header, just binary samples. Display on-line help message. i-time only. Allocate and initialize all instruments as per the score, but skip all p-time processing (no k-signals or a-signals, and thus no amplitudes and no sound). Provides a fast validity check of the score pfields and orchestra i-variables. This option is exclusive of the --syntax-check-only flag. Input soundfile name. If not a full pathname, the file will be sought first in the current directory, then in that given by the environment variable SSDIR (if defined), then by SFDIR. The name stdin will cause audio to be read from standard input. The name devaudio or adc will request sound from the host audio input device. It is possible to select a device number by appending an integer value in the range 0 to 1023, or a device name separated by a : character (e.g. -iadc3, -iadc:hw:1,1). It depends on the host audio interface whether a device number or a name should be used. In the first case, an out of range number usually results in an error and listing the valid device numbers. The audio coming in using -i can be received using opcodes like inch.
-i FILE, --input=FILE
(max. length = 200 characters) Artist tag in output soundfile (no spaces) (max. length = 200 characters) Comment tag in output soundfile (no spaces) (max. length = 200 characters) Copyright tag in output soundfile (no spaces) (max. length = 200 characters) Date tag in output soundfile (no spaces) (max. length = 200 characters) Software tag in output soundfile (no spaces) (max. length = 200 characters) Title tag in output soundfile (no spaces)
13
-+ignore_csopts=integer
If set to 1, Csound will ignore all options specified in the csd file's CsOptions section. See Unified File Format for Orchestras and Scores. Pulseaudio input stream name. Write an IRCAM format soundfile. The client name used by Csound, defaults to 'csound5'. If multiple instances of Csound connect to the JACK server, different client names need to be used to avoid name conflicts. (Linux and Mac OS X only) Name prefix of Csound JACK input/output ports; the default is 'input' and 'output'. The actual port name is the channel number appended to the name prefix. (Linux and Mac OS X only) Example: with the above default settings, a stereo orchestra will create these ports in full duplex operation:
csound5:input1 csound5:input2 csound5:output1 csound5:output2 (record left) (record right) (playback left) (playback right)
Do not generate any PEAK chunks. Override the control rate (KR) supplied by the orchestra. Read line-oriented real-time score events from device DEVICE. The name stdin will permit score events to be typed at your terminal, or piped from another process. Each line-event is terminated by a carriage-return. Events are coded just like those in a standard numeric score, except that an event with p2=0 will be performed immediately, and an event with p2=T will be performed T seconds after arrival. Events can arrive at any time, and in any order. The score carry feature is legal here, as are held notes (p3 negative) and string arguments, but ramps and pp or np references are not.
Note
The -L flag is only valid on *NIX systems which have pipes. It doesn't work on Windows. -l, --format=long -M DEVICE, -midi-device=DEVICE Use long integer audio samples. Read MIDI events from device DEVICE. If using ALSA MIDI (-+rtmidi=alsa), devices are selected by name and not number. So, you need to use an option like -M hw:CARD,DEVICE where CARD and DEVICE are the card and device numbers (e.g. -M hw:1,0). In the case of PortMidi and MME, DEVICE should be a number, and if it is out of range, an error occurs and the valid device numbers are printed.When using PortMidi, you can use 'Ma' to enable all devices. This is also convenient when you don't have devices as it will not generate an error.
14
-m NUM, --messagelevel=NUM
Message level for standard (terminal) output. Takes the sum of any of the following values: 1 = note amplitude messages 2 = samples out of range message 4 = warning messages 128 = print benchmark information And exactly one of these to select note amplitude format: 0 = raw amplitudes, no colours 32 = dB, no colors 64 = dB, out of range highlighted with red 96 = dB, all colors 256 = raw, out of range highlighted with red 512 = raw, all colours The default is 135 (128+4+2+1), which means all messages, raw amplitude values, and printing elapsed time at the end of performance. The coloring of raw amplitudes was introduced in version 5.04.
--m-amps=NUM
Message level for amplitudes on standard (terminal) output. 0 = no note amplitude messages 1 = note amplitude messages
--m-range=NUM
Message level for out of range messages on standard (terminal) output. 0 = no samples out of range message 1 = samples out of range message
--m-warnings=NUM
Message level for warnings on standard (terminal) output. 0 = no warning messages 1 = warning messages
--m-dB=NUM
Message level for amplitude format on standard (terminal) output. 0 = absolute amplitude messages 1 = dB amplitude messages
--m-colours=NUM
Message level for amplitude format on standard (terminal) output. 0 = no colouring of amplitude messages 1 = colouring of amplitude messages
--m-benchmarks=NUM
output. 0 = no benchnark numbers 1 = print benchnark numbers -+max_str_len=integer (min: 10, max: 10000) Maximum length of string variables + 1; defaults to 256 allowing a length of 255 characters. The length of string constants is not limited by this parameter. Route MIDI note on message key number to pfield N as MIDI value [0-127]. Route MIDI note on message key number to pfield N as cycles per second. Route MIDI note on message key number to pfield N as linear octave. Route MIDI note on message key number to pfield N as oct.pch (pitch class). Route MIDI note on message velocity number to pfield N as MIDI value [0-127]. Route MIDI note on message velocity number to pfield N as amplitude [0-0dbFS]. Save MIDI output to a file (Csound 5.00 and later only). Enable message attributes (colors etc.); might need to be disabled on some terminals which print strange characters instead of modifying text attributes. default: true. (max. length = 255 characters) Ignore events (other than tempo changes) in MIDI file tracks defined by pattern (for example, +mute_tracks=00101 will mute the third and fifth tracks). Notify (ring the bell) when score or MIDI track is done. No sound. Do all processing, but bypass writing of sound to disk. This flag does not change the execution in any other way. Disables adding of directory of CSD/ORC/SCO to search paths. Disables expression optimization. Log output to file FILE. If FILE is null (i.e. -O null or -logfile=null) all printing of messages to the console is disabled. Output soundfile name. If not a full pathname, the soundfile will be placed in the directory given by the environment variable SFDIR (if defined), else in the current directory. The name stdout will cause audio to be written to standard output, while null results in no sound output similarly to the -n flag. If no name is given, the default name will be test. The name devaudio or dac (you can use -odac or -o dac) will request writing sound to the host audio output device. It is possible 16
-+mute_tracks=string
-N, --notify -n, --nosound --no-default-paths --no-expression-opt -O FILE, --logfile=FILE -o FILE, --output=FILE
to select a device number by appending an integer value in the range 0 to 1023, or a device name separated by a : character (e.g. odac3, -odac:hw:1,1). It depends on the host audio interface whether a device number or a name should be used. In the first case, an out of range number usually results in an error and listing the valid device numbers. --opcode-lib=LIBNAME --omacro:XXX=YYY -+output_stream=string -Q DEVICE Load plugin library LIBNAME. Set orchestra macro XXX to value YYY Pulseaudio output stream name. Enables MIDI OUT operations to device id DEVICE. This flag allows parallel MIDI OUT and DAC performance. Unfortunately the real-time timing implemented in Csound is completely managed by DAC buffer sample flow. So MIDI OUT operations can present some time irregularities. These irregularities can be reduced by using a lower value for the -b flag. If using ALSA MIDI (-+rtmidi=alsa), devices are selected by name and not number. So, you need to use an option like -Q hw:CARD,DEVICE where CARD and DEVICE are the card and device numbers (e.g. -Q hw:1,0). In the case of PortMidi and MME, DEVICE should be a number, and if it is out of range, an error occurs and the valid device numbers are printed. -R, --rewrite -r NUM, --sample-rate=NUM -+raw_controller_mode=boolean Continually rewrite the header while writing the soundfile (WAV/AIFF). Override the sampling rate (SR) supplied by the orchestra. Disable special handling of MIDI controllers like sustain pedal, all notes off etc., allowing the use of all the 128 controllers for any purpose. This will also set the initial value of all controllers to zero. Default: no. (max. length = 20 characters) Real time audio module name. The default is PortAudio. Also available, depending on platform and build options: Linux: alsa, jack; Windows: mme; Mac OS X: CoreAudio. In addition, null can be used on all platforms, to disable the use of any real time audio plugin. (max. length = 20 characters) Real time MIDI module name. Defaults to PortMidi, other options (depending on build options): Linux: alsa; Windows: mme, winmm. In addition, null can be used on all platforms, to disable the use of any real time MIDI plugin. ALSA MIDI devices are selected by name and not number. So, you need to use an option like -M hw:CARD,DEVICE where CARD and DEVICE are the card and device numbers (e.g. -M hw:1,0). -s, --format=short --sched Use short integer audio samples. Linux only. Use real-time scheduling and lock memory. (Also requires -d and either -o dac or -o devaudio). See also --sched=N below. 17
-+rtaudio=string
-+rtmidi=string
--sched=N
Linux only. Same as --sched, but allows specifying a priority value: if N is positive (in the range 1 to 99) the scheduling policy SCHED_RR will be used with a priority of N; otherwise, SCHED_OTHER is used with the nice level set to N. Can also be used in the format --sched=N,MAXCPU,TIME to enable the use of a "watchdog" thread that terminates Csound if the average CPU usage exceeds MAXCPU percents over a peroid of TIME seconds (new in Csound 5.00). Pulseaudio server name. (min: 0) Start playback at the specified time (in seconds), skipping earlier events in the score and MIDI file. Set score macro XXX to value YYY Csound 5. The --strset option allows setting strset string values from the command line, in the format '--strsetN=VALUE'. It is useful for passing parameters to the orchestra (e.g. file names). Causes Csound to exit immediately after the orchestra and score parsers finish checking the syntax of the input files and before the orchestra performs the score. This option is exclusive of the -i-only flag. (Csound 5.08 and later). Terminate the performance when the end of MIDI file is reached. Prevents Csound from deleting the sorted score file, score.srt, upon exit. Use the uninterpreted beats of score.srt for this performance, and set the initial tempo at NUM beats per minute. When this flag is set, the tempo of score performance is also controllable from within the orchestra. WARNING: this mode of operation is experimental and may be unreliable. Invoke the utility program UTILITY. Use any invalid name to list the available utilities. Use u-law audio samples. Verbose translate and run. Prints details of orch translation and performance, enabling errors to be more clearly located. Write a WAV format soundfile. Extract a portion of the sorted score, score.srt, using the extract file FILE (see Extract). Switch on dithering of audio conversion from internal floating point to 32, 16 and 8-bit formats. The default form of the dither is triangular. Switch on dithering of audio conversion from internal floating point to 32, 16 and 8-bit formats. In the case of -Z the next digit should be a 1 (for trangular) or a 2 (for uniform). The exact interpretation depends on the output system. List opcodes in this version: 18
--syntax-check-only
-U UTILITY, --utility=UTILITY -u, --format=ulaw -v, --verbose -W, --wave, --format=wave -x FILE, --extract-score=FILE -Z, --dither
-z NUM, --list-opcodesNUM
no NUM, just show names NUM = 0, just show names NUM = 1, show arguments to each opcode using the format <opname> <outargs> <inargs>
or
csound [flags]
where the arguments are of 2 types: flags arguments (beginning with a -,-- or -+), and name arguments (such as filenames). Certain flag arguments take a following name or numeric argument. Flags that start with -- and -+ usually take an argument themselves using =.
The name devaudio or adc will request sound from the host audio input device. It is possible to select a device number by appending an integer value in the range 0 to 1023, or a device name separated by a : character. It depends on the host audio interface whether a device number or a name should be used. In the first case, an out of range number usually results in an error and listing the valid device numbers. The audio coming in using -i can be received using opcodes like inch. -J, --ircam, --format=ircam -K, --nopeaks -l, --format=long -n, --nosound -o FILE, --output=FILE Write an IRCAM format soundfile. Do not generate any PEAK chunks. Use long integer audio samples. No sound. Do all processing, but bypass writing of sound to disk. This flag does not change the execution in any other way. Output soundfile name. If not a full pathname, the soundfile will be placed in the directory given by the environment variable SFDIR (if defined), else in the current directory. The name stdout will cause audio to be written to standard output, while null results in no sound output similarly to the -n flag. If no name is given, the default name will be test. The name dac or devaudio (you can use -odac or -o dac) will request writing sound to the host audio output device. It is possible to select a device number by appending an integer value in the range 0 to 1023, or a device name separated by a : character. It depends on the host audio interface whether a device number or a name should be used. In the first case, an out of range number usually results in an error and listing the valid device numbers. -R, --rewrite -s, --format=short -u, --format=ulaw -W, --wave, --format=wave -Z, --dither Continually rewrite the header while writing the soundfile (WAV/AIFF). Use short integer audio samples. Use u-law audio samples. Write a WAV format soundfile. Switch on dithering of audio conversion from internal floating point to 32, 16 and 8-bit formats. The default form of the dither is triangular. Switch on dithering of audio conversion from internal floating point to 32, 16 and 8-bit formats. In the case of -Z the next digit should be a 1 (for trangular) or a 2 (for uniform). The exact interpretation depends on the output system.
20
(max. length = 200 characters) Artist tag in output soundfile (no spaces) (max. length = 200 characters) Comment tag in output soundfile (no spaces) (max. length = 200 characters) Copyright tag in output soundfile (no spaces) (max. length = 200 characters) Date tag in output soundfile (no spaces) (max. length = 200 characters) Software tag in output soundfile (no spaces) (max. length = 200 characters) Title tag in output soundfile (no spaces)
-o dac[DEVICE], -output=dac[DEVICE]
-+rtaudio=string
21
Name prefix of Csound JACK input/output ports; the default is 'input' and 'output'. The actual port name is the channel number appended to the name prefix. (Linux and Mac OS X only) Example: with the above default settings, a stereo orchestra will create these ports in full duplex operation:
csound5:input1 csound5:input2 csound5:output1 csound5:output2 (record left) (record right) (playback left) (playback right)
--midioutfile=FILENAME -+mute_tracks=string
-+raw_controller_mode=boolean
octave. --midi-key-pch=N --midi-velocity=N --midi-velocity-amp=N --midioutfile=FILENAME -+rtmidi=string Route MIDI note on message key number to pfield N as oct.pch (pitch class). Route MIDI note on message velocity number to pfield N as MIDI value [0-127]. Route MIDI note on message velocity number to pfield N as amplitude [0-0dbFS]. Save MIDI output to a file (Csound 5.00 and later only). (max. length = 20 characters) Real time MIDI module name. Defaults to PortMidi, other options (depending on build options): Linux: alsa; Windows: mme, winmm. In addition, null can be used on all platforms, to disable the use of any real time MIDI plugin. ALSA MIDI devices are selected by name and not number. So, you need to use an option like -M hw:CARD,DEVICE where CARD and DEVICE are the card and device numbers (e.g. -M hw:1,0). -Q DEVICE Enables MIDI OUT operations to device id DEVICE. This flag allows parallel MIDI OUT and DAC performance. Unfortunately the real-time timing implemented in Csound is completely managed by DAC buffer sample flow. So MIDI OUT operations can present some time irregularities. These irregularities can be reduced by using a lower value for the -b flag. If using ALSA MIDI (-+rtmidi=alsa), devices are selected by name and not number. So, you need to use an option like -Q hw:CARD,DEVICE where CARD and DEVICE are the card and device numbers (e.g. -Q hw:1,0). In the case of PortMidi and MME, DEVICE should be a number, and if it is out of range, an error occurs and the valid device numbers are printed.
Display
--csd-line-nums=NUM Determines how line numbers are counted and displayed for error messages when processing a Csound Unified Document file (.csd). This flag has no effect if separate orchestra and score files are used. (Csound 5.08 and later). 0 = line numbers are relative to the beginning of the orchestra or score sections of the CSD 1 = line numbers are relative to the beginning of the CSD file. This is the default as of Csound 5.08. -d, --nodisplays --displays -G, --postscriptdisplay Suppress all displays. See -O if you want to save the log to a file. Enables displays, reverting the effect of any previous -d flag. Suppress graphics, use PostScript displays instead. 23
Suppress graphics, use ASCII displays instead. Print a heartbeat after each soundfile buffer write: no NUM, a rotating bar. NUM = 1, a rotating bar. NUM = 2, a dot (.) NUM = 3, filesize in seconds. NUM = 4, sound a bell.
-m NUM, --messagelevel=NUM
Message level for standard (terminal) output. Takes the sum of any of the following values: 1 = note amplitude messages 2 = samples out of range message 4 = warning messages 128 = print benchmark information And exactly one of these to select note amplitude format: 0 = raw amplitudes, no colours 32 = dB, no colors 64 = dB, out of range highlighted with red 96 = dB, all colors 256 = raw, out of range highlighted with red 512 = raw, all colours The default is 135 (128+4+2+1), which means all messages, raw amplitude values, and printing elapsed time at the end of performance. The coloring of raw amplitudes was introduced in version 5.04
--m-amps=NUM
Message level for amplitudes on standard (terminal) output. 0 = no note amplitude messages 1 = note amplitude messages
--m-range=NUM
Message level for out of range messages on standard (terminal) output. 0 = no samples out of range message 1 = samples out of range message
--m-warnings=NUM
Message level for warnings on standard (terminal) output. 0 = no warning messages 1 = warning messages 24
--m-dB=NUM
Message level for amplitude format on standard (terminal) output. 0 = absolute amplitude messages 1 = dB amplitude messages
--m-colours=NUM
Message level for amplitude format on standard (terminal) output. 0 = no colouring of amplitude messages 1 = colouring of amplitude messages
--m-benchmarks=NUM
Message level for benchmark information on standard (terminal) output. 0 = no benchnark numbers 1 = print benchnark numbers
-+msg_color=boolean
Enable message attributes (colors etc.); might need to be disabled on some terminals which print strange characters instead of modifying text attributes. default: true. Verbose translate and run. Prints details of orch translation and performance, enabling errors to be more clearly located. List opcodes in this version: no NUM, just show names NUM = 0, just show names NUM = 1, show arguments to each opcode using the format <opname> <outargs> <inargs>
-b NUM, --iobufsamps=NUM
value is ksmps * -NUM (audio synchronous with k-period boundaries). With NUM small (e.g. 1) polling is then frequent and also locked to fixed DAC sample boundaries. Note: if both -iadc and -odac are used at the same time (full duplex real time audio), the -b option should be set to an integer multiple of ksmps. -k NUM, --control-rate=NUM -L DEVICE, --score-in=DEVICE Override the control rate (KR) supplied by the orchestra. Read line-oriented real-time score events from device DEVICE. The name stdin will permit score events to be typed at your terminal, or piped from another process. Each line-event is terminated by a carriage-return. Events are coded just like those in a standard numeric score, except that an event with p2=0 will be performed immediately, and an event with p2=T will be performed T seconds after arrival. Events can arrive at any time, and in any order. The score carry feature is legal here, as are held notes (p3 negative) and string arguments, but ramps and pp or np references are not.
Note
The -L flag is only valid on *NIX systems which have pipes. It doesn't work on Windows. --omacro:XXX=YYY -r NUM, --sample-rate=NUM --sched Set orchestra macro XXX to value YYY Override the sampling rate (SR) supplied by the orchestra. Linux only. Use real-time scheduling and lock memory. (Also requires -d and either -o dac or -o devaudio). See also --sched=N below. Linux only. Same as --sched, but allows specifying a priority value: if N is positive (in the range 1 to 99) the scheduling policy SCHED_RR will be used with a priority of N; otherwise, SCHED_OTHER is used with the nice level set to N. Can also be used in the format --sched=N,MAXCPU,TIME to enable the use of a "watchdog" thread that terminates Csound if the average CPU usage exceeds MAXCPU percents over a peroid of TIME seconds (new in Csound 5.00). Set score macro XXX to value YYY Csound 5. The --strset option allows setting strset string values from the command line, in the format '--strsetN=VALUE'. It is useful for passing parameters to the orchestra (e.g. file names). (min: 0) Start playback at the specified time (in seconds), skipping earlier events in the score and MIDI file. Use the uninterpreted beats of score.srt for this performance, and set the initial tempo at NUM beats per minute. When this flag is set, the tempo of score performance is also controllable from within the orchestra. WARNING: this mode of operation is experimental and may be unreliable. 26
--sched=N
--smacro:XXX=YYY --strset
Miscellaneous
-@ FILE -C, --cscore --default-paths Provide an extended command-line in file FILE Use Cscore processing of the scorefile. Reenables adding of directory of CSD/ORC/SCO to search paths, if it has been disabled by a previous --no-default-paths (e.g. in .csoundrc). Defer GEN01 soundfile loads until performance time. Set environment variable NAME to VALUE. Note: not all environment variables can be set this way, because some are read before parsing the command line. INCDIR, SADIR, SFDIR, and SSDIR are known to work. Append VALUE to ';' separated list of search paths in environment variable NAME (should be INCDIR, SADIR, SFDIR, or SSDIR). If a file is found in multiple directories, the last will be used. Since Csound 5. Turns on some optimizations in expressions: Redundant assignment operations are eliminated whenever possible. This means that for example this line a1 = a2 + a3 will compile as a1 Add a2, a3 instead of #a0 Add a2, a3 a1 = #a0 saving a temporary variable and an opcode call. Less opcode calls result in reduced CPU usage (an average orchestra may compile about 10% faster with --expression-opt, but it depends largely on how many expressions are used, what the control rate is (see also below), etc.; thus, the difference may be less, but also much more). number of a- and k-rate temporary variables is significantly reduced. This expression
(a1 + a2 + a3 + a4)
--env:NAME+=VALUE
--expression-opt
will compile as
#a0 Add a1, a2 #a0 Add #a0, a3 #a0 Add #a0, a4
instead of
#a0 Add a1, a2 #a1 Add #a0, a3 #a2 Add #a1, a4
The advantages of less temporary variables are: less cache memory is used, which may improve performance of orchestras with many a-rate expressions and a low control 27
rate (e.g. ksmps = 100) large orchestras may load faster due to less different identifier names index overflow errors (i.e. when messages like this Case2: indx=-56004 (ffff253c); (short)indx = 9532 (253c) are printed and odd behavior or a Csound crash occurs) may be fixed, because such errors are triggered by too many different (especially a-rate) variable names in a single instrument. Note that this optimization (due to technical reasons) is not performed on i-rate temporary variables.
Warning
When --expression-opt is turned on, it is not allowed to use the i() function with an expression argument, and relying on the value of k-rate expressions at itime is unsafe. --help -I, --i-only Display on-line help message. i-time only. Allocate and initialize all instruments as per the score, but skip all p-time processing (no k-signals or a-signals, and thus no amplitudes and no sound). Provides a fast validity check of the score pfields and orchestra i-variables. This option is exclusive of the --syntax-check-only flag. If set to 1, Csound will ignore all options specified in the csd file's CsOptions section. See Unified File Format for Orchestras and Scores. (min: 10, max: 10000) Maximum length of string variables + 1; defaults to 256 allowing a length of 255 characters. The length of string constants is not limited by this parameter. Notify (ring the bell) when score or MIDI track is done. Disables adding of directory of CSD/ORC/SCO to search paths. Disables expression optimization. Log output to file FILE. If FILE is null (i.e. -O null or -logfile=null) all printing of messages to the console is disabled. Load plugin library LIBNAME. Causes Csound to exit immediately after the orchestra and score parsers finish checking the syntax of the input files and before the orchestra performs the score. This option is exclusive of the -i-only flag. (Csound 5.08 and later). Prevents Csound from deleting the sorted score file, score.srt, upon exit. 28
-+ignore_csopts=integer
-+max_str_len=integer
-t0, --keep-sorted-score
Invoke the utility program UTILITY. Use any invalid name to list the available utilities. Extract a portion of the sorted score, score.srt, using the extract file FILE (see Extract).
The only mandatory environment variables are OPCODEDIR and OPCODEDIR64. It is very important to set them correctly, otherwise most of the opcodes will not be available. Make sure you set the path correctly depending on the precision of your binary. if you run csound on a command line without any arguments you should see some text like : Csound version 5.01.0 beta (float samples) Mar 23 2006. This text refers to the single precision version. CSSTRNGS and CS_LANG currently have very limited use since Csound has not yet been completely translated into other languages. Other environment variables which are not exclusive to Csound but which might be of importance are: PATH: The directory containing csound executables should be listed in this variable. PYTHONPATH: If you intend to use CsoundVST and python, the directory containing the _CsoundVST shared library and the CsoundVST.py file must be in your PYTHONPATH environment variable (or the default path python searches in), so that the Python runtime knows how to load these files. LADSPA_PATH and DSSI_PATH: These environment variables are required if you are using the dssi4cs (LADSPA and DSSI host) plug-in opcodes. CSDOCDIR: Specifies the directory where the html help files are located. Though not used by Csound directly, this environment variable can help front-ends and editors (which implement it) to find the csound manual.
Note
Please note that this method of setting environment variables will not work for variables which are parsed before the command line arguments. SADIR, SSDIR, SFDIR, INCDIR, SNAPDIR, RAWWAVE_PATH, CSNOSTOP, SFOUTYP should work, but the following environment variables must be set on the system prior to running csound: OPCODEDIR, OPCODEDIR64, CSSTRINGS, and CS_LANG. CSOUNDRC can currently (v. 5.02) be set using --env, but this behavior is not guaranteed for future versions.
Windows
To set a csound environment on Windows XP and 2000 go to Control Panel->System->Advanced and click on the button 'Environment Variables'. On other versions of Windows earlier than Windows XP and Windows 2000 you set environment variables in the autoexec.bat file. Go to 'My Computer', select C: drive, right click on autoexec.bat, and select 'Edit'. The statement format is: SET NAME=VALUE .
Linux
You can set environment variables on Linux in many ways. You can set them using the export shell command, by setting them on .bashrc or similar files or by adding them to the /etc/profile file. 30
Mac
If the user has a Mac that shipped with an OS X version prior to 10.3 (includes 10.2 and 10.1) then it is possible that the default shell is the Tenex C-shell (tcsh). If this is the case, then you either have to type:
~% setenv OPCODEDIR "/Users/you/your/Csound5/build"
or change your /etc/profile and or edit your .tcshrc file. If the user has a Mac that shipped with OS X 10.3 or 10.4 then it likely has the "Bourne-again" C-shell (bash) as the default shell. If this is the case, then the user must type something like:
~$ export OPCODEDIR=/Users/you/your/Csound5/build
in addition if the bash shell is the default, then it is usually easier to edit your .bashrc or /etc/profile. Note that if users choose one of the above methods, ie editing the .bashrc file then the environment variables are executed when a new shell is created. This can be problematic if your application implements a Quartz or Aqua interface and does not use the commandline. If this is the case, then the standard solution (up to OS 10.3.9 and unless the application uses the csoundAPI and sets the environ variables directly) is to create an XML property list file (called a .plist file by the OS). This file should nominally be located at ~/.MacOSX/Environment.plist. This has been a solution specifically for the [csoundapi~] object for Pd on OS X. Since Pd uses an OS X native .app style packaging, and runs off of the Aqua interface, the standard means of supplying environment variables to Csound do not work. The solution is to set Csound's environment variables for the Aqua environment. Likely, most users will not have the hidden folder .MacOSX located in their $HOME directory (aka ~/) This folder must first be created and the Environment.plist added to this folder. The contents of the Environment.plist file should be something like:
<?xml version="1.0" encoding='UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>OPCODEDIR</key> <string>/Library/Frameworks/CsoundLib.framework/Versions/5.1/Resources/Opcodes</string> <key>OPCODEDIR64</key> <string>/Volumes/ExternalHD/devel/csound5/lib64</string> <key>INCDIR</key> <string>/Volumes/ExternalHD/CSOUND/include</string> <key>SFDIR</key> <string>/Volumes/ExternalHD/iTunes/csoundaudio</string> </dict> </plist>
and so on, using the XML <key> tag for each environment variable required by the API and the <string> tag for it's corresponding path on the system. Please note that you must login out and login in for these changes to take effect.
The file is a structured data file which uses markup language, similar to any SGML such as HTML. Start tags (<tag>) and end tags (</tag>) are used to delimit the various elements. The file is saved as a text file.
Options (<CsOptions>)
Csound command line flags are put in the Options Element. This section is delimited by the start tag <CsOptions> and the end tag </CsOptions> Lines beginning with # or ; are treated as comments.
Orchestra (<CsInstruments>)
The instrument definitions (orchestra) are put into the Instruments Element. The statements and syntax in this section are identical to the Csound orchestra file, and have the same requirements, including the header statements (sr, kr, etc.) This Instruments Element is delimited with the start tag <CsInstruments> and the end tag </CsInstruments>.
Score (<CsScore>)
Csound score statements are put in the Score Element. The statements and syntax in this section are identical to the Csound score file, and have the same requirements. The Score Element is delimited by the start tag <CsScore> and the end tag </CsScore>. As an alternative Csound score statements can also be generated by an external program using the CsScore scheme with an attribute bin. The lines upto the closing tag </CsScore> are copied to a file and the external program named is called with that file name and the destination score file. The external program should create a standard Csound score.
Versions of Csound may blocked by placing one of the following statements between the start tag <CsVersion> and the end tag </CsVersion>:
Before #.#
or
After #.#
where #.# is the requested Csound version number. The second statement may be written simply as:
#.#
Example
Below is a sample file, test.csd, which renders a .wav file at 44.1 kHz sample rate containing one second of a 1 kHz sine wave. Displays are suppressed. test.csd was created from two files, tone.orc and tone.sco, with the addition of command line flags.
<CsoundSynthesizer>; ; test.csd - a Csound structured data file <CsOptions> -W -d -o tone.wav </CsOptions> <CsVersion> Before 4.10 After 4.08 </CsVersion> ; optional section ; these two statements check for ; Csound version 4.09
<CsInstruments> ; originally tone.orc sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 a1 oscil p4, p5, 1 ; simple oscillator out a1 endin </CsInstruments> <CsScore> ; originally tone.sco f1 0 8192 10 1 i1 0 1 20000 1000 ; play one second of one kHz tone e </CsScore> </CsoundSynthesizer>
33
In this case, csound will generate real-time output and take realtime input from device 2, using the portaudio driver interface. It will input and output realtime MIDI on interface 1. It will print very few messages (-m0). These options will be used by default when other options are not given inside the <CsOptions> of the .csd file or the command line (See Order of precendence).
The component labels may be abbreviated as i, f and t. The time points denote the beginning and end of the extract in terms of:
[section no.] : [beat no.].
Each of the three parts of the argument is optional. The default values for missing i, f or t are:
all instruments, beginning of score, end of score.
will process the Scot formatted filename, and leave a standard numeric score result in a file named score for perusal or later processing. 34
The command
scscort < infile > outfile
will put a numeric score infile through Carry, Tempo, and Sort preprocessing, leaving the result in outfile. Likewise extract, also normally invoked as part of the Csound command, can be invoked as a standalone program:
extract xfile < score.sort > score.extract
This command expects an already sorted score. An unsorted score should first be sent through Scsort then piped to the extract program:
35
Using Csound
Csound can be operated in a variety of modes and configurations. The original method for running Csound was as a console program (DOS prompt for Windows, Terminal for Mac OS X). This, of course, still works. Running csound without any arguments prints out a list of command-line options, which are more fully explained in the Command Line Flags (by Category) section. Normally, the user executes something like:
csound myfile.csd
You can find many .csd files in the examples folder. Most opcode entries in this manual also include simple .csd files showing the usage of the opcode. There are also many Front-Ends which can be used to run csound. A Front-End is a graphical program that eases the process of running csound, and sometimes provides editing and composing functions. Csound also has several ways of producing output. It can: Read and write soundfiles (off-line rendering) - Using the -o and -i flags specifying an output filename. Read and write digital audio using a sound card (real-time rendering) - Using the -odac and -iadc flags Read and write MIDI files (non-realtime) - Using the -F and --midioutfile flags. Read and write MIDI using a MIDI interface and controller (real-time control) - Using the -M and -Q flags.
36
Using Csound
Elapsed time at end of score sort: real: 0.130s, CPU: 0.020s Csound version 5.10 beta (float samples) Apr 19 2009 displays suppressed 0dBFS level = 32768.0 orch now loaded audio buffered in 256 sample-frame blocks ALSA input: total buffer size: 1024, period size: 256 reading 1024-byte blks of shorts from adc (RAW) ALSA output: total buffer size: 1024, period size: 256 writing 1024-byte blks of shorts to dac SECTION 1: ftable 1: new alloc for instr 1: B 0.000 .. 2.000 T 2.000 TT 2.000 M: 10000.0 10000.0 Score finished in csoundPerform(). inactive allocs returned to freespace end of score. overall amps: 10000.0 10000.0 overall samples out of range: 0 0 0 errors in performance Elapsed time at end of performance: real: 2.341s, CPU: 0.050s 345 1024-byte soundblks of shorts written to dac Removing temporary file /tmp/csound-CoVcrm.srt ... Removing temporary file /tmp/csound-IYtLAJ.sco ... Removing temporary file /tmp/csound-XYACV6.orc ...
The console output of Csound is quite verbose, particularly before the actual performance (like version, plugins loaded, etc.). Performance actually started when the console printed:
SECTION 1:
Show that a single note for instrument 1, that lasted 2 seconds starting at time 0.000, was produced with an amplitude of 10000 for both channel 1 and 2. An important section of the console output is:
end of score. overall amps: overall samples out of range: 10000.0 0 10000.0 0
Which shows the overall amplitude and the number of samples which were clipped because they were out of range. The line:
Elapsed time at end of performance: real: 2.341s, CPU: 0.050s
Shows the clock time and the CPU time it takes for the processor to complete the task. If CPU time is lower than clock time it means the csd can run in realtime (unless it has some sections which are extremely CPU intensive). The "real time" figure is the total running time and it is larger because it acounts for disk access. module loading, etc. (CPU time is strictly number-crunching time). If you have a sound that lasts for 100s and it takes 5s to generate it offline, it means that you are taking around 5% of CPU, and that it runs on 0.05 of realtime.
37
Using Csound
Using Csound
litude values you write in a Csound instrument only match those written literally to the file if the 0dbfs value in Csound corresponds exactly to that of the output sample format. The consequence of this approach is that you can write a piece with a certain amplitude and have it render correctly and identically (setting aside of course the better dynamic range of the high-res formats) whether written to an integer or floats file, or rendered in real-time.
Note
The one exception to this is if you choose to write to a "raw" (headerless) file format. In such cases the internal 0dbfs value is meaningless, and whatever values you use are written unmodified. This does enable arbitrary data to be generated or processed by Csound. It is a relatively exotic thing to do, but some users need it. You can choose to redefine the 0dbfs value in the orchestra header, purely for your own convenience or preference. Many people will choose 1.0 (the standard for SAOL, other software like Pure Data, and for many plugin standards such as VST, LADSPA, CoreAudio AudioUnits, etc), but any value is possible. The common factor in defining amplitudes is the decibel (dB) scale, with 0dBFS always understood as digital peak; hence "0dbfs" means "0dB Full-Scale value". This measure is different to actual amplitude values, since amplitude values are a linear scale which show the actual oscillation around 0, so they can be positive or negative. Decibel values are an absolute logarithmic scale, but can be useful for most opcodes as well. You can convert amplitude to and from decibels using the ampdb,ampdbfs, dbamp and dbfsamp functions. This way, Csound enables the programmer to express all amplitudes in dB - lower amplitudes will then be represented by negative dB values. This reflects industry practice (e.g. in level meters in mixers, etc). For example the same dB level of -6dB (half the amplitude) or -20dB are actually a different linear amplitude according to 0dbfs like this:
Some Csound users might therefore be minded to express all levels in dBFS, and obviate any confusion or ambiguity of level that may otherwise arise when using explicit amplitude values. The decibel scale reflects the response of the ear pretty closely, and that when you want to express a really quiet level, it might be easier and more expressive to write "-46dB" than "0.005" or "163.8". The reason for using 0dbfs is very simple: digital peak equates to maximum level regardless of sample resolution. If you then define a signal at -110dB you will lose it if rendering to a 16bit file, but retain it (audibly or not) if rendering to 24bit or better. In other words, there is a fixed ceiling, but a moveable floor - you can define sounds as quietly as you like (e.g. envelope tails), in a predictable way,and preserve them or not (without changing the orch code at all), depending on the resolution (file or audio i/o) you render to.
39
Using Csound
This is not entirely accurate since audio sample values are represented on a bipolar scale with positive and negative values, and 1 bit is used for the sign. Therefore, for 16bit integer samples actually use 1 bit for the sign and 15 bits for the values, so the actual dynamic range is 90dB.
Real-Time Audio
The following information applies mostly to csound being run directly from the command line. Frontends implement these features in different ways, but knowledge of them is necessary in some of them. The -i and -o flags can are used to specify realtime output instead of the ordinary non-realtime file output. You should use -o dac for realtime output and -i adc for realtime input. Naturally, you can use either one or both if your hardware supports it. You can also specify the hardware you want to use by appending a device number or name to the flag (See -i and -o). You might also need to use the -+rtaudio flag to specify the driver interface to be used. Csound defaults to using Portaudio, which is cross-plaform and reliable, but for better performance, you might need to use ALSA or JACK on linux, and CoreAudio on Mac. You can use ASIO on Windows if your version of Portaudio has been compiled with ASIO support. You can see a list of available devices by giving a device number which is out of range, for instance -o dac99. This will also reveal if you have ASIO available if you are using PortAudio.
Control Rate
Low values for ksmps will in general give a higher quality of synthesis, but will consume more system resources. There is no hard and fast rule for setting ksmps - different orchestras will require different control rates. A waveguide instrument will need a ksmps of 1 (and may not be suitable for realtime use), whereas a simple FM synth may be run with a higher ksmps without noticeable degradation of sound. If the FM synth were to be used to play a monophonic bassline, a very low ksmps may be used, however more complex note clusters will require a higher ksmps. A well-tuned Linux system should be capable of running even complex polyphonic synths with ksmps values as low as 4 or 8. If full duplex audio is required, -b must be an integer multiple of ksmps. Bearing this in mind, a rule of thumb might be to only use powers of two for ksmps. Some settings differ according to platform. See further below for information for each platform.
Using Csound
an interface to the ALSA drivers, in a manner which is in some respects similar but fundamentally different from that provided by JACK. For a more detailed comparison please refer to: http://jackaudio.org/faq
Using ALSA
The highest level of control and the lowest possible level of latency are to be achieved using the ALSA plugins in combination with the --sched flag. Using --sched requires that Csound be run as the root user, which may be impossible or undesirable in some circumstances. The ALSA plugins require the "name" of a "card" and a "device". Unless you have named your "cards" in ~/.asoundrc (or /etc/asound.conf), the "names" will actually be numbers. In order to obtain a list of the possible configurations, use the command line utilities "aplay", "arecord" and "amidi". These utilities are included with most Linux distros, or can be downloaded and built from source here: ftp://ftp.alsa-project.org/pub/utils/
Audio Output
Running the following command:
aplay -l
will give you a list of the audio playback devices available on your system. Typically this list will look something like: [....] **** List of PLAYBACK Hardware Devices **** card 0: A5451 [ALI 5451], device 0: ALI 5451 [ALI 5451] [....] If you have more than one card on your system, or if there is more than one device on your card, the list will of course be more complicated, however in all cases the information that is pertinent is the number/ name of the card/device. In order to use the above soundcard for audio output, the following flag would be added to the Csound command line, ~/.csoundrc, or the <CsOptions>section of a CSD:
-+rtaudio=alsa -o dac
there is a good chance that you may be using dmix. If you are using dmix, the -b and -B settings of Csound must be synced the period_size and buffer_size of dmix respectively, using a ratio of the sr for the Csound project to the sample rate that dmix is set up to. The following formula will determine what settings to use for Csound given the settings of dmix:
-b = (csound_sr/dmix_sample_rate) * dmix_period_size -B = (csound_sr/dmix_sample_rate) * dmix_buffer_size
41
Using Csound
For example, if dmix is set to 48000 sample rate, a period_size of 1024, and a buffer_size of 8192, when running a Csound project with sr=48000, the settings for buffers should be "-b 1024 -B8192". If the sr=24000, the settings for buffers should be "-b 512 -B4096". Because of this relationship, if a Csound project's sr does not evenly divide into the sample_rate used by dmix, then it may be difficult if not imposible to set the correct setting for -b and -B due to rounding errors. It is suggested then that if you are using sample rates different than what your setting is for dmix, then you may want to configure dmix to have a period_size and buffer_size that can be evenly divided by the ratio between the csound sr and dmix sample_rate. For example, to run a project with sr=16000, the following dmix setting:
pcm.amix { type dmix ipc_key 50557 slave { pcm "hw:0,0" period_time 0 #period_size 1024 #buffer_size 8192 period_size 1536 buffer_size 12288 } bindings { 0 0 1 1 } } # route ALSA software through pcm.amix pcm.!default { type plug slave.pcm "amix" }
with period_size 1536 and buffer_size 12288 will divide nicely by 3 (the ratio of the csound sr to the dmix sample_rate) to get "-b 512 -B4096" ( (16000/48000) * 1536 = 512, (16000/48000) * 12288 = 4096 ).
Note
For most soundcards that this affects, the default sample rate for the card will be 48000 and the defaults for dmix will be 1024 and 8192.
Audio Input
Typically the same card will be used for both input and output, so to continue using the foregoing example, the flag:
-i adc:hw:0,0
would be added for audio input from Card 0 Device 0. To use the default card employ one of the following flags, with the forementioned warning that this will not necessarily work:
-i adc
If you wish to use a different card or device for input, running the following utility from the command line will provide a list of input devices:
arecord -l
42
Using Csound
If, by way of an example, you wanted to use a USB audio interface, which is the second "card" in your system, for output, but wanted to use your internal soundcard, the first card in your setup, for input, you would put the following flags somewhere useful:
-+rtaudio=alsa -i adc:hw:0,0 -o dac:hw:1,0
If you wanted to use the second device on your USB interface, to send audio to a specific channel, for instance, you would use the following flags:
-+rtaudio=alsa -i adc:hw:0,0 -o dac:hw:1,1
MIDI Input
Csound does not automatically create its own ALSA sequencer port. It creates an ALSA raw midi port each time it runs. In order to enable your orchestra to receive MIDI input you can use VirMIDI or MIDIThru, whichever you prefer. Setting up these virtual MIDI ports is a topic that has been covered extensively elsewhere, see The Linux MIDI how-to [http://www.midi-howto.com/] or browse your distro's documentation or the ALSA documentation for instructions on how to install and configure either VirMIDI or MIDIThru (seqdummy). Once you have done so run:
amidi -l
for a list of available devices. Typically this will look something like the following: [....] Device Name hw:1,0 Virtual Raw MIDI (16 subdevices) hw:1,1 Virtual Raw MIDI (16 subdevices) hw:1,2 Virtual Raw MIDI (16 subdevices) hw:1,3 Virtual Raw MIDI (16 subdevices) hw:2,0,0 PCR MIDI hw:2,0,1 PCR 1 In this example, Csound can connect to any of the four available Virtual Raw MIDI ports, where it will listen for MIDI input. The following flag instructs Csound to listen on the first of these ports:
-+rtmidi=alsa -Mhw:1,0
You will then need to connect your hardware or software controller to the port which is hosting your Csound synthesizer. The simplest way to do this is using the "aconnect" utility. Run:
aconnect -li
for a list of available output devices (including the port to which Csound has been connected). These should give something like the following: #aconnect -li 43
Using Csound
client 0: 'System' [type=kernel] 0 'Timer ' 1 'Announce ' Connecting To: 15:0 client 20: 'Virtual Raw MIDI 1-0' [type=kernel] 0 'VirMIDI 1-0 ' client 21: 'Virtual Raw MIDI 1-1' [type=kernel] 0 'VirMIDI 1-1 ' client 22: 'Virtual Raw MIDI 1-2' [type=kernel] 0 'VirMIDI 1-2 ' client 23: 'Virtual Raw MIDI 1-3' [type=kernel] 0 'VirMIDI 1-3 ' client 24: 'PCR' [type=kernel] 0 'PCR MIDI ' 1 'PCR 1 ' 2 'PCR 2 '
#aconnect -lo client 20: 'Virtual Raw MIDI 1-0' [type=kernel] 0 'VirMIDI 1-0 ' client 21: 'Virtual Raw MIDI 1-1' [type=kernel] 0 'VirMIDI 1-1 ' client 22: 'Virtual Raw MIDI 1-2' [type=kernel] 0 'VirMIDI 1-2 ' client 23: 'Virtual Raw MIDI 1-3' [type=kernel] 0 'VirMIDI 1-3 ' client 24: 'PCR' [type=kernel] 0 'PCR MIDI ' 1 'PCR 1 ' In the following example, the USB keyboard which is listed above as client 24 will be connected to a Csound synthesizer which is listening on the first VirMIDI port. The keyboard has three output ports. The first (24:0) transmits messages received on the MIDI in port, the second (24:1) transmits keyboard and controller messages, and the third (24:2) transmits system exclusive messages. The following command connects the second port of the keyboard to the Csound synthesizer:
aconnect 24:1 20:0
Remember that Csound acts as a raw MIDI device and is not an ALSA sequencer client. This means that Csound will not appear in MIDI device listings and will not be available for use directly with aconnect, so you must connect to a virtual device (like 'virtual raw MIDI' or 'MIDI through') for persistent connections, or conect directly to the destination using command line flags.
MIDI Output
Csound can be connected to any device which shows up on the ALSA sequencer list of output ports, obtained by "amidi -l" as above. In order to connect a Csound synthesizer to the MIDI out port of the keyboard listed above, the following flag would be used:
-Qhw:2,0,0
Scheduling
44
Using Csound
If you are able to run Csound as the root user, using the "--sched" flag will dramatically improve realtime performance, when using ALSA, however you may hang your system if you do something stupid. DO NOT use "--sched" if you are using JACK for audio output. JACK controls scheduling for the audio applications connected to it, and also tries to run at the highest possible priority. If the "--sched" flag is used, Csound and JACK will be competing rather than cooperating, resulting in extremely poor performance.
Using JACK
The simplest way to use the JACK plugin enabling input and output is as follows:
-+rtaudio=jack -i adc -o dac
45
Using Csound
To improve performance, use ksmps values like 32 and 64. The sample rate of the orchestra must be the same as that of the JACK server.
Using Pulseaudio
Support for Pulseaudio [http://www.pulseaudio.org/] was added in Csound 5.09. You can specify the following settings: 1. Sink names: it's possible to use a number instead of the full name, so -odac:1 would select your second device (count starts at 0). 2. Server name: it's possible to connect to a specific server by using -+server=<server_string> where server_string is a name of a server or a more complex server selection string (see pulseaudio.org [http://www.pulseaudio.org/] on server strings). This should be network transparent and should allow connections to remote machines. 3. Stream names: it is possible to label the streams generated by csound, by using +output_stream=<stream-name> and -+input_stream=<stream-name> Here's an example command line: csound -odac:1 examples/trapped.csd -+rtaudio=pulse -+server=unix:/tmp/pulse-victor/native -+output_stream=trapped
Windows
Real-time Audio
Windows users can use either the default PortAudio Realtime module, or the winmm Realtime Audio Module. The winmm module is a native windows module which provides great stability, but latency will usually be too high for realtime interaction. To activate a realtime module, you can use the -+rtaudio flag with value of portaudio or winmme. The default value is portaudio, which is activated by default without specifying it. You also need to specify the sound device you want to use, and specify that you want to generate realtime audio ouput instead of soundfile to disk output. To do this, you must use the -odac or -o dac flag, which tells csound to output to the Digital-to-Analog converters instead of a file. By adding a number after the flag (e.g. -odac2), you can choose the device number you want. To find out available devices in your system, you can use a large out of range number (e.g. -odac99), and csound will report an error, and list available devices. When choosing the device number under Portaudio, you are also choosing the driver interface, since Portaudio supports WinMME, DirectX and ASIO. If you have an ASIO capable interface or an ASIO driver emulator like ASIO4ALL [http://www.asio4all.com], the device will show multiple times, once for each driver interface. ASIO will give you the best latency on your system, so if available it should be your choice for realtime audio output. Enabling realtime audio input is done using -iadc, which makes csound listen to the realtime audio out46
Using Csound
puts. You can again select the device by its number, and check for available devices using an out of range number. Note that for input you use 'adc' instead of 'dac'. Make sure you have the appropriate input selected in your soundcard's control panel.
Real-time MIDI
To enable Real-time MIDI on Windows, you can use the -M flag for MIDI input and the -Q flag for MIDI output. You might need to specify the device number after the flag (e.g. -M2), and again, you can find the available devices by giving an out of range number. Csound will use PortMidi as the default MIDI module, but there's also a native winmme module, which can be activated with the flag: -+rtmidi=winmme
A typical set of flags to enable Real-time Audio and MIDI I/O can look like: -+rtmidi=winmme -M1 -Q1 -+rtaudio=portaudio -odac3 -iadc3
Mac
Coming Soon...
Using Csound
= 2 * -b, but this is the absolute minimum. For example, if you set -b1024 -B2048, csound will tell you that:
audio buffered in 1024 sample-frame blocks writing 4096-byte blocks to dac
4096 bytes is 32768 bits. 32768/32 = 1024, our sample-frame size, 1024 * 32/16 = 2048, our buffer size. Were we to reduce the value of -B, we would need to reduce the value of -b by a corresponding amount in order to continue to write 16-bit integers to dac. The minimum size of -b is (-B * bitrate)/32. That is to say that the minimum ratio of -b to -B should be: 16-bit: 1:2 24-bit: 2:3 32-bit: 1:1 While there is no theoretical maximum ratio, it makes no sense to have a very high ratio here, as the software buffer has to fill the hardware buffer before returning. If the ratio is high, it will take a long time, defeating the purpose of setting a small value for -b. The value of -b is something that will need to be varied depending on the complexity of the instrument you're working with, but because it's intimately related to the value of ksmps, it's better to synchronise it with ksmps and go from there. One way to do it is to decide how long the release on your envelopes might need to be at maximum (for desired effect), set the release on all envelopes to maximum, give yourself a generous value for -b, and then play. If it breaks up, double ksmps, repeat until smooth, then bring the value of -b down as far as possible. The value of -B is primarily determined by operating system and soundcard. Figure out (using above method) how low you can go, and use that value (or one higher for safety). If you have problems you'll know that it's probably because of an inappropriate value for ksmps, too low a value for -b, or denormals (see denorm).
48
Configuring
Once you have either unpacked a binary distribution, or built Csound from sources, you will need to configure Csound so that it will run properly on your system. Installers usually perform these steps for you automatically. On all platforms, make sure the directory or directories containing Csound's plugin libraries are in an OPCODEDIR or OPCODEDIR64 environment variable depending on the precision of the compiled binary. The Python opcodes currently require at least Python 2.4, which can be downloaded from www.python.org [http://www.python.org] if it is not already on your system. You can check if it is available by typing 'python' on a command prompt or DOS window.
Windows
On Windows, make sure the directory or directories (normally the C:\Program Files\Csound directory) containing the Csound executables directory are in your PATH variable, or else copy all the executable files to your Windows system32 directory. Depending on your installation method, you might also need to set the OPCODEDIR and OPCODEDIR64 environment variables. Assuming that Csound is installed to the default location of C:\Program Files\Csound you can use (otherwise set the paths accordingly):
set OPCODEDIR=C:\Program Files\Csound\plugins set OPCODEDIR64=C:\Program Files\Csound\plugins64 set PATH=%PATH%;C:\Program Files\Csound\bin
CsoundAC
CsoundAC requires some additional configuration. On all platforms, CsoundAC requires that you have Python installed on your computer. The directory containing the _csoundAC shared library and the CsoundAC.py file must be in your PYTHONPATH environment variable, so that the Python runtime knows how to load these files.
49
The label is optional and identifies the basic statement that follows as the potential target of a go-to operation (see Program Flow Control). A label has no effect on the statement per se. Depending on their function, some opcodes produce no output, so they have no result value. Others take no arguments and only produce a result. Every orchestra statement must be on a single line, however long lines can be wrapped to a new line using the '\' character. This character indicates that the next line is part of the current one, this way you can split a line for easier reading, like this:
a2 oscbnk kcps, 1.0, kfmd1, 0.0, 40, 203, 0.1, 0.2, kamfr, kamfr2, 148, 0, 0, 0, 0, 0, 0, -1, kfnum, 3, 4 \ \
Comments are optional and are for the purpose of letting the user document his orchestra code. Comments begin with a semicolon (;) and extend to the end of the line. Comments can optionally be in C-style, spanning multiple lines like this:
/* Anything in here -------is a comment which can span several lines --------- */
The remainder (result, opcode, and arguments) form the basic statement. This also is optional, i.e. a line may have only a label or comment or be entirely blank. If present, the basic statement must be complete on one line, and is terminated by a carriage return and line feed. The opcode determines the operation to be performed; it usually takes some number of input values (or arguments, with a maximum value of about 800); and it usually has a result field variable to which it sends output values at some fixed rate. There are four possible rates: 1. once only, at orchestra setup time (effectively a permanent assignment) 2. once at the beginning of each note (at initialization (init) time: i-rate) 3. once every performance-time control loop (perf-time control rate, or k-rate) 4. once each sound sample of every control loop (perf-time audio rate, or a-rate)
50
51
Statements that define a user defined opcode (UDO) block are opcode endop See the UDO section for more information.
Ordinary Statements
An ordinary statement runs at either init time or performance time or both. Operations which produce a result formally run at the rate of that result (that is, at init time for i-rate results; at performance time for k- and a-rate results), with the sole exception of the init opcode. Most generators and modifiers, however, produce signals that depend not only on the instantaneous value of their arguments but also on some preserved internal state. These performance-time units therefore have an implicit init-time component to set up that state. The run time of an operation which produces no result is apparent in the opcode. Arguments are values that are sent to an operation. Most arguments will accept arithmetic expressions composed of constants, variables, reserved symbols, value converters, arithmetic operations, and conditional values.
within a single instrument. Local variable names begin with the letter p, i, k, or a. The same local variable name may appear in two or more different instrument blocks without conflict. Global variables are cells that are accessible by all instruments. The names are either like local names preceded by the letter g, or are special reserved symbols. Global variables are used for broadcasting general values, for communicating between instruments (semaphores), or for sending sound from one instrument to another (e.g. mixing prior to reverberation). Given these distinctions, there are eight forms of local and global variables:
p-time, k-rate (all audio a name samples in a k-pass) k-rate w name f name
Where rsymbol is a special reserved symbol (e.g. sr, kr), number is a positive integer referring to a score pfield or sequence number, and name is a string of letters, the underscore character, and/or digits with local or global meaning. As might be apparent, score parameters are local i-rate variables whose values are copied from the invoking score statement just prior to the init pass through an instrument, while MIDI controllers are variables which can be updated asynchronously from a MIDI file or MIDI device.
Variable Initialization
Opcodes that let one initialize variables are: assign divz init tival
Expressions
53
Expressions may be composed to any depth. Each part of an expression is evaluated at its own proper rate. For instance, if the terms within a sub-expression all change at the control rate or slower, the subexpression will be evaluated only at the control rate; that result might then be used in an audio-rate evaluation. For example, in
the 100/12 would be evaluated at orch init, the p5 expressions evaluated at note i-time, and the remainder of the expression evaluated every k-period. The whole might occur in a unit generator argument position, or be part of an assignment statement.
Nomenclature
Throughout this document, opcodes are indicated in boldface and their argument and result mnemonics, when mentioned in the text, are given in italics. Argument names are generally mnemonic (amp, phs), and the result is usually denoted by the letter r. Both are preceded by a type qualifier i, k, a, or x (e.g. kamp, iphs, ar). The prefix i denotes scalar values valid at note init time; prefixes k or a denote control (scalar) and audio (vector) values, modified and referenced continuously throughout performance (i.e. at every control period while the instrument is active). Arguments are used at the prefix-listed times; res54
ults are created at their listed times, then remain available for use as inputs elsewhere. With few exceptions, argument rates may not exceed the rate of the result. The validity of inputs is defined by the following: arguments with prefix i must be valid at init time; arguments with prefix k can be either control or init values (which remain valid); arguments with prefix a must be vector inputs; arguments with prefix x may be either vector or scalar (the compiler will distinguish). All arguments, unless otherwise stated, can be expressions whose results conform to the above. Most opcodes (such as linen and oscil) can be used in more than one mode, which one being determined by the prefix of the result symbol. Thoughout this manual, the term "opcode" is used to indicate a command that usually produces an a-, k-, or i-rate output, and always forms the basis of a complete Csound orchestra statement. Items such as "+" or "sin(x)" or, "( a >= b ? c : d)" are called "operators."
Macros
Orchestra macros work like C preprocessor macros, and replace the content of the macro in the orchestra before it is compiled. The opcodes one can use to create, call, or undefine orchestra macros are: #define $NAME #ifdef #ifndef #end #else #include #undef Orchestra macros can also be defined using the command line flag --omacro:. More information and examples on the usage of orchestra macros can be found in the entry for #define. These opcodes refer to orchestra macros; for score macros, refer to Score Macros.
Named Instruments
As a recent addition to the orchestra syntax, instruments can be defined with string names. Such named instruments are callable from the score, and are supported by a number of opcodes.
Syntax
55
A single instrument can have any number of names, and any of these names can be used to call the instrument. Additionally, it is possible to use numbers as name, denoting a standard numbered instrument, so the following declaration is also valid:
instr 100, Name1, 99, Name2, 1, 2, 3
An instrument name may consist of any number of letters, digits, and the underscore (_) character, however, the first character must not be a digit. Optionally, the instrument name may be prefixed with the '+' character (see below), for example:
instr +Reverb
For all instrument names, a number is automatically assigned (note: if the message level (-m) is not zero, these numbers are printed to the console during orchestra compilation), following these rules: any unused instrument numbers are taken up in ascending order, starting from 1 the numbers are assigned in the order of instrument name definition, so named instruments that are defined later will always have a higher number (except if the '+' modifier is used) if the instrument name was prefixed with '+', the assigned number will be higher than that of any of the (both numbered and named) other instruments without '+'. If there are multiple '+' instruments, the numbering of these will follow the order of definition, according to the above rule. Using '+' is mainly useful for global output or effect instruments, that must be performed after the other instruments. An example for instrument numbers:
instr 1, 2 endin instr Instr1 endin instr +Effect1, Instr2 endin instr 100, Instr3, +Effect2, Instr4, 5 endin
56
Notes
1. in score files, unmatched quotes, and spaces or other invalid characters in the strings should be avoided, otherwise (at least with current version) unpredictable behavior may occur (this problem does not exist for -L line events). However, there is checking for undefined instruments, and in such cases, the event is simply ignored with a warning. 2. Stand-alone utilities (score sort and extract) do not support named instruments. It is still possible to sort such scores by using the -t0 option of the main Csound executable) real-time line events (-L) event, schedkwhen, subinstr, and subinstrinit opcodes massign, pgmassign, prealloc, and mute opcodes Additionaly, there is a new opcode (nstrnum) that returns the number of a named instrument:
insno nstrnum "name"
With the above example, nstrnum "Effect1" would return 101. If an instrument with the specified name does not exist, an init error occurs, and -1 is returned.
Example
; ---- orchestra ---sr ksmps nchnls = = = 44100 10 1
instr +OutputInstr out gaOutSend clear gaOutSend endin instr SineWave a1 oscils p4, p5, 0 vincr gaOutSend, a1 endin
57
instr MIDISineWave iamp inote icps a1 veloc notnum = cpsoct(inote / 12 + 3) oscils iamp * 100, icps, 0 vincr gaOutSend, a1 endin ; ---- score ---i "SineWave" 0 2 12000 440 i "OutputInstr" 0 3 e
Author
Istvan Varga 2002
This UDO called Lowpass takes 3 inputs (the first is a-rate, and the next two are k-rate), and delivers 1 a-rate output. Notice the use of xin to receive inputs and xout to deliver outputs. Also note the use of setksmps, which is needed for the filter to work properly. To use this UDO within an instrument, you would do something like:
afiltered Lowpass asource, kvalue1, kvalue2
See the entry for opcode for detailed information on UDO definition. You can find many ready made UDO's (or contribute your own) at Csounds.com [http://www.csounds.com/]'s User Defined Opcode Database [http://www.csounds.com/udo/].
58
Carry
Within a group of consecutive i statements whose p1 whole numbers correspond, any pfield left empty will take its value from the same pfield of the preceding statement. An empty pfield can be denoted by a single point (.) delimited by spaces. No point is required after the last nonempty pfield. The output of Carry preprocessing will show the carried values explicitly. The Carry Feature is not affected by intervening comments or blank lines; it is turned off only by a non- i statement or by an i statement with unlike p1 whole number. Three additional features are available for p2 alone: +, ^+x, and ^-x. The symbol + in p2 will be given the value of p2 + p3 from the preceding i statement. This enables note action times to be automatically determined from the sum of preceding durations. The + symbol can itself be carried. It is legal only in p2. E.g.: the statements
i1 i . i
0 +
.5
100
will result in
i1 i1 i1
0 .5 1
.5 .5 .5
The symbols ^+x and ^-x determine the current p2 by adding or subtracting, respectively, the value of x from the preceding p2. These may be used in p2 only and are not carried like the + symbol. Note also that there should be no spaces following the ^, the +, or the - parts of these symbols -- the number must come directly after as in ^+2.3. If the example above had been
i1 i . i .
0 ^+1 ^+1
.5
100
59
i1 i1 i1
0 1 2
.5 .5 .5
The Carry feature should be used liberally. Its use, especially in large scores, can greatly reduce input typing and will simplify later changes. There can sometimes be circumstances where you do not want "missing" pfields after the last one entered to be implicitly carried. An example would be an instrument that is designed to take a variable number of pfields. Beginning with Csound 5.08, you can prevent the implicit carrying of pfields at the end of an i statement by using the symbol ! (called the "no-carry symbol"). The ! must appear at the end of an i statement and it cannot be used in p1, p2, or p3, since these pfields are required. Here is an example:
i1 i . i . i
0 + .
.5 .
100 !
i1 i1 i1 i1
0 .5 1 1.5
.5 .5 .5 .5
Tempo
This operation time warps a score section according to the information in a t statement. The tempo operation converts p2 (and, for i statements, p3) from original beats into real seconds, since those are the units required by the orchestra. After time warping, score files will be seen to have orchestra-readable format demonstrated by the following:
i p1 p2beats p2seconds p3beats p3seconds p4 p5 ....
Sort
This routine sorts all action-time statements into chronological order by p2 value. It also sorts coincident events into precedence order. Whenever an f statement and an i statement have the same p2 value, the f statement will precede. Whenever two or more i statements have the same p2 value, they will be sorted into ascending p1 value order. If they also have the same p1 value, they will be sorted into ascending p3 value order. Score sorting is done section by section (see s statement). Automatic sorting implies that score statements may appear in any order within a section.
Note
The operations Carry, Tempo and Sort are combined in a 3-phase single pass over a score file, to produce a new file in orchestra-readable format ( see the Tempo example). Processing can be invoked either explicitly by the Scsort command, or implicitly by Csound which processes the score before calling the orchestra. Source-format files and orchestra60
readable files are both in ASCII character form, and may be either perused or further modified by standard text editors. User-written routines can be used to modify score files before or after the above processes, provided the final orchestra-readable statement format is not violated. Sections of different formats can be sequentially batched; and sections of like format can be merged for automatic sorting.
Score Statements
The statements used in scores are: a - Advance score time by a specified amount b - Resets the clock e - Marks the end of the last section of the score f - Causes a GEN subroutine to place values in a stored function table i - Makes an instrument active at a specific time and for a certain duration m - Sets a named mark in the score n - Repeats a section q - Used to quiet an instrument r - Starts a repeated section s - Marks the end of a section t - Sets the tempo v - Provides for locally variable time warping of score events x - Skip the rest of the current section { - Begins a non-sectional, nestable loop. } - Ends a non-sectional, nestable loop.
i1 i1 i1
0 1 1
1 1 1
10 20 30
np4
pp5
will result in
i1 i1 i1
0 1 2
1 1 1
10 20 30
20 30 0
0 20 30
np and pp symbols can provide an instrument with contextual knowledge of the score, enabling it to glissando or crescendo, for instance, toward the pitch or dynamic of some future event (which may or may not be immediately adjacent). Note that while the Carry feature will propagate np and pp through unsorted statements, the operation that interprets these symbols is acting on a time-warped and fully sorted version of the score.
Ramping
i statement pfields containing the symbol < will be replaced by values derived from linear interpolation of a time-based ramp. Ramps are anchored at each end by the first real number found in the same pfield of a preceding and following note played by the same instrument. E.g.: the statements
i1 i1 i1 i1 i1 i1
0 1 2 3 4 5
1 1 1 1 1 1
will result in
i1 i1 i1 i1 i1 i1
0 1 2 3 4 5
1 1 1 1 1 1
Ramps cannot cross a Section boundary. Ramps cannot be anchored by an np or pp symbol (although they may be referenced by these). Ramp symbols are illegal in p1, p2 and p3. Ramp symbols may be Carried. Note, however, that while the Carry feature will propagate ramp symbols through unsorted statements, the operation that interprets these symbols is acting on a time-warped and fully sorted version of the score. In fact, time-based linear interpolation is based on warped score-time, so that a ramp which spans a group of accelerating notes will remain linear with respect to strict chronological time. Starting with Csound version 3.52, using the symbols ( or ) will result in an exponential interpolation ramp, similar to expon. Using the symbol (a tilde) will result in uniform, random distribution between the first and last values of the ramp. Use of these functions must follow the same rules as the linear ramp function.
62
Score Macros
Description
Macros are textual replacements which are made in the score as it is being presented to the system. The macro system in Csound is a very simple one, and uses the characters # and $ to define and call macros. This can can allow for simpler score writing, and provide an elementary alternative to full score generation systems.The score macro system is similar to, but independent of, the macro system in the orchestra language. #define NAME -- defines a simple macro. The name of the macro must begin with a letter and can consist of any combination of letters and numbers. Case is significant. This form is limiting, in that the variable names are fixed. More flexibility can be obtained by using a macro with arguments, described below. #define NAME(a' b' c') -- defines a macro with arguments. This can be used in more complex situations. The name of the macro must begin with a letter and can consist of any combination of letters and numbers. Within the replacement text, the arguments can be substituted by the form: $A. In fact, the implementation defines the arguments as simple macros. There may be up to 5 arguments, and the names may be any choice of letters. Remember that case is significant in macro names. $NAME. -- calls a defined macro. To use a macro, the name is used following a $ character. The name is terminated by the first character which is neither a letter nor a number. If it is necessary for the name not to terminate with a space, a period, which will be ignored, can be used to terminate the name. The string, $NAME., is replaced by the replacement text from the definition. The replacement text can also include macro calls. #undef NAME -- undefines a macro name. If a macro is no longer required, it can be undefined with #undef NAME.
Syntax
#define NAME # replacement text # #define NAME(a' b' c') # replacement text # $NAME. #undef NAME
Initialization
# replacement text # -- The replacement text is any character string (not containing a #) and can extend over mutliple lines. The replacement text is enclosed within the # characters, which ensure that additional characters are not inadvertently captured.
Performance
Some care is needed with textual replacement macros, as they can sometimes do strange things. They take no notice of any meaning, so spaces are significant. This is why, unlike the C programming language, the definition has the replacement text surrounded by # characters. Used carefully, this simple macro system is a powerful concept, but it can be abused. Another Use For Macros. When writing a complex score it is sometimes all too easy to forget to what the various instrument numbers refer. One can use macros to give names to the numbers. For example 63
Examples
Example 1. Simple Macro
A note-event has a set of p-fields which are repeated:
#define ARGS i1 0 1 8.00 i1 0 1 8.01 i1 0 1 8.02 i1 0 1 8.03 # 1.01 2.33 138# 1000 $ARGS 1500 $ARGS 1200 $ARGS 1000 $ARGS
This can save typing, and is makes revisions easier. If there were two sets of p-fields one could have a second macro (there is no real limit on the number of macros one can define).
#define ARGS1 # 1.01 2.33 138# #define ARGS2 # 1.41 10.33 1.00# i1 0 1 8.00 1000 $ARGS1 i1 0 1 8.01 1500 $ARGS2 i1 0 1 8.02 1200 $ARGS1 i1 0 1 8.03 1000 $ARGS2
#define ARG(A) # 2.345 1.03 i1 0 1 8.00 1000 $ARG(2.0) i1 + 1 8.01 1200 $ARG(3.0)
$A
234.9#
which expands to
1.03 1.03
2.0 3.0
234.9 234.9
64
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April, 1998 (New in Csound version 3.48)
Syntax
#include "filename"
Performance
It is sometimes convenient to have the score in more than one file. This use is supported by the #include facility which is part of the macro system. A line containing the text
#include "filename"
where the character " can be replaced by any suitable character. For most uses the double quote symbol will probably be the most convenient. The file name can include a full path. This takes input from the named file until it ends, when input reverts to the previous input. There is currently a limit of 20 on the depth of included files and macros. A suggested use of #include would be to define a set of macros which are part of the composer's style. It could also be used to provide repeated sections.
Alternative methods of doing repeats, use the r statement, m statement, and n statement.
Credits
Author: John ffitch University of Bath/Codemist Ltd. 65
Bath, UK April, 1998 (New in Csound version 3.48) Thanks to Luis Jure for pointing out the incorrect syntax in multiple file include statement.
Evaluation of Expressions
In earlier versions of Csound the numbers presented in a score were used as given. There are occasions when some simple evaluation would be easier. This need is increased when there are macros. To assist in this area the syntax of arithmetic expressions within square brackets [ ] has been introduced. Expressions built from the operations +, -, *, /, % ("modulo"), and ^ ("power of") are allowed, together with grouping with ( ). Unary minus and plus are also supported. The expressions can include numbers, and naturally macros whose values are numeric or arithmetic strings. All calculations are made in floating point numbers. The usual precedence rules are followed when evaluating: expressions within parantheses ( ) are evaluated first and ^ is evaluated before *, /, and % which are evaluated before + and -. In addition to arithmetic operations, the following bitwise logical operators are also available: & (AND), | (OR), and # (XOR, exclusive-OR). These operators round their operands to the nearest (long) integer before evaluating. The logical operators have the same precedence as the *, /, and % arithmetic operators. Finally, the tilde symbol can be used in an expression wherever a number is permissible to use. Each will evaluate to a random value between zero (0) and one (1).
Example
r3 i1 i1 e CNT 0 + [0.3*$CNT.] [($CNT./3)+0.2]
As the three copies of the section have the macro $CNT. with the different values of 1, 2 and 3, this expands to
s i1 i1 s i1 i1 s i1 i1 e
This is an extreme form, but the evaluation system can be used to ensure that repeated sections are subtly different. Here are some simple examples of each operator:
i1 i1
0 +
1 .
66
i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1
+ + + + + + + + + + + + + + + + +
. . . . . . . . . . . . . . . . .
[ 44 * 10 ] [ 1100 / 2 ] [ 5 ^ 4 ] [ 5660 % 1000 ] [ 110 & 220 ] [ 110 | 220 ] [ 110 # 220 ] [~] [~ * 4 + 1] [~ * 95 + 5] [ 8 [ 4 [ 4 [(4 / + + + 2 * 3 3 - 2 3 * 2 3)*(2 ] + 1 ] + 1 ] + 1)]
; ; ; ; ; ; ; ; ; ; ; ; ; ;
440 550 625 660 76 254 178 random between 0-1 random between 1-5 random between 5-100 12 6 11 21
[ 2 * 2 & 3 ] [ 3 & 2 * 2 ] [ 4 | 3 * 3 ]
; 4 ; 0 ; 13
The @ operator
New in Csound version 3.56 are @x (next power-of-two greater than or equal to x) and @@x (next power-of-two-plus-one greater than or equal to x).
[ @ 11 ] will evaluate to 16 [ @@ 11 ] to 17
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April, 1998 (New in Csound version 3.48)
Strings in p-fields
You can pass a string as a p-field instead of a number, like this:
i 1 0 10 "A4"
The string can be received by the instrument and further processed using the string opcodes.
Note
Currently only one p-field can contain a string (i.e. no more tha one string per line is allowed). You can overcome this using strset and strget.
67
Front Ends
Front ends are programs that provide some form of user interface for Csound. Within these programs, Csound is used to generate sound, and familiarity with Csound code is required in order to use them. Front ends typically add helpful features, such as syntax coloring, graphic widgets, or tools for algorithmic score generation, that are not part of Csound itself. Most of these programs were created by a single person, so some of them are not being maintained. Below is a list (certainly not complete, and perhaps not up to date) of front ends available for Csound. Most often, you'll want to download and install Csound itself before downloading and installing a front end. Some front ends require particular versions of Csound, so if you plan to use a front end, it's recommended that you verify its compatibility before installing Csound.
QuteCsound
QuteCsound is a versatile, cross-platform GUI (graphical user interface) which is bundled with the standard Csound distribution. Created and maintained by Andres Cabrera, QuteCsound provides a multi-tabbed editor, graphic widgets for real-time sound control, and an opcode help system that links to this manual. At this writing (2011) QuteCsound is in active development, so the version installed in your system when you install Csound may not be the most current. The most recent version can be found at http://qutecsound.sourceforge.net/.
Blue
A cross-platform composition-oriented front end written by Steven Yi in Java. The user interface provides a timeline structured somewhat like a digital multitrack, but differs in that timelines can be embedded within timelines (polyObjects). This allows for a compositional organization in time that many users will find intuitive, informative, and flexible. Each instrument and score section in a blue project has its own editing window, which makes organizing large projects easier. Blue can be downloaded at Blue Home Page [http://csounds.com/stevenyi/blue/].
Cecilia
Uses Csound, and also incorporates its own score generation language. Not updated since 2004, but should run in Mac OSX and Linux. Available from http://www.jeanpiche.com/software.htm.
MacCsound
A front end for the Macintosh, MacCsound provides a text editor, graphic editing of control signals, and other features. Available at the MacCsound Page [http://www.csounds.com/matt/MacCsound/]. MacCsound requires the Universal version of Csound, not the Intel version, and with OS 10.6 also requires Rosetta, which is located in the OSX installer DVD for 10.6 but is not installed by default.
WinXound
A convenient front-end for Windows with syntax highlighting. You can get it at the WinXsound Front Page [http://winxound.codeplex.com/].
68
Front Ends
Cabel
Cabel is a graphical user interface for building Csound instruments by patching modules, similar to the approach used in modular synthesizers and graphical programming environments such as Pd. Crossplatform, written in Python. While Cabel seems (as of 2011) not to have been updated in four years, it still works with current versions of Csound. Available from http://cabel.sourceforge.net/.
Csound5GUI
Csound5GUI is a cross-platform GUI. Formerly part of the standard Csound distribution, it is now available as source code and possibly as a downloadable .exe for Windows. It implements most configuration features of Csound.
CSDplayer
This is a simple Java program to play csd files. It is included in the standard distribution, and will be of interest mainly to Java programmers.
Winsound
Like Csound5GUI, Winsound was formerly part of the main Csound tree. It is now available only as source code. Winsound is a cross-platform FLTK port of Barry Vercoe's original front-end for csound. Some partially sighted or unsighted users report success using Winsound with text-to-speech software.
Csound Editor
Csound Editor is no longer being maintained, but it's still available from Flavio Tordini's Home Page [http://flavio.tordini.org/csound-editor/]. For Windows systems, includes syntax highlighting. In addition to the main front ends listed above, here are some other programs that may qualify as front ends, depending on your definition: GeoMaestro: Csound-x: AthenaCL: GRACE/Common Music: AlgoScore: nGen: ImproSculpt: http://www.zogotounga.net/GM/eGM0.html http://www.zogotounga.net/comp/csoundx.html http://www.flexatone.net/athena.html http://commonmusic.sourceforge.net/ http://kymatica.com/Software/AlgoScore http://mustec.bgsu.edu/~mkuehn/ngen/ http://improsculpt.sourceforge.net/pmwiki/pmwiki.p hp
CsoundAC
Python Scripting
You can use CsoundAC as a Python extension module. You can do this in a standard Python interpreter, such as Python command line or the Idle Python GUI. To use CsoundAC in a standard Python interpreter, import CsoundAC. 69
Front Ends
import CsoundAC
The CsoundAC module automatically creates an instance of CppSound named csound, which provides an object-oriented interface to the Csound API. In a standard Python interpreter, you can load a Csound .csd file and perform it like this:
C:\Documents and Settings\mkg>python Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import CsoundAC >>> csound.load("c:/projects/csound5/examples/trapped.csd") 1 >>> csound.exportForPerformance() 1 >>> csound.perform() BEGAN CppSound::perform(5, 988ee0)... BEGAN CppSound::compile(5, 988ee0)... Using default language 0dBFS level = 32767.0 Csound version 5.00 beta (float samples) Jun 7 2004 libsndfile-1.0.10pre6 orchname: temp.orc scorename: temp.sco orch compiler: 398 lines read instr 1 instr 2 instr 3 instr 4 instr 5 instr 6 instr 7 instr 8 instr 9 instr 10 instr 11 instr 12 instr 13 instr 98 instr 99 sorting score ... ... done Csound version 5.00 beta (float samples) Jun 6 2004 displays suppressed 0dBFS level = 32767.0 orch now loaded audio buffered in 16384 sample-frame blocks SFDIR undefined. using current directory writing 131072-byte blks of shorts to test.wav WAV SECTION 1: ENDED CppSound::compile. ftable 1: ftable 2: ftable 3: ftable 4: ftable 5: ftable 6: ftable 7: ftable 8: ftable 9: ftable 10: ftable 11: ftable 12: ftable 13: ftable 14: ftable 15: ftable 16: ftable 17: ftable 18: ftable 19: ftable 20: ftable 21: ftable 22: new alloc for instr 1: B 0.000 .. 1.000 T 1.000 TT 1.000 M: 32.7 0.0
70
Front Ends
3.600 M:
207.6
0.1
B 93.940 .. 94.418 T 98.799 TT281.799 M: 477.6 85.0 B 94.418 ..100.000 T107.172 TT290.172 M: 118.9 11.5 end of section 4 sect peak amps: 25950.8 26877.4 inactive allocs returned to freespace end of score. overall amps: 32204.8 31469.6 overall samples out of range: 0 0 0 errors in performance 782 131072-byte soundblks of shorts written to test.wav WAV Elapsed time = 13.469000 seconds. ENDED CppSound::perform. 1 >>>
The koch.py script shows how to use Python to do algorithmic composition for Csound. You can use Python triple-quoted string literals to hold your Csound files right in your script, and assign them to Csound:
csound.setOrchestra('''sr = 44100 kr = 441 ksmps = 100 nchnls = 2 0dbfs = .1 instr 1,2,3,4,5 ; FluidSynth General MID I; INITIALIZATION ; Channel, bank, and program determine the preset, that is, the actual sound. ichannel = p1 iprogram = p6 ikey = p4 ivelocity = p5 + 12 ijunk6 = p6 ijunk7 = p7 ; AUDIO istatus = 144; print iprogram, istatus, ichannel, ikey, ivelocityaleft, aright fluid "c:/projects/csound5/samples/VintageDreamsWaves-v2.sf2", \\ iprogram, istatus, ichannel, ikey, ivelocity, 1 outs aleft, arightendin''') csound.setCommand("csound --opcode-lib=c:/projects/csound5/fluid.dll \\ -RWdfo ./koch.wav ./temp.orc ./temp.sco") csound.exportForPerformance() csound.perform()
CsoundVST
CsoundVST is a multi-function front end for Csound, based on the Csound API. CsoundVST runs as a stand-alone graphical user interface to Csound, and it also runs as a VST instrument or effect plugin in VST hosts such as Cubase with the same user interface. CsoundVST is part of the main csound source tree, but is not included in standard distributions, due to licensing limitations of Steinberg's VST SDK.
Standalone
To run CsoundVST as a stand-alone front end to Csound, execute CsoundVST. When the program has loaded, you will see a graphical user interface with a row of buttons along the top. Click on the Open... button to load a .csd file. You can also click on the Open... button and load a .orc file, then click on the Import... button to add a .sco file. You can edit the Csound command, the orchestra file, or the score file in the respective tabs of the user interface. When all is satisfactory, click on the Perform button to run Csound. You can stop a performance at any time by clicking on the Stop button.
VST Plugin
71
Front Ends
The following instructions are for Cubase 4.0. You would follow roughly similar procedures in other hosts. Use the Devices menu, Plug-In Information dialog, VST Plug-Ins tab, VST 2.x Plug-in Paths dialog, Add button to add your csound/bin directory to Cubase's plugin path. You can have multiple directories separated by semicolons. Then select the CsoundVST path and click on the Set as Shared Folder button. Quit Cubase, and start it again. Use the File menu, New Project dialog to create a new song. Use the Project menu, Add Track submenu, to add a new MIDI track. Use the pencil tool to draw a Part on the track a few measures long. Write some music in the Part using the Event editor or the Score editor. Use the Devices menu (or the F11 key) to open the VST Instruments dialog. Click on one of the No VST Instrument labels, and select CsoundVST from the list that pops up. Click on the e (for edit) button to open the CsoundVST dialog. On the Settings page, check the Instrument box in the VST Plugin group, and the Classic box in the Csound performance mode group. Then click on the Apply button. Click on the Open button to bring up the file selector dialog. Navigate to a directory containing a Csound csd file suitable for MIDI performance, such as csound/examples/CsoundVST.csd. Click on the OK button to load the file. You can also open and import a suitable .orc and .sco file as described above. In any event, the command line in the Classic Csound command line text box must specify +rtmidi=null -M0, and should read something like this:
-
Click on the VST Instruments dialog's on/off button to turn it on. This should compile the Csound orchestra. In the Cubase Track Inspector, click on the out: Not Assigned label and select CsoundVST from the list that pops up. On the ruler at the top of the Arrangement window, select the loop end point and drag it to the end of your part, then click on the loop button to enable looping. Click on the play button on the Transport bar. You should hear your music played by CsoundVST. Try assigning your track to different channels; a different Csound instrument will perform each channel. When you save your song, your Csound orchestra will be saved as part of the song and re-loaded when you re-load the song. You can click on the Orchestra tab and edit your Csound instruments while CsoundVST is playing. To hear your changes, just click on the CsoundVST Perform button to recompile the orchestra. You can assign up to 16 channels to a single CsoundVST plugin.
72
TclCsound
TclCsound was introduced to provide a simple scripting interface to Csound. Tcl is a simple language that is easy to extend and provide nice facilities such as easy file access and TCP networking. With its Tk component, it can also handle a graphic and event interface. TclCsound provides three points of contact' with Tcl: 1. a csound-aware tcl interpreter (cstclsh) 2. a csound-aware windowing shell (cswish) 3. a csound commands module for Tcl/Tk (tclcsound dynamic lib)
Once this is done, performance can be started in two ways: using csPlay or csPerform . The command
csPlay
will start the Csound performance in a separate thread and return to the cstclsh prompt. A number of commands can then be used to control Csound. For instance,
csPause
will rewind to the beginning of the note-list. The csNote, csTable and csEvent commands can be used to add Csound score events to the performance, on-the-fly. The csPerform command, as opposed to csPlay , will not launch a separate thread, but will run Csound in the same thread, returning only when the performance is finished. A variety of other commands exist, providing full control of Csound.
73
TclCsound
Similarly, it is possible to bind keys to commands so that the computer keyboard can be used to play Csound. Particularly useful are the control channel commands that TclCsound provides. For instance, named IO channels can be registered with TclCsound and these can be used with the invalue, outvalue opcodes. In addition, the Csound API also provides a complete software bus for audio, control and string channels. It is possible in TclCsound to access control and string bus channels (the audio bus is not implemented, as Tcl is not able to handle such data). With these TclCsound commands, Tk widgets can be easily connected to synthesis parameters.
A Csound server
In Tcl, setting up TCP network connections is very simple. With a few lines of code a csound server can be built. This can accept connections from the local machine or from remote clients. Not only Tcl/Tk clients can send commands to it, but TCP connections can be made from other sofware, such as, for instance, Pure Data (PD). A Tcl script that can be run under the standard tclsh interpreter is shown below. It uses the Tclcsound module, a dynamic library that adds the Csound API commands to Tcl.
# load tclcsound.so #(OSX: tclcsound.dylib, Windows: tclcsound.dll) load tclcsound.so Tclcsound set forever 0 # This arranges for commands to be evaluated proc ChanEval { chan client } { if { [catch { set rtn [eval [gets $chan]]} err] } { puts "Error: $err" } else { puts $client $rtn flush $client } }
proc NewChan { chan host port } { puts "Csound server: connected to $host on port $port ($chan)" fileevent $chan readable [list ChanEval $chan $host] }
set server [socket -server NewChan 40001] set sinfo [fconfigure $server -sockname] puts "Csound server: ready for connections on port [lindex $sinfo 2]" vwait forever
With the server running, it is then possible to set up clients to control the Csound server. Such clients can be run from standard Tcl/Tk interpreters, as they do not evaluate the Csound commands themselves. Here is an example of client connections to a Csound server, using Tcl:
# connect to server set sock [socket localhost 40001] # compile Csound code puts $sock "csCompile -odac orchestra score" flush $sock
74
TclCsound
As mentioned before, it is possible to set up clients using other software systems, such as PD. Such clients need only to connect to the server (using a netsend object) and send messages to it. The first item of each message is taken to be a command. Further items can optionally be added to it as arguments to that command.
A Scripting Environment
With TclCsound, it is possible to transform the popular text editor e-macs into a Csound scripting/performing environment. When in Tcl mode, the editor allows for Tcl expressions to be evaluated by selection and use of a simple escape sequence (Ctrl-C Ctrl-X). This facility allows the integrated editing and performance of Csound and Tcl/Tk code. In Tcl it is possible to write score and orchestra files that can be saved, compiled and run by the same script, under the e-macs environment. The following example shows a Tcl script that builds a csound instrument and then proceeds to run a csound performance. It creates 10 slightly detuned parallel oscillators, generating sounds similar to those found in Risset's Inharmonique.
load tclcsound.so Tclcsound # set up some intermediary files
orcfile "tcl.orc" scofile "tcl.sco" orc [open $orcfile w] sco [open $scofile w]
# This Tcl procedure builds an instrument proc MakeIns { no code } { global orc sco puts $orc "instr $no" puts $orc $code puts $orc "endin" }
is the instrument code ins "asum init 0 \n" ins "ifreq = p5 \n" ins "iamp = p4 \n"
for { set i 0 } { $i < 10 } { incr i } { append ins "a$i oscili iamp, ifreq+ifreq*[expr $i * 0.002], 1\n" } for { set i 0 } {$i < 10 } { incr i } { if { $i } { append ins " + a$i" } else { append ins "asum = a$i " } }
75
TclCsound
append ins "\nk1 linen 1, 0.01, p3, 0.1 \n" append ins "out asum*k1"
MakeIns 1 $ins puts $sco "f0 10" close $orc close $sco
# send in a sequence of events and perform it for {set i 0} { $i < 60 } { incr i } { csNote 1 [expr $i * 0.1] .5 \ [expr ($i * 10) + 500] [expr 100 + $i * 10] } csPerform
The use of such facilities as provided by e-macs can emulate an environment not unlike the one found under the so-called modern synthesis systems', such as SuperCollider (SC). In fact, it is possible to run Csound in a client-server set-up, which is one of the features of SC3. A major advantage is that Csound provides about three or four times the number of unit generators found in that language (as well as providing a lower-level approach to signal processing, in fact these are but a few advantages of Csound).
TclCsound
csCompile [csound command-line] : compiles an orc/sco/csd + any options csCompileList arglist : compiles an orc/sco/csd + options given as a Tcl list 'arglist' csPerform : plays the score, returning when finished csPerformKsmps : performs one ksmps block of audio samples, returning when finished csPerformBuffer : performs one buffersize block of audio samples, returning when finished csPlay : starts asynchronous performance in a separate thread, returning immediately csPause : pauses playback csStop : stops performance and resets csound csRewind : rewinds the score csOffset secs : offsets score playback by secs csGetoffset : returns the score offset in secs csGetScoreTime : returns the score time in secs Event commands: csNote [p-fields] : sends in a i-statement event csTable [p-fields] : sends in a f-statement event csEvent opcode [p-fields] : sends in a score event defined by 'opcode' plus p-fields csNoteList arglist : sends in a i-statement event with p-fields as a Tcl list 'arglist' csTableList arglist : sends in a f-statement event with p-fields as a Tcl list 'arglist' csEventList arglist : sends in a score event defined by 'opcode' plus p-fields as a Tcl list 'arglist' Invalue, outvalue, pvsin, pvsout control and string channel commands: csInChannel name : registers a csound invalue channel csOutChannel name : registers a csound outvalue channel and creates tcl global variable 'name' csInValue channel value : sets the value of a csound invalue channel csOutValue channel : returns the value of a csound outvalue channel csPvsIn number [size olaps wsize wtype]: registers a pvs in bus channel, optionally initialising fsig values for fftsize to 'size' (default:1024), overlaps to 'olaps' (def.: size/4), window size to 'wsize' (def.: size) and window type to 'wtype' (def.: 1, Hanning window, see manual page for pvsanal). Works with pvsin opcode (PVS_AMP_FREQ format only). csPvsOut number [size olaps wsize wtype]: registers a pvs out bus channel. Works with opcode pvsout (PVS_AMP_FREQ format only). csPvsInSet channel bin amp freq: sets the amp and freq of a bin of the pvs in channel number. csPvsOutGet channel bin [isFreq]: returns the amp or freq of a bin of the pvs out channel number. The optional argument 'isFreq' (default: 0) controls whether the returned value is the bin amp (0) or freq (1). 77
TclCsound
csSetControlChannel channel value : sets the value of control channel 'channel', creating it if it does not exist csGetControlChannel channel : returns the value of control channel 'channel'; creates the channel it if it does not exist csSetStringChannel channel string : sets the string channel 'channel', creating it if it does not exist csGetStringChannel channel : returns the string in channel 'channel'; creates the channel it if it does not exist Message commands: csMessageOutput var: appends all csound messages to the tcl variable var. Table commands: csGetTableSize ftn : returns the size of function table ftn (-1 if non-existent) csSetTable ftn index value : sets the value of position 'index' to 'value' in function table 'ftn' csGetTable ftn index : returns the value of position 'index' in function table 'ftn' Environment variable commands: csOpcodedir opcodedir : sets the opcode directory csSetenv envvar value : sets any environment variable (eg. SFDIR, SADIR)
78
Building Csound
Csound has become a complex project and can involve many dependencies. Unless you are a Csound developer or need to develop Csound plugins, you should try to use one of the precompiled distributions from http://www.sourceforge.net/projects/csound. However, building from source is probably the best option on GNU/Linux. This section focuses on the main Csound 5 build system, which uses SCons [http://www.scons.org], a Python program that replaces make for cross-platform configuration and building. When building Csound from source instead of using a precompiled package, you first need to obtain the sources for a release of Csound at http://www.sourceforge.net/projects/csound. The source packages have either a zip or tar.gz extension. The latest (possibly unstable) Csound source code is also available through the Concurrent Versions System (CVS). It's likely (if you're running Mac OS X or Linux) that you already have CVS installed on your machine. If not, it can be downloaded from (http://www.cvshome.org). There are many graphical front ends for cvs, but you can easily get the sources using the command line version. The Csound CVS front page is located at: http://sourceforge.net/cvs/?group_id=81968. Information about accessing the CVS repository may be found in the SourceForge document http://sourceforge.net/docs/E04/. To download Csound sources using CVS, run the following commands (from a terminal or DOS shell):
cvs -d:pserver:[email protected]:/cvsroot/csound login cvs -z3 -d:pserver:[email protected]:/cvsroot/csound co -P csound5
To update the Csound5 sources you already have in your csound5 directory, change to that directory, and then type:
cvs -z3 update -d
To update only a single file, change to the sources directory, and then type:
cvs -z3 update filename
Building Csound
Windows
The following is needed to build on Windows (more complete build instructions for Windows may be found in the csound-build.tex document (csound-build.pdf)): Install a compiler like gcc or Microsoft Visual Studio (there is also support for the Intel C++ compiler). If using MinGW (gcc), install all of the current release of MinGW using the Automated MinGW Installer from www.mingw.org [http://www.mingw.org], for example into c:/mingw. This should install gcc, g++, GNU binutils, the MinGW runtime, and the win32 API. Then install the current release of MSys. On Windows you can use Microsoft Visual C++ (except for CsoundAC). The free Express Edition, from http://www.microsoft.com/express/vc/ works fine. You will need to obtain a copy of the dirent.h header file for Windows, e.g. from http://www.softagalleria.net/dirent.php. You may also need to obtain the bufferoverflowu.lib library from Microsoft and put it into the Visual C++ lib directory. Then open a shell in which to compile Csound, (usually called Visual Studio Command Prompt command, within the Visual C++ program menu). Optional configurations for Windows include the following:
80
Building Csound
Real-time audio and MIDI can use the Windows multimedia library. This module will be built automatically if the headers are found. The VST Host opcodes require both the Steinberg VST headers.
Linux
Optional configurations for Linux include the following: Real-time audio on Linux can use ALSA (www.alsa-project.org [http://www.alsa-project.org]) and JACK (www.jackaudio.org/ [http://www.jackaudio.org/]) in addition to PortAudio. Distributions usually provide the appropriate dev packages for these systems through their repositories. The DSSI Host opcodes require both the LADSPA and DSSI headers.
Mac OS X
Optional configurations for Mac OS X include the following: Real-time audio can use CoreAudio (OSX builtin native audio system) and Jack, appart from PortAudio. The DSSI Host opcodes require both the LADSPA and DSSI headers.
Note
It is important that you set the environment variable OPCODEDIR to the directory where plu81
Building Csound
gin libraries are installed; in the case of a double precision build, OPCODEDIR64 should be set instead. Installers usually take care of this, but it is necessary when building from source so Csound can find its plugin libraries.
Building Csound
Effect if set to 1 Enable gcc 4.0 or later optimizations for the specified CPU architecture (e.g. pentium3); implies noDebug. Generate TAGS. Generate PDF documentation. Enables the Install targets. Build for lib64 rather than lib. Build without debugging information. Disable use of a separate thread for FLTK widgets. On OSX use the gcc AltiVec optmisation flags. ALSA for real-time audio and MIDI input and output. use CoreAudio for real-time audio input and output. Use double-precision floating point for audio samples. Use FLTK for graphs and widget opcodes. Use the scheme GNU internationalisation/localisation
generateTags generatePdf install Lib64 noDebug noFLTKThreads useAltivec useALSA useCoreAudio useDouble useFLTK useGettext useGprof usePortAudio usePortMIDI useJack useLrint useOSC useUDP withICL
Build with profiling information (-pg). Use PortAudio for real-time audio input and output. Build PortMidi plugin for real time MIDI input and output. Used if you compiled PortAudio to use Jack; also builds Jack plugin. Use lrint() and lrintf() for converting floating point values to integers. For OSC support. For UDP support. 1 by default. Set to 0 to avoid. Build with the Intel C++ Compiler (also requires Microsoft Visual C++), Set to 0 to build with MinGW. Windows only. Build with Microsoft Visual C++, or set to 0 to build with MinGW. Windows only. Build for 64bit computer. Set to the Python version to be used.
83
Csound Links
Csound's "home page" is maintained by Richard Boulanger at http://csounds.com. The Csound source code is maintained by John ffitch and others at http://www.sourceforge.net/projects/csound. The most recent versions and precompiled packages for most platforms also can be downloaded here [http://sourceforge.net/project/showfiles.php?group_id=81968]. A Csound mailing list exists to discuss Csound. It is run by John ffitch of Bath University, UK. To have your name put on the mailing list send an empty message to: [email protected] [mailto:[email protected]]. You can also subscribe to the digest (1 message per day) by sending an empty email to: [email protected] [mailto:[email protected]]. Posts sent to [email protected] [mailto:[email protected]] go to all subscribed members of the list. You can browse the csound mailing list archives here [http://agentcities.cs.bath.ac.uk/%7ebwillkie/list_arch.php] Similarly, the Csound-devel mailing list exists to discuss Csound development. For more information on this list, go to http://lists.sourceforge.net/lists/listinfo/csound-devel. Posts sent to [email protected] [mailto:[email protected]] go to all subscribed members of the list.
84
Table of Contents
Signal Generators ...................................................................................................... 89 Additive Synthesis/Resynthesis .................................................................... 89 Basic Oscillators ....................................................................................... 89 Dynamic Spectrum Oscillators ..................................................................... 89 FM Synthesis ........................................................................................... 90 Granular Synthesis .................................................................................... 90 Hyper Vectorial Synthesis .......................................................................... 91 Linear and Exponential Generators ............................................................... 91 Envelope Generators .................................................................................. 92 Models and Emulations .............................................................................. 92 Phasors ................................................................................................... 93 Random (Noise) Generators ........................................................................ 94 Sample Playback ....................................................................................... 95 Soundfonts .............................................................................................. 95 Scanned Synthesis ..................................................................................... 97 Table Access ............................................................................................ 98 Wave Terrain Synthesis .............................................................................. 99 Waveguide Physical Modeling ..................................................................... 99 Signal Input and Output ............................................................................................ 100 File Input and Output ............................................................................... 100 Signal Input ........................................................................................... 100 Signal Output ......................................................................................... 100 Software Bus .......................................................................................... 101 Printing and Display ................................................................................ 101 Sound File Queries .................................................................................. 101 Signal Modifiers ..................................................................................................... 103 Amplitude Modifiers and Dynamic processing .............................................. 103 Convolution and Morphing ....................................................................... 103 Delay .................................................................................................... 103 Panning and Spatialization ........................................................................ 104 Reverberation ......................................................................................... 106 Sample Level Operators ........................................................................... 106 Signal Limiters ....................................................................................... 107 Special Effects ........................................................................................ 107 Standard Filters ...................................................................................... 107 Specialized Filters ................................................................................... 109 Waveguides ........................................................................................... 109 Waveshaping and Phase Distortion ............................................................. 109 Instrument Control .................................................................................................. 111 Clock Control ......................................................................................... 111 Conditional Values .................................................................................. 111 Duration Control Statements ..................................................................... 111 FLTK Widgets and GUI controllers ............................................................ 111 FLTK Containers .................................................................................... 114 FLTK Valuators ...................................................................................... 114 Other FLTK Widgets ............................................................................... 115 Modifying FLTK Widget Appearance ......................................................... 115 General FLTK Widget-related Opcodes ....................................................... 116 Instrument Invocation .............................................................................. 116 Program Flow Control ............................................................................. 117 Real-time Performance Control .................................................................. 118 Initialization and Reinitialization ................................................................ 118 Sensing and Control ................................................................................ 119 86
Opcodes Overview
Stacks ................................................................................................... Sub-instrument Control ............................................................................ Time Reading ......................................................................................... Function Table Control ............................................................................................ Table Queries ......................................................................................... Read/Write Operations ............................................................................. Table Reading with Dynamic Selection ....................................................... Mathematical Operations .......................................................................................... Amplitude Converters .............................................................................. Arithmetic and Logic Operations ................................................................ Comparators and Accumulators ................................................................. Mathematical Functions ........................................................................... Opcode Equivalents of Functions ............................................................... Random Functions .................................................................................. Trigonometric Functions .......................................................................... Linear Algebra Opcodes ........................................................................... Pitch Converters ..................................................................................................... Functions ............................................................................................... Tuning Opcodes ...................................................................................... Real-time MIDI Support ........................................................................................... Virtual MIDI Keyboard ............................................................................ MIDI input ............................................................................................ MIDI Message Output ............................................................................. Generic Input and Output .......................................................................... Converters ............................................................................................. Event Extenders ...................................................................................... Note-on/Note-off Output .......................................................................... MIDI/Score Interoperability opcodes .......................................................... System Realtime Messages ....................................................................... Slider Banks ........................................................................................... Spectral Processing ................................................................................................. Short-time Fourier Transform (STFT) Resynthesis ........................................ Linear Predictive Coding (LPC) Resynthesis ................................................ Non-standard Spectral Processing .............................................................. Tools for Real-time Spectral Processing (pvs opcodes) ................................... ATS Spectral Processing .......................................................................... Loris Opcodes ........................................................................................ Strings .................................................................................................................. String Manipulation Opcodes .................................................................... String Conversion Opcodes ....................................................................... Vectorial Opcodes ................................................................................................... Tables of vectors operators ....................................................................... Operations Between a Vectorial and a Scalar Signal ....................................... Operations Between two Vectorial Signals ................................................... Vectorial Envelope Generators .................................................................. Limiting and wrapping of vectorial control signals ........................................ Vectorial Control-rate Delay Paths ............................................................. Vectorial Random Signal Generators .......................................................... Zak Patch System .................................................................................................... Plugin Hosting ........................................................................................................ DSSI and LADSPA for Csound ................................................................. VST for Csound ...................................................................................... OSC and Network ................................................................................................... OSC ..................................................................................................... Network ................................................................................................ Remote Opcodes ..................................................................................... Mixer Opcodes ....................................................................................................... Signal Flow Graph Opcodes ...................................................................................... 87
120 120 121 122 122 122 123 124 124 124 124 125 125 126 126 127 137 137 137 138 139 142 142 143 143 143 143 143 145 145 146 146 147 147 147 148 149 153 154 154 156 156 156 157 157 158 158 158 160 161 161 161 163 163 163 163 164 165
Opcodes Overview
Jacko Opcodes ........................................................................................................ Python Opcodes ...................................................................................................... Introduction ........................................................................................... Orchestra Syntax ..................................................................................... Image processing opcodes ........................................................................................ Miscellaneous opcodes .............................................................................................
88
Signal Generators
Additive Synthesis/Resynthesis
The opcodes for additive synthesis and resynthesis are: adsyn adsynt adsynt2 hsboscil See the section Spectral processing for more information and further additive/resynthesis opcodes.
Basic Oscillators
The basic oscillator opcodes are: (note that opcodes that end with 'i' implement linear interpolation and those that end with '3' implement cubic interpolation) Oscillator Banks: oscbnk Simple table oscillators: oscil, oscil3 and oscili. Simple, fast sine oscilator: oscils Precision oscilators: poscil and poscil3. More flexible oscillators: oscilikt, osciliktp, oscilikts and osciln (also called oscilx). Oscillators can also be constructed from generic table read opcodes. See the Table Read/ Write operations section.
LFOs
lfo vibr vibrato See the section Table access for other table reading opcodes that can be used as oscillators. Also see the section Dynamic spectrum Oscillators.
Signal Generators
Harmonic spectra: buzz and gbuzz Impulse generator: mpulse Band limited oscillators (analog modelled): vco and vco2 The following opcodes can be used to generate band-limited waveforms for use with vco2 and other oscillators: vco2init vco2ft vco2ift
FM Synthesis
The FM synthesis opcodes are: foscil foscili crossfm, crossfmi, crosspm, crosspmi, crossfmpm, and crossfmpmi.
FM instrument models
fmb3 fmbell fmmetal fmpercfl fmrhode fmvoice fmwurlie
Granular Synthesis
The granular synthesis opcodes are: diskgrain fof
90
Signal Generators
fof2 fog grain grain2 grain3 granule partikkel partikkelsync sndwarp sndwarpst syncgrain syncloop vosim
91
Signal Generators
gainslider jspline line linseg linsegr logcurve loopseg loopsegp lpshold lpsholdp rspline scale transeg
Envelope Generators
The following envelope generators are available: adsr madsr mxadsr xadsr linen linenr envlpx envlpxr Consult the Linear and exponential generators section for additional methods to create envelopes.
92
Signal Generators
barmodel cabasa crunch dripwater gogobel guiro mandol marimba moog sandpaper sekere shaker sleighbells stix tambourine vibes voice Other models and emulations lorenz planet prepiano Fractal Number (Mandelbrot set) generator: mandel chuap
Phasors
The opcodes that generate a moving phase value: phasor phasorbnk syncphasor
93
Signal Generators
These opcodes are useful in combination with the Table access opcodes.
94
Signal Generators
See seed which sets the global seed value for all x-class noise generators, as well as other opcodes that use a random call, such as grain. rand, randh, randi, rnd(x) and birnd(x) are not affected by seed. See also functions which generate random numbers in the section Random Functions.
Sample Playback
Opcodes that implement sample playback and looping are: bbcutm bbcuts flooper flooper2 loscil loscil3 loscilx lphasor lposcil lposcil3 lposcila lposcilsa lposcilsa2 sndloop waveset See also the Signal Input section for other ways to input sound.
Soundfonts
Fluid Opcodes
The fluid family of opcodes wraps Peter Hannape's SoundFont 2 player, FluidSynth: fluidEngine for instantiating a FluidSynth engine, fluidSetInterpMethod for setting interpolation method for a channel in a FluidSynth engine, fluidLoad for loading SoundFonts, fluidProgramSelect for assigning presets from a SoundFont to a FluidSynth engine's MIDI channel, fluidNote for playing a note on a FluidSynth engine's MIDI channel, fluidCCi for sending a controller message at i-time to a FluidSynth engine's MIDI channel, fluidCCk for sending a controller message at k-rate to a FluidSynth engine's MIDI channel. fluidControl for playing and controlling loaded Soundfonts (using 'raw' MIDI messages), fluidOut for receiving audio from a single FluidSynth engine, and fluidAllOut for receiving audio from all FluidSynth engines.
95
Signal Generators
fluidAllOut fluidCCi fluidCCk fluidControl fluidEngine fluidLoad fluidNote fluidOut fluidProgramSelect fluidSetInterpMethod
96
Signal Generators
Scanned Synthesis
Scanned synthesis is a variant of physical modeling, where a network of masses connected by springs is used to generate a dynamic waveform. The opcode scanu defines the mass/spring network and sets it in motion. The opcode scans follows a predefined path (trajectory) around the network and outputs the detected waveform. Several scans instances may follow different paths around the same network. These are highly efficient mechanical modelling algorithms for both synthesis and sonic animation via algorithmic processing. They should run in real-time. Thus, the output is useful either directly as audio, or as controller values for other parameters. The Csound implementation adds support for a scanning path or matrix. Essentially, this offers the possibility of reconnecting the masses in different orders, causing the signal to propagate quite differently. They do not necessarily need to be connected to their direct neighbors. Essentially, the matrix has the effect of molding this surface into a radically different shape. To produce the matrices, the table format is straightforward. For example, for 4 masses we have the following grid describing the possible connections: 1 1 2 3 4 Whenever two masses are connected, the point they define is 1. If two masses are not connected, then the point they define is 0. For example, a unidirectional string has the following connections: (1,2), (2,3), (3,4). If it is bidirectional, it also has (2,1), (3,2), (4,3)). For the unidirectional string, the matrix appears: 1 1 2 3 4 0 0 0 0 2 1 0 0 0 3 0 1 0 0 4 0 0 1 0 2 3 4
The above table format of the connection matrix is for conceptual convenience only. The actual values shown in te table are obtained by scans from an ASCII file using GEN23. The actual ASCII file is created from the table model row by row. Therefore the ASCII file for the example table shown above becomes: 0100001000010000
This matrix example is very small and simple. In practice, most scanned synthesis instruments will use many more masses than four, so their matrices will be much larger and more complex. See the example in the scans documentation. Please note that the generated dynamic wavetables are very unstable. Certain values for masses, centering, and damping can cause the system to blow up and the most interesting sounds to emerge from 97
Signal Generators
your loudspeakers! The supplement to this manual contains a tutorial on scanned synthesis. The tutorial, examples, and other information on scanned synthesis is available from the Scanned Synthesis page at cSounds.com. Scanned synthesis developed by Bill Verplank, Max Mathews and Rob Shaw at Interval Research between 1998 and 2000. Opcodes that implement scanned synthesis are: scanhammer scans scantable scanu xscanmap xscans xscansmap xscanu
Table Access
The opcodes that access tables are: oscil1 oscil1i osciln oscilx table table3 tablei Opcodes ending in 'i' implement linear interpolation and opcodes ending in '3' implement cubic interpolation. The following opcodes implement fast table reading/writing without boundary checks: tab tab_i tabw tabw_i 98
Signal Generators
See the sections Table Queries, Read/Write Operationsand Table Reading with Dynamic Selection for other table operations.
Note
Although tables with a size which is not a power of two can be created using a negative size (see f score statement), some opcodes will not accept them.
99
Signal Input
The opcodes that receive audio signals are: Synchronous input: in, in32, inch, inh, ino, inq, inrg, ins and inx File streaming: diskin, diskin2 and soundin User defined channel input: invalue Streaming input: soundin Direct to zak input: inz See the section Software Bus for input and output through the API. The mp3in allows reading of mp3 files, which are currently not supported by ordinary reading methods inside Csound.
Signal Output
The opcodes that write audio signals are: Synchronous output: out, out32, outc, outch, outh, outo, outrg, outq, outq1, outq2, outq3, outq4, outs,outs1, outs2 and outx Streaming output: soundout and soundouts User defined channel output: outvalue Direct from zak output: outz The opcode monitor can be used for monitoring the complete output of csound (the output 100
spout frame). See the section Software Bus for input and output through the API.
Software Bus
Csound implements a software bus for internal routing or routing to external software calling the Csound API. The opcodes to use the software bus are: chn_k chn_a chn_S chnclear chnexport chnmix chnparams
101
102
Signal Modifiers
Amplitude Modifiers and Dynamic processing
The opcodes that modify amplitude are: balance compress clip dam gain The opcode 0dbfs facilitates the use of amplitude by removing the need to use of explicit sample values.
Delay
Fixed delays
delay delay1 delayk
103
Signal Modifiers
Delay Lines
delayr delayw deltap deltap3 deltapi deltapn deltapx deltapxw
Variable delays
vdelay vdelay3 vdelayx vdelayxs vdelayxq vdelayxw vdelayxwq vdelayxws
Multitap delays
multitap
104
Signal Modifiers
Binaural spatialization
hrtfer hrtfmove hrtfmove2 hrtfstat
Ambisonics
bformdec 105
Signal Modifiers
bformenc
Reverberation
The opcodes one can use for reverberation are: alpass babo comb freeverb nestedap nreverb (also called reverb2) reverb reverbsc valpass vcomb
106
Signal Modifiers
vaget vaset
Signal Limiters
Opcodes that can be used to limit signals are: limit mirror wrap
Special Effects
Opcodes that generate special effects are: distort distort1 flanger harmon phaser1 phaser2
Standard Filters
Resonant Low-pass filters
areson lowpass2 lowres lowresx lpf18 moogvcf moogladder reson
107
Signal Modifiers
resonr resonx resony resonz rezzy statevar svfilter tbvcf vlowres bqrez
Standard filters
Hi-pass filters: atone, atonex Low-pass filters: tone, tonex Biquad filters: biquad and biquada. Butterworth filters: butterbp, butterbr, butterhp, butterlp (which are also called butbp, butbr, buthp, butlp) General filters: clfilt
108
Signal Modifiers
Specialized Filters
High pass filters
dcblock dcblock2
Parametric EQ
pareq rbjeq eqfil
Other filters
nlfilt filter2 fofilter hilbert zfilter2
Waveguides
The opcodes that use waveguides to modify a signal are: streson wguide1 wguide2
Signal Modifiers
chebyshevpoly clip distort distort1 polynomial powershape These opcodes are good for phaseshaping: pdclip pdhalf pdhalfy
110
Instrument Control
Clock Control
The opcodes to start and stop internal clocks are: clockoff clockon These clocks count CPU time. There are 32 independent clocks available. You can use the opcode readclock to read current values of a clock. See Time Reading for other timing opcodes.
Conditional Values
The opcodes for conditional values are ==, >=, >, <, <=, and !=.
Instrument Control
Tabs Groups Valuators The most useful objects are named FLTK Valuators. These objects allow the user to vary synthesis parameter values in real-time. Csound provides the following valuator objects: Sliders Knobs Rollers Text fields Joysticks Counters Other widgets There are other FTLK widgets that are not valuators nor containers: Buttons Button banks Labels Keyboard and Mouse sensing Also there are some other opcodes useful to modify the widget appearance: Updating widget value. Setting primary and selection colors of a widget. Setting font type, size and color of widgets. Resizing a widget. Hiding and showing a widget. There are also these general opcodes that allow the following actions: Running the widget thread: FLrun Loading snapshots containing the status of all valuators of an orchestra: FLgetsnap and FLloadsnap. Saving snapshots containing the status of all valuators of an orchestra: FLsavesnap and FLsetsnap Setting the snapshot group of a declared valuator: FLsetSnapGroup Below is a simple example of Csound code to create a window. Notice that all opcodes are init-rate and must be called only once per session. The best way to use them is to place them in the header section of 112
Instrument Control
an orchestra, before any instrument. Even though placing them inside an instrument is not prohibited, unpredictable results can occur if that instrument is called more than once. Each container is made up of a couple of opcodes: the first indicating the start of the container block and the last indicating the end of that container block. Some container blocks can be nested but they must not be crossed. After defining all containers, a widget thread must be run by using the special FLrun opcode that takes no arguments.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o linseg.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ;******************************* sr=48000 kr=480 ksmps=100 nchnls=1 ;*** It is recommended to put almost all GUI code in the ;*** header section of an orchestra FLpanel "Panel1",450,550 ;***** start of container ; some widgets should contained here FLpanelEnd ;***** end of container FLrun ;***** runs the widget thread, it is always required! instr 1 ;put some synthesis code here endin ;******************************* </CsInstruments> <CsScore> f 0 3600 ;dummy table for realtime input e </CsScore> </CsoundSynthesizer>
The previous code simply creates a panel (an empty window because no widgets are defined inside the container). The following example creates two panels and inserts a slider inside each of them:
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc ; -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o linseg.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ;******************************* sr=48000 kr=480 ksmps=100 nchnls=1 FLpanel gk1,iha FLslider FLpanelEnd FLpanel gk2,ihb FLslider "Panel1",450,550,100,100 ;***** start of container "FLslider 1", 500, 1000, 0 ,1, -1, 300,15, 20,50 ;***** end of container "Panel2",450,550,100,100 ;***** start of container "FLslider 2", 100, 200, 0 ,1, -1, 300,15, 20,50
113
Instrument Control
FLpanelEnd FLrun
;***** end of container ;***** runs the widget thread, it is always required!
instr 1 ; gk1 and gk2 variables that contain the output of valuator ; widgets previously defined, can be used inside any instrument printk2 gk1 printk2 gk2 ;print the values of the valuators whenever they change endin ;******************************* </CsInstruments> <CsScore> f 0 3600 ;dummy table for realtime input e </CsScore> </CsoundSynthesizer>
All widget opcodes are init-rate opcodes, even if valuators output k-rate variables. This happens because an independent thread is run based on a callback mechanism. It consumes very few processing resources since there is no need of polling. (This differs from other MIDI based controller opcodes.) So you can use any number of windows and valuators without degrading the real-time performance.
FLTK Containers
The opcodes for FLTK containers are: FLgroup FLgroupEnd FLpack FLpackEnd FLpanel FLpanelEnd FLscroll FLscrollEnd FLtabs FLtabsEnd
FLTK Valuators
The opcodes for FLTK valuators are: FLcount FLjoy FLknob
114
Instrument Control
Instrument Control
FLcolor FLcolor2 FLhide FLlabel FLsetAlign FLsetBox FLsetColor FLsetColor2 FLsetFont FLsetPosition FLsetSize FLsetText FLsetTextColor FLsetTextSize FLsetTextType FLsetVal_i FLsetVal FLshow
Instrument Invocation
116
Instrument Control
The opcodes one can use to create score events from within a orchestra are: event event_i scoreline_i scoreline schedule schedwhen schedkwhen schedkwhennamed The mute opcode can be used to mute/unmute instruments during a performance. Instruments definitions can be removed using the remove opcode.
117
Instrument Control
Warning
Some of these opcodes work at i-rate even if they contain k- or a- rate comparisons. See the Reinitialization section.
Instrument Control
The opcode p can be used to find score p-fields at i- or k-rate. nstrnum returns the instrument number for a named instrument.
Envelope followers
follow follow2 peak rms
Instrument Control
System
getcfg
Score control
rewindscore setscorepos
Stacks
Csound implements a global stack that can be accessed with the following opcodes: stack pop push pop_f push_f
Sub-instrument Control
These opcodes let one define and use a sub-instrument:
120
Instrument Control
subinstr subinstrinit See also the UDO and Orchestra Macros Macros section for similar functionality.
Time Reading
Opcodes one can use to read time values are: readclock rtclock timeinstk timeinsts times timek You can obtain the system date using: date - Returns the number seconds since 1 January 1970. dates - Returns as a string the date and time specified. You can also set up counters using clockoff and clockon.
121
Note
Not all opcodes accept tables whose size is not a power of two, as this may be a requirement for internal processing. For information on table access, consult the section Table Access. Tables for use with the loscilx opcode can be loaded using sndload.
Table Queries
Opcodes the query tables for information are: For tables loaded from a sound file (using GEN01): ftchnls, ftcps,ftlen, ftlptim and ftsr For any table: nsamp, ftlen, tableng The opcode tabsum calculates the sum of values in a table.
Read/Write Operations
Opcodes that read and write to a table are: ftloadk ftload ftsavek ftsave tablecopy tablegpw tableicopy tableigpw tableimix tableiw 122
tablemix tablera tablew tablewa tablewkt tabmorph tabmorpha tabmorphak tabmorphi tabrec tabplay ftmorf Table values can be accessed within expressions using the tb family of opcodes. Many oscillators are in fact specialized table readers. See the Basic oscillators section.
123
Mathematical Operations
Amplitude Converters
Opcodes to convert between different amplitude measurements are: ampdb ampdbfs db dbamp dbfsamp Use rms to find the rms value of a signal. See also 0dbfs for another way to handle amplitudes in csound.
124
Mathematical Operations
Mathematical Functions
Opcodes that perform mathematical functions are: abs ceil exp floor frac int log log10 logbtwo pow powershape powoftwo round sqrt
125
Mathematical Operations
Random Functions
Opcodes that perform random functions are: birnd rnd See the section Random (Noise) Generators for opcodes that generate random signals.
Trigonometric Functions
Opcodes that perform trigonometric functions are: cos, cosh and cosinv sin, sinh and sininv tan, tanh, taninv, and taninv2.
126
Mathematical Operations
Description
These opcodes implement many linear algebra operations, from scalar, vector, and matrix arithmetic up to and including QR based eigenvalue decompositions. The opcodes are designed for digital signal processing, and of course other mathematical operations, in the Csound orchestra language. The numerical implementation uses the gmm++ library from home.gna.org/getfem/gmm_intro [http://home.gna.org/getfem/gmm_intro].
Warning
For applications with f-sig variables, array arithmetic must be performed only when the fsig is "current," because f-rate is some fraction of k-rate; currency can be determined with the la_k_current_f opcode. For applications using assignments between real vectors and a-rate variables, array arithmetic must be performed only when the vectors are "current", because the size of the vector may be some integral multiple of ksmps; currency can be determined by means of the la_k_current_vr opcode.
All arrays are 0-based; the first index iterates rows to give columns, the second index iterates columns to give elements. All arrays are general and dense; banded, Hermitian, symmetric and sparse routines are not implemented. 127
Mathematical Operations
An array can be of type code vr, vc, mr, or mc and is stored in an i-rate object. In orchestra code, an array is passed as a MYFLT i-rate variable that contains the address of the array object, which is actually stored in the allocator opcode instance. Although array variables are i-rate, of course their values and even shapes may change at i-rate or k-rate. All operands must be pre-allocated; except for the creation opcodes, no opcode ever allocates any arrays. This is true even if the array appears on the left-hand side of an opcode! However, some operations may reshape arrays to hold results. Arrays are automatically deallocated when their instrument is deallocated. Not only for more efficient performance, but also to make it easier to remember opcode names, the performance rate, output value types, operation names, and input value types are deterministically encoded into the opcode name: 1. "la" for "linear algebra opcode family". 2. "i" or "k" for performance rate. 3. Type code(s) (see above table) for output value(s), but only if the type is not implicit from the input values. 4. Operation name: common mathematical name (preferred) or abbreviation. 5. Type code(s) for input values, if not implicit. For additional details, see the tp://download.gna.org/getfem/doc/gmmuser.pdf. gmm++ documentation at ht-
Syntax
Array Creation
ivr la_i_vr_create irows
Create a real matrix with irows rows and icolumns columns, with an optional value on the diagonal.
imc la_i_mc_create irows, icolumns [, odiagonal_r, odiagonal_i]
Create a complex matrix with irows rows and icolumns columns, with an optional complex value on the diagonal.
Array Introspection
irows la_i_size_vr ivr
Mathematical Operations
irows
la_i_size_vc
ivc
Return 1 if fsig is current, that is, if the value of fsig will change on the next kperiod.
kvriscurrent la_k_current_vr ivr
Return 1 if the real vector ivr is current, that is, if Csound's current audio sample frame stands at index 0 of the vector.
la_i_print_vr ivr
Assign the value of the real vector on the right-hand side to the real vector on the left-hand side, at i-rate.
ivr la_k_assign_vr ivr
Assign the value of the real vector on the right-hand side to the real vector on the left-hand side, at krate.
ivc ivc imr imr la_i_assign_vc la_k_assign_vc la_i_assign_mr la_k_assign_mr ivc ivr imr imr
129
Mathematical Operations
imc imc
la_i_assign_mc la_k_assign_mc
imc imr
Warning
Assignments to vectors from tables or fsigs may resize the vectors. Assignments to vectors from a-rate variables, or to a-rate variables from vectors, will be performed incrementally, one chunk of ksmps elements per kperiod. Therefore, array arithmetic on such vectors should only be performed when the vectors are current, as determined by the la_k_currrent_vr opcode.
ivr ivr ivr ivc asig itablenum itablenum fsig la_k_assign_a la_i_assign_t la_k_assign_t la_k_assign_f la_k_a_assign la_i_t_assign la_k_t_assign la_k_f_assign asig itablenumber itablenumber fsig ivr ivr ivr ivc
130
Mathematical Operations
ivc kvc imr kmr imc kmc ivalue kvalue ivalue_r, ivalue_i kvalue_r, kvalue_i ivalue kvalue ivalue_r, ivalue_i kvalue_r, kvalue_i
la_i_vc_set la_k_vc_set la_i mr_set la_k mr_set la_i_mc_set la_k_mc_set la_i_get_vr la_k_get_vr la_i_get_vc la_k_get_vc la_i_get_mr la_k_get_mr la_i_get_mc la_k_get_mc
irow, ivalue_r, ivalue_i krow, kvalue_r, kvalue_i irow, icolumn, ivalue krow, kcolumn, ivalue irow, icolumn, ivalue_r, ivalue_i krow, kcolumn, kvalue_r, kvalue_i ivr, irow ivr, krow ivc, irow ivc, krow imr, irow, icolumn imr, krow, kcolumn imc, irow, icolumn imc, krow, kcolumn
131
Mathematical Operations
Scalar Operations
ir kr ir kr ir kr ir kr ir kr ir kr ir kr ir kr ir kr ir kr ir kr ir kr ir kr la_i_norm1_vr la_k_norm1_vr la_i_norm1_vc la_k_norm1_vc la_i_norm1_mr la_k_norm1_mr la_i_norm1_mc la_k_norm1_mc la_i_norm_euclid_vr la_k_norm_euclid_vr la_i_norm_euclid_vc la_k_norm_euclid_vc la_i_norm_euclid_mr la_k_norm_euclid_mr la_i_norm_euclid_mc la_k_norm_euclid_mc la_i_distance_vr la_k_distance_vr la_i_distance_vc la_k_distance_vc la_i_norm_max la_k_norm_max la_i_norm_max la_k_norm_max la_i_norm_inf_vr la_k_norm_inf_vr ivr ivc ivc ivc imr imr imc imc ivr ivr ivc ivc mvr mvr mvc mvc ivr ivr ivc ivc imr imc imr imc ivr ivr
132
Mathematical Operations
ir kr ir kr ir kr ir kr ir, ii kr, ki ir kr ir kr
la_i_norm_inf_vc la_k_norm_inf_vc la_i_norm_inf_mr la_k_norm_inf_mr la_i_norm_inf_mc la_k_norm_inf_mc la_i_trace_mr la_k_trace_mr la_i_trace_mc la_k_trace_mc la_i_lu_det la_k_lu_det la_i_lu_det la_k_lu_det
ivc ivc imr imr imc imc imr imr imc imc imr imr imc imc
133
Mathematical Operations
Inner Products
ir kr ir, ii kr, ki imr imr imc imc ivr ivr ivc ivc la_i_dot_vr la_k_dot_vr la_i_dot_vc la_k_dot_vc la_i_dot_mr la_k_dot_mr la_i_dot_mc la_k_dot_mc la_i_dot_mr_vr la_k_dot_mr_vr la_i_dot_mc_vc la_k_dot_mc_vc ivr_a, ivr_b ivr_a, ivr_b ivc_a, ivc_b ivc_a, ivc_b imr_a, imr_b imr_a, imr_b imc_a, imc_b imc_a, imc_b imr_a, ivr_b imr_a, ivr_b imc_a, ivc_b imc_a, ivc_b
Matrix Inversion
imr, icondition imr, kcondition imc, icondition imc, kcondition la_i_invert_mr la_k_invert_mr la_i_invert_mc la_k_invert_mc imr imr imc imc
134
Mathematical Operations
ivr ivr ivc ivc imr, ivr_pivot, isize imr, ivr_pivot, ksize imc, ivr_pivot, isize imc, ivr_pivot, ksize ivr_x ivr_x ivc_x ivc_x imr_q, imr_r imr_q, imr_r imc_q, imc_r imc_q, imc_r ivr_eig_vals ivr_eig_vals ivr_eig_vals ivr_eig_vals
la_i_lower_solve_mr la_k_lower_solve_mr la_i_lower_solve_mc la_k_lower_solve_mc la_i_lu_factor_mr la_k_lu_factor_mr la_i_lu_factor_mc la_k_lu_factor_mc la_i_lu_solve_mr la_k_lu_solve_mr la_i_lu_solve_mc la_k_lu_solve_mc la_i_qr_factor_mr la_k_qr_factor_mr la_i_qr_factor_mc la_k_qr_factor_mc la_i_qr_eigen_mr la_k_qr_eigen_mr la_i_qr_eigen_mc la_k_qr_eigen_mc
imr [, j_1_diagonal] imr [, j_1_diagonal] imc [, j_1_diagonal] imc [, j_1_diagonal] imr imr imc imc imr, ivr_b imr, ivr_b imc, ivc_b imc, ivc_b imr imr imc imc imr, i_tolerance imr, k_tolerance imc, i_tolerance imc, k_tolerance
Warning
Matrix must be Hermitian in order to compute eigenvectors.
ivr_eig_vals, imr_eig_vecs ivr_eig_vals, imr_eig_vecs ivc_eig_vals, imc_eig_vecs ivc_eig_vals, imc_eig_vecs la_i_qr_sym_eigen_mr la_k_qr_sym_eigen_mr la_i_qr_sym_eigen_mc la_k_qr_sym_eigen_mc imr, i_tolerance imr, k_tolerance imc, i_tolerance imc, k_tolerance
135
Mathematical Operations
Credits
Michael Gogins New in Csound version 5.09
136
Pitch Converters
Functions
Opcodes that provide common pitch functions are: cent cpsmidinn cpsoct cpspch octave octcps octmidinn octpch pchmidinn pchoct semitone
Tuning Opcodes
Opcodes that provide tuning functions are: cps2pch cpsxpch cpstun cpstuni
137
Note
This will only work if the MIDI module can be accessed by device number. For alsa, you must first find the device name using: cat /proc/asound/cards You must then use something like: csound -+rtmidi=alsa -M hw:3 myrtmidi.csd
Realtime MIDI output is activated using -Q, using device number or names as shown above. You can also load a MIDI file using the -F or --midifile=FILE command line flag. The MIDI file is read in realtime, and behaves as if it was being performed or recieved in realtime. So the csound program is not aware if MIDI input comes from a MIDI file or directly from a MIDI interface. Once realtime MIDI input and/or output has been activated, opcodes like MIDI Input and MIDI Output will have effect. When MIDI input is enabled (with -M or -F), each incoming noteon message will generate a note event for an instrument which has the same number as the channel of the event (see massign and pgmassign to change this behavior). This means that MIDI controlled instruments are polyphonic by default, since each note will generate a new instance of the instrument. See the MIDI/Score Interoperability opcodes for information on designing instruments which can be used from the score or driven by MIDI. There are several realtime MIDI modules available, you must use the -+rtmidi flag (See +rtmidi), to specify the module. The default module is portmidi which provides adecuate MIDI I/O on all platforms, however for improved performance and reliablity some platform specific modules are also provided. Currently the midi modules available are: alsa - To use the ALSA midi system (Linux only) 138
winmme - To use the windows MME system (Windows only) portmidi - To use the portmidi system (all platforms). This is the default setting. virtual - To use a virtual graphical keyboard (See below) as MIDI input (all platforms)
Tip
When csound runs, it will process the score and then quit. If there are no events in the score, Csound will exit immediately. If you want to use only MIDI events instead of score events, you need to tell Csound to run for a certain amount of time. This can be done with a dummy f-statement like "f 0 3600".
Virtual MIDI keyboard. The virtual MIDI keyboard module (activated using -+rtmidi=virtual on the command line flags) provides a way of sending realtime MIDI information to Csound without the need of a MIDI device. It can send note information, control changes, bank and program changes on a specified channel. The MIDI information from the virtual keyboard is processed by Csound in exactly the same way as MIDI information that comes from the other MIDI drivers, so if your Csound orchestra is designed to work with hardware MIDI devices, this will also work. For the device flag (-M), the virtual keyboard uses this to take in the name of a keyboard mapping files. Like all MIDI drivers, a device must be given to activate the driver. If you would like to just use the default settings of the keyboard, simply passing in 0 (i.e. -M0) and the virtual keyboard will use its default settings. If instead of the 0 a name of a file is given, the keyboard will attempt to load the file as a keyboard mapping. If the file could not be opened or read correctly, the default settings will be used. Keyboard Mapping files allow the user to customize the name and number of banks as well as the name and number of programs per bank. The following example keyboard mapping (named keyboard.map) has inline comments on the file format. This file is also available with the Csound source distribution in the InOut/virtual_keyboard folder.
# Custom Keyboard Map for Virtual Keyboard # Steven Yi #
139
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
USAGE When using the Virtual Keyboard, you can supply a filename for a mapping of banks and programs via the -M flag, for example: csound -+rtmidi=virtual -Mkeyboard.map my_project.csd INFORMATION ON THE FORMAT -lines that start with '#' are comments -lines that have [] start new bank definitions, the contents are bankNum=bankName, with bankNum=[1,16384] -lines following bank statements are program definitions in the format programNum=programName, with programNum=[1,128] -bankNumbers and programNumbers are defined in this file starting with 1, but are converted to midi values (starting with 0) when read NOTES -if an invalid bank definition is found, all program defintions that follow will be ignored until a new valid bank definition is found -if a valid bank is defined by no valid programs found for that bank, it will default to General MIDI program definitions -if an invalid program definition is found, it will be ignored
[1=My Bank] 1=My Test Patch 1 2=My Test Patch 2 30=My Test Patch 30 [2=My Bank2] 1=My Test Patch 1(bank2) 2=My Test Patch 2(bank2) 30=My Test Patch 30(bank3)
The ten sliders up top are by default set to MIDI Controller number 1-10 though they can be changed to whatever one wishes to use. The controller numbers and values of each slider are set per channel, so one may use different settings and values for each channel. By default there are 128 banks and for each bank 128 patches defaulting to General Midi names. The MIDI bank standard uses 14-bit resolution to support 16384 possible banks, but the bank numbers by default are 0-127. To use values higher than 127, one should use a custom keyboard map and set the desired bank number value for the bank name. The virtual keyboard will correctly transmit the bank number as MSB and LSB with controller numbers 0 and 32. Beyond the input available from interacting with the GUI via mouse, one may also trigger off MIDI notes by using the ASCII keyboard when the virtual keyboard window is focused. The layout is done much like a tracker and offers two octaves and a major third to trigger, starting from Middle-C (MIDI note 60). The ASCII keyboard MIDI note values are given in the following table.
Keyboard Key b h n j m q 2 w 3 e r 5 t 6 y 7 u i 9 o 0 p
MIDI Value 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
Here's an example of usage of the virtual MIDI keyboard. It uses the file virtual.csd [examples/virtual.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in Virtual MIDI -M0 is needed anyway -odac -iadc -+rtmidi=virtual -M0 </CsOptions> <CsInstruments> ; By Mark Jamerson 2007 sr=44100 ksmps=10 nchnls=2 massign 1,1 prealloc 1,10 instr 1 ;Midi FM synth
inote cpsmidi iveloc ampmidi 10000 idur = 2 xtratim 1 kgate oscil 1,10,2 anoise noise 100*inote,.99 acps samphold anoise,kgate aosc oscili 1000,acps,1 aout = aosc ; Use controller 7 to control volume
141
kvol ctrl7 1, 7, 0.2, 1 outs kvol * aout, kvol * aout endin </CsInstruments> <CsScore> f0 3600 f1 0 1024 10 1 f2 0 16 7 1 8 0 8 f3 0 1024 10 1 .5 .6 .3 .2 .5 e </CsScore> </CsoundSynthesizer>
MIDI input
The following opcodes can recieve MIDI information: MIDI information for any instruments: aftouch, chanctrl and polyaft, pchbend. MIDI information for MIDI-triggered instruments: veloc , midictrl and notnum. See also Converters. MIDI Controller input for any instrument: ctrl7, ctrl14 and ctrl21. MIDI Controller input for MIDI-triggered instruments only: midic7, midic14 and midic21. MIDI controller value initialization: initc7, initc14, initc21 and ctrlinit. massign can be used to specify the csound instrument to be triggered by a particular MIDI channel. pgmassign can be use to assign a csound instrument to a specific MIDI program.
Converters
The following opcodes can convert MIDI information from a MIDI-triggered instrument instance: MIDI note number to frequency converters: cpsmidi, cpsmidib, cpstmid, octmidi, octmidib, pchmidi and pchmidib. MIDI velocity to amplitude converters: ampmidi and ampmidid.
Event Extenders
Opcodes that let one extend the duration of an event are: release xtratim
Note-on/Note-off Output
Opcodes to output MIDI note on or off messages are: midion midion2 moscil noteoff noteon noteondur noteondur2
and score events: midichannelaftertouch midichn midicontrolchange mididefault midinoteoff midinoteoncps midinoteonkey midinoteonoct midinoteonpch midipitchbend midipolyaftertouch midiprogramchange.
; Ensures that a MIDI-activated instrument ; will have a positive p3 field. mididefault 60, p3 ; Puts MIDI key translated to cycles per ; second into p4, and MIDI velocity into p5 midinoteoncps p4, p5
Obviously, midinoteoncps could be changed to midinoteonoct or any of the other options, and the choice of p-fields is arbitrary.
144
Slider Banks
Opcodes for slider banks of MIDI controls are: slider8 slider8f slider16 slider16f slider32 slider32f slider64 slider64f s16b14 s32b14 sliderKawai Opcodes for storing slider banks of MIDI controls to tables are: slider8table slider8tablef slider16table slider16tablef slider32table slider32tablef slider64table slider64tablef
145
Spectral Processing
See the section Additive Synthesis/Resynthesis for the basic resynthesis opcodes.
Spectral Processing
1. Support for the new PVOC-EX analysis file format. This is a fully portable (cross-platform) open file format, supporting three analysis formats, and multi-channel signals. Currently only the standard amplitude+frequency format has been implemented in the opcodes, but the file format itself supports amplitude+phase and complex (real-imaginary) formats. In addition to the new opcodes, the original Csound pvoc opcodes have been extended (and thereby with enhanced audio quality in some cases) to read PVOC-EX files as well as the original (non-portable) format. Full details of the structure of a PVOC-EX file are available via the website: http://www.cs.bath.ac.uk/~jpff/NOS-DREAM/researchdev/pvocex/pvocex.html. This site also gives details of the freely available console programs pvocex and pvocex2 which can be used to create PVOC-EX files in all supported formats. 147
Spectral Processing
2. A new frequency-domain signal type, fully streamable, with f as the leading character. In this document it is conveniently referred to as an fsig. Primary support for fsigs is provided by the opcodes pvsanal and pvsynth, which perform conventional phase vocoder overlap-add analysis and resynthesis, independently of the orchestra control-rate. The only requirement is that the control-rate kr be higher than or equal to the analysis rate, whch can be expressed by the requirement that ksmps <= overlap, where overlap is the distance in samples between analysis frames, as specified for pvsanal. As overlap is typically at least 128, and more usually 256, this is not an onerous restriction in practice. The opcode pvsinfo can be used at init time to acquire the properties of an fsig. The fsig enables the nominal separation between the analysis and resynthesis stages of the phase vocoder to be exposed to the Csound programmer, so that not only can alternatives be employed for either or both of these stages (not only oscillator-bank resynthesis, but also the generation of synthetic fsig streams), but opcodes, operating on the fsig stream, can themselves become more elemental. Thus the fsig enables the creation of a true streaming plugin framework for frequency domain signals. With the old pvoc opcodes, each opcode is required to act as a resynthesiser, so that facilities such as pitch scaling are duplicated in each opcode; and in many cases the opcodes are parameterrich. The separation of analysis and synthesis stages by means of the fsig encourages the development of a wide range of simple building-block opcodes implementing one or two functions, with which more elaborate processes can be constructed. This is very much a preliminary and experimental release, and it is possible that the precise definition of the opcodes may change, in response to user feedback. Also, clearly, many new possibilities for opcodes are opened up; these factors may also have a retrospective influence on the opcodes presented here. Note that some opcode parameters currently have restricted or missing implementation. This is at least in part in order to keep the opcodes simple at this stage, and also because they highlight important design issues on which no decision has yet been made, and on which opinions from users are sought. One important point about the new signal type is that because the analysis rate is typically much lower than kr, new analysis frames are not available on each k-cycle. Internally, the opcodes track ksmps, and also maintain a frame counter, so that frames are read and written at the correct times; this process is generally transparent to the user. However, it means that k-rate signals only act on an fsig at the analysis rate, not at each k-cycle. The opocde pvsftw returns a k-rate flag that is set when new fsig data is valid. Because of the nature of the overlap-add system, the use of these opcodes incurs a small but significant delay, or latency, determined by the window size (max(ifftsize,iwinsize)). This is typically around 23msecs. In this first release, the delay is slightly in excess of the theoretical minimum, and it is hoped that it can be reduced, as the opcodes are further optimized for real-time streaming. The opcodes for real-time spectral processing are pvsadsyn, pvsanal, pvscross, pvsfread, pvsftr, pvsftw, pvsinfo, pvsmaska, and pvsynth. In addition there are a number of opcodes available as plugins in Csound5. These are pvstanal, pvsdiskin, pvscent, pvsdemix, pvsfreeze, pvsbuffer, pvsbufread, pvscale, pvshift, pvsifd, pvsinit, pvsin, pvsout, pvsosc, pvsbin, pvsdisp, pvsfwrite, pvslock, pvsmix, pvsmooth, pvsfilter, pvsblur, pvstencil, pvsarp, pvsvoc, pvsmorph pvsbandp pvsbandr A number of opcodes are designed to generate and process streaming partials tracks data. these are partials, trcross, trfilter, trsplit, trmix, trscale, trshift, trlowest, trhighest tradsyn, sinsyn, resyn, binit See the Stacks section for information on the stack opcodes which can stack f-signals.
Spectral Processing
"ATS is a software library of functions for spectral Analysis, Transformation, and Synthesis of sound based on a sinusoidal plus critical-band noise model. A sound in ATS is a symbolic object representing a spectral model that can be sculpted using a variety of transformation functions." For more information on ATS visit: http://www-ccrma.stanford.edu/~juan/ATS.html. ATS analysis files can be produced using the ATS software or the csound utility ATSA. The opcodes for ATS processing are: ATSinfo: reads data out of the header of an ATS file. ATSread, ATSreadnz, ATSbufread, ATSinterpread, ATSpartialtap: read data from an ATS file or buffer. ATSadd, ATSaddnz, ATScross, ATSsinnoi: Resynthesize sound.
Credits
Author: Alex Norman Seattle,Washington 2004
Loris Opcodes
Note
These opcodes are an optional component of Csound5. You can check if they are installed by using the command 'csound -z' which lists all available opcodes. The Loris family of opcodes wraps: lorisread which imports a set of bandwidth-enhanced partials from a SDIF-format data file, applying control-rate frequency, amplitude, and bandwidth scaling envelopes, and stores the modified partials in memory; lorismorph, which morphs two stored sets of bandwidth-enhanced partials and stores a new set of partials representing the morphed sound. The morph is performed by linearly interpolating the parameter envelopes (frequency, amplitude, and bandwidth, or noisiness) of the bandwidth-enhanced partials according to control-rate frequency, amplitude, and bandwidth morphing functions, and lorisplay, which renders a stored set of bandwidth-enhanced partials using the method of Bandwidth-Enhanced Additive Synthesis implemented in the Loris software, applying control-rate frequency, amplitude, and bandwidth scaling envelopes. For more information about sound morphing and manipulation using Loris and the Reassigned Bandwidth-Enhanced Additive Model, visit the Loris web site at www.cerlsoundgroup.org/Loris [http://www.cerlsoundgroup.org/Loris].
Examples
Example 3. Play the partials wihtout modification
; ; Play the partials in clarinet.sdif ; from 0 to 3 sec with 1 ms fadetime
149
Spectral Processing
; and no frequency , amplitude, or ; bandwidth modification. ; instr 1 ktime linseg 0, p3, 3.0 ; linear time function from 0 to 3 seconds lorisread ktime, "clarinet.sdif", 1, 1, 1, 1, .001 asig lorisplay 1, 1, 1, 1 out asig endin
The instrument in the first example synthesizes a clarinet tone from beginning to end using partials derived from reassigned bandwidth-enhanced analysis of a three-second clarinet tone, stored in a file, clarinet.sdif. The instrument in Example 2 adds tuning and vibrato to the clarinet tone synthesized by instr 1, boosts its amplitde and noisiness, and applies a highpass filter to the result. The following score can be used to test both of the instruments described above.
; make sinusoid in table 1 f 1 0 4096 10 1 ; ; i i i s ; ; i i i i e play instr 1 strt dur 1 0 3 1 + 1 1 + 6 play instr 2 strt dur 2 1 3 2 3.5 1 2 4 6 2 4 6
150
Spectral Processing
; partials in flute.sdif over the duration of ; the sustained portion of the two tones (from ; .2 to 2.0 seconds in the clarinet, and from ; .5 to 2.1 seconds in the flute). The onset ; and decay portions in the morphed sound are ; specified by parameters p4 and p5, respectively. ; The morphing time is the time between the ; onset and the decay. The clarinet partials are ; shfited in pitch to match the pitch of the flute ; tone (D above middle C). ; instr 1 ionset = p4 idecay = p5 itmorph = p3 - (ionset + idecay) ipshift = cpspch(8.02)/cpspch(8.08) ; clarinet time function, morph from .2 to 2.0 seconds ktcl linseg 0, ionset, .2, itmorph, 2.0, idecay, 2.1 ; flute time function, morph from .5 to 2.1 seconds ktfl linseg 0, ionset, .5, itmorph, 2.1, idecay, 2.3 kmurph linseg 0, ionset, 0, itmorph, 1, idecay, 1 lorisread ktcl, "clarinet.sdif", 1, ipshift, 2, 1, .001 lorisread ktfl, "flute.sdif", 2, 1, 1, 1, .001 lorismorph 1, 2, 3, kmurph, kmurph, kmurph asig lorisplay 3, 1, 1, 1 out asig endin
asig endin
The instrument in the first morphing example performs a sound morph between a clarinet tone and a flute tone using reassigned bandwidth-enhanced partials stored in clarinet.sdif and flute.sdif. The morph is performed over the sustain portions of the tones, 2. seconds to 2.0 seconds in the case of the clarinet tone and .5 seconds to 2.1 seconds in the case of the flute tone. The time index functions, ktcl and ktfl, align the onset and decay portions of the tones with the specified onset and decay times for the morphed sound, specified by parameters p4 and p5, respectively. The onset in the morphed sounds is 151
Spectral Processing
purely clarinet partial data, and the decay is purely flute data. The clarinet partials are shifted in pitch to match the pitch of the flute tone (D above middle C). The instrument in the second morphing example performs a sound morph between a flutter-tongued trombone tone and a cat's meow using reassigned bandwidth-enhanced partials stored in trombone.sdif and meow.sdif. The data in these SDIF files have been channelized and distilled to establish correspondences between partials. The two sets of partials are imported and stored in memory locations labeled 1 and 2, respectively. Both of the original sounds have four notes, and the morph is performed over the second note in each sound (from .75 to 1.2 seconds in the flutter-tongued trombone tone, and from 1.7 to 2.2 seconds in the cat's meow). The different time index functions, kttbn and ktmeow, align those segments of the source and target partial sets with the specified morph start, morph end, and overall duration parameters. Two different morphing functions are used, so that the partial ammplitudes and bandwidth coefficients morph quickly from the trombone values to the cat's-meow values, and the frequencies make a more gradual transition. The morphed partials are stored in a memory location labeled 3 and rendered by the subsequent lorisplay instruction. They could also have been used as a source for another morph in a threeway morphing instrument. The following score can be used to test both of the instruments described above.
; ; i i i s play instr 1 strt dur 1 0 3 1 + 1 1 + 6
morph_start .75
morph_end 2.75
Credits
This implementation of the Loris unit generators was written by Kelly Fitz ([email protected] [mailto:[email protected]]). It is patterned after a prototype implementation of the lorisplay unit generator written by Corbin Champion, and based on the method of Bandwidth-Enhanced Additive Synthesis and on the sound morphing algorithms implemented in the Loris library for sound modeling and manipulation. The opcodes were further adapted as a plugin for Csound 5 by Michael Gogins.
152
Strings
String variables are variables with a name starting with S or gS (for a local or global string variable, respectively), and can store any string with a maximum length defined by the +max_str_len command line flag (255 characters by default). These variables can be used as input argument to any opcode that exepcts a quoted string constant, and can be manipulated at initialization or performance time with the opcodes listed below. It is also possible to use string p-fields. The string p-field can be used by many orchestra opcodes directly, or it can be copied to a string variable first:
a1 diskin2 p5, 1
Strings within Csound can be expressed using traditional double quotes (" "), an also using {{ }}. The second method is useful to allow ';' and '$' characters within the string without having to used ASCII codes.
Note
String variables and related opcodes are not available in Csound versions older than 5.00. Strings can also be linked to a number using strset and strget. Csound 5 also has improvements in parsing string constants. It is possible to specify a multiline string by enclosing it within {{ and }} instead of the usual double quote characters (note that the length of string constants is not limited, and is not affected by the -+max_str_len option), and the following escape sequences are automatically converted: \a alert bell \b backspace \n new line \r carriage return \t tab \\ a single '\' character \nnn the character of which the ASCII code (in octal) is nnn It can be useful together with the system opcode:
instr 1 ; csound5 lets you make a string with line returns inside double brackets system {{ ps date cd ~/Desktop pwd ls -l
153
Strings
154
Strings
strlower and strlowerk - Converts a string to lower case. strupper and strupperk - Converts a string to upper case.
155
Vectorial Opcodes
The vectorial opcode family is designed to allow sections of f-tables to be treated as vectors for diverse operations on them.
Vectorial Opcodes
Vectorial Opcodes
The opcodes to generate vectors containing envelopes are vlinseg and vexpseg. These opcodes are similar to linseg and expseg, but operate with vectorial signals instead of with scalar signals. Output is a vector hosted by an f-table (that must be previously allocated), while each break-point of the envelope is actually a vector of values. All break-points must contain the same number of elements (ielements). These operators are designed to be used together with other opcodes that operate with vectorial signals such as vcella, adsynt, adsynt2, etc.
158
Vectorial Opcodes
159
160
Plugin Hosting
Csound currently hosts external plugins using dssi4cs (for LADSPA plugins) on Linux and vst4cs (for VST plugins) on Windows and Mac OS X.
Note
Currently only LADSPA plugins are supported, but DSSI support is planned.
161
Plugin Hosting
Credits
By: Andres Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
162
Credits
By: John ffitch with the liblo library as inspiration and support.
Network
The following opcodes can stream or receive audio through UDP: sockrecv socksend
Remote Opcodes
The Remote opcodes enable transmission of score or MIDI events through a network, so remote instances (or a different local instance) can process them. The following opcodes are available: insglobal - Used to implement a remote orchestra. insremot - Used to implement a remote orchestra. midiglobal - Used to implement a remote MIDI orchestra. midiremot - Used to implement a remote MIDI orchestra. remoteport - Defines the port for use with the remote system.
163
Mixer Opcodes
The Mixer family of opcodes provides a global mixer for Csound. The Mixer opcodes include MixerSend for sending (that is, mixing in) an arate signal from any instrument to a channel of a mixer buss, MixerReceive for receiving an arate signal from a channel of any mixer buss in any instrument, MixerSetLevel (krate) and MixerSetLevel_i (irate) for controlling the level of the signal sent from a particular send to a particular buss, MixerGetLevel for reading (at krate) the level for sending a signal from a particular send to a particular buss, and MixerClear for resetting the busses to zero before the next kperiod of a performance.
164
Example
Here is an example of the signal flow graph opcodes. It uses the file signalflowgraph.csd [examples/signalflowgraph.csd].
165
; For Non-realtime ouput leave only the line below: ; -o madsr.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> /* Written by Michael Gogins */ ; Initialize the global variables. sr = 44100 ksmps = 100 nchnls = 2 ; Connect up the instruments to create a signal flow graph. connect "SimpleSine", connect "SimpleSine", connect "Moogy", connect "Moogy", "leftout", "rightout", "leftout", "rightout", "Reverberator", "Reverberator", "Reverberator", "Reverberator", "Compressor", "Compressor", "Soundfile", "Soundfile", "leftin" "rightin" "leftin" "rightin" "leftin" "rightin" "leftin" "rightin"
connect "Reverberator", "leftout", connect "Reverberator", "rightout", connect "Compressor", connect "Compressor", "leftout", "rightout",
; Turn on the "effect" units in the signal flow graph. alwayson "Reverberator", 0.91, 12000 alwayson "Compressor" alwayson "Soundfile" instr SimpleSine ihz = cpsmidinn(p4) iamplitude = ampdb(p5) print ihz, iamplitude ; Use ftgenonce instead of ftgen, ftgentmp, or f statement. isine ftgenonce 0, 0, 4096, 10, 1 a1 oscili iamplitude, ihz, isine aenv madsr 0.05, 0.1, 0.5, 0.2 asignal = a1 * aenv ; Stereo audio outlet to be routed in the orchestra header. outleta "leftout", asignal * 0.25 outleta "rightout", asignal * 0.75 endin instr Moogy ihz = cpsmidinn(p4) iamplitude = ampdb(p5) ; Use ftgenonce instead of ftgen, ftgentmp, or f statement. isine ftgenonce 0, 0, 4096, 10, 1 asignal vco iamplitude, ihz, 1, 0.5, isine kfco line 200, p3, 2000 krez init 0.9 asignal moogvcf asignal, kfco, krez, 100000 ; Stereo audio outlet to be routed in the orchestra header. outleta "leftout", asignal * 0.75 outleta "rightout", asignal * 0.25 endin instr Reverberator ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" idelay = p4 icutoff = p5 aleftout, arightout reverbsc aleftin, arightin, idelay, icutoff ; Stereo output. outleta "leftout", aleftout outleta "rightout", arightout endin instr Compressor ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" kthreshold = 25000 icomp1 = 0.5 icomp2 = 0.763 irtime = 0.1 iftime = 0.1 aleftout dam aleftin, kthreshold, icomp1, icomp2, irtime, iftime
166
arightout dam arightin, kthreshold, icomp1, icomp2, irtime, iftime ; Stereo output. outleta "leftout", aleftout outleta "rightout", arightout endin instr Soundfile ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" outs aleftin, arightin endin </CsInstruments> <CsScore> ; Not necessary to activate "effects" or create f-tables in the score! ; Overlapping notes to create new instances of instruments. i "SimpleSine" 1 5 60 85 i "SimpleSine" 2 5 64 80 i "Moogy" 3 5 67 75 i "Moogy" 4 5 71 70 e 1 </CsScore> </CsoundSynthesizer>
167
Jacko Opcodes
These opcodes enable the use of Jack ports from within Csound orchestras and instruments. Ports can receive or send audio or MIDI data, and send note data. The Jacko opcodes do not replace the Jack driver and Jack command-line options for Csound, nor do the Jacko opcodes work with them (hence the name "Jacko" instead of "Jack"). The Jacko opcodes are an independent facility that offers greater flexibility in signal routing. In addition, the Jacko opcodes can work with the Jack system in "freewheeling" mode, which enables the use of Jack-enabled external synthesizers, such as Aeolus or Pianoteq, to render Csound pieces either faster or, even more importantly, slower than real time. This is extremely useful for rendering complex pieces without dropouts using instruments, such as Aeolus, that may not be available except through Jack. The Jacko opcodes include: JackoInit, for initializing the current instance of Csound as a Jack client. JackoInfo, for printing information about the Jack daemon, its clients, their ports, and their connections. JackoFreewheel, for turning Jack's freewheeling mode on or off. JackoAudioInConnect, for creating a connection from an external Jack audio output port to a Jack port in Csound. JackoAudioOutConnect, for creating a connection from a Jack port in Csound to an external Jack audio input port. JackoMidiInConnect, for creating a connection from an external Jack MIDI port. MIDI events from Jack are received by Csound's regular MIDI opcodes and MIDI interop system. JackoMidiOutConnect, for creating a connection from a Jack port in Csound to an external Jack MIDI input port. JackoOn, for turning Jack ports in Csound on or off. JackoAudioIn, for receiving audio from a Jack input port in Csound, which in turn has received the audio from its connected external port. JackoAudioOut, for sending audio to a Jack output port in Csound, which in turn will send the audio on to its connected external port. JackoMidiOut, for sending MIDI channel messages to a Jack output port in Csound, which in turn will send the MIDI on to its connected external port. JackoNoteOut, for sending a note (with duration) to a Jack output port in Csound, which in turn will send the note on to its connected external port. JackoTransport, for controlling the Jack transport. A typical scenario for the use of the Jacko opcodes would be something like this.
Example
Here is an example of the Jacko opcodes. It uses the file jacko.csd [examples/jacko.csd].
168
Jacko Opcodes
JackoInit ; ; ; ;
"default", "csound"
To use ALSA midi ports, use "jackd -Xseq" and use "jack_lsp -A -c" or aliases from JackInfo, probably together with information from the sequencer, to figure out the damn port names. "alsa_pcm:in-131-0-Master", "midiin" "aeolus:out.L", "leftin" "aeolus:out.R", "rightin" "midiout", "aeolus:Midi/in"
; Note that Jack enables audio to be output to a regular ; Csound soundfile and, at the same time, to a sound ; card in real time to the system client via Jack. JackoAudioOutConnect "leftout", "system:playback_1" JackoAudioOutConnect "rightout", "system:playback_2" JackoInfo ; Turning freewheeling on seems automatically ; to turn system playback off. This is good! JackoFreewheel 1 JackoOn alwayson "jackin"
instr 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; = p1 - 1 = p2 = p3 = p4 = p5 JackoNoteOut "midiout", ichannel, ikey, ivelocity print itime, iduration, ichannel, ikey, ivelocity endin instr jackin ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; JackoTransport 3, 1.0 JackoAudioIn "leftin" JackoAudioIn "rightin" ; ; ; ; ; ; ; Aeolus uses MIDI controller 98 to control stops. Only 1 data value byte is used, not the 2 data bytes often used with NRPNs. The format for control mode is 01mm0ggg: mm 10 to set stops, 0, ggg group (or Division, 0 based). The format for stop selection is 000bbbbb: bbbbb for button number (0 based).
aleft aright
; Mode to enable stops for Divison I: b1100010 (98 ; [this controller VALUE is a pure coincidence]). JackoMidiOut "midiout", 176, 0, 98, 98
; Stops: Principal 8 (0), Principal 4 (1) , Flote 8 (8) , Flote 2 (10) JackoMidiOut JackoMidiOut JackoMidiOut JackoMidiOut ; ; ; ; ; "midiout", "midiout", "midiout", "midiout", 176, 176, 176, 176, 0, 0, 0, 0, 98, 98, 98, 98, 0 1 8 10
Sends audio coming in from Aeolus out not only to the Jack system out (sound card), but also to the output soundfile. Note that in freewheeling mode, "leftout" and "rightout" simply go silent. "leftout", aleft "rightout", aright aright, aleft
169
Jacko Opcodes
i 1 2 30 64 60 i 1 3 30 71 60 e 2 </CsScore> </CsoundSynthesizer>
Credits
By: Michael Gogins 2010
170
Python Opcodes
Introduction
Using the Python opcode family, you can interact with a Python interpreter embedded in Csound in five ways: 1. Initialize the Python interpreter (the pyinit opcodes), 2. Run a statement (the pyrun opcodes), 3. Execute a script (the pyexec opcodes), 4. Invoke a callable and pass arguments (the pycall opcodes), 5. Evaluate an expression (the pyeval opcodes), or 6. Change the value of a Python object, possibly creating a new Python object (the pyassign opcodes); and you can do any of these things: 1. At i-time or at k-time, 2. In the global Python namespace, or in a namespace specific to an individual instance of a Csound instrument (local or "l" context), 3. And can you can retrieve from 0 to 8 return values from callables that accept N parameters. ...this means that there are many Python-related opcodes. But all of these opcodes share the same py prefix, and have a regular naming scheme:
"py" + [optional context prefix] + [action name] + [optional x-time suffix]
Orchestra Syntax
Blocks of Python code, and indeed entire scripts, can be embedded in Csound orchestras using the {{ and }} directives to enclose the script, as follows:
sr=44100 kr=4410 ksmps=10 nchnls=1 pyinit giSinusoid ftgen 0, 0, 8192, 10, 1 pyruni {{ import random pool = [(1 + i/10.0) ** 1.2 for i in range(100)] def get_number_from_pool(n, p):
171
Python Opcodes
if random.random() < p: i = int(random.random() * len(pool)) pool[i] = n return random.choice(pool) }} instr 1 k1 oscil 1, 3, giSinusoid k2 pycall1 "get_number_from_pool", k1 + 2, p4 printk 0.01, k2 endin
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins.
172
173
Miscellaneous opcodes
Here is a list of opcodes that don't fall in any category: system - Call an external program via the system call. modmatrix - modulation matrix opcode with optimizations for sparse matrices.
174
Table of Contents
Orchestra Opcodes and Operators ............................................................................... != ......................................................................................................... #define .................................................................................................. #include ................................................................................................ #undef .................................................................................................. #ifdef .................................................................................................... #ifndef .................................................................................................. $NAME ................................................................................................ % ......................................................................................................... && ...................................................................................................... > .......................................................................................................... >= ........................................................................................................ < .......................................................................................................... <= ........................................................................................................ * .......................................................................................................... + .......................................................................................................... - ........................................................................................................... / ........................................................................................................... = .......................................................................................................... == ........................................................................................................ ^ .......................................................................................................... || .......................................................................................................... 0dbfs .................................................................................................... << ........................................................................................................ >> ........................................................................................................ & ......................................................................................................... | ........................................................................................................... .......................................................................................................... # .......................................................................................................... a .......................................................................................................... abetarand ............................................................................................... abexprnd ............................................................................................... abs ....................................................................................................... acauchy ................................................................................................. active .................................................................................................... adsr ...................................................................................................... adsyn .................................................................................................... adsynt ................................................................................................... adsynt2 ................................................................................................. aexprand ............................................................................................... aftouch .................................................................................................. agauss ................................................................................................... agogobel ............................................................................................... alinrand ................................................................................................. alpass .................................................................................................... alwayson ............................................................................................... ampdb ................................................................................................... ampdbfs ................................................................................................ ampmidi ................................................................................................ ampmidid .............................................................................................. apcauchy ............................................................................................... apoisson ................................................................................................ apow .................................................................................................... 176 199 200 202 206 208 209 211 212 215 217 218 220 222 224 226 228 230 232 234 236 238 240 242 245 247 248 250 251 252 253 255 256 257 259 260 264 267 269 272 275 276 278 279 280 281 283 286 288 290 292 294 295 296
Reference
areson ................................................................................................... aresonk ................................................................................................. atone .................................................................................................... atonek ................................................................................................... atonex ................................................................................................... atrirand ................................................................................................. ATSadd ................................................................................................. ATSaddnz ............................................................................................. ATSbufread ........................................................................................... ATScross ............................................................................................... ATSinfo ................................................................................................ ATSinterpread ........................................................................................ ATSread ................................................................................................ ATSreadnz ............................................................................................ ATSpartialtap ......................................................................................... ATSsinnoi ............................................................................................. aunirand ................................................................................................ aweibull ................................................................................................ babo ..................................................................................................... balance ................................................................................................. bamboo ................................................................................................. barmodel ............................................................................................... bbcutm .................................................................................................. bbcuts ................................................................................................... betarand ................................................................................................ bexprnd ................................................................................................. bformenc ............................................................................................... bformenc1 ............................................................................................. bformdec ............................................................................................... bformdec1 ............................................................................................. binit ...................................................................................................... biquad ................................................................................................... biquada ................................................................................................. birnd ..................................................................................................... bqrez .................................................................................................... butbp .................................................................................................... butbr ..................................................................................................... buthp .................................................................................................... butlp ..................................................................................................... butterbp ................................................................................................. butterbr ................................................................................................. butterhp ................................................................................................. butterlp ................................................................................................. button ................................................................................................... buzz ..................................................................................................... cabasa ................................................................................................... cauchy .................................................................................................. ceil ....................................................................................................... cent ...................................................................................................... cggoto ................................................................................................... chanctrl ................................................................................................. changed ................................................................................................. chani .................................................................................................... chano .................................................................................................... chebyshevpoly ........................................................................................ checkbox ............................................................................................... chn ....................................................................................................... chnclear ................................................................................................ 177
297 299 301 303 305 307 308 311 313 315 318 321 323 325 328 330 332 333 334 338 340 342 344 349 352 355 357 359 361 363 365 367 371 372 374 376 377 378 379 380 382 384 386 388 389 391 393 395 397 399 401 403 405 406 407 410 412 414
Reference
chnexport .............................................................................................. chnget ................................................................................................... chnmix .................................................................................................. chnparams ............................................................................................. chnrecv ................................................................................................. chnsend ................................................................................................. chnset ................................................................................................... chuap .................................................................................................... cigoto ................................................................................................... ckgoto ................................................................................................... clear ..................................................................................................... clfilt ..................................................................................................... clip ....................................................................................................... clock .................................................................................................... clockoff ................................................................................................. clockon ................................................................................................. cngoto ................................................................................................... comb .................................................................................................... compress ............................................................................................... connect ................................................................................................. control .................................................................................................. convle ................................................................................................... convolve ............................................................................................... cos ....................................................................................................... cosh ...................................................................................................... cosinv ................................................................................................... cps2pch ................................................................................................. cpsmidi ................................................................................................. cpsmidib ............................................................................................... cpsmidinn .............................................................................................. cpsoct ................................................................................................... cpspch .................................................................................................. cpstmid ................................................................................................. cpstun ................................................................................................... cpstuni .................................................................................................. cpsxpch ................................................................................................. cpuprc ................................................................................................... cross2 ................................................................................................... crossfm ................................................................................................. crunch ................................................................................................... ctrl14 .................................................................................................... ctrl21 .................................................................................................... ctrl7 ...................................................................................................... ctrlinit ................................................................................................... cuserrnd ................................................................................................ dam ...................................................................................................... date ...................................................................................................... dates ..................................................................................................... db ........................................................................................................ dbamp ................................................................................................... dbfsamp ................................................................................................ dcblock ................................................................................................. dcblock2 ............................................................................................... dconv .................................................................................................... delay .................................................................................................... delay1 ................................................................................................... delayk ................................................................................................... delayr ................................................................................................... 178
415 417 419 420 421 423 425 427 431 433 435 437 440 443 444 446 448 450 452 454 457 458 459 463 465 467 469 473 475 477 481 484 487 490 493 496 500 503 505 508 510 512 514 516 517 519 522 524 526 528 530 532 534 536 538 540 542 544
Reference
delayw .................................................................................................. deltap .................................................................................................... deltap3 .................................................................................................. deltapi ................................................................................................... deltapn .................................................................................................. deltapx .................................................................................................. deltapxw ............................................................................................... denorm ................................................................................................. diff ....................................................................................................... diskgrain ............................................................................................... diskin .................................................................................................... diskin2 .................................................................................................. dispfft ................................................................................................... display .................................................................................................. distort ................................................................................................... distort1 ................................................................................................. divz ...................................................................................................... doppler ................................................................................................. downsamp ............................................................................................. dripwater ............................................................................................... dssiactivate ............................................................................................ dssiaudio ............................................................................................... dssictls .................................................................................................. dssiinit .................................................................................................. dssilist .................................................................................................. dumpk .................................................................................................. dumpk2 ................................................................................................. dumpk3 ................................................................................................. dumpk4 ................................................................................................. duserrnd ................................................................................................ else ...................................................................................................... elseif .................................................................................................... endif ..................................................................................................... endin .................................................................................................... endop .................................................................................................... envlpx ................................................................................................... envlpxr ................................................................................................. ephasor ................................................................................................. eqfil ...................................................................................................... event .................................................................................................... event_i .................................................................................................. exitnow ................................................................................................. exp ....................................................................................................... expcurve ............................................................................................... expon .................................................................................................... exprand ................................................................................................. expseg .................................................................................................. expsega ................................................................................................. expsegr ................................................................................................. fareylen ................................................................................................. fareyleni ................................................................................................ ficlose ................................................................................................... filebit .................................................................................................... filelen ................................................................................................... filenchnls ............................................................................................... filepeak ................................................................................................. filesr ..................................................................................................... filevalid ................................................................................................. 179
546 548 551 554 557 559 561 564 566 568 571 574 578 580 582 584 586 588 590 592 594 596 598 600 602 604 606 608 610 612 614 616 618 620 622 625 628 630 631 633 636 638 639 641 643 645 647 649 651 653 655 657 659 661 663 665 667 669
Reference
filter2 .................................................................................................... fin ........................................................................................................ fini ....................................................................................................... fink ...................................................................................................... fiopen ................................................................................................... flanger .................................................................................................. flashtxt .................................................................................................. FLbox ................................................................................................... FLbutBank ............................................................................................ FLbutton ............................................................................................... FLcloseButton ........................................................................................ FLcolor ................................................................................................. FLcolor2 ............................................................................................... FLcount ................................................................................................ FLexecButton ......................................................................................... FLgetsnap .............................................................................................. FLgroup ................................................................................................ FLgroupEnd ........................................................................................... FLgroup_end .......................................................................................... FLhide .................................................................................................. FLhvsBox .............................................................................................. FLhvsBoxSetValue ................................................................................. FLjoy .................................................................................................... FLkeyIn ................................................................................................ FLknob ................................................................................................. FLlabel ................................................................................................. FLloadsnap ............................................................................................ FLmouse ............................................................................................... flooper .................................................................................................. flooper2 ................................................................................................ floor ..................................................................................................... FLpack ................................................................................................. FLpackEnd ............................................................................................ FLpack_end ........................................................................................... FLpanel ................................................................................................. FLpanelEnd ........................................................................................... FLpanel_end .......................................................................................... FLprintk ................................................................................................ FLprintk2 .............................................................................................. FLroller ................................................................................................. FLrun ................................................................................................... FLsavesnap ............................................................................................ FLscroll ................................................................................................ FLscrollEnd ........................................................................................... FLscroll_end .......................................................................................... FLsetAlign ............................................................................................ FLsetBox ............................................................................................... FLsetColor ............................................................................................ FLsetColor2 ........................................................................................... FLsetFont .............................................................................................. FLsetPosition ......................................................................................... FLsetSize .............................................................................................. FLsetsnap .............................................................................................. FLsetSnapGroup ..................................................................................... FLsetText .............................................................................................. FLsetTextColor ...................................................................................... FLsetTextSize ........................................................................................ FLsetTextType ....................................................................................... 180
671 673 675 677 678 680 682 684 689 692 697 700 702 703 706 709 710 712 713 714 715 716 717 720 722 727 729 730 732 734 736 738 741 742 743 746 747 748 749 750 753 754 759 762 763 764 765 767 769 770 772 773 774 776 777 779 780 781
Reference
FLsetVal_i ............................................................................................. FLsetVal ............................................................................................... FLshow ................................................................................................. FLslidBnk ............................................................................................. FLslidBnk2 ............................................................................................ FLslidBnkGetHandle ............................................................................... FLslidBnkSet ......................................................................................... FLslidBnkSetk ....................................................................................... FLslidBnk2Set ....................................................................................... FLslidBnk2Setk ...................................................................................... FLslider ................................................................................................ FLtabs .................................................................................................. FLtabsEnd ............................................................................................. FLtabs_end ............................................................................................ FLtext ................................................................................................... FLupdate ............................................................................................... fluidAllOut ............................................................................................ fluidCCi ................................................................................................ fluidCCk ............................................................................................... fluidControl ........................................................................................... fluidEngine ............................................................................................ fluidLoad ............................................................................................... fluidNote ............................................................................................... fluidOut ................................................................................................ fluidProgramSelect .................................................................................. fluidSetInterpMethod ............................................................................... FLvalue ................................................................................................. FLvkeybd .............................................................................................. FLvslidBnk ............................................................................................ FLvslidBnk2 .......................................................................................... FLxyin .................................................................................................. fmb3 ..................................................................................................... fmbell ................................................................................................... fmmetal ................................................................................................. fmpercfl ................................................................................................ fmrhode ................................................................................................ fmvoice ................................................................................................. fmwurlie ............................................................................................... fof ........................................................................................................ fof2 ...................................................................................................... fofilter .................................................................................................. fog ....................................................................................................... fold ...................................................................................................... follow ................................................................................................... follow2 ................................................................................................. foscil .................................................................................................... foscili ................................................................................................... fout ...................................................................................................... fouti ..................................................................................................... foutir .................................................................................................... foutk ..................................................................................................... fprintks ................................................................................................. fprints ................................................................................................... frac ...................................................................................................... freeverb ................................................................................................. ftchnls ................................................................................................... ftconv ................................................................................................... ftcps ..................................................................................................... 181
784 785 786 787 791 794 795 796 798 799 802 808 813 814 815 818 819 822 823 824 825 829 831 833 836 838 840 842 843 847 849 852 855 858 861 864 867 869 872 875 881 883 885 887 889 891 893 895 900 902 904 906 912 914 916 918 920 923
Reference
ftfree .................................................................................................... 925 ftgen ..................................................................................................... 926 ftgenonce ............................................................................................... 929 ftgentmp ................................................................................................ 930 ftlen ...................................................................................................... 932 ftload .................................................................................................... 934 ftloadk .................................................................................................. 935 ftlptim ................................................................................................... 936 ftmorf ................................................................................................... 938 ftsave .................................................................................................... 940 ftsavek .................................................................................................. 942 ftsr ....................................................................................................... 943 gain ...................................................................................................... 945 gainslider ............................................................................................... 947 gauss .................................................................................................... 949 gbuzz .................................................................................................... 951 getcfg ................................................................................................... 953 gogobel ................................................................................................. 954 goto ...................................................................................................... 956 grain ..................................................................................................... 958 grain2 ................................................................................................... 960 grain3 ................................................................................................... 964 granule .................................................................................................. 969 guiro ..................................................................................................... 972 harmon ................................................................................................. 974 harmon2 ................................................................................................ 977 hilbert ................................................................................................... 979 hrtfer .................................................................................................... 983 hrtfmove ............................................................................................... 985 hrtfmove2 .............................................................................................. 988 hrtfstat .................................................................................................. 991 hsboscil ................................................................................................. 994 hvs1 ..................................................................................................... 997 hvs2 .................................................................................................... 1001 hvs3 .................................................................................................... 1007 i .......................................................................................................... 1010 ibetarand .............................................................................................. 1011 ibexprnd ............................................................................................... 1012 icauchy ................................................................................................ 1013 ictrl14 .................................................................................................. 1014 ictrl21 .................................................................................................. 1015 ictrl7 .................................................................................................... 1016 iexprand ............................................................................................... 1017 if ......................................................................................................... 1018 igauss .................................................................................................. 1023 igoto .................................................................................................... 1024 ihold .................................................................................................... 1026 ilinrand ................................................................................................ 1028 imagecreate ........................................................................................... 1029 imagefree ............................................................................................. 1031 imagegetpixel ........................................................................................ 1033 imageload ............................................................................................. 1035 imagesave ............................................................................................. 1037 imagesetpixel ........................................................................................ 1039 imagesize ............................................................................................. 1041 imidic14 ............................................................................................... 1043 imidic21 ............................................................................................... 1044 imidic7 ................................................................................................ 1045 182
Reference
in ........................................................................................................ 1046 in32 ..................................................................................................... 1047 inch ..................................................................................................... 1048 inh ...................................................................................................... 1049 init ...................................................................................................... 1050 initc14 ................................................................................................. 1051 initc21 ................................................................................................. 1052 initc7 ................................................................................................... 1053 inleta ................................................................................................... 1054 inletk ................................................................................................... 1055 inletf .................................................................................................... 1056 ino ...................................................................................................... 1057 inq ...................................................................................................... 1058 inrg ..................................................................................................... 1059 ins ....................................................................................................... 1060 insremot ............................................................................................... 1061 insglobal .............................................................................................. 1063 instimek ............................................................................................... 1064 instimes ................................................................................................ 1065 instr ..................................................................................................... 1066 int ....................................................................................................... 1069 integ .................................................................................................... 1071 interp ................................................................................................... 1073 invalue ................................................................................................. 1076 inx ...................................................................................................... 1077 inz ....................................................................................................... 1078 ioff ...................................................................................................... 1079 ion ...................................................................................................... 1080 iondur .................................................................................................. 1081 iondur2 ................................................................................................ 1082 ioutat ................................................................................................... 1083 ioutc .................................................................................................... 1084 ioutc14 ................................................................................................. 1085 ioutpat ................................................................................................. 1086 ioutpb .................................................................................................. 1087 ioutpc .................................................................................................. 1088 ipcauchy ............................................................................................... 1089 ipoisson ................................................................................................ 1090 ipow .................................................................................................... 1091 is16b14 ................................................................................................ 1092 is32b14 ................................................................................................ 1093 islider16 ............................................................................................... 1094 islider32 ............................................................................................... 1095 islider64 ............................................................................................... 1096 islider8 ................................................................................................. 1097 itablecopy ............................................................................................. 1098 itablegpw .............................................................................................. 1099 itablemix .............................................................................................. 1100 itablew ................................................................................................. 1101 itrirand ................................................................................................. 1102 iunirand ................................................................................................ 1103 iweibull ................................................................................................ 1104 JackoAudioIn ........................................................................................ 1105 JackoAudioInConnect ............................................................................. 1106 JackoAudioOut ...................................................................................... 1107 JackoAudioOutConnect ........................................................................... 1108 JackoFreewheel ..................................................................................... 1109 JackoInfo .............................................................................................. 1110 183
Reference
JackoInit .............................................................................................. 1111 JackoMidiInConnect ............................................................................... 1112 JackoMidiOutConnect ............................................................................ 1113 JackoMidiOut ........................................................................................ 1114 JackoNoteOut ........................................................................................ 1115 JackoOn ............................................................................................... 1116 JackoTransport ...................................................................................... 1117 jacktransport ......................................................................................... 1118 jitter .................................................................................................... 1120 jitter2 ................................................................................................... 1122 jspline .................................................................................................. 1124 k ......................................................................................................... 1125 kbetarand .............................................................................................. 1126 kbexprnd .............................................................................................. 1127 kcauchy ................................................................................................ 1128 kdump ................................................................................................. 1129 kdump2 ................................................................................................ 1130 kdump3 ................................................................................................ 1131 kdump4 ................................................................................................ 1132 kexprand .............................................................................................. 1133 kfilter2 ................................................................................................. 1134 kgauss .................................................................................................. 1135 kgoto ................................................................................................... 1136 klinrand ................................................................................................ 1138 kon ...................................................................................................... 1139 koutat .................................................................................................. 1140 koutc ................................................................................................... 1141 koutc14 ................................................................................................ 1142 koutpat ................................................................................................. 1143 koutpb ................................................................................................. 1144 koutpc .................................................................................................. 1145 kpcauchy .............................................................................................. 1146 kpoisson ............................................................................................... 1147 kpow ................................................................................................... 1148 kr ........................................................................................................ 1149 kread ................................................................................................... 1150 kread2 .................................................................................................. 1151 kread3 .................................................................................................. 1152 kread4 .................................................................................................. 1153 ksmps .................................................................................................. 1154 ktableseg .............................................................................................. 1155 ktrirand ................................................................................................ 1156 kunirand ............................................................................................... 1157 kweibull ............................................................................................... 1158 lfo ....................................................................................................... 1159 limit .................................................................................................... 1161 line ...................................................................................................... 1162 linen .................................................................................................... 1164 linenr ................................................................................................... 1166 lineto ................................................................................................... 1167 linrand ................................................................................................. 1168 linseg ................................................................................................... 1170 linsegr .................................................................................................. 1173 locsend ................................................................................................ 1176 locsig ................................................................................................... 1178 log ...................................................................................................... 1180 log10 ................................................................................................... 1182 logbtwo ................................................................................................ 1184 184
Reference
logcurve ............................................................................................... 1186 loop_ge ................................................................................................ 1188 loop_gt ................................................................................................ 1189 loop_le ................................................................................................. 1190 loop_lt ................................................................................................. 1191 loopseg ................................................................................................ 1192 loopsegp ............................................................................................... 1194 looptseg ............................................................................................... 1196 loopxseg ............................................................................................... 1198 lorenz .................................................................................................. 1200 lorisread ............................................................................................... 1203 lorismorph ............................................................................................ 1205 lorisplay ............................................................................................... 1206 loscil ................................................................................................... 1207 loscil3 .................................................................................................. 1210 loscilx .................................................................................................. 1213 lowpass2 .............................................................................................. 1214 lowres .................................................................................................. 1216 lowresx ................................................................................................ 1218 lpf18 .................................................................................................... 1220 lpfreson ................................................................................................ 1222 lphasor ................................................................................................. 1223 lpinterp ................................................................................................ 1225 lposcil .................................................................................................. 1226 lposcil3 ................................................................................................ 1227 lposcila ................................................................................................ 1228 lposcilsa ............................................................................................... 1229 lposcilsa2 ............................................................................................. 1230 lpread .................................................................................................. 1231 lpreson ................................................................................................. 1233 lpshold ................................................................................................. 1234 lpsholdp ............................................................................................... 1236 lpslot ................................................................................................... 1237 mac ..................................................................................................... 1239 maca .................................................................................................... 1240 madsr ................................................................................................... 1241 mandel ................................................................................................. 1244 mandol ................................................................................................. 1245 marimba ............................................................................................... 1247 massign ................................................................................................ 1250 max ..................................................................................................... 1252 maxabs ................................................................................................ 1253 maxabsaccum ........................................................................................ 1254 maxaccum ............................................................................................ 1255 maxalloc .............................................................................................. 1256 max_k .................................................................................................. 1258 mclock ................................................................................................. 1259 mdelay ................................................................................................. 1260 median ................................................................................................. 1262 mediank ............................................................................................... 1264 metro ................................................................................................... 1266 midic14 ................................................................................................ 1268 midic21 ................................................................................................ 1270 midic7 ................................................................................................. 1272 midichannelaftertouch ............................................................................. 1274 midichn ................................................................................................ 1276 midicontrolchange .................................................................................. 1279 midictrl ................................................................................................ 1281 185
Reference
mididefault ........................................................................................... 1282 midiin .................................................................................................. 1283 midinoteoff ........................................................................................... 1286 midinoteoncps ....................................................................................... 1288 midinoteonkey ....................................................................................... 1290 midinoteonoct ....................................................................................... 1292 midinoteonpch ....................................................................................... 1294 midion ................................................................................................. 1296 midion2 ................................................................................................ 1299 midiout ................................................................................................ 1300 midipitchbend ....................................................................................... 1302 midipolyaftertouch ................................................................................. 1304 midiprogramchange ................................................................................ 1306 miditempo ............................................................................................ 1307 midremot .............................................................................................. 1308 midglobal ............................................................................................. 1311 min ..................................................................................................... 1312 minabs ................................................................................................. 1313 minabsaccum ........................................................................................ 1314 minaccum ............................................................................................. 1315 mincer ................................................................................................. 1316 mirror .................................................................................................. 1318 MixerSetLevel ....................................................................................... 1319 MixerSetLevel_i .................................................................................... 1321 MixerGetLevel ...................................................................................... 1322 MixerSend ............................................................................................ 1323 MixerReceive ........................................................................................ 1324 MixerClear ........................................................................................... 1326 mode ................................................................................................... 1327 modmatrix ............................................................................................ 1330 monitor ................................................................................................ 1335 moog ................................................................................................... 1336 moogladder ........................................................................................... 1338 moogvcf ............................................................................................... 1340 moogvcf2 ............................................................................................. 1342 moscil .................................................................................................. 1344 mp3in .................................................................................................. 1346 mpulse ................................................................................................. 1347 mrtmsg ................................................................................................ 1349 multitap ................................................................................................ 1350 mute .................................................................................................... 1351 mxadsr ................................................................................................. 1353 nchnls .................................................................................................. 1355 nchns_i ................................................................................................ 1356 nestedap ............................................................................................... 1357 nlfilt .................................................................................................... 1360 noise .................................................................................................... 1362 noteoff ................................................................................................. 1365 noteon .................................................................................................. 1366 noteondur ............................................................................................. 1367 noteondur2 ........................................................................................... 1369 notnum ................................................................................................ 1371 nreverb ................................................................................................ 1373 nrpn ..................................................................................................... 1376 nsamp .................................................................................................. 1377 nstrnum ................................................................................................ 1379 ntrpol ................................................................................................... 1380 octave .................................................................................................. 1381 186
Reference
octcps .................................................................................................. 1383 octmidi ................................................................................................ 1386 octmidib ............................................................................................... 1388 octmidinn ............................................................................................. 1390 octpch .................................................................................................. 1393 opcode ................................................................................................. 1396 OSCsend .............................................................................................. 1401 OSCinit ................................................................................................ 1403 OSClisten ............................................................................................. 1404 oscbnk ................................................................................................. 1408 oscil .................................................................................................... 1413 oscil1 ................................................................................................... 1415 oscil1i .................................................................................................. 1416 oscil3 ................................................................................................... 1417 oscili ................................................................................................... 1419 oscilikt ................................................................................................. 1421 osciliktp ............................................................................................... 1423 oscilikts ................................................................................................ 1425 osciln ................................................................................................... 1427 oscils ................................................................................................... 1428 oscilx ................................................................................................... 1430 out ...................................................................................................... 1431 out32 ................................................................................................... 1432 outc ..................................................................................................... 1433 outch ................................................................................................... 1434 outh ..................................................................................................... 1435 outiat ................................................................................................... 1436 outic .................................................................................................... 1437 outic14 ................................................................................................. 1438 outipat ................................................................................................. 1440 outipb .................................................................................................. 1441 outipc .................................................................................................. 1442 outkat .................................................................................................. 1443 outkc ................................................................................................... 1444 outkc14 ................................................................................................ 1445 outkpat ................................................................................................. 1446 outkpb ................................................................................................. 1447 outkpc .................................................................................................. 1448 outleta .................................................................................................. 1451 outletk ................................................................................................. 1452 outletf .................................................................................................. 1453 outo ..................................................................................................... 1454 outq ..................................................................................................... 1455 outq1 ................................................................................................... 1456 outq2 ................................................................................................... 1457 outq3 ................................................................................................... 1458 outq4 ................................................................................................... 1459 outrg .................................................................................................... 1460 outs ..................................................................................................... 1461 outs1 ................................................................................................... 1462 outs2 ................................................................................................... 1463 outvalue ............................................................................................... 1464 outx ..................................................................................................... 1465 outz ..................................................................................................... 1466 p ......................................................................................................... 1467 p5gconnect ........................................................................................... 1469 p5gdata ................................................................................................ 1471 pan ...................................................................................................... 1473 187
Reference
pan2 .................................................................................................... 1475 pareq ................................................................................................... 1476 partials ................................................................................................. 1479 partikkel ............................................................................................... 1481 partikkelsync ......................................................................................... 1490 passign ................................................................................................. 1491 pcauchy ................................................................................................ 1493 pchbend ............................................................................................... 1495 pchmidi ................................................................................................ 1497 pchmidib .............................................................................................. 1499 pchmidinn ............................................................................................ 1501 pchoct .................................................................................................. 1504 pconvolve ............................................................................................. 1507 pcount .................................................................................................. 1510 pdclip .................................................................................................. 1512 pdhalf .................................................................................................. 1515 pdhalfy ................................................................................................ 1518 peak .................................................................................................... 1521 peakk ................................................................................................... 1523 pgmassign ............................................................................................ 1524 phaser1 ................................................................................................ 1528 phaser2 ................................................................................................ 1531 phasor .................................................................................................. 1535 phasorbnk ............................................................................................. 1537 pindex .................................................................................................. 1539 pinkish ................................................................................................. 1541 pitch .................................................................................................... 1544 pitchamdf ............................................................................................. 1547 planet ................................................................................................... 1550 pluck ................................................................................................... 1552 poisson ................................................................................................ 1554 polyaft ................................................................................................. 1558 polynomial ........................................................................................... 1560 pop ...................................................................................................... 1562 pop_f ................................................................................................... 1563 port ..................................................................................................... 1564 portk .................................................................................................... 1565 poscil ................................................................................................... 1567 poscil3 ................................................................................................. 1569 pow ..................................................................................................... 1572 powershape ........................................................................................... 1574 powoftwo ............................................................................................. 1576 prealloc ................................................................................................ 1578 prepiano ............................................................................................... 1580 print .................................................................................................... 1583 printf ................................................................................................... 1585 printk ................................................................................................... 1586 printk2 ................................................................................................. 1588 printks ................................................................................................. 1590 prints ................................................................................................... 1593 product ................................................................................................ 1595 pset ..................................................................................................... 1596 ptrack .................................................................................................. 1597 puts ..................................................................................................... 1599 push .................................................................................................... 1600 push_f .................................................................................................. 1601 pvadd ................................................................................................... 1602 pvbufread ............................................................................................. 1605 188
Reference
pvcross ................................................................................................ 1607 pvinterp ................................................................................................ 1609 pvoc .................................................................................................... 1611 pvread .................................................................................................. 1613 pvsadsyn .............................................................................................. 1615 pvsanal ................................................................................................ 1617 pvsarp .................................................................................................. 1620 pvsbandp .............................................................................................. 1623 pvsbandr .............................................................................................. 1625 pvsbin .................................................................................................. 1627 pvsblur ................................................................................................. 1629 pvsbuffer .............................................................................................. 1631 pvsbufread ............................................................................................ 1632 pvscale ................................................................................................. 1635 pvscent ................................................................................................ 1637 pvscross ............................................................................................... 1639 pvsdemix .............................................................................................. 1641 pvsdiskin .............................................................................................. 1643 pvsdisp ................................................................................................ 1644 pvsfilter ................................................................................................ 1646 pvsfread ............................................................................................... 1649 pvsfreeze .............................................................................................. 1650 pvsftr ................................................................................................... 1652 pvsftw .................................................................................................. 1654 pvsfwrite .............................................................................................. 1656 pvshift ................................................................................................. 1658 pvsifd .................................................................................................. 1660 pvsinfo ................................................................................................. 1662 pvsinit .................................................................................................. 1663 pvsin ................................................................................................... 1664 pvslock ................................................................................................ 1665 pvsmaska .............................................................................................. 1667 pvsmix ................................................................................................. 1669 pvsmorph ............................................................................................. 1670 pvsmooth .............................................................................................. 1673 pvsout .................................................................................................. 1675 pvsosc .................................................................................................. 1676 pvspitch ............................................................................................... 1679 pvstanal ................................................................................................ 1682 pvstencil ............................................................................................... 1684 pvsvoc ................................................................................................. 1686 pvsynth ................................................................................................ 1688 pvswarp ............................................................................................... 1690 pyassign Opcodes ................................................................................... 1692 pycall Opcodes ...................................................................................... 1693 pyeval Opcodes ..................................................................................... 1697 pyexec Opcodes ..................................................................................... 1698 pyinit Opcodes ...................................................................................... 1701 pyrun Opcodes ...................................................................................... 1702 rand ..................................................................................................... 1704 randh ................................................................................................... 1706 randi .................................................................................................... 1708 random ................................................................................................ 1710 randomh ............................................................................................... 1712 randomi ................................................................................................ 1714 rbjeq .................................................................................................... 1716 readclock .............................................................................................. 1719 readk ................................................................................................... 1721 189
Reference
readk2 .................................................................................................. 1723 readk3 .................................................................................................. 1725 readk4 .................................................................................................. 1727 reinit .................................................................................................... 1729 release ................................................................................................. 1731 remoteport ............................................................................................ 1732 remove ................................................................................................. 1733 repluck ................................................................................................. 1734 reson ................................................................................................... 1736 resonk .................................................................................................. 1738 resonr .................................................................................................. 1739 resonx .................................................................................................. 1742 resonxk ................................................................................................ 1743 resony .................................................................................................. 1744 resonz .................................................................................................. 1746 resyn ................................................................................................... 1748 reverb .................................................................................................. 1750 reverb2 ................................................................................................ 1752 reverbsc ............................................................................................... 1753 rewindscore .......................................................................................... 1755 rezzy ................................................................................................... 1756 rigoto ................................................................................................... 1758 rireturn ................................................................................................. 1759 rms ...................................................................................................... 1761 rnd ...................................................................................................... 1763 rnd31 ................................................................................................... 1765 round ................................................................................................... 1770 rspline .................................................................................................. 1771 rtclock ................................................................................................. 1772 s16b14 ................................................................................................. 1774 s32b14 ................................................................................................. 1776 scale .................................................................................................... 1778 samphold .............................................................................................. 1780 sandpaper ............................................................................................. 1781 scanhammer .......................................................................................... 1783 scans ................................................................................................... 1784 scantable .............................................................................................. 1786 scanu ................................................................................................... 1788 scoreline ............................................................................................... 1790 scoreline_i ............................................................................................ 1792 schedkwhen .......................................................................................... 1793 schedkwhennamed ................................................................................. 1796 schedule ............................................................................................... 1798 schedwhen ............................................................................................ 1801 seed ..................................................................................................... 1804 sekere .................................................................................................. 1805 semitone ............................................................................................... 1807 sense ................................................................................................... 1809 sensekey ............................................................................................... 1810 seqtime ................................................................................................ 1814 seqtime2 ............................................................................................... 1817 setctrl ................................................................................................... 1819 setksmps .............................................................................................. 1821 setscorepos ........................................................................................... 1823 sfilist ................................................................................................... 1824 sfinstr .................................................................................................. 1825 sfinstr3 ................................................................................................. 1827 sfinstr3m .............................................................................................. 1829 190
Reference
sfinstrm ................................................................................................ 1831 sfload ................................................................................................... 1833 sflooper ................................................................................................ 1834 sfpassign .............................................................................................. 1836 sfplay ................................................................................................... 1837 sfplay3 ................................................................................................. 1839 sfplay3m .............................................................................................. 1841 sfplaym ................................................................................................ 1843 sfplist ................................................................................................... 1845 sfpreset ................................................................................................ 1846 shaker .................................................................................................. 1848 sin ....................................................................................................... 1850 sinh ..................................................................................................... 1852 sininv ................................................................................................... 1854 sinsyn .................................................................................................. 1856 sleighbells ............................................................................................ 1858 slider16 ................................................................................................ 1860 slider16f ............................................................................................... 1862 slider32 ................................................................................................ 1864 slider32f ............................................................................................... 1866 slider64 ................................................................................................ 1868 slider64f ............................................................................................... 1870 slider8 .................................................................................................. 1872 slider8f ................................................................................................ 1874 slider16table ......................................................................................... 1876 slider16tablef ........................................................................................ 1878 slider32table ......................................................................................... 1880 slider32tablef ........................................................................................ 1882 slider64table ......................................................................................... 1884 slider64tablef ........................................................................................ 1886 slider8table ........................................................................................... 1888 slider8tablef .......................................................................................... 1890 sliderKawai ........................................................................................... 1892 sndload ................................................................................................ 1893 sndloop ................................................................................................ 1895 sndwarp ............................................................................................... 1897 sndwarpst ............................................................................................. 1901 socksend .............................................................................................. 1904 sockrecv ............................................................................................... 1906 soundin ................................................................................................ 1908 soundout .............................................................................................. 1911 soundouts ............................................................................................. 1913 space ................................................................................................... 1915 spat3d .................................................................................................. 1919 spat3di ................................................................................................. 1927 spat3dt ................................................................................................. 1931 spdist ................................................................................................... 1935 specaddm ............................................................................................. 1939 specdiff ................................................................................................ 1940 specdisp ............................................................................................... 1941 specfilt ................................................................................................. 1942 spechist ................................................................................................ 1943 specptrk ............................................................................................... 1944 specscal ................................................................................................ 1946 specsum ............................................................................................... 1947 spectrum .............................................................................................. 1948 splitrig ................................................................................................. 1950 spsend .................................................................................................. 1952 191
Reference
sprintf .................................................................................................. 1955 sprintfk ................................................................................................ 1956 sqrt ...................................................................................................... 1958 sr ........................................................................................................ 1960 stack .................................................................................................... 1961 statevar ................................................................................................ 1962 stix ...................................................................................................... 1964 STKBandedWG ..................................................................................... 1966 STKBeeThree ....................................................................................... 1968 STKBlowBotl ....................................................................................... 1970 STKBlowHole ....................................................................................... 1972 STKBowed ........................................................................................... 1974 STKBrass ............................................................................................. 1976 STKClarinet .......................................................................................... 1978 STKDrummer ....................................................................................... 1980 STKFlute .............................................................................................. 1982 STKFMVoices ...................................................................................... 1984 STKHevyMetl ....................................................................................... 1986 STKMandolin ....................................................................................... 1988 STKModalBar ....................................................................................... 1990 STKMoog ............................................................................................ 1992 STKPercFlut ......................................................................................... 1994 STKPlucked .......................................................................................... 1996 STKResonate ........................................................................................ 1998 STKRhodey .......................................................................................... 2000 STKSaxofony ........................................................................................ 2002 STKShakers .......................................................................................... 2004 STKSimple ........................................................................................... 2006 STKSitar .............................................................................................. 2008 STKStifKarp ......................................................................................... 2010 STKTubeBell ........................................................................................ 2012 STKVoicForm ....................................................................................... 2014 STKWhistle .......................................................................................... 2016 STKWurley .......................................................................................... 2018 strchar .................................................................................................. 2020 strchark ................................................................................................ 2021 strcpy ................................................................................................... 2022 strcpyk ................................................................................................. 2023 strcat ................................................................................................... 2024 strcatk .................................................................................................. 2025 strcmp .................................................................................................. 2026 strcmpk ................................................................................................ 2027 streson ................................................................................................. 2028 strget ................................................................................................... 2030 strindex ................................................................................................ 2031 strindexk .............................................................................................. 2032 strlen ................................................................................................... 2033 strlenk .................................................................................................. 2034 strlower ................................................................................................ 2035 strlowerk .............................................................................................. 2036 strrindex ............................................................................................... 2037 strrindexk ............................................................................................. 2038 strset .................................................................................................... 2039 strsub ................................................................................................... 2041 strsubk ................................................................................................. 2043 strtod ................................................................................................... 2044 strtodk ................................................................................................. 2045 strtol .................................................................................................... 2046 192
Reference
strtolk .................................................................................................. 2047 strupper ................................................................................................ 2048 strupperk .............................................................................................. 2049 subinstr ................................................................................................ 2050 subinstrinit ............................................................................................ 2053 sum ..................................................................................................... 2054 svfilter ................................................................................................. 2055 syncgrain .............................................................................................. 2058 syncloop ............................................................................................... 2060 syncphasor ............................................................................................ 2062 system ................................................................................................. 2066 tb ........................................................................................................ 2068 tab ....................................................................................................... 2071 tabrec ................................................................................................... 2072 table .................................................................................................... 2073 table3 ................................................................................................... 2075 tablecopy .............................................................................................. 2076 tablefilter .............................................................................................. 2077 tablefilteri ............................................................................................. 2079 tablegpw .............................................................................................. 2081 tablei ................................................................................................... 2082 tableicopy ............................................................................................. 2083 tableigpw .............................................................................................. 2084 tableikt ................................................................................................. 2085 tableimix .............................................................................................. 2087 tableiw ................................................................................................. 2089 tablekt .................................................................................................. 2091 tablemix ............................................................................................... 2093 tableng ................................................................................................. 2095 tablera .................................................................................................. 2097 tableseg ................................................................................................ 2100 tableshuffle ........................................................................................... 2101 tablew .................................................................................................. 2103 tablewa ................................................................................................ 2106 tablewkt ............................................................................................... 2109 tablexkt ................................................................................................ 2112 tablexseg .............................................................................................. 2115 tabmorph .............................................................................................. 2116 tabmorpha ............................................................................................ 2118 tabmorphak ........................................................................................... 2120 tabmorphi ............................................................................................. 2122 tabplay ................................................................................................. 2124 tabsum ................................................................................................. 2125 tambourine ........................................................................................... 2126 tan ....................................................................................................... 2128 tanh ..................................................................................................... 2130 taninv .................................................................................................. 2132 taninv2 ................................................................................................. 2134 tbvcf .................................................................................................... 2136 tempest ................................................................................................ 2139 tempo .................................................................................................. 2142 temposcal ............................................................................................. 2144 tempoval .............................................................................................. 2146 tigoto ................................................................................................... 2148 timedseq ............................................................................................... 2149 timeinstk .............................................................................................. 2151 timeinsts ............................................................................................... 2153 timek ................................................................................................... 2155 193
Reference
times ................................................................................................... 2157 timout .................................................................................................. 2159 tival ..................................................................................................... 2160 tlineto .................................................................................................. 2161 tone ..................................................................................................... 2162 tonek ................................................................................................... 2163 tonex ................................................................................................... 2164 trandom ................................................................................................ 2165 tradsyn ................................................................................................. 2166 transeg ................................................................................................. 2168 transegr ................................................................................................ 2170 trcross .................................................................................................. 2171 trfilter .................................................................................................. 2173 trhighest ............................................................................................... 2175 trigger .................................................................................................. 2176 trigseq .................................................................................................. 2178 trirand .................................................................................................. 2180 trlowest ................................................................................................ 2182 trmix ................................................................................................... 2183 trscale .................................................................................................. 2184 trshift ................................................................................................... 2185 trsplit ................................................................................................... 2186 turnoff ................................................................................................. 2188 turnoff2 ................................................................................................ 2190 turnon .................................................................................................. 2191 unirand ................................................................................................ 2192 upsamp ................................................................................................ 2194 urandom ............................................................................................... 2195 urd ...................................................................................................... 2198 vadd .................................................................................................... 2199 vadd_i .................................................................................................. 2202 vaddv ................................................................................................... 2204 vaddv_i ................................................................................................ 2207 vaget ................................................................................................... 2209 valpass ................................................................................................. 2211 vaset .................................................................................................... 2212 vbap16 ................................................................................................. 2214 vbap16move ......................................................................................... 2216 vbap4 ................................................................................................... 2218 vbap4move ........................................................................................... 2220 vbap8 ................................................................................................... 2222 vbap8move ........................................................................................... 2224 vbaplsinit .............................................................................................. 2227 vbapz ................................................................................................... 2229 vbapzmove ........................................................................................... 2231 vcella ................................................................................................... 2233 vco ...................................................................................................... 2236 vco2 .................................................................................................... 2239 vco2ft .................................................................................................. 2243 vco2ift ................................................................................................. 2245 vco2init ................................................................................................ 2246 vcomb .................................................................................................. 2248 vcopy ................................................................................................... 2251 vcopy_i ................................................................................................ 2254 vdelay .................................................................................................. 2256 vdelay3 ................................................................................................ 2258 vdelayx ................................................................................................ 2260 vdelayxq .............................................................................................. 2262 194
Reference
vdelayxs ............................................................................................... 2264 vdelayxw .............................................................................................. 2266 vdelayxwq ............................................................................................ 2268 vdelayxws ............................................................................................ 2270 vdivv ................................................................................................... 2272 vdivv_i ................................................................................................ 2275 vdelayk ................................................................................................ 2277 vecdelay ............................................................................................... 2278 veloc ................................................................................................... 2279 vexp .................................................................................................... 2281 vexp_i .................................................................................................. 2284 vexpseg ................................................................................................ 2286 vexpv ................................................................................................... 2288 vexpv_i ................................................................................................ 2291 vibes .................................................................................................... 2293 vibr ..................................................................................................... 2295 vibrato ................................................................................................. 2297 vincr .................................................................................................... 2300 vlimit ................................................................................................... 2301 vlinseg ................................................................................................. 2302 vlowres ................................................................................................ 2304 vmap ................................................................................................... 2306 vmirror ................................................................................................ 2308 vmult ................................................................................................... 2309 vmult_i ................................................................................................ 2313 vmultv ................................................................................................. 2315 vmultv_i ............................................................................................... 2318 voice ................................................................................................... 2320 vosim ................................................................................................... 2323 vphaseseg ............................................................................................. 2328 vport .................................................................................................... 2330 vpow ................................................................................................... 2331 vpow_i ................................................................................................. 2334 vpowv .................................................................................................. 2336 vpowv_i ............................................................................................... 2339 vpvoc ................................................................................................... 2341 vrandh ................................................................................................. 2343 vrandi .................................................................................................. 2346 vstaudio, vstaudiog ................................................................................. 2349 vstbankload ........................................................................................... 2351 vstedit .................................................................................................. 2352 vstinit .................................................................................................. 2354 vstinfo ................................................................................................. 2356 vstmidiout ............................................................................................ 2358 vstnote ................................................................................................. 2360 vstparamset,vstparamget .......................................................................... 2362 vstprogset ............................................................................................. 2364 vsubv ................................................................................................... 2365 vsubv_i ................................................................................................ 2368 vtable1k ............................................................................................... 2370 vtablei .................................................................................................. 2372 vtablek ................................................................................................. 2374 vtablea ................................................................................................. 2376 vtablewi ............................................................................................... 2378 vtablewk .............................................................................................. 2379 vtablewa ............................................................................................... 2381 vtabi .................................................................................................... 2383 vtabk ................................................................................................... 2385 195
Reference
vtaba ................................................................................................... 2387 vtabwi .................................................................................................. 2389 vtabwk ................................................................................................. 2390 vtabwa ................................................................................................. 2391 vwrap .................................................................................................. 2392 waveset ................................................................................................ 2393 weibull ................................................................................................. 2395 wgbow ................................................................................................. 2397 wgbowedbar ......................................................................................... 2399 wgbrass ................................................................................................ 2401 wgclar .................................................................................................. 2403 wgflute ................................................................................................ 2405 wgpluck ............................................................................................... 2407 wgpluck2 .............................................................................................. 2410 wguide1 ............................................................................................... 2412 wguide2 ............................................................................................... 2414 wiiconnect ............................................................................................ 2417 wiidata ................................................................................................. 2419 wiirange ............................................................................................... 2422 wiisend ................................................................................................ 2423 wrap .................................................................................................... 2425 wterrain ................................................................................................ 2426 xadsr ................................................................................................... 2428 xin ...................................................................................................... 2430 xout ..................................................................................................... 2432 xscanmap ............................................................................................. 2434 xscansmap ............................................................................................ 2435 xscans .................................................................................................. 2436 xscanu ................................................................................................. 2438 xtratim ................................................................................................. 2441 xyin ..................................................................................................... 2444 zacl ..................................................................................................... 2446 zakinit .................................................................................................. 2448 zamod .................................................................................................. 2451 zar ....................................................................................................... 2453 zarg ..................................................................................................... 2455 zaw ..................................................................................................... 2457 zawm ................................................................................................... 2459 zfilter2 ................................................................................................. 2462 zir ....................................................................................................... 2464 ziw ...................................................................................................... 2466 ziwm ................................................................................................... 2468 zkcl ..................................................................................................... 2470 zkmod .................................................................................................. 2472 zkr ...................................................................................................... 2474 zkw ..................................................................................................... 2476 zkwm ................................................................................................... 2478 Score Statements and GEN Routines .......................................................................... 2481 Score Statements .................................................................................... 2481 a Statement (or Advance Statement) .......................................................... 2482 b Statement ........................................................................................... 2483 e Statement ........................................................................................... 2484 f Statement (or Function Table Statement) .................................................. 2485 i Statement (Instrument or Note Statement) ................................................. 2487 m Statement (Mark Statement) ................................................................. 2491 n Statement ........................................................................................... 2493 q Statement ........................................................................................... 2495 r Statement (Repeat Statement) ................................................................. 2496 196
Reference
s Statement ........................................................................................... 2498 t Statement (Tempo Statement) ................................................................. 2499 v Statement ........................................................................................... 2500 x Statement ........................................................................................... 2502 { Statement ........................................................................................... 2503 } Statement ........................................................................................... 2506 GEN Routines ....................................................................................... 2506 GEN01 ................................................................................................ 2510 GEN02 ................................................................................................ 2513 GEN03 ................................................................................................ 2515 GEN04 ................................................................................................ 2517 GEN05 ................................................................................................ 2518 GEN06 ................................................................................................ 2520 GEN07 ................................................................................................ 2522 GEN08 ................................................................................................ 2524 GEN09 ................................................................................................ 2526 GEN10 ................................................................................................ 2529 GEN11 ................................................................................................ 2531 GEN12 ................................................................................................ 2533 GEN13 ................................................................................................ 2535 GEN14 ................................................................................................ 2537 GEN15 ................................................................................................ 2540 GEN16 ................................................................................................ 2541 GEN17 ................................................................................................ 2544 GEN18 ................................................................................................ 2545 GEN19 ................................................................................................ 2546 GEN20 ................................................................................................ 2548 GEN21 ................................................................................................ 2550 GEN22 ................................................................................................ 2552 GEN23 ................................................................................................ 2553 GEN24 ................................................................................................ 2554 GEN25 ................................................................................................ 2555 GEN27 ................................................................................................ 2556 GEN28 ................................................................................................ 2557 GEN30 ................................................................................................ 2559 GEN31 ................................................................................................ 2560 GEN32 ................................................................................................ 2561 GEN33 ................................................................................................ 2563 GEN34 ................................................................................................ 2565 GEN40 ................................................................................................ 2567 GEN41 ................................................................................................ 2568 GEN42 ................................................................................................ 2569 GEN43 ................................................................................................ 2570 GEN49 ................................................................................................ 2571 GEN51 ................................................................................................ 2573 GEN52 ................................................................................................ 2574 GENtanh .............................................................................................. 2575 GENexp ............................................................................................... 2577 GENsone .............................................................................................. 2579 GENfarey ............................................................................................. 2581 The Utility Programs .............................................................................................. 2584 Directories. ........................................................................................... 2584 Soundfile Formats. ................................................................................. 2584 Analysis File Generation (ATSA, CVANAL, HETRO, LPANAL, PVANAL) ... 2585 File Queries (SNDINFO) ......................................................................... 2596 File Conversion (HET_IMPORT, HET_EXPORT, PVLOOK, PV_EXPORT, PV_IMPORT, SDIF2AD, SRCONV) ........................................................ 2597 Other Csound Utilities (CS, CSB64ENC, ENVEXT, EXTRACTOR, MAKECSD, 197
Reference
MIXER, SCALE) ................................................................................... 2613 Cscore ................................................................................................................. 2626 Events, Lists, and Operations .................................................................... 2626 Writing a Cscore Control Program ............................................................. 2629 Compiling a Cscore Program .................................................................... 2633 More Advanced Examples ....................................................................... 2636 Beats ................................................................................................................... 2639 ............................................................................................................ 2639 ............................................................................................................ 2640 Extending Csound .................................................................................................. 2642 Adding Unit Generators .......................................................................... 2642 Creating a Builtin Unit Generator .............................................................. 2642 Adding a Plugin Unit Generator ................................................................ 2645 OENTRY Reference ................................................................................... 2646
198
199
!=
!= Determines if one value is not equal to another.
Description
Determines if one value is not equal to another.
Syntax
(a != b ? v1 : v2)
Performance
In the above conditional, a and b are first compared. If the indicated relation is true (a not equal to b), then the conditional expression has the value of v1; if the relation is false, the expression has the value of v2. NB.: If v1 or v2 are expressions, these will be evaluated before the conditional is determined. In terms of binding strength, all conditional operators (i.e. the relational operators (<, etc.), and ?, and : ) are weaker than the arithmetic and logical operators (+, -, *, /, && and ||). These are operators not opcodes. Therefore, they can be used within orchestra statements, but do not form complete statements themselves.
Examples
Here is an example of the != operator. It uses the file notequal.csd [examples/notequal.csd].
200
k1 =
p4
; Is it not equal to 3? (1 = true, 0 = false) k2 = (p4 != 3 ? 1 : 0) ; Print the values of k1 and k2. printks "k1 = %f, k2 = %f\\n", 1, k1, k2 endin </CsInstruments> <CsScore> ; i ; i ; i e Call Instrument #1 with a p4 = 2. 1 0 0.5 2 Call Instrument #1 with a p4 = 3. 1 1 0.5 3 Call Instrument #1 with a p4 = 4. 1 2 0.5 4
</CsScore> </CsoundSynthesizer>
See Also
==, >=, >, <=, <
Credits
Example written by Kevin Conder.
201
#define
#define Defines a macro.
Description
Macros are textual replacements which are made in the orchestra as it is being read. The macro system in Csound is a very simple one, and uses the characters # and $ to define and call macros. This can save typing, and can lead to a coherent structure and consistent style. This is similar to, but independent of, the macro system in the score language. #define NAME -- defines a simple macro. The name of the macro must begin with a letter and can consist of any combination of letters and numbers. Case is significant. This form is limiting, in that the variable names are fixed. More flexibility can be obtained by using a macro with arguments, described below. #define NAME(a' b' c') -- defines a macro with arguments. This can be used in more complex situations. The name of the macro must begin with a letter and can consist of any combination of letters and numbers. Within the replacement text, the arguments can be substituted by the form: $A. In fact, the implementation defines the arguments as simple macros. There may be up to 5 arguments, and the names may be any choice of letters. Remember that case is significant in macro names.
Syntax
#define NAME # replacement text # #define NAME(a' b' c') # replacement text #
Initialization
# replacement text # -- The replacement text is any character string (not containing a #) and can extend over mutliple lines. The replacement text is enclosed within the # characters, which ensure that additional characters are not inadvertently captured.
Performance
Some care is needed with textual replacement macros, as they can sometimes do strange things. They take no notice of any meaning, so spaces are significant. This is why, unlike the C programming language, the definition has the replacement text surrounded by # characters. Used carefully, this simple macro system is a powerful concept, but it can be abused.
Examples
Here is a simple example of the defining a macro. It uses the file define.csd [examples/define.csd].
202
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o define.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Define the macros. #define VOLUME #5000# #define FREQ #440# #define TABLE #1# ; Instrument #1 instr 1 ; Use the macros. ; This will be expanded to "a1 oscil 5000, 440, 1". a1 oscil $VOLUME, $FREQ, $TABLE ; Send it to the output. out a1 endin </CsInstruments> <CsScore> ; Define Table #1 with an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here is an example of the defining a macro with arguments. It uses the file define_args.csd [examples/ define_args.csd].
203
ksmps = 10 nchnls = 1 ; Define the oscillator macro. #define OSCMACRO(VOLUME'FREQ'TABLE) #oscil $VOLUME, $FREQ, $TABLE# ; Instrument #1 instr 1 ; Use the oscillator macro. ; This will be expanded to "a1 oscil 5000, 440, 1". a1 $OSCMACRO(5000'440'1) ; Send it to the output. out a1 endin </CsInstruments> <CsScore> ; Define Table #1 with an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
$NAME, #undef 204
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April 1998 Examples written by Kevin Conder. New in Csound version 3.48
205
#include
#include Includes an external file for processing.
Description
Includes an external file for processing.
Syntax
#include filename
Performance
It is sometimes convenient to have the orchestra arranged in a number of files, for example with each instrument in a separate file. This style is supported by the #include facility which is part of the macro system. A line containing the text
#include "filename"
where the character " can be replaced by any suitable character. For most uses the double quote symbol will probably be the most convenient. The file name can include a full path. This takes input from the named file until it ends, when input reverts to the previous input. Note: Csound versions prior to 4.19 had a limit of 20 on the depth of included files and macros. Another suggested use of #include would be to define a set of macros which are part of the composer's style. An extreme form would be to have each instrument defines as a macro, with the instrument number as a parameter. Then an entire orchestra could be constructed from a number of #include statements followed by macro calls.
It must be stressed that these changes are at the textual level and so take no cognizance of any meaning.
Examples
Here is an example of the include opcode. It uses the file include.csd [examples/include.csd], and table1.inc [examples/table1.inc].
206
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o include.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a basic oscillator. instr 1 kamp = 10000 kcps = 440 ifn = 1 a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Include the file for Table #1. #include "table1.inc" ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April 1998 Example written by Kevin Conder. New in Csound version 3.48
207
#undef
#undef Un-defines a macro.
Description
Macros are textual replacements which are made in the orchestra as it is being read. The macro system in Csound is a very simple one, and uses the characters # and $ to define and call macros. This can save typing, and can lead to a coherent structure and consistent style. This is similar to, but independent of, the macro system in the score language. #undef NAME -- undefines a macro name. If a macro is no longer required, it can be undefined with #undef NAME.
Syntax
#undef NAME
Performance
Some care is needed with textual replacement macros, as they can sometimes do strange things. They take no notice of any meaning, so spaces are significant. This is why, unlike the C programming language, the definition has the replacement text surrounded by # characters. Used carefully, this simple macro system is a powerful concept, but it can be abused.
See Also
#define, $NAME
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April 1998 New in Csound version 3.48
208
#ifdef
#ifdef Conditional reading of code.
Description
If a macro is defined then #ifdef can incorporate text into an orchestra upto the next #end. This is similar to, but independent of, the macro system in the score language.
Syntax
#ifdef NAME .... #else .... #end
Performance
Note that the #ifdef can be nested, like in the C preprocessor language.
Examples
Here is a simple example of the conditional.
See Also
$NAME, #define, #ifndef.
Credits
Author: John ffitch University of Bath/Codemist Ltd. 209
210
#ifndef
#ifndef Conditional reading of code.
Description
If the specified macro is not defined then #ifndef can incorporate text into an orchestra upto the next #end. This is similar to, but independent of, the macro system in the score language.
Syntax
#ifndef NAME .... #else .... #end
Performance
Note that the #ifndef can be nested, like in the C preprocessor language.
See Also
$NAME, #define, #ifdef.
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April 2005 New in Csound5 (and 4.23f13)
211
$NAME
$NAME Calls a defined macro.
Description
Macros are textual replacements which are made in the orchestra as it is being read. The macro system in Csound is a very simple one, and uses the characters # and $ to define and call macros. This can save typing, and can lead to a coherent structure and consistent style. This is similar to, but independent of, the macro system in the score language. $NAME -- calls a defined macro. To use a macro, the name is used following a $ character. The name is terminated by the first character which is neither a letter nor a number. If it is necessary for the name not to terminate with a space, a period, which will be ignored, can be used to terminate the name. The string, $NAME., is replaced by the replacement text from the definition. The replacement text can also include macro calls.
Syntax
$NAME
Initialization
# replacement text # -- The replacement text is any character string (not containing a #) and can extend over mutliple lines. The replacement text is enclosed within the # characters, which ensure that additional characters are not inadvertently captured.
Performance
Some care is needed with textual replacement macros, as they can sometimes do strange things. They take no notice of any meaning, so spaces are significant. This is why, unlike the C programming language, the definition has the replacement text surrounded by # characters. Used carefully, this simple macro system is a powerful concept, but it can be abused.
Examples
Here is an example of the calling a macro. It uses the file define.csd [examples/define.csd].
212
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Define the macros. #define VOLUME #5000# #define FREQ #440# #define TABLE #1# ; Instrument #1 instr 1 ; Use the macros. ; This will be expanded to "a1 oscil 5000, 440, 1". a1 oscil $VOLUME, $FREQ, $TABLE ; Send it to the output. out a1 endin </CsInstruments> <CsScore> ; Define Table #1 with an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here is an example of the calling a macro with arguments. It uses the file define_args.csd [examples/ define_args.csd].
213
; Send it to the output. out a1 endin </CsInstruments> <CsScore> ; Define Table #1 with an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
#define, #undef
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April, 1998 Examples written by Kevin Conder. New in Csound version 3.48
214
%
% Modulus operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c. In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d 3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c Parentheses may be used as above to force particular groupings. The operator % returns the value of a reduced by b, so that the result, in absolute value, is less than the absolute value of b, by repeated subtraction. This is the same as modulus function in integers. New in Csound version 3.50.
Syntax
a % b (no rate restriction)
Examples
Here is an example of the % operator. It uses the file modulus.csd [examples/modulus.csd]. 215
See Also
-, +, &&, ||, *, /, ^
Credits
Example written by Kevin Conder.
216
&&
&& Logical AND operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c. In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d 3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c Parentheses may be used as above to force particular groupings.
Syntax
a && b (logical AND; not audio-rate)
See Also
-, +, ||, *, /, ^, %
217
>
> Determines if one value is greater than another.
Description
Determines if one value is greater than another.
Syntax
(a > b ? v1 : v2)
Performance
In the above conditional, a and b are first compared. If the indicated relation is true (a greater than b), then the conditional expression has the value of v1; if the relation is false, the expression has the value of v2. NB.: If v1 or v2 are expressions, these will be evaluated before the conditional is determined. In terms of binding strength, all conditional operators (i.e. the relational operators (<, etc.), and ?, and : ) are weaker than the arithmetic and logical operators (+, -, *, /, && and ||). These are operators not opcodes. Therefore, they can be used within orchestra statements, but do not form complete statements themselves.
Examples
Here is an example of the > operator. It uses the file greaterthan.csd [examples/greaterthan.csd].
218
k1 =
p4
; Is it greater than 3? (1 = true, 0 = false) k2 = (p4 > 3 ? 1 : 0) ; Print the values of k1 and k2. printks "k1 = %f, k2 = %f\\n", 1, k1, k2 endin </CsInstruments> <CsScore> ; i ; i ; i e Call Instrument #1 with a p4 = 2. 1 0 0.5 2 Call Instrument #1 with a p4 = 3. 1 1 0.5 3 Call Instrument #1 with a p4 = 4. 1 2 0.5 4
</CsScore> </CsoundSynthesizer>
See Also
==, >=, <=, <, !=
Credits
Example written by Kevin Conder.
219
>=
>= Determines if one value is greater than or equal to another.
Description
Determines if one value is greater than or equal to another.
Syntax
(a >= b ? v1 : v2)
Performance
In the above conditional, a and b are first compared. If the indicated relation is true (a greater than or equal to b), then the conditional expression has the value of v1; if the relation is false, the expression has the value of v2. NB.: If v1 or v2 are expressions, these will be evaluated before the conditional is determined. In terms of binding strength, all conditional operators (i.e. the relational operators (<, etc.), and ?, and : ) are weaker than the arithmetic and logical operators (+, -, *, /, && and ||). These are operators not opcodes. Therefore, they can be used within orchestra statements, but do not form complete statements themselves.
Examples
Here is an example of the >= operator. It uses the file greaterequal.csd [examples/greaterequal.csd].
220
k1 =
p4
; Is it greater than or equal to 3? (1 = true, 0 = false) k2 = (p4 >= 3 ? 1 : 0) ; Print the values of k1 and k2. printks "k1 = %f, k2 = %f\\n", 1, k1, k2 endin </CsInstruments> <CsScore> ; i ; i ; i e Call Instrument #1 with a p4 = 2. 1 0 0.5 2 Call Instrument #1 with a p4 = 3. 1 1 0.5 3 Call Instrument #1 with a p4 = 4. 1 2 0.5 4
</CsScore> </CsoundSynthesizer>
See Also
==, >, <=, <, !=
Credits
Example written by Kevin Conder.
221
<
< Determines if one value is less than another.
Description
Determines if one value is less than another.
Syntax
(a < b ? v1 : v2)
Performance
In the above conditional, a and b are first compared. If the indicated relation is true (a less than b), then the conditional expression has the value of v1; if the relation is false, the expression has the value of v2. NB.: If v1 or v2 are expressions, these will be evaluated before the conditional is determined. In terms of binding strength, all conditional operators (i.e. the relational operators (<, etc.), and ?, and : ) are weaker than the arithmetic and logical operators (+, -, *, /, && and ||). These are operators not opcodes. Therefore, they can be used within orchestra statements, but do not form complete statements themselves.
Examples
Here is an example of the < operator. It uses the file lessthan.csd [examples/lessthan.csd].
222
; Is it less than 3? (1 = true, 0 = false) k2 = (p4 < 3 ? 1 : 0) ; Print the values of k1 and k2. printks "k1 = %f, k2 = %f\\n", 1, k1, k2 endin </CsInstruments> <CsScore> ; i ; i ; i e Call Instrument #1 with a p4 = 2. 1 0 0.5 2 Call Instrument #1 with a p4 = 3. 1 1 0.5 3 Call Instrument #1 with a p4 = 4. 1 2 0.5 4
</CsScore> </CsoundSynthesizer>
See Also
==, >=, >, <=, !=
Credits
Example written by Kevin Conder.
223
<=
<= Determines if one value is less than or equal to another.
Description
Determines if one value is less than or equal to another.
Syntax
(a <= b ? v1 : v2)
Performance
In the above conditional, a and b are first compared. If the indicated relation is true (a less than or equal to b), then the conditional expression has the value of v1; if the relation is false, the expression has the value of v2. NB.: If v1 or v2 are expressions, these will be evaluated before the conditional is determined. In terms of binding strength, all conditional operators (i.e. the relational operators (<, etc.), and ?, and : ) are weaker than the arithmetic and logical operators (+, -, *, /, && and ||). These are operators not opcodes. Therefore, they can be used within orchestra statements, but do not form complete statements themselves.
Examples
Here is an example of the <= operator. It uses the file lessequal.csd [examples/lessequal.csd].
224
k1 =
p4
; Is it less than or equal to 3? (1 = true, 0 = false) k2 = (p4 <= 3 ? 1 : 0) ; Print the values of k1 and k2. printks "k1 = %f, k2 = %f\\n", 1, k1, k2 endin </CsInstruments> <CsScore> ; i ; i ; i e Call Instrument #1 with a p4 = 2. 1 0 0.5 2 Call Instrument #1 with a p4 = 3. 1 1 0.5 3 Call Instrument #1 with a p4 = 4. 1 2 0.5 4
</CsScore> </CsoundSynthesizer>
See Also
==, >=, >, <, !=
Credits
Example written by Kevin Conder.
225
*
* Multiplication operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c.
In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d
3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c
Syntax
a * b (no rate restriction)
226
Examples
Here is an example of the * operator. It uses the file multiplies.csd [examples/multiplies.csd].
according to platform audio I/O only the line below: file output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 i1 = 24 * 8 print i1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
-, +, &&, ||, /, ^, %
Credits
Example written by Kevin Conder.
227
+
+ Addition operator
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c.
In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d
3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c
Syntax
+a (no rate restriction)
228
a + b
Examples
Here is an example of the + operator. It uses the file adds.csd [examples/adds.csd].
See Also
-, &&, ||, *, /, ^, %
229
- Subtraction operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c.
In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d
3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c
Syntax
#a (no rate restriction)
230
a # b
Examples
Here is an example of the - operator. It uses the file subtracts.csd [examples/subtracts.csd].
See Also
+, &&, ||, *, /, ^, %
Credits
Example written by Kevin Conder.
231
/
/ Division operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c.
In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d
3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c
Syntax
a / b (no rate restriction)
232
Examples
Here is an example of the / operator. It uses the file divides.csd [examples/divides.csd].
See Also
-, +, &&, ||, *, ^, %
Credits
Example written by Kevin Conder.
233
=
= Performs a simple assignment.
Syntax
ares = xarg ires = iarg kres = karg ires, ... = iarg, ... kres, ... = karg, ...
Description
Performs a simple assignment.
Initialization
= (simple assignment) - Put the value of the expression iarg (karg, xarg) into the named result. This provides a means of saving an evaluated result for later use. From version 5.13 onwards the i- and k-rate versions of assignment can take a number of outputs, and an equal or less number of inputs. If there are less the last value is repeated as necessary.
Examples
Here is an example of the assign opcode. It uses the file assign.csd [examples/assign.csd].
234
; Print the value of the i1 variable. print i1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
divz, init, passign, tival
Credits
Example written by Kevin Conder. The extension to multiple values is by Author: John ffitch University of Bath, and Codemist Ltd. Bath, UK February 2010 New in version 5.13
235
==
== Compares two values for equality.
Description
Compares two values for equality.
Syntax
(a == b ? v1 : v2)
Performance
In the above conditional, a and b are first compared. If the indicated relation is true (a is equal to b), then the conditional expression has the value of v1; if the relation is false, the expression has the value of v2. (For convenience, a sole "=" will function as "= =".) NB.: If v1 or v2 are expressions, these will be evaluated before the conditional is determined. In terms of binding strength, all conditional operators (i.e. the relational operators (<, etc.), and ?, and : ) are weaker than the arithmetic and logical operators (+, -, *, /, && and ||). These are operators not opcodes. Therefore, they can be used within orchestra statements, but do not form complete statements themselves.
Examples
Here is an example of the == operator. It uses the file equals.csd [examples/equals.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 44100 ksmps = 1 nchnls = 1 ; Instrument #1. instr 1 ; Get the 4th p-field from the score.
236
k1 =
p4
; Is it equal to 3? (1 = true, 0 = false) k2 = (p4 == 3 ? 1 : 0) ; Print the values of k1 and k2. printks "k1 = %f, k2 = %f\\n", 1, k1, k2 endin </CsInstruments> <CsScore> ; i ; i ; i e Call Instrument #1 with a p4 = 2. 1 0 0.5 2 Call Instrument #1 with a p4 = 3. 1 1 0.5 3 Call Instrument #1 with a p4 = 4. 1 2 0.5 4
</CsScore> </CsoundSynthesizer>
See Also
>=, >, <=, <, !=
Credits
Example written by Kevin Conder.
237
^
^ Power of operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c.
In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d
3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c
Parentheses may be used as above to force particular groupings. The operator ^ raises a to the b power. b may not be audio-rate. Use with caution as precedence may not work correctly. See pow. (New in Csound version 3.493.)
238
Syntax
a ^ b (b not audio-rate)
Examples
Here is an example of the ^ operator. It uses the file raises.csd [examples/raises.csd].
See Also
-, +, &&, ||, *, /, %
Credits
Example written by Kevin Conder.
239
||
|| Logical OR operator.
Description
Arithmetic operators perform operations of change-sign (negate), don't-change-sign, logical AND logical OR, add, subtract, multiply and divide. Note that a value or an expression may fall between two of these operators, either of which could take it as its left or right argument, as in a + b * c.
In such cases three rules apply: 1. * and / bind to their neighbors more strongly than + and #. Thus the above expression is taken as a + (b * c) with * taking b and c and then + taking a and b * c. 2. + and # bind more strongly than &&, which in turn is stronger than ||: a && b - c || d is taken as (a && (b - c)) || d
3. When both operators bind equally strongly, the operations are done left to right: a-b-c is taken as (a - b) - c
Syntax
a || b (logical OR; not audio-rate)
240
See Also
-, +, &&, *, /, ^, %
241
0dbfs
0dbfs Sets the value of 0 decibels using full scale amplitude.
Description
Sets the value of 0 decibels using full scale amplitude.
Syntax
0dbfs = iarg 0dbfs
Initialization
iarg -- the value of 0 decibels using full scale amplitude.
Performance
The default is 32767, so all existing orcs should work. Amplitude values in Csound are always relative to a "0dbfs" value representing the peak available amplitude before clipping. In the original Csound, this value was always 32767, corresponding to the bipolar range of a 16bit soundfile or 16bit AD/DA codec. This remains the default peak amplitude for Csound, for backward compatibility. The 0dbfs value enables Csound to produce appropriately scaled values to whatever output format is being used, whether 16bit integer, 24bit integer, 32bit floats, or even 32bit integers. OdBFS can be defined in the header, to set the amplitude reference Csound will use, but it can also be used as a varible inside instruments like this:
ipeak = 0dbfs
The purpose of the 0dbfs opcode is for people to start to code 0dbfs-relatively (and use the ampdbfs() opcodes a lot more!), rather than use explicit sample values. Using 0dbfs=1 is in accordance to industry practice, as ranges from -1 to 1 are used in most commercial plugin formats and in most other synthesis systems like Pure Data. Floats written to a file, when 0dbfs = 1, will in effect go through no range translation at all. So the numbers in the file are exactly what the orc says they are. For more details on amplitude values in Csound, see the section Amplitude values in Csound
242
Example
Here is an example of the 0dbfs opcode. It uses the file 0dbfs.csd [examples/0dbfs.csd].
</CsScore> </CsoundSynthesizer>
243
See also
ampdbfs()
Credits
Author: Richard Dobson May 2002 New in version 4.10
244
<<
<< Bitshift left operator.
Description
The bitshift operators shift the bits to the left or to the right the number of bits given. The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons. Parentheses may be used as above to force particular groupings.
Syntax
a << b (bitshift left)
Examples
Here is an example of the bitshift left operator. It uses the file bitshift.csd [examples/bitshift.csd].
1 1 2 1 2 3
245
The example above will produce the following output: 2>>1 = 1 B 0.000 .. 0.100 T 0.100 TT 3>>1 = 1 B 0.100 .. 0.200 T 0.200 TT 7>>2 = 1 B 0.200 .. 0.300 T 0.300 TT 16>>1 = 8 B 0.300 .. 0.400 T 0.400 TT 16>>2 = 4 B 0.400 .. 0.500 T 0.500 TT 16>>3 = 2 B 0.500 .. 5.000 T 5.000 TT new alloc for instr 2: 1<<1 = 2 B 5.000 .. 5.100 T 5.100 TT 1<<2 = 4 B 5.100 .. 5.200 T 5.200 TT 1<<3 = 8 B 5.200 .. 5.300 T 5.300 TT 1<<4 = 16 B 5.300 .. 5.400 T 5.400 TT 2<<1 = 4 B 5.400 .. 5.500 T 5.500 TT 2<<2 = 8 B 5.500 .. 5.600 T 5.600 TT 2<<3 = 16 B 5.600 .. 5.700 T 5.700 TT 3<<2 = 12 0.100 M: 0.200 M: 0.300 M: 0.400 M: 0.500 M: 5.000 M: 5.100 M: 5.200 M: 5.300 M: 5.400 M: 5.500 M: 5.600 M: 5.700 M: 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
See Also
>>, &, | #
246
>>
>> Bitshift right operator.
Description
The bitshift operators shift the bits to the left or to the right the number of bits given. The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons. Parentheses may be used as above to force particular groupings.
Syntax
a >> b (bitshift left)
Examples
See the entry for the << operator for an example.
See Also
<<, &, | #
247
&
& Bitwise AND operator.
Description
The bitwise operators perform operations of bitwise AND, bitwise OR, bitwise NOT and bitwise nonequivalence.
Syntax
a & b (bitwise AND)
where the arguments a and b may be further expressions. They are converted to the nearest integer to machine precision and then the operation is performed.
Performance
The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons. Parentheses may be used as above to force particular groupings.
Examples
Here is an example of the bitwise AND and OR operators. It uses the file bitwise.csd [examples/bitwise.csd].
248
ivalue = 2 ^ icount if (p4 & ivalue >= ivalue) then Sdigit = "1" else Sdigit = "0" endif Sbinary strcat Sbinary, Sdigit loop_ge icount, 1, 0, pass Stext sprintf "%i is %s in binary\\n", p4, Sbinary prints Stext endin </CsInstruments> <CsScore> i 1 0 0.1 1 2 i 1 + . 1 3 i 1 + . 2 4 i 1 + . 3 10 i i i i 2 2 2 2 2 + + + . . . . 12 9 15 49
e </CsScore> </CsoundSynthesizer>
See Also
|, #,
249
|
| Bitwise OR operator.
Description
The bitwise operators perform operations of bitwise AND, bitwise OR, bitwise NOT and bitwise nonequivalence.
Syntax
a | b (bitwise OR)
where the arguments a and b may be further expressions. They are converted to the nearest integer to machine precision and then the operation is performed.
Performance
The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons. Parentheses may be used as above to force particular groupings. For an example of usage, see the entry for &
See Also
&, #,
250
Description
The bitwise operators perform operations of bitwise AND, bitwise OR, bitwise NOT and bitwise nonequivalence. The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons. Parentheses may be used as above to force particular groupings.
Syntax
~ a (bitwise NOT)
where the argument a may be a further expression. It is converted to the nearest integer to machine precision and then the operation is performed.
See Also
&, | #
251
#
# Bitwise NON EQUIVALENCE operator.
Description
The bitwise operators perform operations of bitwise AND, bitwise OR, bitwise NOT and bitwise nonequivalence. The priority of these operators is less binding that the arithmetic ones, but more binding that the comparisons. Parentheses may be used as above to force particular groupings.
Syntax
a # b (bitwise NON EQUIVALENCE)
where the arguments a and b may be further expressions. They are converted to the nearest integer to machine precision and then the operation is performed.
See Also
&, |
252
a
a Converts a k-rate parameter to an a-rate value with interpolation.
Description
Converts a k-rate parameter to an a-rate value with interpolation.
Syntax
a(x) (control-rate args only)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the a opcode. It uses the file opa.csd [examples/opa.csd].
253
i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
See Also
i, k
Credits
Author: Gabriel Maldonado New in version 4.21
254
abetarand
abetarand Deprecated.
Description
Deprecated as of version 3.49. Use the betarand opcode instead.
255
abexprnd
abexprnd Deprecated.
Description
Deprecated as of version 3.49. Use the bexprnd opcode instead.
256
abs
abs Returns an absolute value.
Description
Returns the absolute value of x.
Syntax
abs(x) (no rate restriction)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the abs opcode. It uses the file abs.csd [examples/abs.csd].
257
See Also
exp, frac, int, log, log10, i, sqrt
258
acauchy
acauchy Deprecated.
Description
Deprecated as of version 3.49. Use the cauchy opcode instead.
259
active
active Returns the number of active instances of an instrument.
Description
Returns the number of active instances of an instrument.
Syntax
ir active insnum [,iopt] ir active Sinsname [,iopt] kres active kinsnum [,iopt]
Initialization
insnum -- number or string name of the instrument to be reported Sinsname -- instrument name iopt -- select currently active (zero, default), or all every active (non zero)
Performance
kinsnum -- number or string name of the instrument to be reported active returns the number of active instances of instrument number insnum/kinsnum (or named instrument Sinsname). As of Csound 4.17 the output is updated at k-rate (if input arg is k-rate), to allow running count of instr instances.
Examples
Here is a simple example of the active opcode. It uses the file active.csd [examples/active.csd].
260
kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a noisy waveform. instr 1 ; Generate a really noisy waveform. anoisy rand 44100 ; Turn down its amplitude. aoutput gain anoisy, 2500 ; Send it to the output. out aoutput endin ; Instrument #2 - counts active instruments. instr 2 ; Count the active instances of Instrument #1. icount active 1 ; Print the number of active instances. print icount endin </CsInstruments> <CsScore> ; Start the first instance of Instrument #1 at 0:00 seconds. i 1 0.0 3.0 ; Start the second instance of Instrument #1 at 0:015 seconds. i 1 1.5 1.5 ; Play Instrument #2 at 0:01 seconds, when we have only ; one active instance of Instrument #1. i 2 1.0 0.1 ; Play Instrument #2 at 0:02 seconds, when we have ; two active instances of Instrument #1. i 2 2.0 0.1 e </CsScore> </CsoundSynthesizer>
Here is a more advanced example of the active opcode. It displays the results of the active opcode at krate instead of i-rate. It uses the file active_k.csd [examples/active_k.csd].
261
; Instrument #1 - a noisy waveform. instr 1 ; Generate a really noisy waveform. anoisy rand 44100 ; Turn down its amplitude. aoutput gain anoisy, 2500 ; Send it to the output. out aoutput endin ; Instrument #2 - counts active instruments at k-rate. instr 2 ; Count the active instances of Instrument #1. kcount active 1 ; Print the number of active instances. printk2 kcount endin </CsInstruments> <CsScore> ; Start the first instance of Instrument #1 at 0:00 seconds. i 1 0.0 3.0 ; Start the second instance of Instrument #1 at 0:015 seconds. i 1 1.5 1.5 ; Play Instrument #2 at 0:01 seconds, when we have only ; one active instance of Instrument #1. i 2 1.0 0.1 ; Play Instrument #2 at 0:02 seconds, when we have ; two active instances of Instrument #1. i 2 2.0 0.1 e </CsScore> </CsoundSynthesizer>
Here is another example of the active opcode, using the number of instances to calculate gain. It uses the file active_scale.csd [examples/active_scale.csd].
262
asig oscili kamp, p4, 1 kenv linseg 0, 0.1,1,p3-0.2,1,0.1, 0 out asig*kenv endin </CsInstruments> <CsScore> f1 0 16384 10 1 i1 0 10 440 i1 1 3 220 i1 2 5 350 i1 4 3 700 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK July, 1999 Examples written by Kevin Conder. New in Csound version 3.57; named instruments added version 5.13 Option for all ever active new in 5.13
263
adsr
adsr Calculates the classical ADSR envelope using linear segments.
Description
Calculates the classical ADSR envelope using linear segments.
Syntax
ares adsr iatt, idec, islev, irel [, idel] kres adsr iatt, idec, islev, irel [, idel]
Initialization
iatt -- duration of attack phase idec -- duration of decay islev -- level for sustain phase irel -- duration of release phase idel -- period of zero before the envelope starts
Performance
The envelope generated is the range 0 to 1 and may need to be scaled further, depending on the amplitude required. If using 0dbfs = 1, scaling down will probably be required since playing more than one note might result in clipping. If not using 0dbfs, scaling to a large amplitude (e.g. 32000) might be required. The envelope may be described as:
264
Picture of an ADSR envelope. The length of the sustain is calculated from the length of the note. This means adsr is not suitable for use with MIDI events. The opcode madsr uses the linsegr mechanism, and so can be used in MIDI applications. adsr is new in Csound version 3.49.
Examples
Here is an example of the adsr opcode. It uses the file adsr.csd [examples/adsr.csd].
kenv adsr iatt, idec, islev, irel kcps = cpspch(p4) ;frequency asig vco2 kenv * 0.8, kcps outs asig, asig endin </CsInstruments> <CsScore> i 1 i 1 i 1 e </CsScore> </CsoundSynthesizer> 0 2 4 1 1 2 7.00 7.02 6.09 .0001 1 .5 .0001 1 .01 .001 ; short attack .01 .001 ; long attack 1 .1 .7 ; long release
See Also
madsr, mxadsr, xadsr
265
Credits
Author: John ffitch New in version 3.49
266
adsyn
adsyn Output is an additive set of individually controlled sinusoids, using an oscillator bank.
Description
Output is an additive set of individually controlled sinusoids, using an oscillator bank.
Syntax
ares adsyn kamod, kfmod, ksmod, ifilcod
Initialization
ifilcod -- integer or character-string denoting a control-file derived from analysis of an audio signal. An integer denotes the suffix of a file adsyn.m or pvoc.m; a character-string (in double quotes) gives a filename, optionally a full pathname. If not fullpath, the file is sought first in the current directory, then in the one given by the environment variable SADIR (if defined). adsyn control contains breakpoint amplitude- and frequency-envelope values organized for oscillator resynthesis, while pvoc control contains similar data organized for fft resynthesis. Memory usage depends on the size of the files involved, which are read and held entirely in memory during computation but are shared by multiple calls (see also lpread).
Performance
kamod -- amplitude factor of the contributing partials. kfmod -- frequency factor of the contributing partials. It is a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. ksmod -- speed factor of the contributing partials. adsyn synthesizes complex time-varying timbres through the method of additive synthesis. Any number of sinusoids, each individually controlled in frequency and amplitude, can be summed by high-speed arithmetic to produce a high-fidelity result. Component sinusoids are described by a control file describing amplitude and frequency tracks in millisecond breakpoint fashion. Tracks are defined by sequences of 16-bit binary integers: -1, time, amp, time, amp,... -2, time, freq, time, freq,... such as from hetrodyne filter analysis of an audio file. (For details see hetro.) The instantaneous amplitude and frequency values are used by an internal fixed-point oscillator that adds each active partial into an accumulated output signal. While there is a practical limit (limit removed in version 3.47) on the number of contributing partials, there is no restriction on their behavior over time. Any sound that can be described in terms of the behavior of sinusoids can be synthesized by adsyn alone. Sound described by an adsyn control file can also be modified during re-synthesis. The signals kamod, kfmod, ksmod will modify the amplitude, frequency, and speed of contributing partials. These are multiplying factors, with kfmod modifying the frequency and ksmod modifying the speed with which the 267
millisecond breakpoint line-segments are traversed. Thus .7, 1.5, and 2 will give rise to a softer sound, a perfect fifth higher, but only half as long. The values 1,1,1 will leave the sound unmodified. Each of these inputs can be a control signal.
Examples
Here is an example of the adsyn opcode. It uses the file adsyn.csd [examples/adsyn.csd], and kickroll.het [examples/kickroll.het]. The file kickroll.het was created by using the hetro utility with the audio file kickroll.wav [examples/kickroll.wav].
268
adsynt
adsynt Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic.
Description
Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic.
Syntax
ares adsynt kamp, kcps, iwfn, ifreqfn, iampfn, icnt [, iphs]
Initialization
iwfn -- table containing a waveform, usually a sine. Table values are not interpolated for performance reasons, so larger tables provide better quality. ifreqfn -- table containing frequency values for each partial. ifreqfn may contain beginning frequency values for each partial, but is usually used for generating parameters at runtime with tablew. Frequencies must be relative to kcps. Size must be at least icnt. iampfn -- table containing amplitude values for each partial. iampfn may contain beginning amplitude values for each partial, but is usually used for generating parameters at runtime with tablew. Amplitudes must be relative to kamp. Size must be at least icnt. icnt -- number of partials to be generated iphs -- initial phase of each oscillator, if iphs = -1, initialization is skipped. If iphs > 1, all phases will be initialized with a random value.
Performance
kamp -- amplitude of note kcps -- base frequency of note. Partial frequencies will be relative to kcps. Frequency and amplitude of each partial is given in the two tables provided. The purpose of this opcode is to have an instrument generate synthesis parameters at k-rate and write them to global parameter tables with the tablew opcode.
Examples
Here is an example of the adsynt opcode. It uses the file adsynt.csd [examples/adsynt.csd]. These two instruments perform additive synthesis. The output of each sounds like a Tibetan bowl. The first one is static, as parameters are only generated at init-time. In the second one, parameters are continuously changed.
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o adsynt.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ; Generate a sinewave table. giwave ftgen 1, 0, 1024, 10, 1 ; Generate two empty tables for adsynt. gifrqs ftgen 2, 0, 32, 7, 0, 32, 0 ; A table for freqency and amp parameters. giamps ftgen 3, 0, 32, 7, 0, 32, 0 ; Generates parameters at init time instr 1 ; Generate 10 voices. icnt = 10 ; Init loop index. index = 0 ; Loop only executed at init time. loop: ; Define non-harmonic partials. ifreq pow index + 1, 1.5 ; Define amplitudes. iamp = 1 / (index+1) ; Write to tables. tableiw ifreq, index, gifrqs ; Used by adsynt. tableiw iamp, index, giamps index = index + 1 ; Do loop/ if (index < icnt) igoto loop asig adsynt 0.3, 150, giwave, gifrqs, giamps, icnt outs asig, asig endin ; Generates parameters every k-cycle. instr 2 ; Generate 10 voices. icnt = 10 ; Reset loop index. kindex = 0 ; Loop executed every k-cycle. loop: ; Generate lfo for frequencies. kspeed pow kindex + 1, 1.6 ; Individual phase for each voice. kphas phasorbnk kspeed * 0.7, kindex, icnt klfo table kphas, giwave, 1 ; Arbitrary parameter twiddling... kdepth pow 1.4, kindex kfreq pow kindex + 1, 1.5 kfreq = kfreq + klfo*0.006*kdepth ; Write freqs to table for adsynt. tablew kfreq, kindex, gifrqs ; Generate lfo for amplitudes. kspeed pow kindex + 1, 0.8 ; Individual phase for each voice. kphas phasorbnk kspeed*0.13, kindex, icnt, 2 klfo table kphas, giwave, 1 ; Arbitrary parameter twiddling... kamp pow 1 / (kindex + 1), 0.4 kamp = kamp * (0.3+0.35*(klfo+1))
270
; Write amps to table for adsynt. tablew kamp, kindex, giamps kindex = kindex + 1 ; Do loop. if (kindex < icnt) kgoto loop asig adsynt 0.25, 150, giwave, gifrqs, giamps, icnt outs asig, asig endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for 2.5 seconds. 1 0 2.5 Play Instrument #2 for 2.5 seconds. 2 3 2.5
</CsScore> </CsoundSynthesizer>
Credits
Author: Peter Neubcker Munich, Germany August, 1999 New in Csound version 3.58
271
adsynt2
adsynt2 Performs additive synthesis with an arbitrary number of partials -not necessarily harmonicwith interpolation.
Description
Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic. (see adsynt for detailed manual)
Syntax
ar adsynt2 kamp, kcps, iwfn, ifreqfn, iampfn, icnt [, iphs]
Initialization
iwfn -- table containing a waveform, usually a sine. Table values are not interpolated for performance reasons, so larger tables provide better quality. ifreqfn -- table containing frequency values for each partial. ifreqfn may contain beginning frequency values for each partial, but is usually used for generating parameters at runtime with tablew. Frequencies must be relative to kcps. Size must be at least icnt. iampfn -- table containing amplitude values for each partial. iampfn may contain beginning amplitude values for each partial, but is usually used for generating parameters at runtime with tablew. Amplitudes must be relative to kamp. Size must be at least icnt. icnt -- number of partials to be generated iphs -- initial phase of each oscillator, if iphs = -1, initialization is skipped. If iphs > 1, all phases will be initialized with a random value.
Performance
kamp -- amplitude of note kcps -- base frequency of note. Partial frequencies will be relative to kcps. Frequency and amplitude of each partial is given in the two tables provided. The purpose of this opcode is to have an instrument generate synthesis parameters at k-rate and write them to global parameter tables with the tablew opcode. adsynt2 is identical to adsynt (by Peter Neubcker), except it provides linear interpolation for amplitude envelopes of each partial. It is a bit slower than adsynt, but interpolation higly improves sound quality in fast amplitude envelope transients when kr < sr (i.e. when ksmps > 1). No interpolation is provided for pitch envelopes, since in this case sound quality degradation is not so evident even with high values of ksmps. It is not recommended when kr = sr, in this case adsynt is better (since it is faster).
Examples
Here is an example of the adsynt2 opcode. It uses the file adsynt2.csd [examples/adsynt2.csd]. These two instruments perform additive synthesis. The output of each sounds like a Tibetan bowl. The first one 272
is static, as parameters are only generated at init-time. In the second one, parameters are continuously changed.
273
tablew kfreq, kindex, gifrqs ; Generate lfo for amplitudes. kspeed pow kindex + 1, 0.8 ; Individual phase for each voice. kphas phasorbnk kspeed*0.13, kindex, icnt, 2 klfo table kphas, giwave, 1 ; Arbitrary parameter twiddling... kamp pow 1 / (kindex + 1), 0.4 kamp = kamp * (0.3+0.35*(klfo+1)) ; Write amps to table for adsynt2. tablew kamp, kindex, giamps kindex = kindex + 1 ; Do loop. if (kindex < icnt) kgoto loop asig adsynt2 0.25, 150, giwave, gifrqs, giamps, icnt outs asig, asig endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for 2.5 seconds. 1 0 2.5 Play Instrument #2 for 2.5 seconds. 2 3 2.5
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
274
aexprand
aexprand Deprecated.
Description
Deprecated as of version 3.49. Use the exprand opcode instead.
275
aftouch
aftouch Get the current after-touch value for this channel.
Description
Get the current after-touch value for this channel.
Syntax
kaft aftouch [imin] [, imax]
Initialization
imin (optional, default=0) -- minimum limit on values obtained. imax (optional, default=127) -- maximum limit on values obtained.
Performance
Get the current after-touch value for this channel.
Examples
Here is an example of the aftouch opcode. It uses the file aftouch.csd [examples/aftouch.csd].
276
See Also
ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997
277
agauss
agauss Deprecated.
Description
Deprecated as of version 3.49. Use the gauss opcode instead.
278
agogobel
agogobel Deprecated.
Description
New in version 3.47 Deprecated as of version 3.52. Use the gogobel opcode instead.
279
alinrand
alinrand Deprecated.
Description
Deprecated as of version 3.49. Use the linrand opcode instead.
280
alpass
alpass Reverberates an input signal with a flat frequency response.
Description
Reverberates an input signal with a flat frequency response.
Syntax
ares alpass asig, krvt, ilpt [, iskip] [, insmps]
Initialization
ilpt -- loop time in seconds, which determines the echo density of the reverberation. This in turn characterizes the color of the filter whose frequency response curve will contain ilpt * sr/2 peaks spaced evenly between 0 and sr/2 (the Nyquist frequency). Loop time can be as large as available memory will permit. The space required for an n second loop is 4n*sr bytes. The delay space is allocated and returned as in delay. iskip (optional, default=0) -- initial disposition of delay-loop data space (cf. reson). The default value is 0. insmps (optional, default=0) -- delay amount, as a number of samples.
Performance
krvt -- the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). This filter reiterates the input with an echo density determined by loop time ilpt. The attenuation rate is independent and is determined by krvt, the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). Output will begin to appear immediately.
Examples
Here is an example of the alpass opcode. It uses the file alpass.csd [examples/alpass.csd].
281
sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gamix init 0 instr 1 kcps expon p4, p3, p5 asig vco2 0.6, kcps outs asig, asig gamix = gamix + asig endin instr 99 krvt = 3.5 ilpt = 0.1 aleft alpass gamix, krvt*1.5, ilpt aright alpass gamix, krvt, ilpt*2 outs aleft, aright gamix = 0 ; clear mixer endin </CsInstruments> <CsScore> i 1 0 3 20 2000 i 99 0 8 e </CsScore> </CsoundSynthesizer>
See Also
comb, reverb, valpass, vcomb
Credits
Author: William Pete Moss (vcomb and valpass) University of Texas at Austin Austin, Texas USA January 2002
282
alwayson
alwayson Activates the indicated instrument in the orchestra header, without need for an i statement.
Description
Activates the indicated instrument in the orchestra header, without need for an i statement. Instruments must be activated in the same order as they are defined. The alwayson opcode is designed to simplify the definition of re-usable orchestras with signal processing or effects chains and networks.
Syntax
alwayson Tinstrument [p4, ..., pn]
Initialization
Tinstrument -- String name of the instrument definition to be turned on. [p4, ..., pn] -- Optional pfields to be passed to the instrument, in the same order and type as if this were an i statement. When the instrument is activated, p1 is the insno, p2 is 0, and p3 is -1. Pfields from p4 on may optionally be sent to the instrument.
Examples
Here is an example of the alwayson opcode. It uses the file alwayson.csd [examples/alwayson.csd].
283
; Turn on the "effect" units in the signal flow graph. alwayson "Reverberator", 0.91, 12000 alwayson "Compressor" alwayson "Soundfile" ; Define instruments and effects in order of signal flow. instr SimpleSine ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Default values: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 pset 0, 0, 10, 0, 0, 0, 0.5 iattack = 0.015 idecay = 0.07 isustain = p3 irelease = 0.3 p3 = iattack + idecay + isustain + irelease adamping linsegr 0.0, iattack, 1.0, idecay + isustain, 1.0, irelease, 0.0 iHz = cpsmidinn(p4) ; Rescale MIDI velocity range to a musically usable range of dB. iamplitude = ampdb(p5 / 127 * 15.0 + 60.0) ; Use ftgenonce instead of ftgen, ftgentmp, or f statement. icosine ftgenonce 0, 0, 65537, 11, 1 aoscili oscili iamplitude, iHz, icosine aadsr madsr iattack, idecay, 0.6, irelease asignal = aoscili * aadsr aleft, aright pan2 asignal, p7 ; Stereo audio output to be routed in the orchestra header. outleta "leftout", aleft outleta "rightout", aright endin instr Moogy ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Default values: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 pset 0, 0, 10, 0, 0, 0, 0.5 iattack = 0.003 isustain = p3 irelease = 0.05 p3 = iattack + isustain + irelease adamping linsegr 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0 iHz = cpsmidinn(p4) ; Rescale MIDI velocity range to a musically usable range of dB. iamplitude = ampdb(p5 / 127 * 20.0 + 60.0) print iHz, iamplitude ; Use ftgenonce instead of ftgen, ftgentmp, or f statement. isine ftgenonce 0, 0, 65537, 10, 1 asignal vco iamplitude, iHz, 1, 0.5, isine kfco line 2000, p3, 200 krez = 0.8 asignal moogvcf asignal, kfco, krez, 100000 asignal = asignal * adamping aleft, aright pan2 asignal, p7 ; Stereo audio output to be routed in the orchestra header. outleta "leftout", aleft outleta "rightout", aright endin instr Reverberator ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" idelay = p4 icutoff = p5 aleft, aright reverbsc aleftin, arightin, idelay, icutoff ; Stereo output. outleta "leftout", aleft outleta "rightout", aright endin instr Compressor ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Stereo input. inleta "leftin" inleta "rightin"
aleftin arightin
284
25000 0.5 0.763 0.1 0.1 aleftin, kthreshold, icomp1, icomp2, irtime, iftim arightin, kthreshold, icomp1, icomp2, irtime, ift "leftout", aleftout "rightout", arightout
aleftin arightin
instr Soundfile ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Stereo input. inleta "leftin" inleta "rightin" outs aleftin, arightin endin
</CsInstruments> <CsScore> ; It is not necessary to activate "effects" or create f-tables in the score! ; Overlapping notes create new instances of instruments with proper connections. i i i i ; e "SimpleSine" 1 "SimpleSine" 2 "Moogy" 3 5 67 "Moogy" 4 5 71 1 extra second 1 5 60 85 5 64 80 75 70 after the performance
</CsScore> </CsoundSynthesizer>
Credits
By: Michael Gogins 2009
285
ampdb
ampdb Returns the amplitude equivalent of the decibel value x.
Description
Returns the amplitude equivalent of the decibel value x. Thus: 60 dB = 1000 66 dB = 1995.262 72 dB = 3891.07 78 dB = 7943.279 84 dB = 15848.926 90 dB = 31622.764
Syntax
ampdb(x) (no rate restriction)
Examples
Here is an example of the ampdb opcode. It uses the file ampdb.csd [examples/ampdb.csd].
286
See Also
ampdbfs, db, dbamp, dbfsamp
287
ampdbfs
ampdbfs Returns the amplitude equivalent (in 16-bit signed integer scale) of the full scale decibel (dB FS) value x.
Description
Returns the amplitude equivalent of the full scale decibel (dB FS) value x. The logarithmic full scale decibel values will be converted to linear 16-bit signed integer values from #32,768 to +32,767.
Syntax
ampdbfs(x) (no rate restriction)
Examples
Here is an example of the ampdbfs opcode. It uses the file ampdbfs.csd [examples/ampdbfs.csd].
</CsScore> </CsoundSynthesizer>
288
See Also
ampdb, dbamp, dbfsamp, 0dbfs New in Csound version 4.10
289
ampmidi
ampmidi Get the velocity of the current MIDI event.
Description
Get the velocity of the current MIDI event.
Syntax
iamp ampmidi iscal [, ifn]
Initialization
iscal -- i-time scaling factor ifn (optional, default=0) -- function table number of a normalized translation table, by which the incoming value is first interpreted. The default value is 0, denoting no translation.
Performance
Get the velocity of the current MIDI event, optionally pass it through a normalized translation table, and return an amplitude value in the range 0 - iscal.
Examples
Here is an example of the ampmidi opcode. It uses the file ampmidi.csd [examples/ampmidi.csd].
iamp ampmidi 1 ; scale amplitude between 0 and 1 asig oscil iamp, 220, 1 print iamp outs asig, asig endin
290
</CsInstruments> <CsScore> ;Dummy f-table for 1 minute f 0 60 ;sine wave. f 1 0 16384 10 1 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997
291
ampmidid
ampmidid Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels.
Description
Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels.
Syntax
iamplitude ampmidid ivelocity, idecibels kamplitude ampmidid kvelocity, idecibels
Initialization
iamplitude -- Amplitude. ivelocity -- MIDI velocity number, ranging from 0 through 127. idecibels -- Desired dynamic range in decibels.
Performance
kamplitude -- Amplitude. kvelocity -- MIDI velocity number, ranging from 0 through 127. Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels: a = (m * v + b) ^ 2, where a = amplitude, v = MIDI velocity, r = 10 ^ (R / 20), b = 127 / (126 * sqrt( r )) - 1 / 126, m = (1 - b) / 127, and R = specified dynamic range in decibels. See Roger Dannenberg, "The Interpretation of MIDI Velocity," in Georg Essl and Ichiro Fujinaga (Eds.), Proceedings of the 2006 International Computer Music Conference, November 6-11, 2006 (San Francisco: The International Computer Music Association), pp. 193-196.
Examples
Here is an example of the ampmidid opcode. It uses the file ampmidid.csd [examples/ampmidid.csd].
292
; -o ampmidid.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 massign 0, 1 ;assign all midi to instr. 1 instr 1 isine ftgenonce 0, 0, 4096, 10, 1 ;sine wave ihz = cpsmidinn(p4) ivelocity = p5 idb ampmidid ivelocity, 20 ;map to dynamic range of 20 dB. idb = idb + 60 ;limit range to 60 to 80 decibels iamplitude = ampdb(idb) ;loudness in dB to signal amplitude a1 oscili iamplitude, ihz, isine aenv madsr 0.05, 0.1, 0.5, 0.2 asig = a1 * aenv outs asig, asig endin </CsInstruments> <CsScore> ; note velocity i 1 0 2 61 100 i 1 + 2 65 10 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Michael Gogins 2006
293
apcauchy
apcauchy Deprecated.
Description
Deprecated as of version 3.49. Use the pcauchy opcode instead.
294
apoisson
apoisson Deprecated.
Description
Deprecated as of version 3.49. Use the poisson opcode instead.
295
apow
apow Deprecated.
Description
Deprecated as of version 3.48. Use the pow opcode instead.
296
areson
areson A notch filter whose transfer functions are the complements of the reson opcode.
Description
A notch filter whose transfer functions are the complements of the reson opcode.
Syntax
ares areson asig, kcf, kbw [, iscl] [, iskip]
Initialization
iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
ares -- the output signal at audio rate. asig -- the input signal at audio rate. kcf -- the center frequency of the filter, or frequency position of the peak response. kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points). areson is a filter whose transfer functions is the complement of reson. Thus areson is a notch filter whose transfer functions represents the filtered out aspects of their complements. However, power scaling is not normalized in areson but remains the true complement of the corresponding unit. Thus an audio signal, filtered by parallel matching reson and areson units, would under addition simply reconstruct the original spectrum. This property is particularly useful for controlled mixing of different sources (see lpreson). Complex response curves such as those with multiple peaks can be obtained by using a bank of suitable filters in series. (The resultant response is the product of the component responses.) In such cases, the combined attenuation may result in a serious loss of signal power, but this can be regained by the use of balance.
Examples
Here is an example of the areson opcode. It uses the file areson.csd [examples/areson.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o areson.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; unfiltered noise asig rand 0.5 outs asig, asig endin ; white noise signal.
instr 2 ; filtered noise kcf kbw asig afil afil init 1000 init 100 rand 0.5 areson asig, kcf, kbw balance afil,asig outs afil, afil endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
See Also
aresonk, atone, atonek, port, portk, reson, resonk, tone, tonek
298
aresonk
aresonk A notch filter whose transfer functions are the complements of the reson opcode.
Description
A notch filter whose transfer functions are the complements of the reson opcode.
Syntax
kres aresonk ksig, kcf, kbw [, iscl] [, iskip]
Initialization
iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kres -- the output signal at control-rate. ksig -- the input signal at control-rate. kcf -- the center frequency of the filter, or frequency position of the peak response. kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points). aresonk is a filter whose transfer functions is the complement of resonk. Thus aresonk is a notch filter whose transfer functions represents the filtered out aspects of their complements. However, power scaling is not normalized in aresonk but remains the true complement of the corresponding unit.
Examples
Here is an example of the aresonk opcode. It uses the file aresonk.csd [examples/aresonk.csd].
299
-odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o aresonk.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gisin ftgen 0, 0, 2^10, 10, 1 instr 1 ksig randomh 400, 1800, 150 aout poscil .2, 1000+ksig, gisin outs aout, aout endin instr 2 ksig randomh 400, 1800, 150 kbw line 1, p3, 600 ; vary bandwith ksig aresonk ksig, 800, kbw aout poscil .2, 1000+ksig, gisin outs aout, aout endin </CsInstruments> <CsScore> i 1 0 5 i 2 5.5 5 e </CsScore> </CsoundSynthesizer>
See Also
areson, atone, atonek, port, portk, reson, resonk, tone, tonek
300
atone
atone A hi-pass filter whose transfer functions are the complements of the tone opcode.
Description
A hi-pass filter whose transfer functions are the complements of the tone opcode.
Syntax
ares atone asig, khp [, iskip]
Initialization
iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
ares -- the output signal at audio rate. asig -- the input signal at audio rate. khp -- the response curve's half-power point, in Hertz. Half power is defined as peak power / root 2. atone is a filter whose transfer functions is the complement of tone. atone is thus a form of high-pass filter whose transfer functions represent the filtered out aspects of their complements. However, power scaling is not normalized in atone but remains the true complement of the corresponding unit. Thus an audio signal, filtered by parallel matching tone and atone units, would under addition simply reconstruct the original spectrum. This property is particularly useful for controlled mixing of different sources (see lpreson). Complex response curves such as those with multiple peaks can be obtained by using a bank of suitable filters in series. (The resultant response is the product of the component responses.) In such cases, the combined attenuation may result in a serious loss of signal power, but this can be regained by the use of balance.
Examples
Here is an example of the atone opcode. It uses the file atone.csd [examples/atone.csd].
301
; For Non-realtime ouput leave only the line below: ; -o atone.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;white noise asig rand 1 outs asig, asig endin instr 2 ;filtered noise asig rand 1 khp init 4000 asig atone asig, khp outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
See Also
areson, aresonk, atonek, port, portk, reson, resonk, tone, tonek
302
atonek
atonek A hi-pass filter whose transfer functions are the complements of the tonek opcode.
Description
A hi-pass filter whose transfer functions are the complements of the tonek opcode.
Syntax
kres atonek ksig, khp [, iskip]
Initialization
iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kres -- the output signal at control-rate. ksig -- the input signal at control-rate. khp -- the response curve's half-power point, in Hertz. Half power is defined as peak power / root 2. atonek is a filter whose transfer functions is the complement of tonek. atonek is thus a form of high-pass filter whose transfer functions represent the filtered out aspects of their complements. However, power scaling is not normalized in atonek but remains the true complement of the corresponding unit.
Examples
Here is an example of the atonek opcode. It uses the file atonek.csd [examples/atonek.csd].
303
instr 1 ksig randomh 400, 1800, 150 aout poscil .2, 1000+ksig, gisin outs aout, aout endin instr 2 ksig randomh 400, 1800, 150 khp line 1, p3, 400 ;vary high-pass ksig atonek ksig, khp aout poscil .2, 1000+ksig, gisin outs aout, aout endin </CsInstruments> <CsScore> i 1 0 5 i 2 5.5 5 e </CsScore> </CsoundSynthesizer>
See Also
areson, aresonk, atone, port, portk, reson, resonk, tone, tonek
Credits
Author: Robin Whittle Australia May 1997
304
atonex
atonex Emulates a stack of filters using the atone opcode.
Description
atonex is equivalent to a filter consisting of more layers of atone with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and kcycle are needed at time and the audio loop falls entirely inside the cache memory of processor.
Syntax
ares atonex asig, khp [, inumlayer] [, iskip]
Initialization
inumlayer (optional) -- number of elements in the filter stack. Default value is 4. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal khp -- the response curve's half-power point. Half power is defined as peak power / root 2.
Examples
Here is an example of the atonex opcode. It uses the file atonex.csd [examples/atonex.csd].
305
endin instr 2 ; filtered noise asig rand 0.7 khp line 100, p3, 3000 afilt atonex asig, khp, 32 ; Clip the filtered signal's amplitude to 85 dB. a1 clip afilt, 2, ampdb(85) outs a1, a1 endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
See Also
resonx, tonex
Credits
Author: Gabriel Maldonado (adapted by John ffitch) Italy New in Csound version 3.49
306
atrirand
atrirand Deprecated.
Description
Deprecated as of version 3.49. Use the trirand opcode instead.
307
ATSadd
ATSadd uses the data from an ATS analysis file to perform additive synthesis.
Description
ATSadd reads from an ATS analysis file and uses the data to perform additive synthesis using an internal array of interpolating oscillators.
Syntax
ar ATSadd ktimepnt, kfmod, iatsfile, ifn, ipartials[, ipartialoffset, \ ipartialincr, igatefn]
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. ifn table number of a stored function containing a sine wave for ATSadd and a cosine for ATSaddnz (see examples below for more info) ipartials number of partials that will be used in the resynthesis (the noise has a maximum of 25 bands) ipartialoffset (optional) is the first partial used (defaults to 0). ipartialincr (optional) sets an increment by which these synthesis opcodes counts up from ipartialoffset for ibins components in the re-synthesis (defaults to 1). igatefn (optional) is the number of a stored function which will be applied to the amplitudes of the analysis bins before resynthesis takes place. If igatefn is greater than 0 the amplitudes of each bin will be scaled by igatefn through a simple mapping process. First, the amplitudes of all of the bins in all of the frames in the entire analysis file are compared to determine the maximum amplitude value. This value is then used to create normalized amplitudes as indices into the stored function igatefn. The maximum amplitude will map to the last point in the function. An amplitude of 0 will map to the first point in the function. Values between 0 and 1 will map accordingly to points along the function table. See the examples below.
Performance
ktimepnt The time pointer in seconds used to index the ATS file. Used for ATSadd exactly the same as for pvoc. ATSadd and ATSaddnz are based on pvadd by Richard Karpen and use files created by Juan Pampin's ATS (Analysis - Transformation - Synthesis [http://www-ccrma.stanford.edu/~juan/ATS.html]). kfmod A control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. Used for ATSadd exactly the same as for pvoc. ATSadd reads from an ATS analysis file and uses the data to perform additive synthesis using an internal array of interpolating oscillators. The user supplies the wave table (usually one period of a sine wave), and can choose which analysis partials will be used in the re-synthesis.
308
Examples
ktime line 0, p3, 2.5 asig ATSadd ktime, 1, "clarinet.ats", 1, 20, 2
In the example above, ipartials is 20 and ipartialoffset is 2. This will synthesize the 3rd thru 22nd partials in the "clarinet.ats" analysis file. kfmod is 1 so there will be no pitch transformation. Since the ktimepnt envelope moves from 0 to 2.5 over the duration of the note, the analysis file will be read from 0 to 2.5 seconds of the original duration of the analysis over the duration of the csound note, this way we can change the duration independent of the pitch.
Examples
Here is an another example of the ATSadd opcode. It uses the file ATSadd.csd [examples/ATSadd.csd].
In the above example we synthesize 20 partials as in example 1 except this time we're using a ipartialoffset of 0 and ipartialincr of 2, which means that we'll start from the first partial and synthesize 20 partials total, skipping every other one (ie. partial 1, 3, 5,..).
See also
ATSread, ATSreadnz, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSaddnz, ATSsinnoi
309
Credits
Author: Alex Norman Seattle,Washington 2004
310
ATSaddnz
ATSaddnz uses the data from an ATS analysis file to perform noise resynthesis.
Description
ATSaddnz reads from an ATS analysis file and uses the data to perform additive synthesis using a modified randi function.
Syntax
ar ATSaddnz ktimepnt, iatsfile, ibands[, ibandoffset, ibandincr]
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. ibands number of noise bands that will be used in the resynthesis (the noise has a maximum of 25 bands) ibandoffset (optional) is the first noise band used (defaults to 0). ibandincr (optional) sets an increment by which these synthesis opcodes counts up from ibandoffset for ibins components in the re-synthesis (defaults to 1).
Performance
ktimepnt The time pointer in seconds used to index the ATS file. Used for ATSaddnz exactly the same as for pvoc and ATSadd. ATSaddnz and ATSadd are based on pvadd by Richard Karpen and use files created by Juan Pampin's ATS (Analysis - Transformation - Synthesis [http://www-ccrma.stanford.edu/~juan/ATS.html]). ATSaddnz also reads from an ATS file but it resynthesizes the noise from noise energy data contained in the ATS file. It uses a modified randi function to create band limited noise and modulates that with a cosine wave, to synthesize a user specified selection of frequency bands. Modulating the noise is required to put the band limited noise in the correct place in the frequency spectrum.
Examples
ktime line 0, p3, 2.5 asig ATSaddnz ktime, "clarinet.ats", 25
In the example above we're synthesizing all 25 noise bands from the data contained in the ATS analysis file called "clarinet.ats".
Examples
Here is an another example of the ATSaddnz opcode. It uses the file ATSaddnz.csd [examples/ATSaddnz.csd]. 311
Here we synthesize only the 25th noise band (ibandoffset of 24 and ibands of 1).
See also
ATSread, ATSreadnz, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSaddnz, ATSsinnoi
Credits
Author: Alex Norman Seattle,Washington 2004
312
ATSbufread
ATSbufread reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs.
Description
ATSbufread reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs.
Syntax
ATSbufread ktimepnt, kfmod, iatsfile, ipartials[, ipartialoffset, \ ipartialincr]
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. ipartials number of partials that will be used in the resynthesis (the noise has a maximum of 25 bands) ipartialoffset (optional) is the first partial used (defaults to 0). ipartialincr (optional) sets an increment by which these synthesis opcodes counts up from ipartialoffset for ibins components in the re-synthesis (defaults to 1).
Performance
ktimepnt The time pointer in seconds used to index the ATS file. Used for ATSbufread exactly the same as for pvoc. kfmod an input for performing pitch transposition or frequency modulation on all of the synthesized partials, if no fm or pitch change is desired then use a 1 for this value. ATSbufread is based on pvbufread by Richard Karpen. ATScross, ATSinterpread and ATSpartialtap are all dependent on ATSbufread just as pvcross and pvinterp are on pvbufread. ATSbufread reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs. The data stored by an ATSbufread can only be accessed by other unit generators, and therefore, due to the architecture of Csound, an ATSbufread must come before (but not necessarily directly) any dependent unit generator. Besides the fact that ATSbufread doesn't output any data directly, it works almost exactly as ATSadd. The ugen uses a time pointer (ktimepnt) to index the data in time, ipartials, ipartialoffset and ipartialincr to select which partials to store in the table and kfmod to scale partials in frequency.
Examples
Here is an example of the ATSbufread opcode. It uses the file ATSbufread.csd [examples/ATSbufread.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc for RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o ATSbufread.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; "beats.ats" and "fox.ats" are created by atsa
ktime line 0, p3, 4 ktime2 line 0, p3, 4 kline expseg 0.001, .3, 1, p3-.3, 1 kline2 expseg 0.001, p3, 3 ATSbufread ktime2, 1, "fox.ats", 20 aout ATScross ktime, 2, "beats.ats", 1, kline, 0.001 * (4 - kline2), 180 outs aout*2, aout*2 endin </CsInstruments> <CsScore> ; sine wave. f 1 0 16384 10 1 i 1 0 4 e </CsScore> </CsoundSynthesizer>
See also
ATSread, ATSreadnz, ATSinfo, ATSsinnoi, ATScross, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz
Credits
Author: Alex Norman Seattle,Washington 2004
314
ATScross
ATScross perform cross synthesis from ATS analysis files.
Description
ATScross uses data from an ATS analysis file and data from an ATSbufread to perform cross synthesis.
Syntax
ar ATScross ktimepnt, kfmod, iatsfile, ifn, kmylev, kbuflev, ipartials \ [, ipartialoffset, ipartialincr]
Initialization
iatsfile integer or character-string denoting a control-file derived from ATS analysis of an audio signal. An integer denotes the suffix of a file ATS.m; a character-string (in double quotes) gives a filename, optionally a full pathname. If not full-path, the file is sought first in the current directory, then in the one given by the environment variable SADIR (if defined). ifn table number of a stored function containing a sine wave. ipartials number of partials that will be used in the resynthesis ipartialoffset (optional) is the first partial used (defaults to 0). ipartialincr (optional) sets an increment by which these synthesis opcodes counts up from ipartialoffset for ibins components in the re-synthesis (defaults to 1).
Performance
ktimepnt The time pointer in seconds used to index the ATS file. Used for ATScross exactly the same as for pvoc. kfmod an input for performing pitch transposition or frequency modulation on all of the synthesized partials, if no fm or pitch change is desired then use a 1 for this value. kmylev - scales the ATScross component of the frequency spectrum applied to the partials from the ATS file indicated by the ATScross opcode. The frequency spectrum information comes from the ATScross ATS file. A value of 1 (and 0 for kbuflev) gives the same results as ATSadd. kbuflev - scales the ATSbufread component of the frequency spectrum applied to the partials from the ATS file indicated by the ATScross opcode. The frequency spectrum information comes from the ATSbufread ATS file. A value of 1 (and 0 for kmylev) results in partials that have frequency information from the ATS file given by the ATScross, but amplitudes imposed by data from the ATS file given by ATSbufread. ATScross uses data from an ATS analysis file (indicated by iatsfile) and data from an ATSbufread to perform cross synthesis. ATScross uses ktimepnt, kfmod, ipartials, ipartialoffset and ipartialincr just like ATSadd. ATScross synthesizes a sine-wave for each partial selected by the user and uses the frequency of that partial (after scaling in frequency by kfmod) to index the table created by ATSbufread. Interpolation is used to get in-between values. ATScross uses the sum of the amplitude data from its ATS file (scaled by kmylev) and the amplitude data gained from an ATSbufread (scaled by kbuflev) to scale the 315
amplitude of each partial it synthesizes. Setting kmylev to one and kbuflev to zero will make ATScross act exactly like ATSadd. Setting kmylev to zero and kbuflev to one will produce a sound that has all the partials selected by the ATScross ugen, but with amplitudes taken from an ATSbufread. The time pointers of the ATSbufread and ATScross do not need to be the same.
Examples
Here is an example of the ATScross opcode. It uses the file ATScross.csd [examples/ATScross.csd].
ktime line 0, p3, 4 ktime2 line 0, p3, 4 kline expseg 0.001, .3, 1, p3-.3, 1 kline2 expseg 0.001, p3, 3 ATSbufread ktime2, 1, "fox.ats", 20 aout ATScross ktime, 2, "beats.ats", 1, kline, 0.001 * (4 - kline2), 180 outs aout*2, aout*2 endin </CsInstruments> <CsScore> ; sine wave. f 1 0 16384 10 1 i 1 0 4 e </CsScore> </CsoundSynthesizer>
This example performs cross synthesis using two ATS-files, "fox.ats" and "beats.ats". The result of this will be a sound that starts out with the shape (in frequency) of fox.ats, and ends with the shape of beats.ats. All the sine-wave frequencies come from beats.ats. The kbuflev value is scaled because the energy produced by applying fox.ats's frequency spectrum to beats.ats's partials is very large. Notice also that the time pointers of the ATSbufread (fox.ats) and ATScross (beats.ats) need not have the same value, this way you can read through the two ATS files at different rates.
See also
ATSread, ATSreadnz, ATSinfo, ATSsinnoi, ATSbufread, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz
Credits
316
317
ATSinfo
ATSinfo reads data out of the header of an ATS file.
Description
atsinfo reads data out of the header of an ATS file.
Syntax
idata ATSinfo iatsfile, ilocation
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. ilocation indicates which location in the header file to return. The data in the header gives information about the data contained in the rest of the ATS file. The possible values for ilocation are given in the following list: 0 - Sample rate (Hz) 1 - Frame Size (samples) 2 - Window Size (samples) 3 - Number of Partials 4 - Number of Frames 5 - Maximum Amplitude 6 - Maximum Frequency (Hz) 7 - Duration (seconds) 8 - ATS file Type
Performance
Macros can really improve the legibility of your csound code, I've provided my Macro Definitions below:
#define #define #define #define #define #define #define #define #define ATS_SAMP_RATE #0# ATS_FRAME_SZ #1# ATS_WIN_SZ #2# ATS_N_PARTIALS #3# ATS_N_FRAMES #4# ATS_AMP_MAX #5# ATS_FREQ_MAX #6# ATS_DUR #7# ATS_TYPE #8#
ATSinfo can be useful for writing generic instruments that will work with many ATS files, even if they 318
have different lengths and different numbers of partials etc. Example 2 is a simple application of this.
Examples
Here is an example of the ATSinfo opcode. It uses the file ATSinfo.csd [examples/ATSinfo.csd].
In the example above we use ATSinfo to retrieve the number of partials in the ATS file
Other examples
1.
imax_freq ATSinfo "cl.ats", $ATS_FREQ_MAX
In the example above we get the maximum frequency value from the ATS file "cl.ats" and store it in imax_freq. We use the Csound Macro (defined above) $ATS_FREQ_MAX, which is equivalent to the number 6. 2.
i_npartials i_dur ktimepnt aout ATSinfo ATSinfo line ATSadd p4, $ATS_N_PARTIALS p4, $ATS_DUR 0, p3, i_dur ktimepnt, 1, p4, 1, i_npartials
In the example above we use ATSinfo to retrieve the duration and number of partials in the ATS file indicated by p4. With this info we synthesize the partials using atsadd. Since the duration and number of partials are not "hard-coded" we can use this code with any ATS file.
See also
319
Credits
Author: Alex Norman Seattle,Washington 2004
320
ATSinterpread
ATSinterpread allows a user to determine the frequency envelope of any ATSbufread.
Description
ATSinterpread allows a user to determine the frequency envelope of any ATSbufread.
Syntax
kamp ATSinterpread kfreq
Performance
kfreq - a frequency value (given in Hertz) used by ATSinterpread as in index into the table produced by an ATSbufread. ATSinterpread takes a frequency value (kfreq in Hz). This frequency is used to index the data of an ATSbufread. The return value is an amplitude gained from the ATSbufread after interpolation. ATSinterpread allows a user to determine the frequency envelope of any ATSbufread. This data could be useful for an number of reasons, one might be performing cross synthesis of data from an ATS file and non ATS data.
Examples
Here is an example of the ATSinterpread opcode. It uses the file ATSinterpread.csd [examples/ ATSinterpread.csd].
321
This example shows how to use ATSinterpread. Here a frequency is given by the score (p4) and this frequency is given to an ATSinterpread (with a corresponding ATSbufread). The ATSinterpread uses this frequency to output a corresponding amplitude value, based on the atsfile given by the ATSbufread (beats.ats in this case). We then use that amplitude to scale a sine-wave that is synthesized with the same frequency (p4). You could extend this to include multiple sine-waves. This way you could synthesize any reasonable frequency (within the low and high frequencies of the indicated ATS file), and maintain the shape (in frequency) of the indicated atsfile (given by the ATSbufread).
See also
ATSread, ATSreadnz, ATSinfo, ATSsinnoi, ATSbufread, ATScross, ATSpartialtap, ATSadd, ATSaddnz
Credits
Author: Alex Norman Seattle,Washington 2004
322
ATSread
ATSread reads data from an ATS file.
Description
ATSread returns the amplitude (kamp) and frequency (kfreq) information of a user specified partial contained in the ATS analysis file at the time indicated by the time pointer ktimepnt.
Syntax
kfreq, kamp ATSread ktimepnt, iatsfile, ipartial
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. ipartial the number of the analysis partial to return the frequency in Hz and amplitude.
Performance
kfreq, kamp - outputs of the ATSread unit. These values represent the frequency and amplitude of a specific partial selected by the user using ipartial. The partials' informations are derived from an ATS analysis. ATSread linearly interpolates the frequency and amplitude between frames in the ATS analysis file at k-rate. The output is dependent on the data in the analysis file and the pointer ktimepnt. ktimepnt The time pointer in seconds used to index the ATS file. Used for ATSread exactly the same as for pvoc and ATSadd.
Examples
Here is an example of the ATSread opcode. It uses the file ATSread.csd [examples/ATSread.csd].
323
aout oscili 0.8, kfreq, 1 outs aout, aout endin </CsInstruments> <CsScore> ;sine wave. f 1 0 16384 10 1 i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here we're using ATSread to get the 100th partial's frequency and amplitude data out of the 'beats.ats' ATS analysis file. We're using that data to drive an oscillator, but we could use it for anything else that can take a k-rate input, like the bandwidth and resonance of a filter etc.
See also
ATSreadnz, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz, ATSsinnoi
Credits
Author: Alex Norman Seattle,Washington 2004
324
ATSreadnz
ATSreadnz reads data from an ATS file.
Description
ATSreadnz returns the energy (kenergy) of a user specified noise band (1-25 bands) at the time indicated by the time pointer ktimepnt.
Syntax
kenergy ATSreadnz ktimepnt, iatsfile, iband
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. iband the number of the noise band to return the energy data.
Performance
kenergy outputs the linearly interpolated energy of the noise band indicated in iband. The output is dependent on the data in the analysis file and the ktimepnt. ktimepnt The time pointer in seconds used to index the ATS file. Used for ATSreadnz exactly the same as for pvoc and ATSadd. ATSaddnz reads from an ATS file and resynthesizes the noise from noise energy data contained in the ATS file. It uses a modified randi function to create band limited noise and modulates that with a user supplied wave table (one period of a cosine wave), to synthesize a user specified selection of frequency bands. Modulating the noise is required to put the band limited noise in the correct place in the frequency spectrum. An ATS analysis differs from a pvanal in that ATS tracks the partials and computes the noise energy of the sound being analyzed. For more info about ATS analysis read Juan Pampin's description on the the ATS [http://www-ccrma.stanford.edu/~juan/ATS.html] web-page.
Examples
ktime line 2.5, p3, 0 kenergy ATSreadnz ktime, "clarinet.ats", 5
Here we are extracting the noise energy from band 5 in the 'clarinet.ats' ATS analysis file. We're actually reading backwards from 2.5 seconds to the beginning of the analysis file. We could use this to synthesize noise like this:
anoise aout aout randi oscili = sqrt(kenergy), 55 4000000000000000000000000, 455, 2 aout * anoise
325
Function table 2 used in the oscillator is a cosine, which is needed to shift the band limited noise into the correct place in the frequency spectrum. The randi function creates a band of noise centered about 0 Hz that has a bandwidth of about 110 Hz; multiplying it by a cosine will shift it to be centered at 455 Hz, which is the center frequency of the 5th critical noise band. This is only an example, for synthesizing the noise you'd be better off just using ATSaddnz unless you want to use your own noise synthesis algorithm. Maybe you could use the noise energy for something else like applying a small amount of jitter to specific partials or for controlling something totally unrelated to the source sound?
Examples
Here is another example of the ATSreadnz opcode. It uses the file ATSreadnz.csd [examples/ATSreadnz.csd].
See also
ATSread, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz, ATSsinnoi
Credits
Author: Alex Norman Seattle,Washington 2004 326
327
ATSpartialtap
ATSpartialtap returns a frequency, amplitude pair from an ATSbufread opcode.
Description
ATSpartialtap takes a partial number and returns a frequency, amplitude pair. The frequency and amplitude data comes from an ATSbufread opcode.
Syntax
kfrq, kamp ATSpartialtap ipartialnum
Initialization
ipartialnum - indicates the partial that the ATSpartialtap opcode should read from an ATSbufread.
Performance
kfrq - returns the frequency value for the requested partial. kamp - returns the amplitude value for the requested partial. ATSpartialtap takes a partial number and returns a frequency, amplitude pair. The frequency and amplitude data comes from an ATSbufread opcode. This is more restricted version of ATSread, since each ATSread opcode has its own independent time pointer, and ATSpartialtap is restricted to the data given by an ATSbufread. Its simplicity is its attractive feature.
Examples
Here is an example of the ATSpartialtap opcode. It uses the file ATSpartialtap.csd [examples/ATSpartialtap.csd].
328
20 30
aout1 oscil kam1, kfreq1, 1 aout2 oscil kam2, kfreq2, 1 aout3 oscil kam3, kfreq3, 1 aout = (aout1+aout2+aout3)*10 ; amplify some more outs aout, aout endin </CsInstruments> <CsScore> ; sine wave. f 1 0 16384 10 1 i 1 0 2 e </CsScore> </CsoundSynthesizer>
This example here uses an ATSpartialtap, and an ATSbufread to read partials 5, 20 and 30 from 'beats.ats'. These amplitudes and frequencies could be used to re-synthesize those partials, or something all together different.
See also
ATSread, ATSreadnz, ATSinfo, ATSsinnoi, ATSbufread, ATScross, ATSinterpread, ATSadd, ATSaddnz
Credits
Author: Alex Norman Seattle,Washington 2004
329
ATSsinnoi
ATSsinnoi uses the data from an ATS analysis file to perform resynthesis.
Description
ATSsinnoi reads data from an ATS data file and uses the information to synthesize sines and noise together.
Syntax
ar ATSsinnoi ktimepnt, ksinlev, knzlev, kfmod, iatsfile, ipartials \ [, ipartialoffset, ipartialincr]
Initialization
iatsfile the ATS number (n in ats.n) or the name in quotes of the analysis file made using ATS [http://www-ccrma.stanford.edu/~juan/ATS.html]. ipartials number of partials that will be used in the resynthesis (the noise has a maximum of 25 bands) ipartialoffset (optional) is the first partial used (defaults to 0). ipartialincr (optional) sets an increment by which these synthesis opcodes counts up from ipartialoffset for ibins components in the re-synthesis (defaults to 1).
Performance
ktimepnt The time pointer in seconds used to index the ATS file. Used for ATSsinnoi exactly the same as for pvoc. ksinlev - controls the level of the sines in the ATSsinnoi ugen. A value of 1 gives full volume sinewaves. knzlev - controls the level of the noise components in the ATSsinnoi ugen. A value of 1 gives full volume noise. kfmod an input for performing pitch transposition or frequency modulation on all of the synthesized partials, if no fm or pitch change is desired then use a 1 for this value. ATSsinnoi reads data from an ATS data file and uses the information to synthesize sines and noise together. The noise energy for each band is distributed equally among each partial that falls in that band. Each partial is then synthesized, along with that partial's noise component. Each noise component is then modulated by the corresponding partial to be put in the correct place in the frequency spectrum. The level of the noise and the partials are individually controllable. See the ATS [http://www-ccrma.stanford.edu/~juan/ATS.html] webpage for more info about the sinnoi synthesis. An ATS analysis differs from a pvanal in that ATS tracks the partials and computes the noise energy of the sound being analyzed. For more info about ATS analysis read Juan Pampin's description on the the ATS [http://www-ccrma.stanford.edu/~juan/ATS.html] web-page.
Examples
ktime asig line ATSsinnoi 0, p3, 2.5 ktime, 1, 1, 1, "beats.ats", 42
330
Here we synthesize both the noise and the sinewaves (all 42 partials) contained in "beats.ats" together. The relative volumes of the noise and the partials are unaltered (each set to 1). Here is another example of the ATSsinnoi opcode. It uses the file ATSsinnoi.csd [examples/ATSsinnoi.csd].
This example here is like the other example except that we use an envelope to control knzlev (the noise level). The result of this will be the "beats.wav" sound that has its noise component fade in over the duration of the note.
See also
ATSread, ATSreadnz, ATSinfo, ATSbufread, ATScross, ATSinterpread, ATSpartialtap, ATSadd, ATSaddnz
Credits
Author: Alex Norman Seattle,Washington 2004
331
aunirand
aunirand Deprecated.
Description
Deprecated as of version 3.49. Use the unirand opcode instead.
332
aweibull
aweibull Deprecated.
Description
Deprecated as of version 3.49. Use the weibull opcode instead.
333
babo
babo A physical model reverberator.
Description
babo stands for ball-within-the-box. It is a physical model reverberator based on the paper by Davide Rocchesso "The Ball within the Box: a sound-processing metaphor", Computer Music Journal, Vol 19, N.4, pp.45-47, Winter 1995. The resonator geometry can be defined, along with some response characteristics, the position of the listener within the resonator, and the position of the sound source.
Syntax
a1, a2 babo asig, ksrcx, ksrcy, ksrcz, irx, iry, irz [, idiff] [, ifno]
Initialization
irx, iry, irz -- the coordinates of the geometry of the resonator (length of the edges in meters) idiff -- is the coefficient of diffusion at the walls, which regulates the amount of diffusion (0-1, where 0 = no diffusion, 1 = maximum diffusion - default: 1) ifno -- expert values function: a function number that holds all the additional parameters of the resonator. This is typically a GEN2--type function used in non-rescaling mode. They are as follows: decay -- main decay of the resonator (default: 0.99) hydecay -- high frequency decay of the resonator (default: 0.1) rcvx, rcvy, rcvz -- the coordinates of the position of the receiver (the listener) (in meters; 0,0,0 is the resonator center) rdistance -- the distance in meters between the two pickups (your ears, for example - default: 0.3) direct -- the attenuation of the direct signal (0-1, default: 0.5) early_diff -- the attenuation coefficient of the early reflections (0-1, default: 0.8)
Performance
asig -- the input signal ksrcx, ksrcy, ksrcz -- the virtual coordinates of the source of sound (the input signal). These are allowed to move at k-rate and provide all the necessary variations in terms of response of the resonator.
Examples
Here is a simple example of the babo opcode. It uses the file babo.csd [examples/babo.csd], and beats.wav [examples/beats.wav]. 334
Here is an advanced example of the babo opcode. It uses the file babo_expert.csd [examples/ babo_expert.csd], and beats.wav [examples/beats.wav].
335
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o babo_expert.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> /* Written by Nicola Bernardini */ sr = 44100 ksmps = 32 nchnls = 2 ; full blown babo instrument with movement ; instr 2 ixstart = p4 ; start x position of source (left-right) ixend = p7 ; end x position of source iystart = p5 ; start y position of source (front-back) iyend = p8 ; end y position of source izstart = p6 ; start z position of source (up-down) izend = p9 ; end z position of source ixsize = p10 ; width of the resonator iysize = p11 ; depth of the resonator izsize = p12 ; height of the resonator idiff = p13 ; diffusion coefficient iexpert = p14 ; power user values stored in this function ainput ksource_x ksource_y ksource_z al,ar endin </CsInstruments> <CsScore> /* Written by Nicola Bernardini */ ; full blown instrument ;p4 : start x position of source (left-right) ;p5 : end x position of source ;p6 : start y position of source (front-back) ;p7 : end y position of source ;p8 : start z position of source (up-down) ;p9 : end z position of source ;p10 : width of the resonator ;p11 : depth of the resonator ;p12 : height of the resonator ;p13 : diffusion coefficient ;p14 : power user values stored in this function ; f1 f2 f3 f4 f5 f6 ; ; i2 i2 i2 i2 i2 i2 i2 ; i2 0 0 0 0 0 0 8 8 8 8 8 8 decay hidecay rx ry rz rdistance direct early_diff -2 0.95 0.95 0 0 0 0.3 0.5 0.8 ; brighter -2 0.95 0.5 0 0 0 0.3 0.5 0.8 ; default (to be set as) -2 0.95 0.01 0 0 0 0.3 0.5 0.8 ; darker -2 0.95 0.7 0 0 0 0.3 0.1 0.4 ; to hear the effect of diffusion -2 0.9 0.5 0 0 0 0.3 2.0 0.98 ; to hear the movement -2 0.99 0.1 0 0 0 0.3 0.5 0.8 ; default vals ^ ----- gen. number: negative to avoid rescaling 14.39 14.39 14.39 14.39 1.439 1.439 24.39 14.39 11.86 11.86 11.86 11.86 1.186 1.186 21.86 11.86 10 1 10 1 10 1 10 1 1.0 0.0 1.0 1.0 20 1 10 1 6 1 2 3 4 4 5 ; ; ; ; ; ; ; defaults hear brightness 1 hear brightness 2 hear brightness 3 hear diffusion 1 hear diffusion 2 hear movement soundin line line line babo outs "beats.wav" ixstart, p3, ixend iystart, p3, iyend izstart, p3, izend ainput*0.7, ksource_x, ksource_y, ksource_z, ixsize, iysize, izsize, idiff, iexpert al,ar
1 ; hear brightness 1
336
i2 i2 i2 i2 i2 ; ; ; ; ; ; e
+ + + + +
4 6 4 3 -6 -4 3 14.39 11.86 10 1 2 ; hear brightness 2 4 6 4 3 -6 -4 3 14.39 11.86 10 1 3 ; hear brightness 3 3 .6 .4 .3 -.6 -.4 .3 1.439 1.186 1.0 0.0 4 ; hear diffusion 1 3 .6 .4 .3 -.6 -.4 .3 1.439 1.186 1.0 1.0 4 ; hear diffusion 2 4 12 4 3 -12 -4 -3 24.39 21.86 20 1 5 ; hear movement ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^ ^ ||||||||||||||||||| ||||||||||||||||| | --: expert values function ||||||||||||||||||| ||||||||||||||||| +--: diffusion ||||||||||||||||||| ----------------: optimal room dims according to Milner and Bernard JASA 8 ||||||||||||||||||| --------------------: source position start and end
</CsScore> </CsoundSynthesizer>
Credits
Author: Paolo Filippi Padova, Italy 1999 Nicola Bernardini Rome, Italy 2000 New in Csound version 4.09
337
balance
balance Adjust one audio signal according to the values of another.
Description
The rms power of asig can be interrogated, set, or adjusted to match that of a comparator signal.
Syntax
ares balance asig, acomp [, ihp] [, iskip]
Initialization
ihp (optional) -- half-power point (in Hz) of a special internal low-pass filter. The default value is 10. iskip (optional, default=0) -- initial disposition of internal data space (see reson). The default value is 0.
Performance
asig -- input audio signal acomp -- the comparator signal balance outputs a version of asig, amplitude-modified so that its rms power is equal to that of a comparator signal acomp. Thus a signal that has suffered loss of power (eg., in passing through a filter bank) can be restored by matching it with, for instance, its own source. It should be noted that gain and balance provide amplitude modification only - output signals are not altered in any other respect.
Examples
Here is an example of the balance opcode. It uses the file balance.csd [examples/balance.csd].
338
; Generate a band-limited pulse train. asrc buzz 0.9, 440, sr/440, 1 ; Send the source signal through 2 filters. a1 reson asrc, 1000, 100 a2 reson a1, 3000, 500 ; Balance the filtered signal with the source. afin balance a2, asrc outs afin, afin endin </CsInstruments> <CsScore> ;sine wave. f 1 0 16384 10 1 i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
gain, rms
339
bamboo
bamboo Semi-physical model of a bamboo sound.
Description
bamboo is a semi-physical model of a bamboo sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares bamboo kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \ [, ifreq1] [, ifreq2]
Initialization
idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 1.25. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.9999 + (idamp * 0.002) The default damping_amount is 0.9999 which means that the default value of idamp is 0. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 0.05. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional, default=0) -- amount of energy to add back into the system. The value should be in range 0 to 1. ifreq (optional) -- the main resonant frequency. The default value is 2800. ifreq1 (optional) -- the first resonant frequency. The default value is 2240. ifreq2 (optional) -- the second resonant frequency. The default value is 3360.
Performance
kamp -- Amplitude of output. Note: As these instruments are stochastic, this is only an approximation.
Examples
Here is an example of the bamboo opcode. It uses the file bamboo.csd [examples/bamboo.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o bamboo.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 instr 1 asig bamboo p4, 0.01 outs asig, asig endin </CsInstruments> <CsScore> i1 0 1 20000 e </CsScore> </CsoundSynthesizer>
See Also
dripwater, guiro, sleighbells, tambourine
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
341
barmodel
barmodel Creates a tone similar to a struck metal bar.
Description
Audio output is a tone similar to a struck metal bar, using a physical model developed from solving the partial differential equation. There are controls over the boundary conditions as well as the bar characteristics.
Syntax
ares barmodel kbcL, kbcR, iK, ib, kscan, iT30, ipos, ivel, iwid
Initialization
iK -- dimensionless stiffness parameter. If this parameter is negative then the initialisation is skipped and the previous state of the bar is continued. ib -- high-frequency loss parameter (keep this small). iT30 -- 30 db decay time in seconds. ipos -- position along the bar that the strike occurs. ivel -- normalized strike velocity. iwid -- spatial width of strike.
Performance
A note is played on a metalic bar, with the arguments as below. kbcL -- Boundary condition at left end of bar (1 is clamped, 2 pivoting and 3 free). kbcR -- Boundary condition at right end of bar (1 is clamped, 2 pivoting and 3 free). kscan -- Speed of scanning the output location. Note that changing the boundary conditions during playing may lead to glitches and is made available as an experiment. The use of a non-zero kscan can give apparent re-introduction of sound due to modulation.
Examples
Here is an example of the barmodel opcode. It uses the file barmodel.csd [examples/barmodel.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o barmodel.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 aq barmodel out endin </CsInstruments> <CsScore> i1 i1 i1 i1 e /* 0.0 0.5 1.0 1.5 0.5 3 0.2 500 0.5 -3 0.3 1000 0.5 -3 0.4 1000 4.0 -3 0.5 800 0.05 0.05 0.1 0.05
barmodel */
</CsScore> </CsoundSynthesizer>
Credits
Author: Stefan Bilbao University of Edinburgh, UK Author: John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 5.01
343
bbcutm
bbcutm Generates breakbeat-style cut-ups of a mono audio stream.
Description
The BreakBeat Cutter automatically generates cut-ups of a source audio stream in the style of drum and bass/jungle breakbeat manipulations. There are two versions, for mono (bbcutm) or stereo (bbcuts) sources. Whilst originally based on breakbeat cutting, the opcode can be applied to any type of source audio. The prototypical cut sequence favoured over one bar with eighth note subdivisions would be 3+ 3R + 2 where we take a 3 unit block from the source's start, repeat it, then 2 units from the 7th and 8th eighth notes of the source. We talk of rendering phrases (a sequence of cuts before reaching a new phrase at the beginning of a bar) and units (as subdivision th notes). The opcode comes most alive when multiple synchronised versions are used simultaneously.
Syntax
a1 bbcutm asource, ibps, isubdiv, ibarlength, iphrasebars, inumrepeats \ [, istutterspeed] [, istutterchance] [, ienvchoice ]
Initialization
ibps -- Tempo to cut at, in beats per second. isubdiv -- Subdivisions unit, for a bar. So 8 is eighth notes (of a 4/4 bar). ibarlength -- How many beats per bar. Set to 4 for default 4/4 bar behaviour. iphrasebars -- The output cuts are generated in phrases, each phrase is up to iphrasebars long inumrepeats -- In normal use the algorithm would allow up to one additional repeat of a given cut at a time. This parameter allows that to be changed. Value 1 is normal- up to one extra repeat. 0 would avoid repeating, and you would always get back the original source except for enveloping and stuttering. istutterspeed -- (optional, default=1) The stutter can be an integer multiple of the subdivision speed. For instance, if subdiv is 8 (quavers) and stutterspeed is 2, then the stutter is in semiquavers (sixteenth notes= subdiv 16). The default is 1. istutterchance -- (optional, default=0) The tail of a phrase has this chance of becoming a single repeating one unit cell stutter (0.0 to 1.0). The default is 0. ienvchoice -- (optional, default=1) choose 1 for on (exponential envelope for cut grains) or 0 for off. Off will cause clicking, but may give good noisy results, especially for percussive sources. The default is 1, on. 344
Performance
asource -- The audio signal to be cut up. This version runs in real-time without knowledge of future audio.
Examples
Here is a simple example of the bbcutm opcode. It uses the file bbcutm.csd [examples/bbcutm.csd], and beats.wav [examples/beats.wav].
</CsScore> </CsoundSynthesizer>
44100 4410 10 2
instr 1 asource diskin "break7.wav",1,0,1 ; a source breakbeat sample, wraparound lest it stop! ; cuts in eighth notes per 4/4 bar, up to 4 bar phrases, up to 1 ; repeat in total (standard use) rare stuttering at 16 note speed, ; no enveloping asig bbcutm asource, 2.6937, 8, 4, 4, 1, 2, 0.1, 0 outs endin asig,asig
; cuts in eighth notes per 4/4 bar, up to 4 bar phrases, up to 1 ; repeat in total (standard use) rare stuttering at 16 note speed, ; no enveloping asig1,asig2 bbcuts asource1, asource2, 2.6937, 8, 4, 4, 1, 2, 0.1, 0 outs endin asig1,asig2
44100 4410 10 2
instr 1 ibps = 2.6937 iplaybackspeed = ibps/p5 asource diskin p4, iplaybackspeed, 0, 1 asig bbcutm asource, 2.6937, p6, 4, 4, p7, 2, 0.1, 1 out endin asig
</CsInstruments> <CsScore> ; source bps cut repeats i1 0 10 "break1.wav" 2.3 8 2 //2.3 is the source original tempo i1 0 10 "break2.wav" 2.4 8 3 i1 0 10 "break3.wav" 2.5 16 4 e </CsScore> </CsoundSynthesizer>
346
Example 70. Cutting up any old audio- much more interesting noises than this should be possible!
<CsoundSynthesizer> <CsInstruments> sr = kr = ksmps = nchnls =
44100 4410 10 2
instr 1 asource oscil 20000, 70, 1 ; ain, bps, subdiv, barlength, phrasebars, numrepeats, ;stutterspeed, stutterchance, envelopingon asig bbcutm asource, 2, 32, 1, 1, 2, 4, 0.6, 1 outs asig endin </CsInstruments> <CsScore> f1 0 256 10 1 i1 0 10 e </CsScore> </CsoundSynthesizer>
Example 71. Constant stuttering- faked, not possible since can only stutter in last half bar could make extra stuttering option parameter
<CsoundSynthesizer> <CsInstruments> sr = kr = ksmps = nchnls =
44100 4410 10 2
instr 1 asource diskin "break7.wav", 1, 0, 1 ;16th note cuts- but cut size 2 over half a beat. ;each half beat will either survive intact or be turned into ;the first sixteenth played twice in succession asig bbcutm asource, 2.6937, 2, 0.5, 1, 2, 2, 1.0, 0 outs asig endin </CsInstruments> <CsScore> i1 0 30 e </CsScore> </CsoundSynthesizer>
See Also
bbcuts
Credits
347
348
bbcuts
bbcuts Generates breakbeat-style cut-ups of a stereo audio stream.
Description
The BreakBeat Cutter automatically generates cut-ups of a source audio stream in the style of drum and bass/jungle breakbeat manipulations. There are two versions, for mono (bbcutm) or stereo (bbcuts) sources. Whilst originally based on breakbeat cutting, the opcode can be applied to any type of source audio. The prototypical cut sequence favoured over one bar with eighth note subdivisions would be 3+ 3R + 2 where we take a 3 unit block from the source's start, repeat it, then 2 units from the 7th and 8th eighth notes of the source. We talk of rendering phrases (a sequence of cuts before reaching a new phrase at the beginning of a bar) and units (as subdivision th notes). The opcode comes most alive when multiple synchronised versions are used simultaneously.
Syntax
a1,a2 bbcuts asource1, asource2, ibps, isubdiv, ibarlength, iphrasebars, \ inumrepeats [, istutterspeed] [, istutterchance] [, ienvchoice]
Initialization
ibps -- Tempo to cut at, in beats per second. isubdiv -- Subdivisions unit, for a bar. So 8 is eighth notes (of a 4/4 bar). ibarlength -- How many beats per bar. Set to 4 for default 4/4 bar behaviour. iphrasebars -- The output cuts are generated in phrases, each phrase is up to iphrasebars long inumrepeats -- In normal use the algorithm would allow up to one additional repeat of a given cut at a time. This parameter allows that to be changed. Value 1 is normal- up to one extra repeat. 0 would avoid repeating, and you would always get back the original source except for enveloping and stuttering. istutterspeed -- (optional, default=1) The stutter can be an integer multiple of the subdivision speed. For instance, if subdiv is 8 (quavers) and stutterspeed is 2, then the stutter is in semiquavers (sixteenth notes= subdiv 16). The default is 1. istutterchance -- (optional, default=0) The tail of a phrase has this chance of becoming a single repeating one unit cell stutter (0.0 to 1.0). The default is 0. ienvchoice -- (optional, default=1) choose 1 for on (exponential envelope for cut grains) or 0 for off. Off will cause clicking, but may give good noisy results, especially for percussive sources. The default is 1, on. 349
Performance
asource -- The audio signal to be cut up. This version runs in real-time without knowledge of future audio.
Examples
Here is an example of the bbcuts opcode. It uses the file bbcuts.csd [examples/bbcuts.csd].
See Also
bbcutm
350
Credits
Author: Nick Collins London August 2001 New in version 4.13
351
betarand
betarand Beta distribution random number generator (positive values only).
Description
Beta distribution random number generator (positive values only). This is an x-class noise generator.
Syntax
ares betarand krange, kalpha, kbeta ires betarand krange, kalpha, kbeta kres betarand krange, kalpha, kbeta
Performance
krange -- range of the random numbers (0 - krange). kalpha -- alpha value. If kalpha is smaller than one, smaller values favor values near 0. kbeta -- beta value. If kbeta is smaller than one, smaller values favor values near krange. If both kalpha and kbeta equal one we have uniform distribution. If both kalpha and kbeta are greater than one we have a sort of Gaussian distribution. Outputs only positive numbers. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the betarand opcode. It uses the file betarand.csd [examples/betarand.csd].
352
<CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; every run time same values
kbeta betarand 100, 1, 1 printk .2, kbeta ; look aout oscili 0.8, 440+kbeta, 1 ; & listen outs aout, aout endin instr 2 ; every run time different values
seed 0 kbeta betarand 100, 1, 1 printk .2, kbeta ; look aout oscili 0.8, 440+kbeta, 1 ; & listen outs aout, aout endin </CsInstruments> <CsScore> ; sine wave f 1 0 16384 10 1 i 1 0 2 i 2 3 2 e </CsScore> </CsoundSynthesizer>
See Also
seed, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 353
354
bexprnd
bexprnd Exponential distribution random number generator.
Description
Exponential distribution random number generator. This is an x-class noise generator.
Syntax
ares bexprnd krange ires bexprnd krange kres bexprnd krange
Performance
krange -- the range of the random numbers (-krange to +krange) For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the bexprnd opcode. It uses the file bexprnd.csd [examples/bexprnd.csd].
355
kexp bexprnd 100 printk .2, kexp aout oscili 0.8, 440+kexp, 1 outs aout, aout endin instr 2
seed 0 kexp bexprnd 100 printk .2, kexp aout oscili 0.8, 440+kexp, 1 outs aout, aout endin </CsInstruments> <CsScore> ; sine wave f 1 0 16384 10 1 i 1 0 2 i 2 3 2 e </CsScore> </CsoundSynthesizer>
See Also
seed, betarand, cauchy, exprand, gauss, linrand, pcauchy, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995
356
bformenc
bformenc Deprecated. Codes a signal into the ambisonic B format.
Description
Codes a signal into the ambisonic B format. Note that this opcode is deprecated as it is inaccurate, and is replaced by the much better opcode bformenc1 which replicates all the important features; also note that the gain arguments are not available in bformenc1.
Syntax
aw, ax, ay, az bformenc asig, kalpha, kbeta, kord0, kord1 aw, ax, ay, az, ar, as, at, au, av bformenc asig, kalpha, kbeta, \ kord0, kord1 , kord2 aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq bformenc \ asig, kalpha, kbeta, kord0, kord1, kord2, kord3
Performance
aw, ax, ay, ... -- output cells of the B format. asig -- input signal. kalpha - azimuth angle in degrees (clockwise). kbeta -- altitude angle in degrees. kord0 -- linear gain of the zero order B format. kord1 -- linear gain of the first order B format. kord2 -- linear gain of the second order B format. kord3 -- linear gain of the third order B format.
Example
Here is an example of the bformenc opcode. It uses the file bformenc.csd [examples/bformenc.csd].
357
-o bformenc.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 8 ;bformenc is deprecated, please use bformenc1 instr 1 ; generate pink noise anoise pinkish 1000 ; two full turns kalpha line 0, p3, 720 kbeta = 0 ; fade ambisonic order from 2nd to 0th during second turn kord0 = 1 kord1 linseg 1, p3 / 2, 1, p3 / 2, 0 kord2 linseg 1, p3 / 2, 1, p3 / 2, 0 ; generate B format aw, ax, ay, az, ar, as, at, au, av bformenc anoise, kalpha, kbeta, kord0, kord1, kord2 ; decode B format for 8 channel circle loudspeaker setup a1, a2, a3, a4, a5, a6, a7, a8 bformdec 4, aw, ax, ay, az, ar, as, at, au, av ; write audio out outo a1, a2, a3, a4, a5, a6, a7, a8 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 20 seconds. i 1 0 20 e </CsScore> </CsoundSynthesizer>
Credits
Author: Samuel Groner 2005 New in version 5.07. Deprecated in 5.09.
358
bformenc1
bformenc1 Codes a signal into the ambisonic B format.
Description
Codes a signal into the ambisonic B format
Syntax
aw, ax, ay, az bformenc1 asig, kalpha, kbeta aw, ax, ay, az, ar, as, at, au, av bformenc1 asig, kalpha, kbeta aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq bformenc1 \ asig, kalpha, kbeta
Performance
aw, ax, ay, ... -- output cells of the B format. asig -- input signal. kalpha - azimuth angle in degrees (anticlockwise). kbeta -- altitude angle in degrees.
Example
Here is an example of the bformenc1 opcode. It uses the file bformenc1.csd [examples/bformenc1.csd].
359
kbeta = 0 ; generate B format aw, ax, ay, az, ar, as, at, au, av bformenc1 anoise, kalpha, kbeta ; decode B format for 8 channel circle loudspeaker setup a1, a2, a3, a4, a5, a6, a7, a8 bformdec1 4, aw, ax, ay, az, ar, as, at, au, av ; write audio out outo a1, a2, a3, a4, a5, a6, a7, a8 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 20 seconds. i 1 0 20 e </CsScore> </CsoundSynthesizer>
See Also
bformdec1
Credits
Author: Richard Furse, Bruce Wiggins and Fons Adriaensen, following code by Samuel Groner 2008 New in version 5.09
360
bformdec
bformdec Deprecated. Decodes an ambisonic B format signal.
Description
Decodes an ambisonic B format signal into loudspeaker specific signals. Note that this opcode is deprecated as it is inaccurate, and is replaced by the much better opcode bformdec1 which replicates all the important features.
Syntax
ao1, ao2 bformdec isetup, aw, ax, ay, az [, ar, as, at, au, av \ [, abk, al, am, an, ao, ap, aq]] ao1, ao2, ao3, ao4 bformdec isetup, aw, ax, ay, az [, ar, as, at, \ au, av [, abk, al, am, an, ao, ap, aq]] ao1, ao2, ao3, ao4, ao5 bformdec isetup, aw, ax, ay, az [, ar, as, \ at, au, av [, abk, al, am, an, ao, ap, aq]] ao1, ao2, ao3, ao4, ao5, ao6, ao7, ao8 bformdec isetup, aw, ax, ay, az \ [, ar, as, at, au, av [, abk, al, am, an, ao, ap, aq]]]
Initialization
isetup - loudspeaker setup. There are five supported setups: 1 denotes stereo setup. There must be two output cells with loudspeaker positions assumed to be (330/0, 30/0). 2 denotes quad setup. There must be four output cells. Loudspeaker positions assumed to be (45/0), (135/0), (225/0), (315/0). 3 is a 5.1 surround setup. There must be five output cells. LFE channel is not supported. Loudspeaker positions assumed to be (330/0), (30/0), (0/0), (250/0), (110/0). 4 denotes eight loudspeaker circle setup. There must be eight output cells. Loudspeaker positions assumed to be (22.5/0), (67.5/0), (112.5/0), (157.5/0), (202.5/0), (247.5/0), (292.5/0), (337.5/0). 5 means an eight loudspeaker cubic setup. There must be eight output cells. Loudspeaker positions assumed to be (45/0), (45/30), (135/0), (135/30), (225/0), (225/30), (315/0), (315/30).
Performance
aw, ax, ay, ... -- input signal in the B format. ao1 .. ao8 - loudspeaker specific output signals.
Example
Here is an example of the bformdec opcode. It uses the file bformenc.csd [examples/bformenc.csd].
361
Credits
Author: Samuel Groner 2005 New in version 5.07. Deprecated in 5.09
362
bformdec1
bformdec1 Decodes an ambisonic B format signal
Description
Decodes an ambisonic B format signal into loudspeaker specific signals.
Syntax
ao1, ao2 bformdec1 isetup, aw, ax, ay, az [, ar, as, at, au, av \ [, abk, al, am, an, ao, ap, aq]] ao1, ao2, ao3, ao4 bformdec1 isetup, aw, ax, ay, az [, ar, as, at, \ au, av [, abk, al, am, an, ao, ap, aq]] ao1, ao2, ao3, ao4, ao5 bformdec1 isetup, aw, ax, ay, az [, ar, as, \ at, au, av [, abk, al, am, an, ao, ap, aq]] ao1, ao2, ao3, ao4, ao5, ao6, ao7, ao8 bformdec1 isetup, aw, ax, ay, az \ [, ar, as, at, au, av [, abk, al, am, an, ao, ap, aq]]]
Initialization
Note that horizontal angles are measured anticlockwise in this description. isetup - loudspeaker setup. There are five supported setups: 1. Stereo - L(90), R(-90); this is an M+S style stereo decode. 2. Quad - FL(45), BL(135), BR(-135), FR(-45). This is a first-order `in-phase' decode. 3. 5.0 - L(30),R(-30),C(0),BL(110),BR(-110). Note that many people do not actually use the angles above for their speaker arrays and a good decode for DVD etc can be achieved using the Quad configuration to feed L, R, BL and BR (leaving C silent). 4. Octagon FFL(22.5),FLL(67.5),BLL(112.5),BBL(157.5),BBR(-157.5),BRR(-112.5),FRR(-67.5),FFR(-22.5). This is a first-, second- or third-order `in-phase' decode, depending on the number of input channels. 5. Cube FLD(45,-35.26),FLU(45,35.26),BLD(135,-35.26),BLU(135,35.26),BRD(-135,-35.26),BRU(-135,35.2 6),FRD(-45,-35.26),FRU(-45,35.26). This is a first-order `in-phase' decode.
Performance
aw, ax, ay, ... -- input signal in the B format. ao1 .. ao8 - loudspeaker specific output signals.
Example
363
Here is an example of the bformdec1 opcode. It uses the file bformenc1.csd [examples/bformenc1.csd].
See Also
bformenc1
Credits
Author: Richard Furse, Bruce Wiggins and Fons Adriaensen, following code by Samuel Groner 2008 New in version 5.09
364
binit
binit PVS tracks to amplitude+frequency conversion.
Description
The binit opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials) and converts it into a equal-bandwidth bin-frame containing amplitude and frequency pairs (PVS_AMP_FREQ), suitable for overlap-add resynthesis (such as performed by pvsynth) or further PVS streaming phase vocoder signal transformations. For each frequency bin, it will look for a suitable track signal to fill it; if not found, the bin will be empty (0 amplitude). If more than one track fits a certain bin, the one with highest amplitude will be chosen. This means that not all of the input signal is actually 'binned', the operation is lossy. However, in many situations this loss is not perceptually relevant.
Syntax
fsig binit fin, isize
Performance
fsig -- output pv stream in PVS_AMP_FREQ format fin -- input pv stream in TRACKS format isize -- FFT size of output (N).
Examples
Here is an example of the binit opcode. It uses the file binit.csd [examples/binit.csd].
365
; overlap-add resynthesis
The example above shows partial tracking of an ifd-analysis signal, conversion to bin frames and overlap-add resynthesis.
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
366
biquad
biquad A sweepable general purpose biquadratic digital filter.
Description
A sweepable general purpose biquadratic digital filter.
Syntax
ares biquad asig, kb0, kb1, kb2, ka0, ka1, ka2 [, iskip]
Initialization
iskip (optional, default=0) -- if non-zero, intialization will be skipped. Default value 0. (New in Csound version 3.50)
Performance
asig -- input signal biquad is a general purpose biquadratic digital filter of the form: a0*y(n) + a1*y[n-1] + a2*y[n-2] = b0*x[n] + b1*x[n-1] + b2*x[n-2]
This filter has the following frequency response: B(Z) b0 + b1*Z-1 + b2*Z-2 H(Z) = ---- = -----------------A(Z) a0 + a1*Z-1 + a2*Z-2
This type of filter is often encountered in digital signal processing literature. It allows six user-defined krate coefficients.
Examples
Here is an example of the biquad opcode. It uses the file biquad.csd [examples/biquad.csd].
367
; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o biquad.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; Instrument #1. instr 1 ; Get the values from the score. idur = p3 iamp = p4 icps = cpspch(p5) kfco = p6 krez = p7 ; Calculate the biquadratic filter's coefficients kfcon = 2*3.14159265*kfco/sr kalpha = 1-2*krez*cos(kfcon)*cos(kfcon)+krez*krez*cos(2*kfcon) kbeta = krez*krez*sin(2*kfcon)-2*krez*cos(kfcon)*sin(kfcon) kgama = 1+cos(kfcon) km1 = kalpha*kgama+kbeta*sin(kfcon) km2 = kalpha*kgama-kbeta*sin(kfcon) kden = sqrt(km1*km1+km2*km2) kb0 = 1.5*(kalpha*kalpha+kbeta*kbeta)/kden kb1 = kb0 kb2 = 0 ka0 = 1 ka1 = -2*krez*cos(kfcon) ka2 = krez*krez ; Generate an input signal. axn vco 1, icps, 1 ; Filter the input signal. ayn biquad axn, kb0, kb1, kb2, ka0, ka1, ka2 outs ayn*iamp/2, ayn*iamp/2 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i 1 i 1 e Sta 0.0 1.0 Dur 1.0 1.0 Amp 20000 20000 Pitch Fco 6.00 1000 6.03 2000 Rez .8 .95
</CsScore> </CsoundSynthesizer>
Here is another example of the biquad opcode used for modal synthesis. It uses the file biquad-2.csd [examples/biquad-2.csd]. See the Modal Frequency Ratios appendix for other frequency ratios.
368
</CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 /* modal synthesis using biquad filters as oscillators Example by Scott Lindroth 2007 */
instr 1 ipi = 3.1415926 idenom = sr*0.5 ipulseSpd = p4 icps = p5 ipan = p6 iamp = p7 iModes = p8 apulse icps mpulse iamp, 0 = cpspch( icps )
; filter gain iamp1 iamp2 iamp3 iamp4 iamp5 iamp6 = = = = = = 600 1000 1000 1000 1000 1000
; resonance irpole1 irpole2 irpole3 irpole4 irpole5 irpole6 = = = = = = 0.99999 irpole1 irpole1 irpole1 irpole1 irpole1
; modal frequencies if (iModes == 1) goto modes1 if (iModes == 2) goto modes2 modes1: if1 = icps if2 = icps if3 = icps if4 = icps if5 = icps if6 = icps goto nextPart * * * * * * 1 6.27 3.2 9.92 14.15 6.23 ;pot lid
modes2: if1 = icps if2 = icps if3 = icps if4 = icps if5 = icps if6 = icps goto nextPart nextPart:
* * * * * *
; convert frequency to radian frequency itheta1 itheta2 itheta3 itheta4 itheta5 itheta6 = = = = = = (if1/idenom) (if2/idenom) (if3/idenom) (if4/idenom) (if5/idenom) (if6/idenom) * * * * * * ipi ipi ipi ipi ipi ipi
369
ib21 ib12 ib22 ib13 ib23 ib14 ib24 ib15 ib25 ib16 ib26
= = = = = = = = = = =
irpole1 * irpole1 -2 * irpole2 * cos(itheta2) irpole2 * irpole2 -2 * irpole3 * cos(itheta3) irpole3 * irpole3 -2 * irpole4 * cos(itheta4) irpole4 * irpole4 -2 * irpole5 * cos(itheta5) irpole5 * irpole5 -2 * irpole6 * cos(itheta6) irpole6 * irpole6
;printk 1, ib 11 ;printk 1, ib 21 ; also try setting the -1 coeff. to 0, but be sure to scale down the amplitude! apulse biquad biquad biquad biquad biquad * iamp1, apulse * apulse * apulse * apulse * apulse * 1, 0, -1, iamp2, 1, iamp3, 1, iamp4, 1, iamp5, 1, iamp6, 1, 1, 0, 0, 0, 0, 0, ib11, ib21 -1, 1, ib12, -1, 1, ib13, -1, 1, ib14, -1, 1, ib15, -1, 1, ib16, ib22 ib23 ib24 ib25 ib26
pulseSpd pch 0 7.089 . 7.09 . 7.091 0 0 0 . . . 8.039 8.04 8.041 7.089 7.09 7.091 8.019 8.02 8.021
Modes 2 . . 2 2 2 2 . . 2 2 2
i1 9 12 0 i1 9 12 0 i1 9 12 0 e </CsScore> </CsoundSynthesizer>
See Also
biquada, moogvcf, rezzy
Credits
Author: Hans Mikelson October 1998 New in Csound version 3.49
370
biquada
biquada A sweepable general purpose biquadratic digital filter with a-rate parameters.
Description
A sweepable general purpose biquadratic digital filter.
Syntax
ares biquada asig, ab0, ab1, ab2, aa0, aa1, aa2 [, iskip]
Initialization
iskip (optional, default=0) -- if non-zero, intialization will be skipped. Default value 0. (New in Csound version 3.50)
Performance
asig -- input signal biquada is a general purpose biquadratic digital filter of the form: a0*y(n) + a1*y[n-1] + a2*y[n-2] = b0*x[n] + b1*x[n-1] + b2*x[n-2]
This filter has the following frequency response: B(Z) b0 + b1*Z-1 + b2*Z-2 H(Z) = ---- = -----------------A(Z) a0 + a1*Z-1 + a2*Z-2
This type of filter is often encountered in digital signal processing literature. It allows six user-defined arate coefficients.
See Also
biquad
Credits
Author: Hans Mikelson October 1998 New in Csound version 3.49
371
birnd
birnd Returns a random number in a bi-polar range.
Description
Returns a random number in a bi-polar range.
Syntax
birnd(x) (init- or control-rate only)
Where the argument within the parentheses may be an expression. These value converters sample a global random sequence, but do not reference seed. The result can be a term in a further expression.
Performance
Returns a random number in the bipolar range -x to x. rnd and birnd obtain values from a global pseudorandom number generator, then scale them into the requested range. The single global generator will thus distribute its sequence to these units throughout the performance, in whatever order the requests arrive.
Examples
Here is an example of the birnd opcode. It uses the file birnd.csd [examples/birnd.csd].
372
i 1 + . i 1 + . i 1 + . e </CsScore> </CsoundSynthesizer>
See Also
rnd
Credits
Author: Barry L. Vercoe MIT Cambridge, Massachussetts 1997 Extended in 3.47 to x-rate by John ffitch.
373
bqrez
bqrez A second-order multi-mode filter.
Description
A second-order multi-mode filter.
Syntax
ares bqrez asig, xfco, xres [, imode] [, iskip]
Initialization
imode (optional, default=0) -- The mode of the filter. Choose from one of the following: 0 = low-pass (default) 1 = high-pass 2 = band-pass 3 = band-reject 4 = all-pass iskip (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
ares -- output audio signal. asig -- input audio signal. xfco -- filter cut-off frequency in Hz. May be i-time, k-rate, a-rate. xres -- amount of resonance. Values of 1 to 100 are typical. Resonance should be one or greater. A value of 100 gives a 20dB gain at the cutoff frequency. May be i-time, k-rate, a-rate. All filter modes can be frequency modulated as well as the resonance can also be frequency modulated. bqrez is a resonant low-pass filter created using the Laplace s-domain equations for low-pass, high-pass, and band-pass filters normalized to a frequency. The bi-linear transform was used which contains a frequency transform constant from s-domain to z-domain to exactly match the frequencies together. Alot of trigonometric identities where used to simplify the calculation. It is very stable across the working frequency range up to the Nyquist frequency.
Examples
Here is an example of the bqrez opcode. It uses the file bqrez.csd [examples/bqrez.csd]. 374
Example 83. Example of the bqrez opcode borrowed from the rezzy opcode in Kevin Conder's manual.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o bqrez.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;sawtooth waveform.
kfco line 200, p3, 2000;filter-cutoff frequency from .2 to 5 KHz. kres = p4 ;resonance imode = p5 ;mode asig vco 0.2, 220, 1 afilt bqrez asig, kfco, kres, imode asig balance afilt, asig outs asig, asig endin </CsInstruments> <CsScore> ;sine wave f 1 0 16384 10 1 i i i i e </CsScore> </CsoundSynthesizer> 1 1 1 1 0 + + + 3 3 3 3 1 0 30 0 1 1 30 1 ; low pass ; low pass ; high pass ; high pass
See Also
biquad, moogvcf, rezzy
Credits
Author: Matt Gerassimoff New in version 4.32 Written in November 2002.
375
butbp
butbp Same as the butterbp opcode.
Description
Same as the butterbp opcode.
Syntax
ares butbp asig, kfreq, kband [, iskip]
376
butbr
butbr Same as the butterbr opcode.
Description
Same as the butterbr opcode.
Syntax
ares butbr asig, kfreq, kband [, iskip]
377
buthp
buthp Same as the butterhp opcode.
Description
Same as the butterhp opcode.
Syntax
ares buthp asig, kfreq [, iskip]
378
butlp
butlp Same as the butterlp opcode.
Description
Same as the butterlp opcode.
Syntax
ares butlp asig, kfreq [, iskip]
379
butterbp
butterbp A band-pass Butterworth filter.
Description
Implementation of a second-order band-pass Butterworth filter. This opcode can also be written as butbp.
Syntax
ares butterbp asig, kfreq, kband [, iskip]
Initialization
iskip (optional, default=0) -- Skip initialization if present and non-zero.
Performance
These filters are Butterworth second-order IIR filters. They are slightly slower than the original filters in Csound, but they offer an almost flat passband and very good precision and stopband attenuation. asig -- Input signal to be filtered. kfreq -- Cutoff or center frequency for each of the filters. kband -- Bandwidth of the bandpass and bandreject filters.
Examples
Here is an example of the butterbp opcode. It uses the file butterbp.csd [examples/butterbp.csd].
380
outs asig, asig endin instr 2 ;filtered noise asig rand 1 abp butterbp asig, 2000, 100 ;passing only 1950 to 2050 Hz outs abp, abp endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 2 e </CsScore> </CsoundSynthesizer>
See Also
butterbr, butterhp, butterlp
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Existed in 3.30
381
butterbr
butterbr A band-reject Butterworth filter.
Description
Implementation of a second-order band-reject Butterworth filter. This opcode can also be written as butbr.
Syntax
ares butterbr asig, kfreq, kband [, iskip]
Initialization
iskip (optional, default=0) -- Skip initialization if present and non-zero.
Performance
These filters are Butterworth second-order IIR filters. They are slightly slower than the original filters in Csound, but they offer an almost flat passband and very good precision and stopband attenuation. asig -- Input signal to be filtered. kfreq -- Cutoff or center frequency for each of the filters. kband -- Bandwidth of the bandpass and bandreject filters.
Examples
Here is an example of the butterbr opcode. It uses the file butterbr.csd [examples/butterbr.csd].
382
outs asig, asig endin instr 2 ; filtered noise asig rand 0.7 abr butterbr asig, 3000, 2000 ;cutting 2000 to 5000 Hz outs abr, abr endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 2 e </CsScore> </CsoundSynthesizer>
See Also
butterbp, butterhp, butterlp
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Existed in 3.30
383
butterhp
butterhp A high-pass Butterworth filter.
Description
Implementation of second-order high-pass Butterworth filter. This opcode can also be written as buthp.
Syntax
ares butterhp asig, kfreq [, iskip]
Initialization
iskip (optional, default=0) -- Skip initialization if present and non-zero.
Performance
These filters are Butterworth second-order IIR filters. They are slightly slower than the original filters in Csound, but they offer an almost flat passband and very good precision and stopband attenuation. asig -- Input signal to be filtered. kfreq -- Cutoff or center frequency for each of the filters.
Examples
Here is an example of the butterhp opcode. It uses the file butterhp.csd [examples/butterhp.csd].
384
instr 2 ; filtered noise asig rand 0.6 ahp butterhp asig, 500 outs ahp, ahp endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 2 e </CsScore> </CsoundSynthesizer> ;pass frequencies above 500 Hz
See Also
butterbp, butterbr, butterlp
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Existed in 3.30
385
butterlp
butterlp A low-pass Butterworth filter.
Description
Implementation of a second-order low-pass Butterworth filter. This opcode can also be written as butlp.
Syntax
ares butterlp asig, kfreq [, iskip]
Initialization
iskip (optional, default=0) -- Skip initialization if present and non-zero.
Performance
These filters are Butterworth second-order IIR filters. They are slightly slower than the original filters in Csound, but they offer an almost flat passband and very good precision and stopband attenuation. asig -- Input signal to be filtered. kfreq -- Cutoff or center frequency for each of the filters.
Examples
Here is an example of the butterlp opcode. It uses the file butterlp.csd [examples/butterlp.csd].
386
instr 2 ; filtered noise asig rand 0.7 alp butterlp asig, 1000 outs alp, alp endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 2 e </CsScore> </CsoundSynthesizer> ;cutting frequencies above 1 KHz
See Also
butterbp, butterbr, butterhp
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Existed in 3.30
387
button
button Sense on-screen controls.
Description
Sense on-screen controls. Requires Winsound or TCL/TK.
Syntax
kres button knum
Performance
Note that this opcode is not available on Windows due to the implimentation of pipes on that system kres -- value of the button control. If the button has been pushed since the last k-period, then return 1, otherwise return 0. knum -- the number of the button. If it does not exist, it is made on-screen at initialization.
See Also
checkbox
Credits
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK September 2000 New in Csound version 4.08
388
buzz
buzz Output is a set of harmonically related sine partials.
Description
Output is a set of harmonically related sine partials.
Syntax
ares buzz xamp, xcps, knh, ifn [, iphs]
Initialization
ifn -- table number of a stored function containing a sine wave. A large table of at least 8192 points is recommended. iphs (optional, default=0) -- initial phase of the fundamental frequency, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is zero
Performance
xamp -- amplitude xcps -- frequency in cycles per second The buzz units generate an additive set of harmonically related cosine partials of fundamental frequency xcps, and whose amplitudes are scaled so their summation peak equals xamp. The selection and strength of partials is determined by the following control parameters: knh -- total number of harmonics requested. New in Csound version 3.57, knh defaults to one. If knh is negative, the absolute value is used. buzz and gbuzz are useful as complex sound sources in subtractive synthesis. buzz is a special case of the more general gbuzz in which klh = kmul = 1; it thus produces a set of knh equal-strength harmonic partials, beginning with the fundamental. (This is a band-limited pulse train; if the partials extend to the Nyquist, i.e. knh = int (sr / 2 / fundamental freq.), the result is a real pulse train of amplitude xamp.) Although knh may be varied during performance, its internal value is necessarily integer and may cause pops due to discontinuities in the output. buzz can be amplitude- and/or frequency-modulated by either control or audio signals. N.B. This unit has its analog in GEN11, in which the same set of cosines can be stored in a function table for sampling by an oscillator. Although computationally more efficient, the stored pulse train has a fixed spectral content, not a time-varying one as above.
Examples
Here is an example of the buzz opcode. It uses the file buzz.csd [examples/buzz.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o buzz.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kcps = 110 ifn = 1 knh line p4, p3, p5 asig buzz 1, kcps, knh, ifn outs asig, asig endin </CsInstruments> <CsScore> ;sine wave. f 1 0 16384 10 1 i 1 0 3 20 20 i 1 + 3 3 3 i 1 + 3 10 1 e </CsScore> </CsoundSynthesizer>
See Also
gbuzz
Credits
September 2003. Thanks to Kanata Motohashi for correcting the mentions of the kmul parameter.
390
cabasa
cabasa Semi-physical model of a cabasa sound.
Description
cabasa is a semi-physical model of a cabasa sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares cabasa iamp, idettack [, inum] [, idamp] [, imaxshake]
Initialization
iamp -- Amplitude of output. Note: As these instruments are stochastic, this is only a approximation. idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 512. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.998 + (idamp * 0.002) The default damping_amount is 0.997 which means that the default value of idamp is -0.5. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 1.0. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional) -- amount of energy to add back into the system. The value should be in range 0 to 1.
Examples
Here is an example of the cabasa opcode. It uses the file cabasa.csd [examples/cabasa.csd].
391
sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 inum = p4 idamp = p5 asig cabasa 0.9, 0.01, inum, idamp outs asig, asig endin </CsInstruments> <CsScore> i1 1 1 48 .95 i1 + 1 1000 .5 e </CsScore> </CsoundSynthesizer>
See Also
crunch, sandpaper, sekere, stix
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
392
cauchy
cauchy Cauchy distribution random number generator.
Description
Cauchy distribution random number generator. This is an x-class noise generator.
Syntax
ares cauchy kalpha ires cauchy kalpha kres cauchy kalpha
Performance
kalpha -- controls the spread from zero (big kalpha = big spread). Outputs both positive and negative numbers. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the cauchy opcode. It uses the file cauchy.csd [examples/cauchy.csd].
393
kalpha cauchy 100 printk .2, kalpha ; look aout oscili 0.8, 440+kalpha, 1 ; & listen outs aout, aout endin instr 2 ; every run time different values
seed 0 kalpha cauchy 100 printk .2, kalpha ; look aout oscili 0.8, 440+kalpha, 1 ; & listen outs aout, aout endin </CsInstruments> <CsScore> ; sine wave f 1 0 16384 10 1 i 1 0 2 i 2 3 2 e </CsScore> </CsoundSynthesizer>
See Also
seed, betarand, bexprnd, exprand, gauss, linrand, pcauchy, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Existed in 3.30
394
ceil
ceil Returns the smallest integer not less than x
Description
Returns the smallest integer not less than x
Syntax
ceil(x) (init-, control-, or audio-rate arg allowed)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the ceil opcode. It uses the file ceil.csd [examples/ceil.csd].
395
</CsScore> </CsoundSynthesizer>
See Also
abs, exp, int, log, log10, i, sqrt
Credits
Author: Istvan Varga New in Csound 5 2005
396
cent
cent Calculates a factor to raise/lower a frequency by a given amount of cents.
Description
Calculates a factor to raise/lower a frequency by a given amount of cents.
Syntax
cent(x)
Initialization
x -- a value expressed in cents.
Performance
The value returned by the cent function is a factor. You can multiply a frequency by this factor to raise/ lower it by the given amount of cents.
Examples
Here is an example of the cent opcode. It uses the file cent.csd [examples/cent.csd].
397
instr 2 iroot icents = 440 ; root note = A (440 Hz) = p4 ; change root note by 300 and 1200 cents
ifactor = cent(icents) ; calculate new note inew = iroot * ifactor print iroot ; Print all print ifactor print inew asig oscili 0.6, inew, 1 outs asig, asig endin </CsInstruments> <CsScore> ; sine wave f1 0 32768 10 1 i 1 0 2 0 ;no change i 2 2.5 2 300 ;note = C above A i 2 5 2 1200 ;1 octave higher e </CsScore> </CsoundSynthesizer>
See Also
db, octave, semitone New in version 4.16
398
cggoto
cggoto Conditionally transfer control on every pass.
Description
Transfer control to label on every pass. (Combination of cigoto and ckgoto)
Syntax
cggoto condition, label
where label is in the same instrument block and is not an expression, and where condition uses one of the Relational operators (<, =, <=, ==, !=) (and = for convenience, see also under Conditional Values).
Examples
Here is an example of the cggoto opcode. It uses the file cggoto.csd [examples/cggoto.csd].
399
; Table #1: a simple sine wave. f 1 0 32768 10 1 ; i ; i e Play lownote for one second. 1 0 1 1 Play highnote for one second. 1 1 1 2
</CsScore> </CsoundSynthesizer>
See Also
cigoto, ckgoto, cngoto, if, igoto, kgoto, tigoto, timout
Credits
Example written by Kevin Conder.
400
chanctrl
chanctrl Get the current value of a MIDI channel controller.
Description
Get the current value of a controller and optionally map it onto specified range.
Syntax
ival chanctrl ichnl, ictlno [, ilow] [, ihigh] kval chanctrl ichnl, ictlno [, ilow] [, ihigh]
Initialization
ichnl -- the MIDI channel (1-16). ictlno -- the MIDI controller number (0-127). ilow, ihigh -- low and high ranges for mapping
Examples
Here is an example of the chanctrl opcode. It uses the file chanctrl.csd [examples/chanctrl.csd].
401
</CsInstruments> <CsScore> ;Dummy f-table to give time for real-time MIDI events f 0 30 ;sine wave. f 1 0 16384 10 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: Mike Berry Mills College May, 1997 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
402
changed
changed k-rate signal change detector.
Description
This opcode outputs a trigger signal that informs when any one of its k-rate arguments has changed. Useful with valuator widgets or MIDI controllers.
Syntax
ktrig changed kvar1 [, kvar2,..., kvarN]
Performance
ktrig - Outputs a value of 1 when any of the k-rate signals has changed, otherwise outputs 0. kvar1 [, kvar2,..., kvarN] - k-rate variables to watch for changes.
Examples
Here is an example of the changed opcode. It uses the file changed.csd [examples/changed.csd].
403
0.20267: 0.40267: 0.60267: 0.80267: 1.00000: 1.20267: 1.40267: 1.60267: 1.80000: 2.00000:
1.00000 1.00000 1.00000 1.00000 0.00000 -1.00000 -1.00000 -1.00000 -1.00000 -0.00000
Credits
Written by Gabriel Maldonado. Example written by Andrs Cabrera. New in Csound 5 (Previously available only on CsoundAV)
404
chani
chani Reads data from the software bus
Description
Reads data from a channel of the inward software bus.
Syntax
kval chani kchan aval chani kchan
Performance
kchan -- a positive integer that indicates which channel of the software bus to read Note that the inward and outward software busses are independent, and are not mixer buses. Also the krate and a-rate busses are independent. The last value remains until a new value is written. There is no imposed limit to the number of busses but they use memory so small numbers are to be preferred.
Example
The example shows the software bus being used as an asynchronous control signal to select a filter cutoff. It assumes that an external program that has access to the API is feeding the values
Credits
Author: John ffitch 2005 New in Csound 5.00
405
chano
chano Send data to the outwards software bus
Description
Send data to a channel of the outward software bus.
Syntax
chano kval, kchan chano aval, kchan
Performance
xval --- value to transmit kchan -- a positive integer that indicates which channel of the software bus to write Note that the inward and outward software busses are independent, and are not mixer buses. Also the krate and a-rate busses are independent. The last value remains until a new value is written. There is no imposed limit to the number of busses but they use memory so small numbers are to be preferred.
Example
The example shows the software bus being used as an output audio channel. It assumes that an external program that has access to the API is receiving the values.
Credits
Author: John ffitch 2005 New in Csound 5.00
406
chebyshevpoly
chebyshevpoly Efficiently evaluates the sum of Chebyshev polynomials of arbitrary order.
Description
The chebyshevpoly opcode calculates the value of a polynomial expression with a single a-rate input variable that is made up of a linear combination of the first N Chebyshev polynomials of the first kind. Each Chebyshev polynomial, Tn(x), is weighted by a k-rate coefficient, kn, so that the opcode is calculating a sum of any number of terms in the form kn*Tn(x). Thus, the chebyshevpoly opcode allows for the waveshaping of an audio signal with a dynamic transfer function that gives precise control over the harmonic content of the output.
Syntax
aout chebyshevpoly ain, k0 [, k1 [, k2 [...]]]
Performance
ain -- the input signal used as the independent variable of the Chebyshev polynomials ("x"). aout -- the output signal ("y"). k0, k1, k2, ... -- k-rate multipliers for each Chebyshev polynomial. This opcode is very useful for dynamic waveshaping of an audio signal. Traditional waveshaping techniques utilize a lookup table for the transfer function -- usually a sum of Chebyshev polynomials. When a sine wave at full-scale amplitude is used as an index to read the table, the precise harmonic spectrum as defined by the weights of the Chebyshev polynomials is produced. A dynamic spectrum is acheived by varying the amplitude of the input sine wave, but this produces a non-linear change in the spectrum. By directly calculating the Chebyshev polynomials, the chebyshevpoly opcode allows more control over the spectrum and the number of harmonic partials added to the input can be varied with time. The value of each kn coefficient directly controls the amplitude of the nth harmonic partial if the input ain is a sine wave with amplitude = 1.0. This makes chebyshevpoly an efficient additive synthesis engine for N partials that requires only one oscillator instead of N oscillators. The amplitude or waveform of the input signal can also be changed for different waveshaping effects. If we consider the input parameter ain to be "x" and the output aout to be "y", then the chebyshevpoly opcode calculates the following equation: y = k0*T0(x) + k1*T1(x) + k2*T2(x) + k3*T3(x) + ...
where the Tn(x) are defined by the recurrence relation T0(x) = 1, T1(x) = x, Tn(x) = 2x*T[n-1](x) - T[n-2](x)
407
More information about Chebyshev polynomials can be found on Wikipedia at http://en.wikipedia.org/wiki/Chebyshev_polynomial [http://en.wikipedia.org/wiki/Chebyshev_polynomial]
See Also
polynomial, mac maca
Examples
Here is an example of the chebyshevpoly opcode. It uses the file chebyshevpoly.csd [examples/ chebyshevpoly.csd].
; avoid clicks, scale final amplitude, and output adeclick linseg 0.0, 0.05, 1.0, p3 - 0.1, 1.0, 0.05, 0.0 outs ay * adeclick * 10000, ay * adeclick * 10000 endin </CsInstruments> <CsScore> f1 0 32768 10 1 ; a sine wave i1 0 5 e </CsScore> </CsoundSynthesizer>
408
Credits
Author: Anthony Kozar January 2008 New in Csound version 5.08
409
checkbox
checkbox Sense on-screen controls.
Description
Sense on-screen controls. Requires Winsound or TCL/TK.
Syntax
kres checkbox knum
Performance
Note that this opcode is not available on Windows due to the implimentation of pipes on that system kres -- value of the checkbox control. If the checkbox is set (pushed) then return 1, if not, return 0. knum -- the number of the checkbox. If it does not exist, it is made on-screen at initialization.
Examples
Here is a simple example [examples/checkbox.csd]. of the checkbox opcode. It uses the file checkbox.csd
410
See Also
button
Credits
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK September, 2000 Example written by Kevin Conder. New in Csound version 4.08
411
chn
chn Declare a channel of the named software bus.
Description
Declare a channel of the named software bus, with setting optional parameters in the case of a control channel. If the channel does not exist yet, it is created, with an inital value of zero or empty string. Otherwise, the type (control, audio, or string) of the existing channel must match the declaration, or an init error occurs. The input/output mode of an existing channel is updated so that it becomes the bitwise OR of the previous and the newly specified value.
Syntax
chn_k Sname, imode[, itype, idflt, imin, imax] chn_a Sname, imode chn_S Sname, imode
Initialization
imode -- sum of at least one of 1 for input and 2 for output. itype (optional, defaults to 0) -- channel subtype for control channels only. Possible values are: 0: default/unspecified (idflt, imin, and imax are ignored) 1: integer values only 2: linear scale 3: exponential scale idflt (optional, defaults to 0) -- default value, for control channels with non-zero itype only. Must be greater than or equal to imin, and less than or equal to imax. imin (optional, defaults to 0) -- minimum value, for control channels with non-zero itype only. Must be non-zero for exponential scale (itype = 3). imax (optional, defaults to 0) -- maximum value, for control channels with non-zero itype only. Must be greater than imin. In the case of exponential scale, it should also match the sign of imin.
Notes
The channel parameters (imode, itype, idflt, imin, and imax) are only hints for the host application or external software accessing the bus through the API, and do not actually restrict reading from or writing to the channel in any way. Also, the initial value of a newly created control channel is zero, regardless of the setting of idflt. For communication with external software, using chnexport may be preferred, as it allows direct access 412
to orchestra variables exported as channels of the bus, eliminating the need for using chnset and chnget to send or receive data.
Performance
chn_k, chn_a, and chn_S declare a control, audio, or string channel, respectively.
Example
The example shows the software bus being used as an asynchronous control signal to select a filter cutoff. It assumes that an external program that has access to the API is feeding the values.
sr = 44100 kr = 100 ksmps = 1 chn_k "cutoff", 1, 3, 1000, 500, 2000 instr kc a1 a2 endin 1 chnget oscil lowpass2 out "cutoff" p4, p5, 100 a1, kc, 200 a2
Credits
Author: Istvan Varga 2005
413
chnclear
chnclear Clears an audio output channel of the named software bus.
Description
Clears an audio channel of the named software bus to zero. Implies declaring the channel with imode=2 (see also chn_a).
Syntax
chnclear Sname
Initialization
Sname -- a string that indicates which named channel of the software bus to clear.
Credits
Author: Istvan Varga 2006
414
chnexport
chnexport Export a global variable as a channel of the bus.
Description
Export a global variable as a channel of the bus; the channel should not already exist, otherwise an init error occurs. This opcode is normally called from the orchestra header, and allows the host application to read or write orchestra variables directly, without having to use chnget or chnset to copy data.
Syntax
gival chnexport Sname, imode[, itype, idflt, imin, imax] gkval chnexport Sname, imode[, itype, idflt, imin, imax] gaval chnexport Sname, imode gSval chnexport Sname, imode
Initialization
imode -- sum of at least one of 1 for input and 2 for output. itype (optional, defaults to 0) -- channel subtype for control channels only. Possible values are: 0: default/unspecified (idflt, imin, and imax are ignored) 1: integer values only 2: linear scale 3: exponential scale idflt (optional, defaults to 0) -- default value, for control channels with non-zero itype only. Must be greater than or equal to imin, and less than or equal to imax. imin (optional, defaults to 0) -- minimum value, for control channels with non-zero itype only. Must be non-zero for exponential scale (itype = 3). imax (optional, defaults to 0) -- maximum value, for control channels with non-zero itype only. Must be greater than imin. In the case of exponential scale, it should also match the sign of imin.
Notes
The channel parameters (imode, itype, idflt, imin, and imax) are only hints for the host application or external software accessing the bus through the API, and do not actually restrict reading from or writing to the channel in any way. While the global variable is used as output argument, chnexport does not actually change it, and always runs at i-time only. If the variable is not previously declared, it is created by Csound with an initial value 415
Example
The example shows the software bus being used as an asynchronous control signal to select a filter cutoff. It assumes that an external program that has access to the API is feeding the values.
sr = 44100 kr = 100 ksmps = 1 gkc init 1000 ; set default value gkc chnexport "cutoff", 1, 3, i(gkc), 500, 2000 instr a1 a2 endin 1 oscil lowpass2 out p4, p5, 100 a1, gkc, 200 a2
Credits
Author: Istvan Varga 2005
416
chnget
chnget Reads data from the software bus.
Description
Reads data from a channel of the inward named software bus. Implies declaring the channel with imode=1 (see also chn_k, chn_a, and chn_S).
Syntax
ival chnget Sname kval chnget Sname aval chnget Sname Sval chnget Sname
Initialization
Sname -- a string that identifies a channel of the named software bus to read. ival -- the control value read at i-time. Sval -- the string value read at i-time.
Performance
kval -- the control value read at performance time. aval -- the audio signal read at performance time.
Example
The example shows the software bus being used as an asynchronous control signal to select a filter cutoff. It assumes that an external program that has access to the API is feeding the values.
sr = 44100 kr = 100 ksmps = 1 instr kc a1 a2 endin 1 chnget oscil lowpass2 out "cutoff" p4, p5, 100 a1, kc, 200 a2
Credits
417
418
chnmix
chnmix Writes audio data to the named software bus, mixing to the previous output.
Description
Adds an audio signal to a channel of the named software bus. Implies declaring the channel with imode=2 (see also chn_a).
Syntax
chnmix aval, Sname
Initialization
Sname -- a string that indicates which named channel of the software bus to write.
Performance
aval -- the audio signal to write at performance time.
Credits
Author: Istvan Varga 2006
419
chnparams
chnparams Query parameters of a channel.
Description
Query parameters of a channel (if it does not exist, all returned values are zero).
Syntax
itype, imode, ictltype, idflt, imin, imax chnparams
Initialization
itype -- channel data type (1: control, 2: audio, 3: string) imode -- sum of 1 for input and 2 for output ictltype -- special parameter for control channel only; if not available, set to zero. idflt -- special parameter for control channel only; if not available, set to zero. imin -- special parameter for control channel only; if not available, set to zero. imax -- special parameter for control channel only; if not available, set to zero.
Credits
Author: Istvan Varga 2005
420
chnrecv
chnrecv Recieves data from the software bus.
Description
Receives data from a channel of the inward named software bus. Implies declaring the channel with imode=1 (see also chn_k, chn_a, and chn_S).
Syntax
ival chnrecv Sname kval chnrecv Sname aval chnrecv Sname Sval chnrecv Sname
Initialization
Sname -- a string that identifies a channel of the named software bus to read.
Performance
ival -- the control value read at i-time. kval -- the control value read at performance time. aval -- the audio signal read at performance time. Sval -- the string value read at i-time.
Note
Example
The example shows the software bus being used as an asynchronous control signal to select a filter cutoff. It assumes that an external program that has access to the API is feeding the values.
sr = 44100 ksmps = 100 nchnls = 1 instr kc a1 a2 endin 1 chnrecv oscil lowpass2 out "cutoff" p4, p5, 100 a1, kc, 200 a2
421
Credits
Author: Istvan Varga 2005
422
chnsend
chnsend Sends data via the named software bus.
Description
Send to a channel of the named software bus. Implies declaring the channel with imode=2 (see also chn_k, chn_a, and chn_S).
Syntax
chnsend ival, Sname chnsend kval, Sname chnsend aval, Sname chnsend Sval, Sname
Initialization
Sname -- a string that indicates which named channel of the software bus to send to.
Performance
ival -- the control value to write at i-time. kval -- the control value to write at performance time. aval -- the audio signal to write at performance time. Sval -- the string value to write at i-time.
Example
The example shows the software bus being used to write pitch information to a controlling program.
sr = 44100 ksmps = 100 nchnls = 1 instr 1 a1 in kp,ka pitchamdf a1 chnsend kp, "pitch" endin
See Also
chnrecv, chnset, chnget 423
Credits
Author: Istvan Varga 2005
424
chnset
chnset Writes data to the named software bus.
Description
Write to a channel of the named software bus. Implies declaring the channel with imod=2 (see also chn_k, chn_a, and chn_S).
Syntax
chnset ival, Sname chnset kval, Sname chnset aval, Sname chnset Sval, Sname
Initialization
Sname -- a string that indicates which named channel of the software bus to write. ival -- the control value to write at i-time. Sval -- the string value to write at i-time.
Performance
kval -- the control value to write at performance time. aval -- the audio signal to write at performance time.
Example
The example shows the software bus being used to write pitch information to a controlling program.
sr = 44100 kr = 100 ksmps = 1 instr 1 a1 in kp,ka pitchamdf a1 chnset kp, "pitch" endin
Credits
425
426
chuap
chuap Simulates Chua's oscillator, an LRC oscillator with an active resistor, proved capable of bifurcation and chaotic attractors, with k-rate control of circuit elements.
Description
Simulates Chua's oscillator, an LRC oscillator with an active resistor, proved capable of bifurcation and chaotic attractors, with k-rate control of circuit elements.
Syntax
aI3, aV2, aV1 chuap kL, kR0, kC1, kG, kGa, kGb, kE, kC2, iI3, iV2, iV1, ktime_step
Initialization
iI3 -- Initial current at G iV2 -- Initial voltage at C2 iV1 -- Initial voltage at C1
Performance
kL -- Inductor L kR0 -- Resistor R0 kC1 -- Capacitor C1 kG -- Resistor G kGa -- Resistor V (nonlinearity term) kGb -- Resistor V (nonlinearity term) kGb -- Resistor V (nonlinearity term) ktime_step -- Delta time in the difference equation, can be used to more or less control pitch. Chua's oscillator is a simple LRC oscillator with an active resistor. The oscillator can be driven into period bifurcation, and thus to chaos, because of the nonlinear response of the active resistor.
427
Diagram of Chua's Oscillator Circuit The circuit is described by a set of three ordinary differential equations called Chua's equations: dI3 R0 1 --- = - -- I3 - - V2 dt L L dV2 1 G --- = -- I3 - -- (V2 - V1) dt C2 C2 dV1 G 1 --- = -- (V2 - V1) - -- f(V1) dt C1 C1
where f() is a piecewise discontinuity simulating the active resistor: f(V1) = Gb V1 + - (Ga - Gb)(|V1 + E| - |V1 - E|)
A solution of these equations (I3,V2,V1)(t) starting from an initial state (I3,V2,V1)(0) is called a trajectory of Chua's oscillator. The Csound implementation is a difference equation simulation of Chua's oscillator with Runge-Kutta integration.
Note
This algorithm uses internal non linear feedback loops which causes audio result to depend on the orchestra sampling rate. For example, if you develop a project with sr=48000Hz and if you want to produce an audio CD from it, you should record a file with sr=48000Hz and then downsample the file to 44100Hz using the srconv utility.
428
Warning
Be careful! Some sets of parameters will produce amplitude spikes or positive feedback that could damage your speakers.
Examples
Here is an example of the chuap opcode. It uses the file chuap.csd [examples/chuap.csd].
instr 1 ; sys_variables = system_vars(5:12); % L,R0,C2,G,Ga,Gb,E,C1 or p8:p15 ; integ_variables = [system_vars(14:16),system_vars(1:2)]; % x0,y0,z0,dataset_size,step_size or p17:p19 istep_size = p5 iL = p8 iR0 = p9 iC2 = p10 iG = p11 iGa = p12 iGb = p13 iE = p14 iC1 = p15 iI3 = p17 iV2 = p18 iV1 = p19 iattack = 0.02 isustain = p3 irelease = 0.02 p3 = iattack + isustain + irelease iscale = 1.0 adamping linseg 0.0, iattack, iscale, isustain, iscale, irelease, 0.0 aguide buzz 0.5, 440, sr/440, gibuzztable aI3, aV2, aV1 chuap iL, iR0, iC2, iG, iGa, iGb, iE, iC1, iI3, iV2, iV1, istep_size asignal balance aV2, aguide outs adamping * asignal, adamping * asignal endin </CsInstruments> <CsScore> ; Adapted from ABC++ MATLAB example data. i 1 0 20 1500 .1 -1 -1 -0.00707925 0.00001647 100 1 -.99955324 -1.00028375 1 -.00222159 204.8 -2.362 i 1 + 20 1500 .425 0 -1 1.3506168 0 -4.50746268737 -1 2.4924 .93 1 1 0 -22.28662665 .00 i 1 + 20 1024 .05 -1 -1 0.00667 0.000651 10 -1 .856 1.1 1 .06 51.2 -20.200590133667 .1725393235 i 1 + 20 1024 0.05 -1 -1 0.00667 0.000651 10 -1 0.856 1.1 1 0.1 153.6 21.12496758 0.03001749 0.51582866 </CsScore> </CsoundSynthesizer>
Credits
429
Inventor of Chua's oscillator: Leon O. Chua [http://www.eecs.berkeley.edu/~chua] Author of MATLAB simulation: James Patrick McEvoy MATLAB Adventures in Bifurcations and Chaos (ABC++) [http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=3541] Author of Csound port: Michael Gogins New in Csound version 5.09 Note added by Franois Pinot, August 2009
430
cigoto
cigoto Conditionally transfer control during the i-time pass.
Description
During the i-time pass only, conditionally transfer control to the statement labeled by label.
Syntax
cigoto condition, label
where label is in the same instrument block and is not an expression, and where condition uses one of the Relational operators (<, =, <=, ==, !=) (and = for convenience, see also under Conditional Values).
Examples
Here is an example of the cigoto opcode. It uses the file cigoto.csd [examples/cigoto.csd].
431
print ifreq a1 oscil 10000, ifreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple sine wave. f 1 0 32768 10 1 ; ; i ; i e p4: 1 = high note, anything else = low note Play Instrument #1 for one second, a low note. 1 0 1 0 Play a Instrument #1 for one second, a high note. 1 1 1 1
</CsScore> </CsoundSynthesizer>
See Also
cggoto, ckgoto, cngoto, goto, if, kgoto, rigoto, tigoto, timout
Credits
Example written by Kevin Conder.
432
ckgoto
ckgoto Conditionally transfer control during the p-time passes.
Description
During the p-time passes only, conditionally transfer control to the statement labeled by label.
Syntax
ckgoto condition, label
where label is in the same instrument block and is not an expression, and where condition uses one of the Relational operators (<, =, <=, ==, !=) (and = for convenience, see also under Conditional Values).
Examples
Here is an example of the ckgoto opcode. It uses the file ckgoto.csd [examples/ckgoto.csd].
433
printks "kval = %f, kfreq = %f\\n", 1, kval, kfreq a1 oscil 10000, kfreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table: a simple sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
cggoto, cigoto, cngoto, goto, if, igoto, tigoto, timout
Credits
Example written by Kevin Conder.
434
clear
clear Zeroes a list of audio signals.
Description
clear zeroes a list of audio signals.
Syntax
clear avar1 [, avar2] [, avar3] [...]
Performance
avar1, avar2, avar3, ... -- signals to be zeroed clear sets every sample of each of the given audio signals to zero when it is performed. This is equivalent to writing avarN = 0 in the orchestra for each of the specified variables. Typically, clear is used with global variables that combine multiple signals from different sources and change with each k-pass (performance loop) through all of the active instrument instances. After the final usage of such a variable and before the next k-pass, it is necessary to clear the variable so that it does not add the next cycle's signals to the previous result. clear is especially useful in combination with vincr (variable increment) and they are intended to be used together with file output opcodes such as fout.
Examples
Here is an example of the clear opcode. It uses the file clear.csd [examples/clear.csd].
435
See Also
vincr
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
436
clfilt
clfilt Implements low-pass and high-pass filters of different styles.
Description
Implements the classical standard analog filter types: low-pass and high-pass. They are implemented with the four classical kinds of filters: Butterworth, Chebyshev Type I, Chebyshev Type II, and Elliptical. The number of poles may be any even number from 2 to 80.
Syntax
ares clfilt asig, kfreq, itype, inpol [, ikind] [, ipbr] [, isba] [, iskip]
Initialization
itype -- 0 for low-pass, 1 for high-pass. inpol -- The number of poles in the filter. It must be an even number from 2 to 80. ikind (optional) -- 0 for Butterworth, 1 for Chebyshev Type I, 2 for Chebyshev Type II, 3 for Elliptical. Defaults to 0 (Butterworth) ipbr (optional) -- The pass-band ripple in dB. Must be greater than 0. It is ignored by Butterworth and Chebyshev Type II. The default is 1 dB. isba (optional) -- The stop-band attenuation in dB. Must be less than 0. It is ignored by Butterworth and Chebyshev Type I. The default is -60 dB. iskip (optional) -- 0 initializes all filter internal states to 0. 1 skips initialization. The default is 0.
Performance
asig -- The input audio signal. kfreq -- The corner frequency for low-pass or high-pass.
Examples
Here is an example of the clfilt opcode as a low-pass filter. It uses the file clfilt_lowpass.csd [examples/ clfilt_lowpass.csd].
437
;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o clfilt_lowpass.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; white noise asig rand 0.5 outs asig, asig endin instr 2 ; filtered noise asig rand 0.9 ; Lowpass filter signal asig with a ; 10-pole Butterworth at 500 Hz. a1 clfilt asig, 500, 0, 10 outs a1, a1 endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
Here is an example of the clfilt opcode as a high-pass filter. It uses the file clfilt_highpass.csd [examples/clfilt_highpass.csd].
438
a1 clfilt asig, 20, 1, 6, 1, 3 outs a1, a1 endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
Credits
Author: Erik Spjut New in version 4.20
439
clip
clip Clips a signal to a predefined limit.
Description
Clips an a-rate signal to a predefined limit, in a soft manner, using one of three methods.
Syntax
ares clip asig, imeth, ilimit [, iarg]
Initialization
imeth -- selects the clipping method. The default is 0. The methods are: 0 = Bram de Jong method (default) 1 = sine clipping 2 = tanh clipping ilimit -- limiting value iarg (optional, default=0.5) -- when imeth = 0, indicates the point at which clipping starts, in the range 0 - 1. Not used when imeth = 1 or imeth = 2. Default is 0.5.
Performance
asig -- a-rate input signal The Bram de Jong method (imeth = 0) applies the algorithm (denoting ilimit as limit and iarg as a):
|x| >= 0 and |x| <= (limit*a): f(x) = f(x) |x| > (limit*a) and |x| <= limit: f(x) = sign(x) * (limit*a+(x-limit*a)/(1+((x-limit*a)/(limit*(1-a))) |x| > limit: f(x) = sign(x) * (limit*(1+a))/2
440
Note
Method 1 appears to be non-functional at release of Csound version 4.07.
Examples
Here is an example of the clip opcode. It uses the file clip.csd [examples/clip.csd].
</CsScore> </CsoundSynthesizer>
Credits
441
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK August, 2000 New in Csound version 4.07 September 2009: Thanks to a note from Paolo Dell'Osso, corrected the formula.
442
clock
clock Deprecated.
Description
Deprecated. Use the rtclock opcode instead.
443
clockoff
clockoff Stops one of a number of internal clocks.
Description
Stops one of a number of internal clocks.
Syntax
clockoff inum
Initialization
inum -- the number of a clock. There are 32 clocks numbered 0 through 31. All other values are mapped to clock number 32.
Performance
Between a clockon and a clockoff opcode, the CPU time used is accumulated in the clock. The precision is machine dependent but is the millisecond range on UNIX and Windows systems. The readclock opcode reads the current value of a clock at initialization time.
Examples
Here is an example of the clockoff opcode. It uses the file clockoff.csd [examples/clockoff.csd].
444
</CsInstruments> <CsScore> ; Initialize the function tables. ; Table 1: an ordinary sine wave. f 1 0 32768 10 1 ; i ; i ; i e Play Instrument #1 for one second starting at 0:00. 1 0 1 Play Instrument #1 for one second starting at 0:01. 1 1 1 Play Instrument #1 for one second starting at 0:02. 1 2 1
</CsScore> </CsoundSynthesizer>
See Also
clockon, readclock
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK July, 1999 New in Csound version 3.56
445
clockon
clockon Starts one of a number of internal clocks.
Description
Starts one of a number of internal clocks.
Syntax
clockon inum
Initialization
inum -- the number of a clock. There are 32 clocks numbered 0 through 31. All other values are mapped to clock number 32.
Performance
Between a clockon and a clockoff opcode, the CPU time used is accumulated in the clock. The precision is machine dependent but is the millisecond range on UNIX and Windows systems. The readclock opcode reads the current value of a clock at initialization time.
Examples
Here is an example of the clockon opcode. It uses the file clockon.csd [examples/clockon.csd].
446
</CsInstruments> <CsScore> ; Initialize the function tables. ; Table 1: an ordinary sine wave. f 1 0 32768 10 1 ; i ; i ; i e Play Instrument #1 for one second starting at 0:00. 1 0 1 Play Instrument #1 for one second starting at 0:01. 1 1 1 Play Instrument #1 for one second starting at 0:02. 1 2 1
</CsScore> </CsoundSynthesizer>
See Also
clockoff, readclock
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK July, 1999 New in Csound version 3.56
447
cngoto
cngoto Transfers control on every pass when a condition is not true.
Description
Transfers control on every pass when the condition is not true.
Syntax
cngoto condition, label
where label is in the same instrument block and is not an expression, and where condition uses one of the Relational operators (<, =, <=, ==, !=) (and = for convenience, see also under Conditional Values).
Examples
Here is an example of the cngoto opcode. It uses the file cngoto.csd [examples/cngoto.csd].
448
out a1 endin </CsInstruments> <CsScore> ; Table: a simple sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
cggoto, cigoto, ckgoto, goto, if, igoto, tigoto, timout
Credits
Example written by Kevin Conder. New in version 4.21
449
comb
comb Reverberates an input signal with a colored frequency response.
Description
Reverberates an input signal with a colored frequency response.
Syntax
ares comb asig, krvt, ilpt [, iskip] [, insmps]
Initialization
ilpt -- loop time in seconds, which determines the echo density of the reverberation. This in turn characterizes the color of the comb filter whose frequency response curve will contain ilpt * sr/2 peaks spaced evenly between 0 and sr/2 (the Nyquist frequency). Loop time can be as large as available memory will permit. The space required for an n second loop is 4n*sr bytes. Delay space is allocated and returned as in delay. iskip (optional, default=0) -- initial disposition of delay-loop data space (cf. reson). The default value is 0. insmps (optional, default=0) -- delay amount, as a number of samples.
Performance
krvt -- the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). This filter reiterates input with an echo density determined by loop time ilpt. The attenuation rate is independent and is determined by krvt, the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). Output from a comb filter will appear only after ilpt seconds.
Examples
Here is an example of the comb opcode. It uses the file comb.csd [examples/comb.csd].
450
<CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gamix init 0 instr 1 kcps expon p5, p3, p4 asig vco2 0.3, kcps outs asig, asig gamix = gamix + asig endin instr 99 krvt = 3.5 ilpt = 0.1 aleft comb gamix, krvt, ilpt aright comb gamix, krvt, ilpt*.2 outs aleft, aright clear gamix ; clear mixer endin </CsInstruments> <CsScore> i 1 0 3 20 2000 i 1 5 .01 440 440 i 99 0 8 e </CsScore> </CsoundSynthesizer>
See Also
alpass, reverb, valpass, vcomb
Credits
Author: William Pete Moss (vcomb and valpass) University of Texas at Austin Austin, Texas USA January 2002
451
compress
compress Compress, limit, expand, duck or gate an audio signal.
Description
This unit functions as an audio compressor, limiter, expander, or noise gate, using either soft-knee or hard-knee mapping, and with dynamically variable performance characteristics. It takes two audio input signals, aasig and acsig, the first of which is modified by a running analysis of the second. Both signals can be the same, or the first can be modified by a different controlling signal. compress first examines the controlling acsig by performing envelope detection. This is directed by two control values katt and krel, defining the attack and release time constants (in seconds) of the detector. The detector rides the peaks (not the RMS) of the control signal. Typical values are .01 and .1, the latter usually being similar to ilook. The running envelope is next converted to decibels, then passed through a mapping function to determine what compresser action (if any) should be taken. The mapping function is defined by four decibel control values. These are given as positive values, where 0 db corresponds to an amplitude of 1, and 90 db corresponds to an amplitude of 32768.
Syntax
ar compress aasig, acsig, kthresh, kloknee, khiknee, kratio, katt, krel, ilook
Initialization
ilook -- lookahead time in seconds, by which an internal envelope release can sense what is coming. This induces a delay between input and output, but a small amount of lookahead improves the performance of the envelope detector. Typical value is .05 seconds, sufficient to sense the peaks of the lowest frequency in acsig.
Performance
kthresh -- sets the lowest decibel level that will be allowed through. Normally 0 or less, but if higher the threshold will begin removing low-level signal energy such as background noise. kloknee, khiknee -- decibel break-points denoting where compression or expansion will begin. These set the boundaries of a soft-knee curve joining the low-amplitude 1:1 line and the higher-amplitude compression ratio line. Typical values are 48 and 60 db. If the two breakpoints are equal, a hard-knee (angled) map will result. kratio -- ratio of compression when the signal level is above the knee. The value 2 will advance the output just one decibel for every input gain of two; 3 will advance just one in three; 20 just one in twenty, etc. Inverse ratios will cause signal expansion: .5 gives two for one, .25 four for one, etc. The value 1 will result in no change. The actions of compress will depend on the parameter settings given. A hard-knee compressor-limiter, for instance, is obtained from a near-zero attack time, equal-value break-points, and a very high ratio (say 100). A noise-gate plus expander is obtained from some positive threshold, and a fractional ratio above the knee. A voice-activated music compressor (ducker) will result from feeding the music into aasig and the speech into acsig. A voice de-esser will result from feeding the voice into both, with the acsig version being preceded by a band-pass filter that emphasizes the sibilants. Each application will 452
require some experimentation to find the best parameter settings; these have been made k-variable to make this practical.
Examples
Here is an example of the compress opcode. It uses the file compress.csd [examples/compress.csd].
; duck the audio signal "beats.wav" with your voice. kthresh = 0 kloknee = 40 khiknee = 60 kratio = 3 katt = 0.1 krel = .5 ilook = .02 asig compress asig, avoice, kthresh, kloknee, khiknee, kratio, katt, krel, ilook ; voice-activated com outs asig, asig endin </CsInstruments> <CsScore> i 1 0 5 i 2 6 21 e </CsScore> </CsoundSynthesizer>
See Also
dam
Credits
Written by Barry L. Vercoe for Extended Csound and released in csound5.02. 453
connect
connect Connects a source outlet to a sink inlet.
Description
The connect opcode, valid only in the orchestra header, sends the signals from the indicated outlet in all instances of the indicated source instrument to the indicated inlet in all instances of the indicated sink instrument. Each inlet instance receives the sum of the signals in all outlet instances. Thus multiple instances of an outlet may fan in to one instance of an inlet, or one instance of an outlet may fan out to multiple instances of an inlet. When Csound creates a new instance of an instrument template, new instances of its connections also are created.
Syntax
connect Tsource1, Soutlet1, Tsink1, Sinlet1
Initialization
Tsource1 -- String name of the source instrument definition. Soutlet1 -- String name of the source outlet in the source instrument. Tsink1 -- String name of the sink instrument definition. Sinlet1 -- String name of the sink inlet in the sink instrument.
Examples
Here is an example of the connect opcode. It uses the file connect.csd [examples/connect.csd].
454
"leftout", "rightout",
connect "Reverberator", "leftout", connect "Reverberator", "rightout", connect "Compressor", connect "Compressor", "leftout", "rightout",
; Turn on the "effect" units in the signal flow graph. alwayson "Reverberator", 0.91, 12000 alwayson "Compressor" alwayson "Soundfile" instr SimpleSine ihz = cpsmidinn(p4) iamplitude = ampdb(p5) print ihz, iamplitude ; Use ftgenonce instead of ftgen, ftgentmp, or f statement. isine ftgenonce 0, 0, 4096, 10, 1 a1 oscili iamplitude, ihz, isine aenv madsr 0.05, 0.1, 0.5, 0.2 asignal = a1 * aenv ; Stereo audio outlet to be routed in the orchestra header. outleta "leftout", asignal * 0.25 outleta "rightout", asignal * 0.75 endin instr Moogy ihz = cpsmidinn(p4) iamplitude = ampdb(p5) ; Use ftgenonce instead of ftgen, ftgentmp, or f statement. isine ftgenonce 0, 0, 4096, 10, 1 asignal vco iamplitude, ihz, 1, 0.5, isine kfco line 200, p3, 2000 krez init 0.9 asignal moogvcf asignal, kfco, krez, 100000 ; Stereo audio outlet to be routed in the orchestra header. outleta "leftout", asignal * 0.75 outleta "rightout", asignal * 0.25 endin instr Reverberator ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" idelay = p4 icutoff = p5 aleftout, arightout reverbsc aleftin, arightin, idelay, icutoff ; Stereo output. outleta "leftout", aleftout outleta "rightout", arightout endin instr Compressor ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" kthreshold = 25000 icomp1 = 0.5 icomp2 = 0.763 irtime = 0.1 iftime = 0.1 aleftout dam aleftin, kthreshold, icomp1, icomp2, irtime, iftime arightout dam arightin, kthreshold, icomp1, icomp2, irtime, iftime ; Stereo output. outleta "leftout", aleftout outleta "rightout", arightout endin instr Soundfile ; Stereo input. aleftin inleta "leftin" arightin inleta "rightin" outs aleftin, arightin endin </CsInstruments> <CsScore> ; Not necessary to activate "effects" or create f-tables in the score!
455
; Overlapping notes to create new instances of instruments. i "SimpleSine" 1 5 60 85 i "SimpleSine" 2 5 64 80 i "Moogy" 3 5 67 75 i "Moogy" 4 5 71 70 ;6 extra seconds after the performance e 12 </CsScore> </CsoundSynthesizer>
See Also
outleta outletk outletf inleta inletk inletf alwayson ftgenonce More information on this opcode: http://www.csounds.com/journal/issue13/signalFlowGraphOpcodes.html , written by Michael Gogins
Credits
By: Michael Gogins 2009
456
control
control Configurable slider controls for realtime user input.
Description
Configurable slider controls for realtime user input. Requires Winsound or TCL/TK. control reads a slider's value.
Syntax
kres control knum
Performance
Note that this opcode is not available on Windows due to the implimentation of pipes on that system knum -- number of the slider to be read. Calling control will create a new slider on the screen. There is no theoretical limit to the number of sliders. Windows and TCL/TK use only integers for slider values, so the values may need rescaling. GUIs usually pass values at a fairly slow rate, so it may be advisable to pass the output of control through port.
Examples
See the setctrl opcode for an example.
See Also
setctrl
Credits
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK May, 2000 New in Csound version 4.06
457
convle
convle Same as the convolve opcode.
Description
Same as the convolve opcode.
458
convolve
convolve Convolves a signal and an impulse response.
Description
Output is the convolution of signal ain and the impulse response contained in ifilcod. If more than one output signal is supplied, each will be convolved with the same impulse response. Note that it is considerably more efficient to use one instance of the operator when processing a mono input to create stereo, or quad, outputs. Note: this opcode can also be written as convle.
Syntax
ar1 [, ar2] [, ar3] [, ar4] convolve ain, ifilcod [, ichannel]
Initialization
ifilcod -- integer or character-string denoting an impulse response data file. An integer denotes the suffix of a file convolve.m; a character string (in double quotes) gives a filename, optionally a full pathname. If not a fullpath, the file is sought first in the current directory, then in the one given by the environment variable SADIR (if defined). The data file contains the Fourier transform of an impulse response. Memory usage depends on the size of the data file, which is read and held entirely in memory during computation, but which is shared by multiple calls. ichannel (optional) -- which channel to use from the impulse response data file.
Performance
ain -- input audio signal. convolve implements Fast Convolution. The output of this operator is delayed with respect to the input. The following formulas should be used to calculate the delay:
For (1/kr) <= IRdur: Delay = ceil(IRdur * kr) / kr For (1/kr) > IRdur: Delay = IRdur * ceil(1/(kr*IRdur)) Where: kr = Csound control rate IRdur = duration, in seconds, of impulse response ceil(n) = smallest integer not smaller than n
One should be careful to also take into account the initial delay, if any, of the impulse response. For example, if an impulse response is created from a recording, the soundfile may not have the initial delay included. Thus, one should either ensure that the soundfile has the correct amount of zero padding at the start, or, preferably, compensate for this delay in the orchestra (the latter method is more efficient). To compensate for the delay in the orchestra, subtract the initial delay from the result calculated using the above formula(s), when calculating the required delay to introduce into the 'dry' audio path. For typical applications, such as reverb, the delay will be in the order of 0.5 to 1.5 seconds, or even 459
longer. This renders the current implementation unsuitable for real time applications. It could conceivably be used for real time filtering however, if the number of taps is small enough. The author intends to create a higher-level operator at some stage, that would mix the wet & dry signals, using the correct amount of delay automatically.
Examples
Create frequency domain impulse response file using the cvanal utility:
csound -Ucvanal l1_44.wav l1_44.cv
Determine duration of impulse response. For high accuracy, determine the number of sample frames in the impulse response soundfile, and then compute the duration with: duration = (sample frames)/(sample rate of soundfile) This is due to the fact that the sndinfo utility only reports the duration to the nearest 10ms. If you have a utility that reports the duration to the required accuracy, then you can simply use the reported value directly.
sndinfo l1_44.wav
length = 60822 samples, sample rate = 44100 Duration = 60822/44100 = 1.379s. Determine initial delay, if any, of impulse response. If the impulse response has not had the initial delay removed, then you can skip this step. If it has been removed, then the only way you will know the initial delay is if the information has been provided separately. For this example, let's assume that the initial delay is 60ms (0.06s) Determine the required delay to apply to the dry signal, to align it with the convolved signal: If kr = 441: 1/kr = 0.0023, which is <= IRdur (1.379s), so: Delay1 = ceil(IRdur * kr) / kr = ceil(608.14) / 441 = 609/441 = 1.38s
Accounting for the initial delay: Delay2 = 0.06s Total delay = delay1 - delay2 = 1.38 - 0.06 = 1.32s Here is similar example of the convolve opcode. It uses the file convolve.csd [examples/convolve.csd]. 460
if (ichnls == 1) then adry awet awet adrydel outs else adry soundin "fox.wav" ; input (dry) audio awet1, awet2 convolve adry,"rv_stereo.cva" ; stereo convolved (wet) audio awet1 diff awet1 ; brighten left awet2 diff awet2 ; and brighten right adrydel delay (1-imix)*adry, idel ; Delay dry signal to align it with convolved signal ; Apply level adjustment here too. outs ivol*(adrydel+imix*awet1),ivol*(adrydel+imix*awet2) ; Mix wet & dry signals endif endin </CsInstruments> <CsScore> i 1 0 4 "rv_mono.wav" i 1 5 4 "rv_stereo.wav" e </CsScore> </CsoundSynthesizer> soundin "fox.wav" ; input (dry) audio convolve adry,"rv_mono.cva" ; mono convolved (wet) audio diff awet ; brighten delay (1-imix)*adry, idel ; Delay dry signal to align it with convolved signal ; Apply level adjustment here too. ivol*(adrydel+imix*awet),ivol*(adrydel+imix*awet) ; Mix wet & dry
See also
461
Credits
Author: Greg Sullivan 1996 New in version 3.28
462
cos
cos Performs a cosine function.
Description
Returns the cosine of x (x in radians).
Syntax
cos(x) (no rate restriction)
Examples
Here is an example of the cos opcode. It uses the file cos.csd [examples/cos.csd].
463
</CsoundSynthesizer>
See Also
cosh, cosinv, sin, sinh, sininv, tan, tanh, taninv
464
cosh
cosh Performs a hyperbolic cosine function.
Description
Returns the hyperbolic cosine of x (x in radians).
Syntax
cosh(x) (no rate restriction)
Examples
Here is an example of the cosh opcode. It uses the file cosh.csd [examples/cosh.csd].
465
See Also
cos, cosinv, sin, sinh, sininv, tan, tanh, taninv
Credits
Author: John ffitch New in version 3.47 Example written by Kevin Conder.
466
cosinv
cosinv Performs a arccosine function.
Description
Returns the arccosine of x (x in radians).
Syntax
cosinv(x) (no rate restriction)
Examples
Here is an example of the cosinv opcode. It uses the file cosinv.csd [examples/cosinv.csd].
467
See Also
cos, cosh, sin, sinh, sininv, tan, tanh, taninv
Credits
Author: John ffitch New in version 3.48 Example written by Kevin Conder.
468
cps2pch
cps2pch Converts a pitch-class value into cycles-per-second (Hz) for equal divisions of the octave.
Description
Converts a pitch-class value into cycles-per-second (Hz) for equal divisions of the octave.
Syntax
icps cps2pch ipch, iequal
Initialization
ipch -- Input number of the form 8ve.pc, indicating an 'octave' and which note in the octave. iequal -- If positive, the number of equal intervals into which the 'octave' is divided. Must be less than or equal to 100. If negative, is the number of a table of frequency multipliers.
Note
1. The following are essentially the same
ia ib ic = cpspch(8.02) cps2pch 8.02, 12 cpsxpch 8.02, 12, 2, 1.02197503906
2. These are opcodes not functions 3. Negative values of ipch are allowed.
Examples
Here is an example of the cps2pch opcode. It uses the file cps2pch.csd [examples/cps2pch.csd].
469
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Use a normal twelve-tone scale. ipch = 8.02 iequal = 12 icps cps2pch ipch, iequal print icps endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the cps2pch opcode using a table of frequency multipliers. It uses the file cps2pch_ftable.csd [examples/cps2pch_ftable.csd].
Example 116. Example of the cps2pch opcode using a table of frequency multipliers.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o cps2pch_ftable.wav -W ;;; </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: for file output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ipch = 8.02 ; Use Table #1, a table of frequency multipliers. icps cps2pch ipch, -1 print icps endin </CsInstruments> <CsScore> ; Table #1: a table of frequency multipliers. ; Creates a 10-note scale of unequal divisions. f 1 0 16 -2 1 1.1 1.2 1.3 1.4 1.6 1.7 1.8 1.9
470
Here is an example of the cps2pch opcode using a 19ET scale. It uses the file cps2pch_19et.csd [examples/cps2pch_19et.csd].
See Also
cpspch, cpsxpch
Credits
471
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK 1997 New in Csound version 3.492
472
cpsmidi
cpsmidi Get the note number of the current MIDI event, expressed in cycles-per-second.
Description
Get the note number of the current MIDI event, expressed in cycles-per-second.
Syntax
icps cpsmidi
Performance
Get the note number of the current MIDI event, expressed in cycles-per-second units, for local processing.
Examples
Here is an example of the cpsmidi opcode. It uses the file cpsmidi.csd [examples/cpsmidi.csd].
473
asig oscil 0.6, icps, 1 print icps outs asig, asig endin </CsInstruments> <CsScore> f0 20 ;sine wave. f 1 0 16384 10 1 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidib, cpstmid, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc, cpsmidinn, octmidinn, pchmidinn
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997
474
cpsmidib
cpsmidib Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in cycles-per-second.
Description
Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in cycles-per-second.
Syntax
icps cpsmidib [irange] kcps cpsmidib [irange]
Initialization
irange (optional) -- the pitch bend range in semitones.
Performance
Get the note number of the current MIDI event, modify it by the current pitch-bend value, and express the result in cycles-per-second units. Available as an i-time value or as a continuous k-rate value.
Examples
Here is an example of the cpsmidib opcode. It uses the file cpsmidib.csd [examples/cpsmidib.csd].
475
See Also
aftouch, ampmidi, cpsmidi, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997
476
cpsmidinn
cpsmidinn Converts a Midi note number value to cycles-per-second.
Description
Converts a Midi note number value to cycles-per-second.
Syntax
cpsmidinn (MidiNoteNumber) (init- or control-rate args only)
Performance
cpsmidinn is a function that takes an i-rate or k-rate value representing a Midi note number and returns the equivalent frequency value in cycles-per-second (Hertz). This conversion assumes that Middle C is Midi note number 60 and that Middle A is tuned to 440 Hz. Midi note number values are typically integers in the range from 0 to 127 but fractional values or values outside of this range will be interpreted consistently.
The first two forms consist of a whole number, representing octave registration, followed by a specially 477
interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equaltempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the cpsmidinn opcode. It uses the file cpsmidinn.csd [examples/cpsmidinn.csd].
imidiNN = imidiNN + 1 if (imidiNN < 128) igoto loop1 endin instr 2 ; test k-rate converters
478
kMiddleC = 60 kcps = cpsmidinn(kMiddleC) koct = octmidinn(kMiddleC) kpch = pchmidinn(kMiddleC) printks "%d %f %f %f\n", 1.0, kMiddleC, kcps, koct, kpch endin </CsInstruments> <CsScore> i1 0 0 i2 0 0.1 e </CsScore> </CsoundSynthesizer>
Here is another example of the cpsmidinn opcode. It uses the file cpsmidinn2.csd [examples/ cpsmidinn2.csd].
See Also
octmidinn, pchmidinn, cpsmidi, notnum, cpspch, cpsoct, octcps, octpch, pchoct
Credits
479
Derived from original value converters by Barry Vercoe. New in version 5.07
480
cpsoct
cpsoct Converts an octave-point-decimal value to cycles-per-second.
Description
Converts an octave-point-decimal value to cycles-per-second.
Syntax
cpsoct (oct) (no rate restriction)
Performance
cpsoct and its related opcodes are really value converters with a special function of manipulating pitch data. Data concerning pitch and frequency can exist in any of the following forms:
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equaltempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
481
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the cpsoct opcode. It uses the file cpsoct.csd [examples/cpsoct.csd].
e </CsScore> </CsoundSynthesizer>
482
See Also
cpspch, octcps, octpch, pchoct, cpsmidinn, octmidinn, pchmidinn
483
cpspch
cpspch Converts a pitch-class value to cycles-per-second.
Description
Converts a pitch-class value to cycles-per-second.
Syntax
cpspch (pch) (init- or control-rate args only)
Performance
cpspch and its related opcodes are really value converters with a special function of manipulating pitch data. Data concerning pitch and frequency can exist in any of the following forms:
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equaltempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
484
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents). If you need more precision in the calculation, use cps2pch or cpsxpch instead.
Examples
Here is an example of the cpspch opcode. It uses the file cpspch.csd [examples/cpspch.csd].
e </CsScore> </CsoundSynthesizer>
485
See Also
cps2pch, cpsoct, cpsxpch, octcps, octpch, pchoct, cpsmidinn, octmidinn, pchmidinn
486
cpstmid
cpstmid Get a MIDI note number (allows customized micro-tuning scales).
Description
This unit is similar to cpsmidi, but allows fully customized micro-tuning scales.
Syntax
icps cpstmid ifn
Initialization
ifn -- function table containing the parameters (numgrades, interval, basefreq, basekeymidi) and the tuning ratios.
Performance
Init-rate only cpsmid requires five parameters, the first, ifn, is the function table number of the tuning ratios, and the other parameters must be stored in the function table itself. The function table ifn should be generated by GEN02, with normalization inhibited. The first four values stored in this function are: 1. numgrades -- the number of grades of the micro-tuning scale 2. interval -- the frequency range covered before repeating the grade ratios, for example 2 for one octave, 1.5 for a fifth etc. 3. basefreq -- the base frequency of the scale in Hz 4. basekeymidi -- the MIDI note number to which basefreq is assigned unmodified After these four values, the user can begin to insert the tuning ratios. For example, for a standard 12 note scale with the base frequency of 261 Hz assigned to the key number 60, the corresponding f-statement in the score to generate the table should be: ; numgrades interval basefreq basekeymidi tuning ratios (equal temp) f1 0 64 -2 12 2 261 60 1 1.059463094359 1.122462048309 1.189207115003 ..etc...
Another example with a 24 note scale with a base frequency of 440 assigned to the key number 48, and a repetition interval of 1.5: ; numgrades interval basefreq basekeymidi tuning-ratios (equal temp) f1 0 64 -2 24 1.5 440 48 1 1.01 1.02 1.03 ..etc...
487
Examples
Here is an example of the cpstmid opcode. It uses the file cpstmid.csd [examples/cpstmid.csd].
See Also
cpsmidi, GEN02
Credits
Author: Gabriel Maldonado Italy 1998 488
489
cpstun
cpstun Returns micro-tuning values at k-rate.
Description
Returns micro-tuning values at k-rate.
Syntax
kcps cpstun ktrig, kindex, kfn
Performance
kcps -- Return value in cycles per second. ktrig -- A trigger signal used to trigger the evaluation. kindex -- An integer number denoting an index of scale. kfn -- Function table containing the parameters (numgrades, interval, basefreq, basekeymidi) and the tuning ratios. These opcodes are similar to cpstmid, but work without necessity of MIDI. cpstun works at k-rate. It allows fully customized micro-tuning scales. It requires a function table number containing the tuning ratios, and some other parameters stored in the function table itself. kindex arguments should be filled with integer numbers expressing the grade of given scale to be converted in cps. In cpstun, a new value is evaluated only when ktrig contains a non-zero value. The function table kfn should be generated by GEN02 and the first four values stored in this function are parameters that express: numgrades -- The number of grades of the micro-tuning scale. interval -- The frequency range covered before repeating the grade ratios, for example 2 for one octave, 1.5 for a fifth etcetera. basefreq -- The base frequency of the scale in cycles per second. basekey -- The integer index of the scale to which to assign basefreq unmodified. After these four values, the user can begin to insert the tuning ratios. For example, for a standard 12-grade scale with the base-frequency of 261 cps assigned to the key-number 60, the corresponding fstatement in the score to generate the table should be:
; ; f1 0 64 -2
numgrades basefreq tuning-ratios (eq.temp) ....... interval basekey 12 2 261 60 1 1.059463 1.12246 1.18920 ..etc...
490
Another example with a 24-grade scale with a base frequency of 440 assigned to the key-number 48, and a repetition interval of 1.5:
; ; f1 0 64 -2
numgrades basefreq tuning-ratios ....... interval basekey 24 1.5 440 48 1 1.01 1.02 1.03
..etc...
Examples
Here is an example of the cpstun opcode. It uses the file cpstun.csd [examples/cpstun.csd].
491
</CsScore> </CsoundSynthesizer>
See Also
cpstmid, cpstuni, GEN02
Credits
Example written by Kevin Conder.
492
cpstuni
cpstuni Returns micro-tuning values at init-rate.
Description
Returns micro-tuning values at init-rate.
Syntax
icps cpstuni index, ifn
Initialization
icps -- Return value in cycles per second. index -- An integer number denoting an index of scale. ifn -- Function table containing the parameters (numgrades, interval, basefreq, basekeymidi) and the tuning ratios.
Performance
These opcodes are similar to cpstmid, but work without necessity of MIDI. cpstuni works at init-rate. It allows fully customized micro-tuning scales. It requires a function table number containing the tuning ratios, and some other parameters stored in the function table itself. The index argument should be filled with integer numbers expressing the grade of given scale to be converted in cps. The function table ifn should be generated by GEN02 and the first four values stored in this function are parameters that express: numgrades -- The number of grades of the micro-tuning scale. interval -- The frequency range covered before repeating the grade ratios, for example 2 for one octave, 1.5 for a fifth etcetera. basefreq -- The base frequency of the scale in cycles per second. basekey -- The integer index of the scale to which to assign basefreq unmodified. After these four values, the user can begin to insert the tuning ratios. For example, for a standard 12-grade scale with the base-frequency of 261 cps assigned to the key-number 60, the corresponding fstatement in the score to generate the table should be:
; ; f1 0 64 -2
numgrades basefreq tuning-ratios (eq.temp) ....... interval basekey 12 2 261 60 1 1.059463 1.12246 1.18920 ..etc...
493
Another example with a 24-grade scale with a base frequency of 440 assigned to the key-number 48, and a repetition interval of 1.5:
; ; f1 0 64 -2
numgrades basefreq tuning-ratios ....... interval basekey 24 1.5 440 48 1 1.01 1.02 1.03
..etc...
Examples
Here is an example of the cpstuni opcode. It uses the file cpstuni.csd [examples/cpstuni.csd].
494
See Also
cpstmid, cpstun, GEN02
Credits
Written by Gabriel Maldonado. Example written by Kevin Conder.
495
cpsxpch
cpsxpch Converts a pitch-class value into cycles-per-second (Hz) for equal divisions of any interval.
Description
Converts a pitch-class value into cycles-per-second (Hz) for equal divisions of any interval. There is a restriction of no more than 100 equal divisions.
Syntax
icps cpsxpch ipch, iequal, irepeat, ibase
Initialization
ipch -- Input number of the form 8ve.pc, indicating an 'octave' and which note in the octave. iequal -- if positive, the number of equal intervals into which the 'octave' is divided. Must be less than or equal to 100. If negative, is the number of a table of frequency multipliers. irepeat -- Number indicating the interval which is the 'octave.' The integer 2 corresponds to octave divisions, 3 to a twelfth, 4 is two octaves, and so on. This need not be an integer, but must be positive. ibase -- The frequency which corresponds to pitch 0.0
Note
1. The following are essentially the same
ia ib ic = cpspch(8.02) cps2pch 8.02, 12 cpsxpch 8.02, 12, 2, 1.02197503906
2. These are opcodes not functions 3. Negative values of ipch are allowed, but not negative irepeat, iequal or ibase.
Examples
Here is an example of the cpsxpch opcode. It uses the file cpsxpch.csd [examples/cpsxpch.csd].
496
<CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o cpsxpch.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Use a normal twelve-tone scale. ipch = 8.02 iequal = 12 irepeat = 2 ibase = 1.02197503906 icps cpsxpch ipch, iequal, irepeat, ibase print icps endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the cpsxpch opcode using a 10.5 ET scale. It uses the file cpsxpch_105et.csd [examples/cpsxpch_105et.csd].
497
icps cpsxpch ipch, iequal, irepeat, ibase print icps endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the cpsxpch opcode using a Pierce scale centered on middle A. It uses the file cpsxpch_pierce.csd [examples/cpsxpch_pierce.csd].
Example 129. Example of the cpsxpch opcode using a Pierce scale centered on middle A.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o cpsxpch_pierce.wav -W ;;; </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: for file output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Use a Pierce scale centered on middle A. ipch = 2.02 iequal = 12 irepeat = 3 ibase = 261.62561 icps cpsxpch ipch, iequal, irepeat, ibase print icps endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
498
See Also
cpspch, cps2pch
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK 1997 New in Csound version 3.492
499
cpuprc
cpuprc Control allocation of cpu resources on a per-instrument basis, to optimize realtime output.
Description
Control allocation of cpu resources on a per-instrument basis, to optimize realtime output.
Syntax
cpuprc insnum, ipercent cpuprc Sinsname, ipercent
Initialization
insnum -- instrument number or string Sinsname -- instrument number or string ipercent -- percent of cpu processing-time to assign. Can also be expressed as a fractional value.
Performance
cpuprc sets the cpu processing-time percent usage of an instrument, in order to avoid buffer underrun in realtime performances, enabling a sort of polyphony theshold. The user must set ipercent value for each instrument to be activated in realtime. Assuming that the total theoretical processing time of the cpu of the computer is 100%, this percent value can only be defined empirically, because there are too many factors that contribute to limiting realtime polyphony in different computers. For example, if ipercent is set to 5% for instrument 1, the maximum number of voices that can be allocated in realtime, is 20 (5% * 20 = 100%). If the user attempts to play a further note while the 20 previous notes are still playing, Csound inhibits the allocation of that note and will display the following warning message: can't allocate last note because it exceeds 100% of cpu time
In order to avoid audio buffer underruns, it is suggested to set the maximum number of voices slightly lower than the real processing power of the computer. Sometimes an instrument can require more processing time than normal. If, for example, the instrument contains an oscillator which reads a table that doesn't fit in cache memory, it will be slower than normal. In addition, any program running concurrently in multitasking, can subtract processing power to varying degrees. At the start, all instruments are set to a default value of ipercent = 0.0% (i.e. zero processing time or rather infinite cpu processing-speed). This setting is OK for deferred-time sessions. All instances of cpuprc must be defined in the header section, not in the instrument body.
Examples
500
Here is an example of the cpuprc opcode. It uses the file cpuprc.csd [examples/cpuprc.csd].
See Also
maxalloc, prealloc
Credits
Author: Gabriel Maldonado Italy 501
July, 1999 New in Csound version 3.57; named instruments added version 5.13
502
cross2
cross2 Cross synthesis using FFT's.
Description
This is an implementation of cross synthesis using FFT's.
Syntax
ares cross2 ain1, ain2, isize, ioverlap, iwin, kbias
Initialization
isize -- This is the size of the FFT to be performed. The larger the size the better the frequency response but a sloppy time response. ioverlap -- This is the overlap factor of the FFT's, must be a power of two. The best settings are 2 and 4. A big overlap takes a long time to compile. iwin -- This is the function table that contains the window to be used in the analysis. One can use the GEN20 routine to create this window.
Performance
ain1 -- The stimulus sound. Must have high frequencies for best results. ain2 -- The modulating sound. Must have a moving frequency response (like speech) for best results. kbias -- The amount of cross synthesis. 1 is the normal, 0 is no cross synthesis.
Examples
Here is an example of the cross2 opcode. It uses the file cross2.csd [examples/cross2.csd] and fox.wav [examples/fox.wav].
503
nchnls = 2 0dbfs = 1 instr 1 ;play audio file aout soundin "fox.wav" outs aout, aout endin instr 2 ;cross-synthesize icps ifn ain1 ain2 = p4 = p5 ; Use the "ahh.aiff" sound and "eee.aiff" oscil 0.6, p4, ifn soundin "fox.wav" ; Use the "fox.wav" as modulator
isize = 4096 ioverlap = 2 iwin = 3 kbias init 1 aout cross2 ain1, ain2, isize, ioverlap, iwin, kbias outs aout, aout endin </CsInstruments> <CsScore> ;audio files f 1 0 128 1 "ahh.aiff" 0 4 0 f 2 0 128 1 "eee.aiff" 0 4 0 f 3 0 2048 20 2 ;windowing function i 1 0 3 i i i i i i i i e 2 2 2 2 2 2 2 2 3 + + + + + + + 3 3 3 3 3 3 3 3 50 1 ;"eee.aiff" 50 2 ;"ahh.aiff" 100 1 ;"eee.aiff" 100 2 ;"ahh.aiff" 250 1 ;"eee.aiff" 250 2 ;"ahh.aiff" 20 1 ;"eee.aiff" 20 2 ;"ahh.aiff"
</CsScore> </CsoundSynthesizer>
Credits
Author: Paris Smaragdis MIT, Cambridge 1997
504
crossfm
crossfm Two mutually frequency and/or phase modulated oscillators.
Description
Two oscillators, mutually frequency and/or phase modulated by each other.
Syntax
a1, a2 crossfm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] a1, a2 crossfmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] a1, a2 crosspm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] a1, a2 crosspmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] a1, a2 crossfmpm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] a1, a2 crossfmpmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
Initialization
ifn1 -- function table number for oscillator #1. Requires a wrap-around guard point. ifn2 -- function table number for oscillator #2. Requires a wrap-around guard point. iphs1 (optional, default=0) -- initial phase of waveform in table ifn1, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. iphs2 (optional, default=0) -- initial phase of waveform in table ifn2, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped.
Performance
xfrq1 -- a factor that, when multipled by the kcps parameter, gives the frequency of oscillator #1. xfrq2 -- a factor that, when multipled by the kcps parameter, gives the frequency of oscillator #2. xndx1 -- the index of the modulation of oscillator #2 by oscillator #1. xndx2 -- the index of the modulation of oscillator #1 by oscillator #2. kcps -- a common denominator, in cycles per second, for both oscillators frequencies. crossfm implements a crossed frequency modulation algorithm. The audio-rate output of oscillator #1 is used to modulate the frequency input of oscillator #2 while the audio-rate output of oscillator #2 is used to modulate the frequency input of oscillator #1. This double feedback structure produces a rich set of sounds with some chaotic behaviour. crossfmi behaves like crossfm except that linear interpolation is used for table lookup.
505
crosspm and crosspmi implement cross phase modulation between two oscillators. crossfmpm and crossfmpmi implement cross frequency/phase modulation between two oscillators. Oscillator #1 is frequency-modulated by oscillator #2 while oscillator #2 is phase-modulated by oscillator #1. You can read my paper [http://www.csounds.com/journal/issue12/crossfm.html] in the Csound Journal for more information.
Warning
Those opcodes may produce very rich spectra, especially with high modulation indexes, and in some cases foldover aliases may occur if the sampling rate is not high enough. Moreover the audio output may vary in function of the sampling rate, due to the nonlinearity of the algorithm. In Csound, two other opcodes have this characteristic: planet and chuap.
Examples
Here is an example of the crossfm opcode. It uses the file crossfm.csd [examples/crossfm.csd].
96000 10 2 1
FLpanel "crossfmForm", 600, 400, 0, 0 gkfrq1, ihfrq1 FLcount "Freq #1", 0, 20000, 0.001, 1, 1, 200, 30, 20, 50, -1 gkfrq2, ihfrq2 FLcount "Freq #2", 0, 20000, 0.001, 1, 1, 200, 30, 20, 130, -1 gkndx1, gkndx2, ihndx1, ihndx2 FLjoy "Indexes", 0, 10, 0, 10, 0, 0, -1, -1, 200, 200, 300, 50 FLsetVal_i FLsetVal_i FLsetVal_i FLsetVal_i FLpanelEnd FLrun 164.5, ihfrq1 263.712, ihfrq2 1.5, ihndx1 3, ihndx2
maxalloc 1, 2 instr 1 linen 0.5, 0.01, p3, 0.5 crossfm gkfrq1, gkfrq2, gkndx1, gkndx2, 1, 1, 1 outs a1*kamp, a2*kamp endin </CsInstruments> <CsScore> f1 0 16384 10 1 0 i1 0 60 e </CsScore> </CsoundSynthesizer> kamp a1,a2
In this example, an FLTK GUI is used to control in real-time the oscillators frequency with two Flcount widgets and the cross modulation indexes with one FLjoy widget. It uses a sampling rate of 96000Hz.
506
See Also
More information on this opcode: http://www.csounds.com/journal/issue12/crossfm.html , written by Franois Pinot
Credits
Author: Franois Pinot 2005-2009 New in version 5.12
507
crunch
crunch Semi-physical model of a crunch sound.
Description
crunch is a semi-physical model of a crunch sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares crunch iamp, idettack [, inum] [, idamp] [, imaxshake]
Initialization
iamp -- Amplitude of output. Note: As these instruments are stochastic, this is only a approximation. idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 7. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.998 + (idamp * 0.002) The default damping_amount is 0.99806 which means that the default value of idamp is 0.03. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 1.0. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional) -- amount of energy to add back into the system. The value should be in range 0 to 1.
Examples
Here is an example of the crunch opcode. It uses the file crunch.csd [examples/crunch.csd].
508
sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 asig endin </CsInstruments> <CsScore> i1 0 1 .9 i1 1 1 .1 e </CsScore> </CsoundSynthesizer> crunch 0.8, 0.1, 7, p4 outs asig, asig
See Also
cabasa, sandpaper, sekere, stix
Credits
Author: Perry Cook, part of the PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
509
ctrl14
ctrl14 Allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range.
Description
Allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range.
Syntax
idest ctrl14 ichan, ictlno1, ictlno2, imin, imax [, ifn] kdest ctrl14 ichan, ictlno1, ictlno2, kmin, kmax [, ifn]
Initialization
idest -- output signal ichan -- MIDI channel number (1-16) ictln1o -- most-significant byte controller number (0-127) ictlno2 -- least-significant byte controller number (0-127) imin -- user-defined minimum floating-point value of output imax -- user-defined maximum floating-point value of output ifn (optional) -- table to be read when indexing is required. Table must be normalized. Output is scaled according to imax and imin val.
Performance
kdest -- output signal kmin -- user-defined minimum floating-point value of output kmax -- user-defined maximum floating-point value of output ctrl14 (i- and k-rate 14 bit MIDI control) allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range. The minimum and maximum values can be varied at k-rate. It can use optional interpolated table indexing. It requires two MIDI controllers as input. ctrl14 differs from midic14 because it can be included in score-oriented instruments without Csound crashes. It needs the additional parameter ichan containing the MIDI channel of the controller. MIDI channel is the same for all the controllers used in a single ctrl14 opcode.
See Also
ctrl7, ctrl21, initc7, initc14, initc21, midic7, midic14, midic21
Credits
510
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
511
ctrl21
ctrl21 Allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range.
Description
Allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range.
Syntax
idest ctrl21 ichan, ictlno1, ictlno2, ictlno3, imin, imax [, ifn] kdest ctrl21 ichan, ictlno1, ictlno2, ictlno3, kmin, kmax [, ifn]
Initialization
idest -- output signal ichan -- MIDI channel number (1-16) ictlno1 -- most-significant byte controller number (0-127) ictlno2 -- mid-significant byte controller number (0-127) ictlno3 -- least-significant byte controller number (0-127) imin -- user-defined minimum floating-point value of output imax -- user-defined maximum floating-point value of output ifn (optional) -- table to be read when indexing is required. Table must be normalized. Output is scaled according to imax and imin val.
Performance
kdest -- output signal kmin -- user-defined minimum floating-point value of output kmax -- user-defined maximum floating-point value of output ctrl21 (i- and k-rate 21 bit MIDI control) allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range. Minimum and maximum values can be varied at k-rate. It can use optional interpolated table indexing. It requires three MIDI controllers as input. ctrl21 differs from midic21 because it can be included in score oriented instruments without Csound crashes. It needs the additional parameter ichan containing the MIDI channel of the controller. MIDI channel is the same for all the controllers used in a single ctrl21 opcode.
See Also
ctrl7, ctrl14, initc7, initc14, initc21, midic7, midic14, midic21 512
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
513
ctrl7
ctrl7 Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.
Description
Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.
Syntax
idest ctrl7 ichan, ictlno, imin, imax [, ifn] kdest ctrl7 ichan, ictlno, kmin, kmax [, ifn] adest ctrl7 ichan, ictlno, kmin, kmax [, ifn] [, icutoff]
Initialization
idest -- output signal ichan -- MIDI channel (1-16) ictlno -- MIDI controller number (0-127) imin -- user-defined minimum floating-point value of output imax -- user-defined maximum floating-point value of output ifn (optional) -- table to be read when indexing is required. Table must be normalized. Output is scaled according to imax and imin val. icutoff (optional) -- low pass filter cut-off frequency for smoothing a-rate output.
Performance
kdest, adest -- output signal kmin -- user-defined minimum floating-point value of output kmax -- user-defined maximum floating-point value of output ctrl7 (i- and k-rate 7 bit MIDI control) allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range. It also allows optional non-interpolated table indexing. Minimum and maximum values can be varied at k-rate. ctrl7 differs from midic7 because it can be included in score-oriented instruments without Csound crashes. It also needs the additional parameter ichan containing the MIDI channel of the controller. The a-rate version of ctrl7 outputs an a-rate variable, which is low-pass filtered (smoothed). It contains an optional icutoff parameter, to set the cutoff frecuency for the low-pass filter. The default is 5.
Examples
514
Here is an example of the ctrl7 opcode. It uses the file ctrl7.csd [examples/ctrl7.csd].
See Also
ctrl14, ctrl21, initc7, initc14, initc21, midic7, midic14, midic21
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges. The a-rate version of ctrl7 was added in version 5.06
515
ctrlinit
ctrlinit Sets the initial values for a set of MIDI controllers.
Description
Sets the initial values for a set of MIDI controllers.
Syntax
ctrlinit ichnl, ictlno1, ival1 [, ictlno2] [, ival2] [, ictlno3] \ [, ival3] [,...ival32]
Initialization
ichnl -- MIDI channel number (1-16) ictlno1, ictlno1, etc. -- MIDI controller numbers (0-127) ival1, ival2, etc. -- initial value for corresponding MIDI controller number
Performance
Sets the initial values for a set of MIDI controllers.
See Also
massign
Credits
Author: Barry L. Vercoe - Mike Berry MIT, Cambridge, Mass. New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
516
cuserrnd
cuserrnd Continuous USER-defined-distribution RaNDom generator.
Description
Continuous USER-defined-distribution RaNDom generator.
Syntax
aout cuserrnd kmin, kmax, ktableNum iout cuserrnd imin, imax, itableNum kout cuserrnd kmin, kmax, ktableNum
Initialization
imin -- minimum range limit imax -- maximum range limit itableNum -- number of table containing the random-distribution function. Such table is generated by the user. See GEN40, GEN41, and GEN42. The table length does not need to be a power of 2
Performance
ktableNum -- number of table containing the random-distribution function. Such table is generated by the user. See GEN40, GEN41, and GEN42. The table length does not need to be a power of 2 kmin -- minimum range limit kmax -- maximum range limit cuserrnd (continuous user-defined-distribution random generator) generates random values according to a continuous random distribution created by the user. In this case the shape of the distribution histogram can be drawn or generated by any GEN routine. The table containing the shape of such histogram must then be translated to a distribution function by means of GEN40 (see GEN40 for more details). Then such function must be assigned to the XtableNum argument of cuserrnd. The output range can then be rescaled according to the Xmin and Xmax arguments. cuserrnd linearly interpolates between table elements, so it is not recommended for discrete distributions (GEN41 and GEN42). For a tutorial about random distribution histograms and functions see: D. Lorrain. "A panoply of stochastic cannons". In C. Roads, ed. 1989. Music machine. Cambridge, Massachusetts: MIT press, pp. 351 - 379.
See Also
duserrnd, urd 517
Credits
Author: Gabriel Maldonado New in Version 4.16
518
dam
dam A dynamic compressor/expander.
Description
This opcode dynamically modifies a gain value applied to the input sound ain by comparing its power level to a given threshold level. The signal will be compressed/expanded with different factors regarding that it is over or under the threshold.
Syntax
ares dam asig, kthreshold, icomp1, icomp2, irtime, iftime
Initialization
icomp1 -- compression ratio for upper zone. icomp2 -- compression ratio for lower zone irtime -- gain rise time in seconds. Time over which the gain factor is allowed to raise of one unit. iftime -- gain fall time in seconds. Time over which the gain factor is allowed to decrease of one unit.
Performance
asig -- input signal to be modified kthreshold -- level of input signal which acts as the threshold. Can be changed at k-time (e.g. for ducking) Note on the compression factors: A compression ratio of one leaves the sound unchanged. Setting the ratio to a value smaller than one will compress the signal (reduce its volume) while setting the ratio to a value greater than one will expand the signal (augment its volume).
Examples
Because the results of the dam opcode can be subtle, I recommend looking at them in a graphical audio editor program like audacity. audacity is available for Linux, Windows, and the MacOS and may be downloaded from http://audacity.sourceforge.net [http://audacity.sourceforge.net/]. Here is an example of the dam opcode. It uses the file dam.csd [examples/dam.csd], and beats.wav [examples/beats.wav].
519
; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o dam.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ;normal audio asig diskin2 "beats.wav", 1, 0, 1 outs asig, asig endin instr 2 ; compressed audio kthreshold = 0.2 icomp1 = 0.8 icomp2 = 0.2 irtime = 0.01 iftime = 0.5 asig diskin2 "beats.wav", 1, 0, 1 asig dam asig, kthreshold, icomp1, icomp2, irtime, iftime outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 8.5 e </CsScore> </CsoundSynthesizer>
This example compresses the audio file beats.wav. You should hear a drum pattern repeat twice. The second time, the sound should be quieter (compressed) than the first. Here is another example of the dam opcode. It uses the file dam_expanded.csd [examples/ dam_expanded.csd], and beats.wav [examples/beats.wav].
520
kthreshold = .5 icomp1 = 2 icomp2 = 3 irtime = 0.01 iftime = 0.1 asig diskin2 "beats.wav", 1, 0, 1 asig dam asig, kthreshold, icomp1, icomp2, irtime, iftime outs asig*.2, asig*.2 ;adjust volume of expanded beat endin </CsInstruments> <CsScore> i 1 0 2 i 2 2.5 6.5 e </CsScore> </CsoundSynthesizer>
This example expands the audio file beats.wav. You should hear a drum pattern repeat twice. The second time, the sound should be louder (expanded) than the first. To prevent distortion the volume of the signal has been lowered.
See Also
compress
Credits
Author: Marc Resibois Belgium 1997 New in version 3.47
521
date
date Returns the number seconds since 1 January 1970.
Description
Returns the number seconds since 1 January 1970, using the operating system's clock.
Syntax
ir date
Initialization
ir -- value at i-time, of the system clock in seconds since the start of the epoch.
Examples
Here is an example of the date opcode. It uses the file date.csd [examples/date.csd].
522
See Also
dates
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK December 2006 New in Csound version 5.05
523
dates
dates Returns as a string the date and time specified.
Description
Returns as a string the date and time specified.
Syntax
Sir dates [ itime]
Initialization
itime -- the time is seconds since the start of the epoch. If omited or negative the current time is taken. Sir -- the date and time as a string.
Examples
Here is an example of the dates opcode. It uses the file dates.csd [examples/dates.csd].
instr 1 ;;generating a different filename each time csound renders itim date Stim dates itim Syear strsub Stim, 20, 24 Smonth strsub Stim, 4, 7 Sday strsub Stim, 8, 10 iday strtod Sday Shor strsub Stim, 11, 13 Smin strsub Stim, 14, 16 Ssec strsub Stim, 17, 19 Sfilnam sprintf "%s_%s_%02d_%s_%s_%s.wav", Syear, Smonth, iday, Shor,Smin, Ssec ;;rendering with random frequency, amp and pan, and writing to disk ifreq random 400, 1000 iamp random .1, 1 ipan random 0, 1 asin oscils iamp, ifreq, 0 aL, aR pan2 asin, ipan fout Sfilnam, 14, aL, aR
524
aL, aR "File '%s' written to the same directory as this CSD file is!\n", 1, Sfilnam
See Also
date
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK December 2006 New in Csound version 5.05
525
db
db Returns the amplitude equivalent for a given decibel amount.
Description
Returns the amplitude equivalent for a given decibel amount. This opcode is the same as ampdb.
Syntax
db(x)
Initialization
x -- a value expressed in decibels.
Performance
Returns the amplitude for a given decibel amount.
Examples
Here is an example of the db opcode. It uses the file db.csd [examples/db.csd].
;sawtooth
526
i i i i e
1 1 1 1
0 + + +
1 1 1 1
50 > > 85
</CsScore> </CsoundSynthesizer>
See Also
ampdb, cent, octave, semitone New in version 4.16
527
dbamp
dbamp Returns the decibel equivalent of the raw amplitude x.
Description
Returns the decibel equivalent of the raw amplitude x.
Syntax
dbamp(x) (init-rate or control-rate args only)
Examples
Here is an example of the dbamp opcode. It uses the file dbamp.csd [examples/dbamp.csd].
</CsScore> </CsoundSynthesizer>
528
instr 1: instr 1:
See Also
ampdb, ampdbfs, dbfsamp
529
dbfsamp
dbfsamp Returns the decibel equivalent of the raw amplitude x, relative to full scale amplitude.
Description
Returns the decibel equivalent of the raw amplitude x, relative to full scale amplitude. Full scale is assumed to be 16 bit. New is Csound version 4.10.
Syntax
dbfsamp(x) (init-rate or control-rate args only)
Examples
Here is an example of the dbfsamp opcode. It uses the file dbfsamp.csd [examples/dbfsamp.csd].
</CsScore> </CsoundSynthesizer>
1: 1: 1: 1: 1:
= = = = =
See Also
ampdb, ampdbfs, dbamp
531
dcblock
dcblock A DC blocking filter.
Description
Implements the DC blocking filter Y[i] = X[i] - X[i-1] + (igain * Y[i-1])
Syntax
ares dcblock ain [, igain]
Initialization
igain -- the gain of the filter, which defaults to 0.99
Performance
ain -- audio signal input
Note
The new dcblock2 opcode is an improved method of removing DC from an audio signal.
Examples
The result can be viewed in a graphical audio editor program like audacity. audacity is available for Linux, Windows, and the MacOS and may be downloaded from http://audacity.sourceforge.net [http://audacity.sourceforge.net/]. Here is an example of the dcblock opcode. It uses the file dcblock.csd [examples/dcblock.csd], and beats.wav [examples/beats.wav].
532
; For Non-realtime ouput leave only the line below: ;-o dcblock.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 instr 1 ;add DC to "beats.wav" asig soundin "beats.wav" asig = asig+5000 ;adds DC of 5000 outs asig, asig endin instr 2 ;dcblock audio asig soundin "beats.wav" asig = asig+5000 ;adds DC adc dcblock asig ;remove DC again outs adc, adc endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
See also
dcblock2
Credits
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.49 February 2003: Thanks to a note from Anders Andersson, corrected the formula.
533
dcblock2
dcblock2 A DC blocking filter.
Description
Implements a DC blocking filter with improved DC attenuation.
Syntax
ares dcblock2 ain [, iorder] [, iskip]
Initialization
iorder -- filter order, minimum 4th order, defaults to 128. iskip -- set to 1 to skip initialization (defaults to 0).
Performance
ares -- filered audio signal ain -- input audio signal
Note
Using a value for iorder less that ksmps will not reduce DC offset efficiently.
Examples
The result can be viewed in a graphical audio editor program like audacity. audacity is available for Linux, Windows, and the MacOS and may be downloaded from http://audacity.sourceforge.net [http://audacity.sourceforge.net/]. Here is an example of the dcblock2 opcode. It uses the file dcblock2.csd [examples/dcblock2.csd], and beats.wav [examples/beats.wav].
534
sr = 44100 ksmps = 32 nchnls = 2 instr 1 ;add DC to "beats.wav" asig soundin "beats.wav" asig = asig+5000 ;adds DC of 5000 outs asig, asig endin instr 2 ;dcblock audio asig soundin "beats.wav" asig = asig+5000 ;adds DC adc dcblock2 asig ;remove DC again outs adc, adc endin </CsInstruments> <CsScore> i 1 0 2 i 2 2 2 e </CsScore> </CsoundSynthesizer>
See also
dcblock
Credits
By: Victor Lazzarini New in Csound version 5.09
535
dconv
dconv A direct convolution opcode.
Description
A direct convolution opcode.
Syntax
ares dconv asig, isize, ifn
Initialization
isize -- the size of the convolution buffer to use. If the buffer size is smaller than the size of ifn, then only the first isize values will be used from the table. ifn -- table number of a stored function containing the impulse response for convolution.
Performance
Rather than the analysis/resynthesis method of the convolve opcode, dconv uses direct convolution to create the result. For small tables it can do this quite efficiently, however larger table require much more time to run. dconv does (isize * ksmps) multiplies on every k-cycle. Therefore, reverb and delay effects are best done with other opcodes (unless the times are short). dconv was designed to be used with time varying tables to facilitate new realtime filtering capabilities.
Examples
Here is an example of the dconv opcode. It uses the file dconv.csd [examples/dconv.csd].
536
1 .6 ftlen(itable) 1, p3, 10
$RANDI(0) $RANDI(1) $RANDI(2) $RANDI(3) $RANDI(4) $RANDI(5) $RANDI(6) $RANDI(7) $RANDI(8) $RANDI(9) $RANDI(10) $RANDI(11) $RANDI(12) $RANDI(13) $RANDI(14) $RANDI(15) asig asig asig endin </CsInstruments> <CsScore> f1 0 16 10 1 i1 0 10 e </CsScore> </CsoundSynthesizer> rand butlp dconv out 10000, .5, 1 asig, 5000 asig, isize, itable asig *.5
See also
pconvolve, convolve, ftconv
Credits
Author: William Pete Moss 2001 New in version 4.12
537
delay
delay Delays an input signal by some time interval.
Description
A signal can be read from or written into a delay path, or it can be automatically delayed by some time interval.
Syntax
ares delay asig, idlt [, iskip]
Initialization
idlt -- requested delay time in seconds. This can be as large as available memory will permit. The space required for n seconds of delay is 4n * sr bytes. It is allocated at the time the instrument is first initialized, and returned to the pool at the end of a score section. iskip (optional, default=0) -- initial disposition of delay-loop data space (see reson). The default value is 0.
Performance
asig -- audio signal delay is a composite of delayr and delayw, both reading from and writing into its own storage area. It can thus accomplish signal time-shift, although modified feedback is not possible. There is no minimum delay period.
Examples
Here is an example of the delay opcode. It uses the file delay.csd [examples/delay.csd].
538
instr
ain diskin2 "fox.wav", 1, 1 adel delay ain + (adel*ifd), idelay;ifd = amount of feedback asig moogvcf adel, 1500, .6, 1 ;color feedback outs asig*ilev, ain endin </CsInstruments> <CsScore> ;Delay is in ms i 1 0 15 2 200 i 1 4 5 2 20 i 1 + 3 2 5 i 1 + 3 3 5
e </CsScore> </CsoundSynthesizer>
See Also
delay1, delayr, delayw
539
delay1
delay1 Delays an input signal by one sample.
Description
Delays an input signal by one sample.
Syntax
ares delay1 asig [, iskip]
Initialization
iskip (optional, default=0) -- initial disposition of delay-loop data space (see reson). The default value is 0.
Performance
delay1 is a special form of delay that serves to delay the audio signal asig by just one sample. It is thus functionally equivalent to the delay opcode but is more efficient in both time and space. This unit is particularly useful in the fabrication of generalized non-recursive filters.
Examples
Here is an example of the delay and delay1 opcodes. It uses the file delay1.csd [examples/delay1.csd].
540
adel1 delay1 abeep ; Send the beep to the left speaker and ; the difference in the delayes to the right speaker. outs abeep, adel-adel1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1. i 1 0.0 1 e </CsScore> </CsoundSynthesizer>
See Also
delay, delayr, delayw
Credits
Author: Barry Vercoe Example written by John ffitch.
541
delayk
delayk Delays an input signal by some time interval.
Description
k-rate delay opcodes
Syntax
kr delayk kr vdel_k ksig, idel[, imode] ksig, kdel, imdel[, imode]
Initialization
idel -- delay time (in seconds) for delayk. It is rounded to the nearest integer multiple of a k-cycle (i.e. 1/kr). imode -- sum of 1 for skipping initialization (e.g. in tied notes) and 2 for holding the first input value during the initial delay, instead of outputting zero. This is mainly of use when delaying envelopes that do not start at zero.
Performance
542
kr -- the output signal. Note: neither of the opcodes interpolate the output. ksig -- the input signal. kdel -- delay time (in seconds) for vdel_k. It is rounded to the nearest integer multiple of a k-cycle (i.e. 1/kr).
Examples
Here is an example of the delayk opcode. It uses the file delayk.csd [examples/delayk.csd].
Credits
Istvan Varga.
543
delayr
delayr Reads from an automatically established digital delay line.
Description
Reads from an automatically established digital delay line.
Syntax
ares delayr idlt [, iskip]
Initialization
idlt -- requested delay time in seconds. This can be as large as available memory will permit. The space required for n seconds of delay is 4n * sr bytes. It is allocated at the time the instrument is first initialized, and returned to the pool at the end of a score section. iskip (optional, default=0) -- initial disposition of delay-loop data space (see reson). The default value is 0.
Performance
delayr reads from an automatically established digital delay line, in which the signal retrieved has been resident for idlt seconds. This unit must be paired with and precede an accompanying delayw unit. Any other Csound statements can intervene.
Examples
Here is an example of the delayr opcode. It uses the file delayr.csd [examples/delayr.csd].
instr 1
544
ain
vincr gasig, ain ;send to global delay endin instr 2 ifeedback = p4 abuf2 delayr gidel adelL deltap .4 ;first tap (on left channel) adelM deltap 1 ;second tap (on middle channel) delayw gasig + (adelL * ifeedback) abuf3 delayr gidel kdel line 1, p3, .01 ;vary delay time adelR deltap .65 * kdel ;one pitch changing tap (on the right chn.) delayw gasig + (adelR * ifeedback) ;make a mix of all deayed signals outs adelL + adelM, adelR + adelM clear gasig endin </CsInstruments> <CsScore> i 1 0 1 i 1 3 1 i 2 0 3 0 ;no feedback i 2 3 8 .8 ;lots of feedback e </CsScore> </CsoundSynthesizer>
See Also
delay, delay1, delayw
545
delayw
delayw Writes the audio signal to a digital delay line.
Description
Writes the audio signal to a digital delay line.
Syntax
delayw asig
Performance
delayw writes asig into the delay area established by the preceding delayr unit. Viewed as a pair, these two units permit the formation of modified feedback loops, etc. However, there is a lower bound on the value of idlt, which must be at least 1 control period (or 1/kr).
Examples
Here is an example of the delayw opcode. It uses the file delayw.csd [examples/delayw.csd].
vincr gasig, ain ;send to global delay endin instr 2 ifeedback = p4 abuf2 delayr gidel adelL deltap .4 ;first tap (on left channel)
546
adelM
deltap 1 ;second tap (on middle channel) delayw gasig + (adelL * ifeedback)
abuf3 delayr gidel kdel line 1, p3, .01 ;vary delay time adelR deltap .65 * kdel ;one pitch changing tap (on the right chn.) delayw gasig + (adelR * ifeedback) ;make a mix of all deayed signals outs adelL + adelM, adelR + adelM clear gasig endin </CsInstruments> <CsScore> i 1 0 1 i 1 3 1 i 2 0 3 0 ;no feedback i 2 3 8 .8 ;lots of feedback e </CsScore> </CsoundSynthesizer>
See Also
delay, delay1, delayr
547
deltap
deltap Taps a delay line at variable offset times.
Description
Tap a delay line at variable offset times.
Syntax
ares deltap kdlt
Performance
kdlt -- specifies the tapped delay time in seconds. Each can range from 1 control period to the full delay time of the read/write pair; however, since there is no internal check for adherence to this range, the user is wholly responsible. Each argument can be a constant, a variable, or a time-varying signal. deltap extracts sound by reading the stored samples directly. This opcode can tap into a delayr/delayw pair, extracting delayed audio from the idlt seconds of stored sound. There can be any number of deltap and/or deltapi units between a read/write pair. Each receives an audio tap with no change of original amplitude. This opcode can provide multiple delay taps for arbitrary delay path and feedback networks. They can deliver either constant-time or time-varying taps, and are useful for building chorus effects, harmonizers, and Doppler shifts. Constant-time delay taps (and some slowly changing ones) do not need interpolated readout; they are well served by deltap. Medium-paced or fast varying dlt's, however, will need the extra services of deltapi. delayr/delayw pairs may be interleaved. To associate a delay tap unit with a specific delayr unit, it not only has to be located between that delayr and the appropriate delayw unit, but must also precede any following delayr units. See Example 2. (This feature added in Csound version 3.57 by Jens Groh and John ffitch). N.B. k-rate delay times are not internally interpolated, but rather lay down stepped time-shifts of audio samples; this will be found quite adequate for slowly changing tap times. For medium to fast-paced changes, however, one should provide a higher resolution audio-rate timeshift as input.
Examples
Example 150. deltap example #1
asource atime ampfac adump amove buzz linseg = delayr deltapi delayw out 1, 440, 20, 1 1, p3/2,.01, p3/2,1 1/atime/atime 1 atime asource amove * ampfac
; ; ; ; ;
trace a distance in secs and calc an amp factor set maximum distance move sound source past the listener
548
;Read delayed signal, first delayr instance: adump delayr 4.0 adly1 deltap kdlyt1 ; associated with first delayr instance ;Read delayed signal, second delayr instance: adump delayr 4.0 adly2 deltap kdlyt2 ; associated with second delayr instance ;Do some cross-coupled manipulation: afdbk1 = 0.7 * adly1 + 0.7 * adly2 + ainput1 afdbk2 = -0.7 * adly1 + 0.7 * adly2 + ainput2 ;Feed back signal, associated with first delayr instance: delayw afdbk1 ;Feed back signal, associated with second delayr instance: delayw afdbk2 outs adly1, adly2
Here is yet another example of the deltap opcode. It uses the file deltap.csd [examples/deltap.csd].
vincr gasig, ain ;send to global delay endin instr 2 ifeedback = p4 abuf2 delayr gidel adelL deltap .4 adelM deltap 1 ;first tap (on left channel) ;second tap (on middle channel)
549
delayw gasig + (adelL * ifeedback) abuf3 delayr gidel kdel line 1, p3, .01 ;vary delay time adelR deltap .65 * kdel ;one pitch changing tap (on the right chn.) delayw gasig + (adelR * ifeedback) ;make a mix of all deayed signals outs adelL + adelM, adelR + adelM clear gasig endin </CsInstruments> <CsScore> i 1 0 1 i 1 3 1 i 2 0 3 0 ;no feedback i 2 3 8 .8 ;lots of feedback e </CsScore> </CsoundSynthesizer>
See Also
deltap3, deltapi, deltapn
550
deltap3
deltap Taps a delay line at variable offset times, uses cubic interpolation.
Description
Taps a delay line at variable offset times, uses cubic interpolation.
Syntax
ares deltap3 xdlt
Performance
xdlt -- specifies the tapped delay time in seconds. Each can range from 1 control period to the full delay time of the read/write pair; however, since there is no internal check for adherence to this range, the user is wholly responsible. Each argument can be a constant, a variable, or a time-varying signal; the xdlt argument in deltap3 implies that an audio-varying delay is permitted there. deltap3 is experimental, and uses cubic interpolation. (New in Csound version 3.50.) This opcode can tap into a delayr/delayw pair, extracting delayed audio from the idlt seconds of stored sound. There can be any number of deltap and/or deltapi units between a read/write pair. Each receives an audio tap with no change of original amplitude. This opcode can provide multiple delay taps for arbitrary delay path and feedback networks. They can deliver either constant-time or time-varying taps, and are useful for building chorus effects, harmonizers, and Doppler shifts. Constant-time delay taps (and some slowly changing ones) do not need interpolated readout; they are well served by deltap. Medium-paced or fast varying dlt's, however, will need the extra services of deltapi. delayr/delayw pairs may be interleaved. To associate a delay tap unit with a specific delayr unit, it not only has to be located between that delayr and the appropriate delayw unit, but must also precede any following delayr units. See Example 2. (This feature added in Csound version 3.57 by Jens Groh and John ffitch). N.B. k-rate delay times are not internally interpolated, but rather lay down stepped time-shifts of audio samples; this will be found quite adequate for slowly changing tap times. For medium to fast-paced changes, however, one should provide a higher resolution audio-rate timeshift as input.
Examples
Example 153. deltap example #1
asource atime ampfac adump amove buzz linseg = delayr deltapi delayw out 1, 440, 20, 1 1, p3/2,.01, p3/2,1 1/atime/atime 1 atime asource amove * ampfac
; ; ; ; ;
trace a distance in secs and calc an amp factor set maximum distance move sound source past the listener
551
;Read delayed signal, first delayr instance: adump delayr 4.0 adly1 deltap kdlyt1 ; associated with first delayr instance ;Read delayed signal, second delayr instance: adump delayr 4.0 adly2 deltap kdlyt2 ; associated with second delayr instance ;Do some cross-coupled manipulation: afdbk1 = 0.7 * adly1 + 0.7 * adly2 + ainput1 afdbk2 = -0.7 * adly1 + 0.7 * adly2 + ainput2 ;Feed back signal, associated with first delayr instance: delayw afdbk1 ;Feed back signal, associated with second delayr instance: delayw afdbk2 outs adly1, adly2
Here is yet another example of the deltap3 opcode. It uses the file deltap3.csd [examples/deltap3.csd].
vincr gasig, ain ;send to global delay endin instr 2 ifeedback = p4 abuf2 delayr gidel adelL deltap3 .4 adelM deltap3 1 ;first tap (on left channel) ;second tap (on middle channel)
552
delayw gasig + (adelL * ifeedback) abuf3 delayr gidel kdel line 1, p3, .01 ;vary delay time adelR deltap3 .65 * kdel ;one pitch changing tap (on the right chn.) delayw gasig + (adelR * ifeedback) ;make a mix of all deayed signals outs adelL + adelM, adelR + adelM clear gasig endin </CsInstruments> <CsScore> i 1 0 1 i 1 3 1 i 2 0 3 0 ;no feedback i 2 3 8 .8 ;lots of feedback e </CsScore> </CsoundSynthesizer>
See Also
deltap, deltapi, deltapn
553
deltapi
deltapi Taps a delay line at variable offset times, uses interpolation.
Description
Taps a delay line at variable offset times, uses interpolation.
Syntax
ares deltapi xdlt
Performance
xdlt -- specifies the tapped delay time in seconds. Each can range from 1 control period to the full delay time of the read/write pair; however, since there is no internal check for adherence to this range, the user is wholly responsible. Each argument can be a constant, a variable, or a time-varying signal; the xdlt argument in deltapi implies that an audio-varying delay is permitted there. deltapi extracts sound by interpolated readout. By interpolating between adjacent stored samples deltapi represents a particular delay time with more accuracy, but it will take about twice as long to run. This opcode can tap into a delayr/delayw pair, extracting delayed audio from the idlt seconds of stored sound. There can be any number of deltap and/or deltapi units between a read/write pair. Each receives an audio tap with no change of original amplitude. This opcode can provide multiple delay taps for arbitrary delay path and feedback networks. They can deliver either constant-time or time-varying taps, and are useful for building chorus effects, harmonizers, and Doppler shifts. Constant-time delay taps (and some slowly changing ones) do not need interpolated readout; they are well served by deltap. Medium-paced or fast varying dlt's, however, will need the extra services of deltapi. delayr/delayw pairs may be interleaved. To associate a delay tap unit with a specific delayr unit, it not only has to be located between that delayr and the appropriate delayw unit, but must also precede any following delayr units. See Example 2. (This feature added in Csound version 3.57 by Jens Groh and John ffitch). N.B. k-rate delay times are not internally interpolated, but rather lay down stepped time-shifts of audio samples; this will be found quite adequate for slowly changing tap times. For medium to fast-paced changes, however, one should provide a higher resolution audio-rate timeshift as input.
Examples
Example 156. deltap example #1
asource atime ampfac adump amove buzz linseg = delayr deltapi delayw 1, 440, 20, 1 1, p3/2,.01, p3/2,1 1/atime/atime 1 atime asource
; ; ; ; ;
trace a distance in secs and calc an amp factor set maximum distance move sound source past the listener
554
out
amove * ampfac
;Read delayed signal, first delayr instance: adump delayr 4.0 adly1 deltap kdlyt1 ; associated with first delayr instance ;Read delayed signal, second delayr instance: adump delayr 4.0 adly2 deltap kdlyt2 ; associated with second delayr instance ;Do some cross-coupled manipulation: afdbk1 = 0.7 * adly1 + 0.7 * adly2 + ainput1 afdbk2 = -0.7 * adly1 + 0.7 * adly2 + ainput2 ;Feed back signal, associated with first delayr instance: delayw afdbk1 ;Feed back signal, associated with second delayr instance: delayw afdbk2 outs adly1, adly2
Here is yet another example of the deltapi opcode. It uses the file deltapi.csd [examples/deltapi.csd].
555
abuf2 delayr gidel adelL deltapi .4 ;first tap (on left channel) adelM deltapi 1 ;second tap (on middle channel) delayw gasig + (adelL * ifeedback) abuf3 delayr gidel kdel line 1, p3, .01 ;vary delay time adelR deltapi .65 * kdel ;one pitch changing tap (on the right chn.) delayw gasig + (adelR * ifeedback) ;make a mix of all deayed signals outs adelL + adelM, adelR + adelM clear gasig endin </CsInstruments> <CsScore> i 1 0 1 i 1 3 1 i 2 0 3 0 ;no feedback i 2 3 8 .8 ;lots of feedback e </CsScore> </CsoundSynthesizer>
See Also
deltap, deltap3, deltapn
556
deltapn
deltapn Taps a delay line at variable offset times.
Description
Tap a delay line at variable offset times.
Syntax
ares deltapn xnumsamps
Performance
xnumsamps -- specifies the tapped delay time in number of samples. Each can range from 1 control period to the full delay time of the read/write pair; however, since there is no internal check for adherence to this range, the user is wholly responsible. Each argument can be a constant, a variable, or a time-varying signal. deltapn is identical to deltapi, except delay time is specified in number of samples, instead of seconds (Hans Mikelson). This opcode can tap into a delayr/delayw pair, extracting delayed audio from the idlt seconds of stored sound. There can be any number of deltap and/or deltapi units between a read/write pair. Each receives an audio tap with no change of original amplitude. This opcode can provide multiple delay taps for arbitrary delay path and feedback networks. They can deliver either constant-time or time-varying taps, and are useful for building chorus effects, harmonizers, and Doppler shifts. Constant-time delay taps (and some slowly changing ones) do not need interpolated readout; they are well served by deltap. Medium-paced or fast varying dlt's, however, will need the extra services of deltapi. delayr/delayw pairs may be interleaved. To associate a delay tap unit with a specific delayr unit, it not only has to be located between that delayr and the appropriate delayw unit, but must also precede any following delayr units. See Example 2. (This feature added in Csound version 3.57 by Jens Groh and John ffitch). N.B. k-rate delay times are not internally interpolated, but rather lay down stepped time-shifts of audio samples; this will be found quite adequate for slowly changing tap times. For medium to fast-paced changes, however, one should provide a higher resolution audio-rate timeshift as input.
Examples
Here is an example of the deltapn opcode. It uses the file deltapn.csd [examples/deltapn.csd].
557
<CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o deltap3.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gasig gidel init 0 = 1 ;delay time in seconds
vincr gasig, ain ;send to global delay endin instr 2 ifeedback = p4 abuf2 delayr gidel adelL deltapn 4000 ;first tap (on left channel) adelM deltapn 44100 ;second tap (on middle channel) delayw gasig + (adelL * ifeedback) abuf3 delayr gidel kdel line 100, p3, 1 ;vary delay time adelR deltapn 100 * kdel ;one pitch changing tap (on the right chn.) delayw gasig + (adelR * ifeedback) ;make a mix of all deayed signals outs adelL + adelM, adelR + adelM clear gasig endin </CsInstruments> <CsScore> i 1 0 1 i 1 3 1 i 2 0 3 0 ;no feedback i 2 3 8 .8 ;lots of feedback e </CsScore> </CsoundSynthesizer>
See Also
deltap, deltap3, deltapi
558
deltapx
deltapx Read from or write to a delay line with interpolation.
Description
deltapx is similar to deltapi or deltap3. However, it allows higher quality interpolation. This opcode can read from and write to a delayr/delayw delay line with interpolation.
Syntax
aout deltapx adel, iwsize
Initialization
iwsize -- interpolation window size in samples. Allowed values are integer multiplies of 4 in the range 4 to 1024. iwsize = 4 uses cubic interpolation. Increasing iwsize improves sound quality at the expense of CPU usage, and minimum delay time.
Performance
aout -- Output signal. adel -- Delay time in seconds.
a1 a3
idlr >= 1/kr adl1 >= (iws1/2)/sr adl1 <= idlr - (1 + iws1/2)/sr adl2 adl2 adl2 adl2 >= <= >= >= 1/kr idlr adl1 1/kr + + +
(iws2/2)/sr Read time (1 + iws2/2)/sr (iws1 + iws2) / (2*sr) adl3 + (iws2 + iws3) / (2*sr) Write after read (allows feedback)
Note
Window sizes for opcodes other than deltapx are: deltap, deltapn: 1, deltapi: 2 (linear), 559
deltap3: 4 (cubic)
Examples
Here is an example of the deltapx opcode. It uses the file deltapx.csd [examples/deltapx.csd].
See Also
deltapxw
Credits
Author: Istvan Varga August 2001 New in version 4.13 560
deltapxw
deltapxw Mixes the input signal to a delay line.
Description
deltapxw mixes the input signal to a delay line. This opcode can be mixed with reading units (deltap, deltapn, deltapi, deltap3, and deltapx) in any order; the actual delay time is the difference of the read and write time. This opcode can read from and write to a delayr/delayw delay line with interpolation.
Syntax
deltapxw ain, adel, iwsize
Initialization
iwsize -- interpolation window size in samples. Allowed values are integer multiplies of 4 in the range 4 to 1024. iwsize = 4 uses cubic interpolation. Increasing iwsize improves sound quality at the expense of CPU usage, and minimum delay time.
Performance
ain -- Input signal. adel -- Delay time in seconds.
a1 a3
idlr >= 1/kr adl1 >= (iws1/2)/sr adl1 <= idlr - (1 + iws1/2)/sr adl2 adl2 adl2 adl2 >= <= >= >= 1/kr idlr adl1 1/kr + + +
(iws2/2)/sr Read time (1 + iws2/2)/sr (iws1 + iws2) / (2*sr) adl3 + (iws2 + iws3) / (2*sr) Write after read (allows feedback)
Note
561
Window sizes for opcodes other than deltapx are: deltap, deltapn: 1, deltapi: 2 (linear), deltap3: 4 (cubic)
Examples
Here is an example of the deltapxw opcode. It uses the file deltapxw.csd [examples/deltapxw.csd].
See Also
deltapx
Credits
Author: Istvan Varga August 2001 562
563
denorm
denorm Mixes low level noise to a list of a-rate signals
Description
Mixes low level (~1e-20 for floats, and ~1e-56 for doubles) noise to a list of a-rate signals. Can be used before IIR filters and reverbs to avoid denormalized numbers which may otherwise result in significantly increased CPU usage.
Syntax
denorm a1[, a2[, a3[, ... ]]]
Performance
a1[, a2[, a3[, ... ]]] -- signals to mix noise with Some processor architectures (particularly Pentium IVs) are very slow at processing extremely small numbers. These small numbers can appear as a result of some decaying feedback process like reverb and IIR filters. Low level noise can be added so that very small numbers are never reached, and they are 'absorbed' by this 'noise floor'. If CPU usage goes to 100% at the end of reverb tails, or you get audio glitches in processes that shouldn't use too much CPU, using denorm before the culprit opcode or process might solve the problem.
Examples
Here is an example of the denorm opcode. It uses the file denorm.csd [examples/denorm.csd].
564
a2 a1
linsegr 0, 0.005, 1, 3600, 1, 0.08, 0 = a1 * a2 vincr garvb, a1 outs a1, a1 endin instr 99 ;"Always on" denorm garvb aL, aR reverbsc garvb * 0.5, garvb * 0.5, 0.92, 10000 clear garvb outs aL, aR endin </CsInstruments> <CsScore> i i i e 99 0 -1 ;held by a negative p3, means "always on" 1 0 0.5 1 4 0.5 8 ;8 extra seconds after the performance
</CsScore> </CsoundSynthesizer>
Credits
Author: Istvan Varga 2005
565
diff
diff Modify a signal by differentiation.
Description
Modify a signal by differentiation.
Syntax
ares diff asig [, iskip] kres diff ksig [, iskip]
Initialization
iskip (optional) -- initial disposition of internal save space (see reson). The default value is 0.
Performance
integ and diff perform integration and differentiation on an input control signal or audio signal. Each is the converse of the other, and applying both will reconstruct the original signal. Since these units are special cases of low-pass and high-pass filters, they produce a scaled (and phase shifted) output that is frequency-dependent. Thus diff of a sine produces a cosine, with amplitude 2 * pi * Hz / sr that of the original (for each component partial); integ will inversely affect the magnitudes of its component inputs. With this understanding, these units can provide useful signal modification.
Examples
Here is an example of the diff opcode. It uses the file diff.csd [examples/diff.csd].
566
endin instr 2 ; with diff asig diskin2 "fox.wav", 1 ares diff asig outs ares, ares endin instr 3 ; with integ asig diskin2 "fox.wav", 1 aint integ asig aint = aint*.05 outs aint, aint endin instr 4 ; with diff and integ asig diskin2 "fox.wav", 1 ares diff asig aint integ ares outs aint, aint endin </CsInstruments> <CsScore> i i i i e </CsScore> </CsoundSynthesizer> 1 2 3 4 0 1 2 3 1 1 1 1
See Also
downsamp, integ, interp, samphold, upsamp
567
diskgrain
diskgrain Synchronous granular synthesis, using a soundfile as source.
Description
diskgrain implements synchronous granular synthesis. The source sound for the grains is obtained by reading a soundfile containing the samples of the source waveform.
Syntax
asig diskgrain Sfname, kamp, kfreq, kpitch, kgrsize, kprate, \ ifun, iolaps [,imaxgrsize , ioffset]
Initialization
Sfilename -- source soundfile. ifun -- grain envelope function table. iolaps -- maximum number of overlaps, max(kfreq)*max(kgrsize). Estimating a large value should not affect performance, but exceeding this value will probably have disastrous consequences. imaxgrsize -- max grain size in secs (default 1.0). ioffset -- start offset in secs from beginning of file (default: 0).
Performance
kamp -- amplitude scaling kfreq -- frequency of grain generation, or density, in grains/sec. kpitch -- grain pitch scaling (1=normal pitch, < 1 lower, > 1 higher; negative, backwards) kgrsize -- grain size in secs. kprate -- readout pointer rate, in grains. The value of 1 will advance the reading pointer 1 grain ahead in the source table. Larger values will time-compress and smaller values will time-expand the source signal. Negative values will cause the pointer to run backwards and zero will freeze it. The grain generator has full control of frequency (grains/sec), overall amplitude, grain pitch (a sampling increment) and grain size (in secs), both as fixed or time-varying (signal) parameters. An extra parameter is the grain pointer speed (or rate), which controls which position the generator will start reading samples in the file for each successive grain. It is measured in fractions of grain size, so a value of 1 (the default) will make each successive grain read from where the previous grain should finish. A value of 0.5 will make the next grain start at the midway position from the previous grain start and finish, etc.. A value of 0 will make the generator read always from a fixed position (wherever the pointer was last at). A negative value will decrement pointer positions. This control gives extra flexibility for creating timescale modifications in the resynthesis. Diskgrain will generate any number of parallel grain streams (which will depend on grain density/frequency), up to the olaps value (default 100). The number of streams (overlapped grains) is determined 568
by grainsize*grain_freq. More grain overlaps will demand more calculations and the synthesis might not run in realtime (depending on processor power). Diskgrain can simulate FOF-like formant synthesis, provided that a suitable shape is used as grain envelope and a sinewave as the grain wave. For this use, grain sizes of around 0.04 secs can be used. The formant centre frequency is determined by the grain pitch. Since this is a sampling increment, in order to use a frequency in Hz, that value has to be scaled by tablesize/sr. Grain frequency will determine the fundamental. This opcode is a variation on the syncgrain opcode.
Examples
Here is an example of the diskgrain opcode. It uses the file diskgrain.csd [examples/diskgrain.csd].
istr = p4 /* timescale */ ipitch = p5 /* pitchscale */ a1 diskgrain "mary.wav", 1, ifreq, ipitch, igrsize, ips*istr, 1, iolaps outs a1, a1 endin </CsInstruments> <CsScore> f 1 0 8192 20 2 1 ; i i i i i 1 1 1 1 1 0 + + + + 5 5 5 5 5
e </CsScore> </CsoundSynthesizer>
Credits
569
570
diskin
diskin Deprecated. Reads audio data from an external device or stream and can alter its pitch.
Description
Deprecated. Reads audio data from an external device or stream and can alter its pitch.
Syntax
ar1 [, ar2 [, ar3 [, ... ar24]]] diskin ifilcod, kpitch [, iskiptim] \ [, iwraparound] [, iformat] [, iskipinit]
Initialization
ifilcod -- integer or character-string denoting the source soundfile name. An integer denotes the file soundin.filcod ; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is sought first in the current directory, then in that given by the environment variable SSDIR (if defined) then by SFDIR. See also GEN01. iskptim (optional) -- time in seconds of input sound to be skipped. The default value is 0. iformat (optional) -- specifies the audio data file format: 1 = 8-bit signed char (high-order 8 bits of a 16-bit integer) 2 = 8-bit A-law bytes 3 = 8-bit U-law bytes 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = 8-bit unsigned int (not available in Csound versions older than 5.00) 8 = 24-bit int (not available in Csound versions older than 5.00) 9 = 64-bit doubles (not available in Csound versions older than 5.00) iwraparound -- 1 = on, 0 = off (wraps around to end of file either direction, enabling looping) iskipinit switches off all initialisation if non zero (default =0). This was introduced in 4_23f13 and csound5. If iformat = 0 it is taken from the soundfile header, and if no header from the Csound -o command-line flag. The default value is 0.
Performance
571
Note
diskin is deprecated since it can crash easily under certain circumstances. Use diskin2 instead. kpitch -- can be any real number. A negative number signifies backwards playback. The given number is a pitch ratio, where: 1 = normal pitch 2 = 1 octave higher 3 = 12th higher, etc. .5 = 1 octave lower .25 = 2 octaves lower, etc. -1 = normal pitch backwards -2 = 1 octave higher backwards, etc. diskin is identical to soundin except that it can alter the pitch of the sound that is being read, and is capable of looping.
Examples
Here is an example of the diskin opcode. It uses the file diskin.csd [examples/diskin.csd], beats.wav [examples/beats.wav].
572
;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o diskin.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr ksmps nchnls 0dbfs = = = = 44100 32 2 1
instr 1 ktrans linseg 1, 5, 2, 10, -2 a1 diskin "beats.wav", ktrans, 0, 1, 0, 32 outs a1, a1 endin </CsInstruments> <CsScore> i 1 0 15 e </CsScore> </CsoundSynthesizer>
See Also
in, inh, ino, inq, ins, soundin and diskin2
Credits
Authors: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997 New in version 3.46 Warning to Windows users added by Kevin Conder, April 2002
573
diskin2
diskin2 Reads audio data from a file, and can alter its pitch using one of several available interpolation types, as well as convert the sample rate to match the orchestra sr setting.
Description
Reads audio data from a file, and can alter its pitch using one of several available interpolation types, as well as convert the sample rate to match the orchestra sr setting. diskin2 can also read multichannel files with any number of channels in the range 1 to 24. diskin2 allows more control and higher sound quality than diskin, but there is also the disadvantage of higher CPU usage.
Syntax
a1[, a2[, ... a24]] diskin2 ifilcod, kpitch[, iskiptim \ [, iwrap[, iformat [, iwsize[, ibufsize[, iskipinit]]]]]]
Initialization
ifilcod -- integer or character-string denoting the source soundfile name. An integer denotes the file soundin.ifilcod; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is sought first in the current directory, then in those given by the environment variable SSDIR (if defined) then by SFDIR. See also GEN01. Note: files longer than 231-1 sample frames may not be played correctly on 32 bit platforms; this means a maximum length about 3 hours with a sample rate of 192000 Hz. iskiptim (optional, defaults to zero) -- time in seconds of input sound to be skipped, assuming kpitch=1. Can be negative, to add -iskiptim/kpitch seconds of delay instead of skipping sound.
Note
If iwrap is not 0 (locations are wrapped), iskiptim will not delay the sound if a negative value is used. Instead, the negative value will be "wrapped" from the end of the file. iwrap (optional, defaults to zero) -- if set to any non-zero value, read locations that are negative or are beyond the end of the file are wrapped to the duration of the sound file instead of assuming zero samples. Useful for playing a file in a loop.
Note
If iwrap is enabled, the file length should not be shorter than the interpolation window size (see below), otherwise there may be clicks in the sound output. iformat (optional, defaults to zero) -- sample format, for raw (headerless) files only. This parameter is ignored if the file has a header. Allowed values are: 0: 16-bit short integers 1: 8-bit signed char (high-order 8 bits of a 16-bit integer) 2: 8-bit A-law bytes 574
3: 8-bit U-law bytes 4: 16-bit short integers 5: 32-bit long integers 6: 32-bit floats 7: 8-bit unsigned int 8: 24-bit int 9: 64-bit doubles iwsize (optional, defaults to zero) -- interpolation window size, in samples. Can be one of the following: 1: round to nearest sample (no interpolation, for kpitch=1) 2: linear interpolation 4: cubic interpolation >= 8: iwsize point sinc interpolation with anti-aliasing (slow) Zero or negative values select the default, which is cubic interpolation.
Note
If interpolation is used, kpitch is automatically scaled by the ratio of the sample rate of the sound file and the orchestra, so that the file will always be played at the original pitch if kpitch is 1. However, the sample rate conversion is disabled if iwsize is 1. ibufsize (optional, defaults to 0) -- buffer size in mono samples (not sample frames). This is only the suggested value, the actual setting will be rounded so that the number of sample frames is an integer power of two and is in the range 128 (or iwsize if greater than 128) to 1048576. The default, which is 4096, and is enabled by zero or negative values, should be suitable for most uses, but for non-realtime mixing of many large sound files, a high buffer setting is recommended to improve the efficiency of disk reads. For real time audio output, reading the files from a fast RAM file system (on platforms where this option is available) with a small buffer size may be preferred. iskipinit (optional, defaults to 0) -- skip initialization if set to any non-zero value.
Performance
a1 ... a24 -- output signals, in the range -0dbfs to 0dbfs. Any samples before the beginning (i.e. negative location) and after the end of the file are assumed to be zero, unless iwrap is non-zero. The number of output arguments must be the same as the number of sound file channels - which can be determined with the filenchnls opcode, otherwise an init error will occur.
Note
It is more efficient to read a single file with many channels, than many files with only a single channel, especially with high iwsize settings.
575
kpitch -- transpose the pitch of input sound by this factor (e.g. 0.5 means one octave lower, 2 is one octave higher, and 1 is the original pitch). Fractional and negative values are allowed (the latter results in playing the file backwards, however, in this case the skip time parameter should be set to some positive value, e.g. the length of the file, or iwrap should be non-zero, otherwise nothing would be played). If interpolation is enabled, and the sample rate of the file differs from the orchestra sample rate, the transpose ratio is automatically adjusted to make sure that kpitch=1 plays at the original pitch. Using a high iwsize setting (40 or more) can significantly improve sound quality when transposing up, although at the expense of high CPU usage.
Examples
Here is an example of the diskin2 opcode. It uses the file diskin2.csd [examples/diskin2.csd], beats.wav [examples/beats.wav].
instr 1 ktrans linseg 1, 5, 2, 10, -2 a1 diskin2 "beats.wav", ktrans, 0, 1, 0, 32 outs a1, a1 endin </CsInstruments> <CsScore> i 1 0 15 e </CsScore> </CsoundSynthesizer>
See Also
in, inh, ino, inq, ins, soundin and diskin
Credits
Author: Istvan Varga 2005 576
577
dispfft
displayfft Displays the Fourier Transform of an audio or control signal.
Description
These units will print orchestra init-values, or produce graphic display of orchestra control signals and audio signals. Uses X11 windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.
Syntax
dispfft xsig, iprd, iwsiz [, iwtyp] [, idbout] [, iwtflg]
Initialization
iprd -- the period of display in seconds. iwsiz -- size of the input window in samples. A window of iwsiz points will produce a Fourier transform of iwsiz/2 points, spread linearly in frequency from 0 to sr/2. iwsiz must be a power of 2, with a minimum of 16 and a maximum of 4096. The windows are permitted to overlap. iwtyp (optional, default=0) -- window type. 0 = rectangular, 1 = Hanning. The default value is 0 (rectangular). idbout (optional, default=0) -- units of output for the Fourier coefficients. 0 = magnitude, 1 = decibels. The default is 0 (magnitude). iwtflg (optional, default=0) -- wait flag. If non-zero, each display is held until released by the user. The default value is 0 (no wait).
Performance
dispfft -- displays the Fourier Transform of an audio or control signal (asig or ksig) every iprd seconds using the Fast Fourier Transform method.
Examples
Here is an example of the dispfft opcode. It uses the file dispfft.csd [examples/dispfft.csd].
578
</CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kcps = 110 ifn = 1 knh line p4, p3, p5 asig buzz 1, kcps, knh, ifn outs asig, asig dispfft asig, .1, 2048, 0, 1 endin </CsInstruments> <CsScore> ;sine wave. f 1 0 16384 10 1 i 1 0 3 20 20 i 1 + 3 3 3 i 1 + 3 150 1 e </CsScore> </CsoundSynthesizer>
See Also
display, print
579
display
display Displays the audio or control signals as an amplitude vs. time graph.
Description
These units will print orchestra init-values, or produce graphic display of orchestra control signals and audio signals. Uses X11 windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.
Syntax
display xsig, iprd [, inprds] [, iwtflg]
Initialization
iprd -- the period of display in seconds. inprds (optional, default=1) -- Number of display periods retained in each display graph. A value of 2 or more will provide a larger perspective of the signal motion. The default value is 1 (each graph completely new). inprds is a scaling factor for the displayed waveform, controlling how many iprd-sized frames of samples are drawn in the window (the default and minimum value is 1.0). Higher inprds values are slower to draw (more points to draw) but will show the waveform scrolling through the window, which is useful with low iprd values. iwtflg (optional, default=0) -- wait flag. If non-zero, each display is held until released by the user. The default value is 0 (no wait).
Performance
display -- displays the audio or control signal xsig every iprd seconds, as an amplitude vs. time graph.
Examples
Here is an example of the display opcode. It uses the file display.csd [examples/display.csd].
580
nchnls = 2 0dbfs = 1 instr 1 kcps = 110 ifn = 1 knh line p4, p3, p5 asig buzz 1, kcps, knh, ifn outs asig, asig display asig, .1, 3 endin </CsInstruments> <CsScore> ;sine wave. f 1 0 16384 10 1 i 1 0 3 20 20 i 1 + 3 3 3 i 1 + 3 150 1 e </CsScore> </CsoundSynthesizer>
See Also
dispfft, print
Credits
Comments about the inprds parameter contributed by Rasmus Ekman.
581
distort
distort Distort an audio signal via waveshaping and optional clipping.
Description
Distort an audio signal via waveshaping and optional clipping.
Syntax
ar distort asig, kdist, ifn[, ihp, istor]
Initialization
ifn -- table number of a waveshaping function with extended guard point. The function can be of any shape, but it should pass through 0 with positive slope at the table mid-point. The table size need not be large, since it is read with interpolation. ihp -- (optional) half-power point (in cps) of an internal low-pass filter. The default value is 10. istor -- (optional) initial disposition of internal data space (see reson). The default value is 0.
Performance
asig -- Audio signal to be processed kdist -- Amount of distortion (usually between 0 and 1) This unit distorts an incoming signal using a waveshaping function ifn and a distortion index kdist. The input signal is first compressed using a running rms, then passed through a waveshaping function which may modify its shape and spectrum. Finally it is rescaled to approximately its original power. The amount of distortion depends on the nature of the shaping function and on the value of kdist, which generally ranges from 0 to 1. For low values of kdist, we should like the shaping function to pass the signal almost unchanged. This will be the case if, at the mid-point of the table, the shaping function is nearlinear and is passing through 0 with positive slope. A line function from -1 to +1 will satisfy this requirement; so too will a sigmoid (sinusoid from 270 to 90 degrees). As kdist is increased, the compressed signal is expanded to encounter more and more of the shaping function, and if this becomes nonlinear the signal is increasingly bent on read-through to cause distortion. When kdist becomes large enough, the read-through process will eventually hit the outer limits of the table. The table is not read with wrap-around, but will stick at the end-points as the incoming signal exceeds them; this introduces clipping, an additional form of signal distortion. The point at which clipping begins will depend on the complexity (rms-to-peak value) of the input signal. For a pure sinusoid, clipping will begin only as kdist exceeds 0.7; for a more complex input, clipping might begin at a kdist of 0.5 or much less. kdist can exceed the clip point by any amount, and may be greater than 1. The shaping function can be made arbitrarily complex for extra effect. It should generally be continuous, though this is not a requirement. It should also be well-behaved near the mid-point, and roughly balanced positive-negative overall, else some excessive DC offset may result. The user might experiment with more aggressive functions to suit the purpose. A generally positive slope allows the distorted signal to be mixed with the source without phase cancellation.
582
distort is useful as an effects process, and is usually combined with reverb and chorusing on effects busses. However, it can alternatively be used to good effect within a single instrument.
Examples
Here is an example of the distort opcode. It uses the file distort.csd [examples/distort.csd].
gifn ftgen 0,0, 257, 9, .5,1,270 ; define a sigmoid, or better ;gifn ftgen 0,0, 257, 9, .5,1,270,1.5,.33,90,2.5,.2,270,3.5,.143,90,4.5,.111,270 instr 1 kdist line 0, p3, 2 ; and over 10 seconds asig poscil 0.3, 440, 1 aout distort asig, kdist, gifn ; gradually increase the distortion outs aout, aout endin </CsInstruments> <CsScore> f 1 0 16384 10 1 i 1 0 10 e </CsScore> </CsoundSynthesizer>
Credits
Written by Barry L. Vercoe for Extended Csound and released in Csound5.
583
distort1
distort1 Modified hyperbolic tangent distortion.
Description
Implementation of modified hyperbolic tangent distortion. distort1 can be used to generate wave shaping distortion based on a modification of the tanh function.
exp(asig * (shape1 + pregain)) - exp(asig * (shape2 - pregain)) aout = --------------------------------------------------------------exp(asig * pregain) + exp(-asig * pregain)
Syntax
ares distort1 asig, kpregain, kpostgain, kshape1, kshape2[, imode]
Initialization
imode (Csound version 5.00 and later only; optional, defaults to 0) -- scales kpregain, kpostgain, kshape1, and kshape2 for use with audio signals in the range -32768 to 32768 (imode=0), -0dbfs to 0dbfs (imode=1), or disables scaling of kpregain and kpostgain and scales kshape1 by kpregain and kshape2 by -kpregain (imode=2).
Performance
asig -- is the input signal. kpregain -- determines the amount of gain applied to the signal before waveshaping. A value of 1 gives slight distortion. kpostgain -- determines the amount of gain applied to the signal after waveshaping. kshape1 -- determines the shape of the positive part of the curve. A value of 0 gives a flat clip, small positive values give sloped shaping. kshape2 -- determines the shape of the negative part of the curve.
Examples
Here is an example of the distort1 opcode. It uses the file distort1.csd [examples/distort1.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o distort1.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gadist init 0 instr 1 iamp = p4 ifqc = cpspch(p5) asig pluck iamp, ifqc, ifqc, 0, 1 gadist = gadist + asig endin instr 50 kpre init p4 kpost init p5 kshap1 init p6 kshap2 init p7 aout distort1 gadist, kpre, kpost, kshap1, kshap2, 1 outs aout, aout gadist = 0 endin </CsInstruments> <CsScore> ; i1 i1 i1 i1 Sta 0.0 0.5 1.0 1.5 Dur 3.0 2.5 2.0 1.5 Dur 4 Amp 0.5 0.5 0.5 0.5 Pitch 6.00 7.00 7.07 8.00
; Sta i50 0 e
</CsScore> </CsoundSynthesizer>
Credits
Author: Hans Mikelson December 1998 New in Csound version 3.50
585
divz
divz Safely divides two numbers.
Syntax
ares divz xa, xb, ksubst ires divz ia, ib, isubst kres divz ka, kb, ksubst
Description
Safely divides two numbers.
Initialization
Whenever b is not zero, set the result to the value a / b; when b is zero, set it to the value of subst instead.
Examples
Here is an example of the divz opcode. It uses the file divz.csd [examples/divz.csd].
586
; Print out the results. printks "%f / %f = %f\\n", 0.1, ka, kb, kresults endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
=, init, tival
Credits
Author: John ffitch after an idea by Barry L. Vercoe Example written by Kevin Conder.
587
doppler
doppler A fast and robust method for approximating sound propagation, achieving convincing Doppler shifts without having to solve equations.
Description
A fast and robust method for approximating sound propagation, achieving convincing Doppler shifts without having to solve equations. The method computes frequency shifts based on reading an input delay line at a delay time computed from the distance between source and mic and the speed of sound. One instance of the opcode is required for each dimension of space through which the sound source moves. If the source sound moves at a constant speed from in front of the microphone, through the microphone, to behind the microphone, then the output will be frequency shifted above the source frequency at a constant frequency while the source approaches, then discontinuously will be shifted below the source frequency at a constant frequency as the source recedes from the microphone. If the source sound moves at a constant speed through a point to one side of the microphone, then the rate of change of position will not be constant, and the familiar Doppler frequency shift typical of a siren or engine approaching and receding along a road beside a listener will be heard.
Syntax
ashifted doppler asource, ksourceposition, kmicposition [, isoundspeed, ifiltercutoff]
Initialization
isoundspeed (optional, default=340.29) -- Speed of sound in meters/second. ifiltercutoff (optional, default=6) -- Rate of updating the position smoothing filter, in cycles/second.
Performance
asource -- Input signal at the sound source. ksourceposition -- Position of the source sound in meters. The distance between source and mic should not be changed faster than about 3/4 the speed of sound. kmicposition -- Position of the recording microphone in meters. The distance between source and mic should not be changed faster than about 3/4 the speed of sound.
Examples
Here is an example of the doppler opcode. It uses the file doppler.csd [examples/doppler.csd].
588
-odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o doppler.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 48000 ksmps = 128 nchnls = 2 0dbfs = 1 instr 1 iattack irelease isustain p3 kdamping kmic init 0.05 init 0.05 init p3 init iattack + isustain + irelease linseg 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0 init 4 ; Position envelope, with a changing rate of change of position. ; transeg a dur ty b dur ty c dur ty d kposition transeg 4, p3*.4, 0, 120, p3*.3, -3, 50, p3*.3, 2, 4 ismoothinghz init 6 ispeedofsound init 340.29 asignal vco2 0.5, 110 aoutput doppler asignal, kposition, kmic, ispeedofsound, ismoothinghz outs aoutput*kdamping, aoutput * kdamping endin </CsInstruments> <CsScore> i1 0.0 20 e1 </CsScore> </CsoundSynthesizer>
Credits
Author of algorithm: Peter Brinkmann Author of opcode: Michael Gogins January 2010 New in Csound version 5.11
589
downsamp
downsamp Modify a signal by down-sampling.
Description
Modify a signal by down-sampling.
Syntax
kres downsamp asig [, iwlen]
Initialization
iwlen (optional) -- window length in samples over which the audio signal is averaged to determine a downsampled value. Maximum length is ksmps; 0 and 1 imply no window averaging. The default value is 0.
Performance
downsamp converts an audio signal to a control signal by downsampling. It produces one kval for each audio control period. The optional window invokes a simple averaging process to suppress foldover.
Examples
Here is an example of the downsamp opcode. It uses the file downsamp.csd [examples/downsamp.csd].
590
e </CsScore> </CsoundSynthesizer>
See Also
diff, integ, interp, samphold, upsamp
591
dripwater
dripwater Semi-physical model of a water drop.
Description
dripwater is a semi-physical model of a water drop. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares dripwater kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \ [, ifreq1] [, ifreq2]
Initialization
idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 10. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.996 + (idamp * 0.002) The default damping_amount is 0.996 which means that the default value of idamp is 0. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 2.0. The recommended range for idamp is usually below 75% of the maximum value. Rasmus Ekman suggests a range of 1.4-1.75. He also suggests a maximum value of 1.9 instead of the theoretical limit of 2.0. imaxshake (optional, default=0) -- amount of energy to add back into the system. The value should be in range 0 to 1. ifreq (optional) -- the main resonant frequency. The default value is 450. ifreq1 (optional) -- the first resonant frequency. The default value is 600. ifreq2 (optional) -- the second resonant frequency. The default value is 750.
Performance
kamp -- Amplitude of output. Note: As these instruments are stochastic, this is only an approximation.
Examples
Here is an example of the dripwater opcode. It uses the file dripwater.csd [examples/dripwater.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o dripwater.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 01 ;example of a water drip a1 line 5, p3, 5 ;preset an amplitude boost a2 dripwater p4, 0.01, 0, .9 ;dripwater needs a little amplitude help at these values a3 product a1, a2 ;increase amplitude out a3 endin </CsInstruments> <CsScore> i1 0 1 20000 e </CsScore> </CsoundSynthesizer>
See Also
bamboo, guiro, sleighbells, tambourine
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
593
dssiactivate
dssiactivate Activates or deactivates a DSSI or LADSPA plugin.
Syntax
dssiactivate ihandle, ktoggle
Description
dssiactivate is used to activate or deactivate a DSSI or LADSPA plugin. It calles the plugin's activate() and deactivate() functions if they are provided.
Initialization
ihandle - the number which identifies the plugin, generated by dssiinit.
Performance
ktoggle - Selects between activation (ktoggle=1) and deactivation (ktoggle=0). dssiactivate is used to turn on and off plugins if they provide this facility. This may help conserve CPU processing in some cases. For consistency, all plugins must be activated to produce sound. An inactive plugin produces silence. Depending on the plugin's implementation, this may cause interruptions in the realtime audio process, so use with caution. dssiactivate may cause audio stream breakups when used in realtime, so it is recommended to load all plugins to be used before playing.
Warning
Please note that even if activate() and deactivate() functions are not present in a plugin, dssiactivate must be called for the plugin to produce sound.
Examples
Here is an example of [examples/dssiactivate.csd]. the dssiactivate opcode. It uses the file dssiactivate.csd
594
;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o dssiactivate.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 gihandle dssiinit "caps.so", 19, 1 ; = mono phaser and gaout init 0 ; verbose about all ports instr 1 ; activate DSSI ktoggle = p4 dssiactivate gihandle, ktoggle endin instr 2 ain1 diskin2 "beats.wav", 1,0,1 ; loop ain1 = ain1*.5 outs ain1, ain1 gaout = gaout+ain1 endin instr 3 dssictls dssictls dssictls dssictls dssictls endin instr 4 aout1 dssiaudio gihandle, gaout ;get beats.wav, mono out outs aout1,aout1 gaout = 0 endin </CsInstruments> <CsScore> i 1 0 4 1 i 1 + . 0 i 1 + . 1 i 1 + . 0 i 1 + . 1 i 2 1 20 i 3 1 20 i 4 0 20 e </CsScore> </CsoundSynthesizer> gihandle, gihandle, gihandle, gihandle, gihandle, 0, 1, 2, 3, 4, 1, 1 2, 1 .8, 1 3, 1 .9, 1 ; range -1 to 1 ; rate 0 to 10 ; depth 0 to 1 ; spread 0 to 3.14 ; feedback 0 to 0.999
Credits
2005 By: Andrs Cabrera Uses code from Richard Furse's LADSPA sdk.
595
dssiaudio
dssiaudio Processes audio using a LADSPA or DSSI plugin.
Syntax
aout1 [, aout2, aout3, aout4] dssiaudio ihandle, ain1 [,ain2, ain3, ain4]
Description
dssiaudio generates audio by processing an input signal through a LADSPA plugin.
Initialization
ihandle - handle for the plugin returned by dssiinit
Performance
aout1, aout2, etc - Audio ouput generated by the plugin ain1, ain2, etc - Audio provided to the plugin for processing dssiaudio runs a plugin on the provided audio and produces audio output. Currently upto four inputs and outputs are provided. You should provide signal for all the plugins audio inputs, otherwise unpredictable results may occur. If the plugin doesn't have any input (e.g Noise generator) you must still provide at least one input variable, which will be ignored with a message. Only one dssiaudio should be executed once per plugin, or strange results may occur.
Examples
Here is an example of the dssiaudio opcode. It uses the file dssiaudio.csd [examples/dssiaudio.csd].
596
instr 1 ; activate DSSI dssiactivate gihandle, 1 endin instr 2 ain1 diskin2 "beats.wav", 1,0,1 ; loop gaout = gaout+(ain1*.5) endin instr 3 dssictls dssictls dssictls dssictls dssictls endin instr 4 aout1 dssiaudio gihandle, gaout ;get beats.wav, mono out outs aout1,aout1 gaout = 0 endin </CsInstruments> <CsScore> i 1 0 20 i 2 1 20 i 3 1 20 i 4 0 20 e </CsScore> </CsoundSynthesizer> gihandle, gihandle, gihandle, gihandle, gihandle, 0, 1, 2, 3, 4, .8, 1 .05, 1 .8, 1 2, 1 .7, 1 ; range -1 to 1 ; rate 0 to 10 ; depth 0 to 1 ; spread 0 to 3.14 ; feedback 0 to 0.999
Credits
2005 By: Andrs Cabrera Uses code from Richard Furse's LADSPA sdk.
597
dssictls
dssictls Send control information to a LADSPA or DSSI plugin.
Syntax
dssictls ihandle, iport, kvalue, ktrigger
Description
dssictls sends control values to a plugin's control port
Initialization
ihandle - handle for the plugin returned by dssiinit iport - control port number
Performance
kvalue - value to be assigned to the port ktrigger - determines whether the control information will be sent (ktrigger = 1) or not. This is useful for thinning control information, generating ktrigger with metro dssictls sends control information to a LADSPA or DSSI plugin's control port. The valid control ports and ranges are given by dssiinit . Using values outside the ranges may produce unspecified behaviour.
Examples
Here is an example of the dssictls opcode. It uses the file dssictls.csd [examples/dssictls.csd].
598
instr 1 ; activate DSSI dssiactivate gihandle, 1 endin instr 2 ain1 diskin2 "beats.wav", 1,0,1 ; loop gaoutl = gaoutl+(ain1*.1) gaoutr = gaoutr+(ain1*.1) endin instr 3 dssictls dssictls dssictls dssictls dssictls dssictls dssictls dssictls dssictls dssictls endin instr 4 aout1, aout2 dssiaudio gihandle, gaoutl, gaoutr ;get beats.wav, mono out outs aout1,aout2 gaoutl = 0 gaoutr = 0 endin </CsInstruments> <CsScore> i 1 0 20 i 2 1 20 i 3 1 20 i 4 0 20 e </CsScore> </CsoundSynthesizer> gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, 2, -48, 1 ; 31 Hz range -48 to 24 3, -48, 1 ; 63 Hz range -48 to 24 4, -48, 1 ; 125 Hz range -48 to 24 5, 20, 1 ; 250 Hz range -48 to 24 6, -48, 1 ; 500 Hz range -48 to 24 7, -48, 1 ; 1 kHz Hz range -48 to 24 8, -48, 1 ; 2 kHz range -48 to 24 9, 24, 1 ; 4 kHz range -48 to 24 10, 24, 1 ; 8 kHz range -48 to 24 11, 24, 1 ; 16 kHz range -48 to 24 ; temper input
Credits
2005 By: Andrs Cabrera Uses code from Richard Furse's LADSPA sdk.
599
dssiinit
dssiinit Loads a DSSI or LADSPA plugin.
Syntax
ihandle dssiinit ilibraryname, iplugindex [, iverbose]
Description
dssiinit is used to load a DSSI or LADSPA plugin into memory for use with the other dssi4cs opcodes. Both LADSPA effects and DSSI instruments can be used.
Initialization
ihandle - the number which identifies the plugin, to be passed to other dssi4cs opcodes. ilibraryname - the name of the .so (shared object) file to load. iplugindex - The index of the plugin to be used. iverbose (optional) - show plugin information and parameters when loading. (default = 1) dssiinit looks for ilibraryname on LADSPA_PATH and DSSI_PATH. One of these variables must be set, otherwise dssiinit will return an error. LADSPA and DSSI libraries may contain more than one plugin which must be referenced by its index. dssiinit then attempts to find plugin index iplugindex in the library and load the plugin into memory if it is found. To find out which plugins you have available and their index numbers you can use: dssilist. If iverbose is not 0 (the default), information about the plugin detailing its characteristics and its ports will be shown. This information is important for opcodes like dssictls. Plugins are set to inactive by default, so you *must* use dssiactivate to get the plugin to produce sound. This is required even if the plugin doesn't provide an activate() function. dssiinit may cause audio stream breakups when used in realtime, so it is recommended to load all plugins to be used before playing.
Examples
Here is an example of the dssinit opcode. It uses the file dssiinit.csd [examples/dssiinit.csd].
Example 178. Example of the dssiinit opcode. (Remember to change the Library name)
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o dssiinit.wav -W ;;; for file output any platform </CsOptions>
600
<CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 gihandle dssiinit "g2reverb.so", 0, 1 gaout init 0 instr 1 ; activate DSSI dssiactivate gihandle, 1 endin instr 2 ain1 diskin2 "beats.wav", 1 gaout = gaout+(ain1*.3) endin instr 3 dssictls dssictls dssictls dssictls dssictls dssictls dssictls endin instr 4 aout1, aout2 dssiaudio gihandle, gaout, gaout ;get beats.wav and outs aout1,aout2 ; stereo DSSI plugin gaout = 0 endin </CsInstruments> <CsScore> i 1 0 2 i 2 1 10 i 3 1 10 i 4 0 10 e </CsScore> </CsoundSynthesizer> gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, gihandle, 4, 100, 1 ; room 10 to 150 5, 10, 1 ; reverb time 1 to 20 6, .5, 1 ; input bandwith 0 to 1 7, .25, 1 ; damping 0 to 1 8, 0, 1 ; dry -80 to 0 9, -10, 1 ; reflections -80 to 0 10, -15, 1 ; rev. tail -80 to 0
Credits
2005 By: Andrs Cabrera Uses code from Richard Furse's LADSPA sdk.
601
dssilist
dssilist Lists all available DSSI and LADSPA plugins.
Syntax
dssilist
Description
dssilist checks the variables DSSI_PATH and LADSPA_PATH and lists all plugins available in all plugin libraries there. LADSPA and DSSI libraries may contain more than one plugin which must be referenced by the index provided by dssilist. This opcode produces a long printout which may interrupt realtime audio output, so it should be run at the start of a performance.
Examples
Here is an example of the dssilist opcode. It uses the file dssilist.csd [examples/dssilist.csd].
Example 179. Example of the dssilist opcode. (Remember to change the Library name)
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 instr 1 ; list all DSSI and LADSPA plugins dssilist endin </CsInstruments> <CsScore> i 1 0 0 e </CsScore> </CsoundSynthesizer>
Credits
2005 602
By: Andrs Cabrera Uses code from Richard Furse's LADSPA sdk.
603
dumpk
dumpk Periodically writes an orchestra control-signal value to an external file.
Description
Periodically writes an orchestra control-signal value to a named external file in a specific format.
Syntax
dumpk ksig, ifilname, iformat, iprd
Initialization
ifilname -- character string (in double quotes, spaces permitted) denoting the external file name. May either be a full path name with target directory specified or a simple filename to be created within the current directory iformat -- specifies the output data format: 1 = 8-bit signed char(high order 8 bits of a 16-bit integer 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers 8 = ASCII floats (2 decimal places) Note that A-law and U-law output are not available, and that all formats except the last two are binary. The output file contains no header information. iprd -- the period of ksig output in seconds, rounded to the nearest orchestra control period. A value of 0 implies one control period (the enforced minimum), which will create an output file sampled at the orchestra control rate.
Performance
ksig -- a control-rate signal This opcode allows a generated control signal value to be saved in a named external file. The file contains no self-defining header information. But it contains a regularly sampled time series, suitable for later input or analysis. There may be any number of dumpk opcodes in an instrument or orchestra but each must write to a different file.
Examples
Here is an example of the dumpk opcode. It uses the file dumpk.csd [examples/dumpk.csd]. 604
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 20 nchnls = 1 ; By Andres Cabrera 2008 instr 1 ; Write fibonacci numbers to file "fibonacci.txt" ; as ascii long integers (mode 7), using the orchestra's ; control rate (iprd = 0) knumber init 0 koldnumber init 1 ktrans init 1 ktrans = knumber knumber = knumber + koldnumber koldnumber = ktrans dumpk knumber, "fibonacci.txt", 7, 0 printk2 knumber endin </CsInstruments> <CsScore> ;Write to the file for 1 second. Since control rate is 20, 20 values will be written i 1 0 1
</CsScore> </CsoundSynthesizer>
See Also
dumpk2, dumpk3, dumpk4, readk, readk2, readk3, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
605
dumpk2
dumpk2 Periodically writes two orchestra control-signal values to an external file.
Description
Periodically writes two orchestra control-signal values to a named external file in a specific format.
Syntax
dumpk2 ksig1, ksig2, ifilname, iformat, iprd
Initialization
ifilname -- character string (in double quotes, spaces permitted) denoting the external file name. May either be a full path name with target directory specified or a simple filename to be created within the current directory iformat -- specifies the output data format: 1 = 8-bit signed char(high order 8 bits of a 16-bit integer 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers 8 = ASCII floats (2 decimal places) Note that A-law and U-law output are not available, and that all formats except the last two are binary. The output file contains no header information. iprd -- the period of ksig output in seconds, rounded to the nearest orchestra control period. A value of 0 implies one control period (the enforced minimum), which will create an output file sampled at the orchestra control rate.
Performance
ksig1, ksig2 -- control-rate signals. This opcode allows two generated control signal values to be saved in a named external file. The file contains no self-defining header information. But it contains a regularly sampled time series, suitable for later input or analysis. There may be any number of dumpk2 opcodes in an instrument or orchestra but each must write to a different file.
Examples
See the example for dumpk. The only difference between dumpk and dumpk2 is that dumpk2 can write 606
See Also
dumpk, dumpk3, dumpk4, readk, readk2, readk3, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
607
dumpk3
dumpk3 Periodically writes three orchestra control-signal values to an external file.
Description
Periodically writes three orchestra control-signal values to a named external file in a specific format.
Syntax
dumpk3 ksig1, ksig2, ksig3, ifilname, iformat, iprd
Initialization
ifilname -- character string (in double quotes, spaces permitted) denoting the external file name. May either be a full path name with target directory specified or a simple filename to be created within the current directory iformat -- specifies the output data format: 1 = 8-bit signed char(high order 8 bits of a 16-bit integer 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers 8 = ASCII floats (2 decimal places) Note that A-law and U-law output are not available, and that all formats except the last two are binary. The output file contains no header information. iprd -- the period of ksig output in seconds, rounded to the nearest orchestra control period. A value of 0 implies one control period (the enforced minimum), which will create an output file sampled at the orchestra control rate.
Performance
ksig1, ksig2, ksig3 -- control-rate signals This opcode allows three generated control signal values to be saved in a named external file. The file contains no self-defining header information. But it contains a regularly sampled time series, suitable for later input or analysis. There may be any number of dumpk3 opcodes in an instrument or orchestra but each must write to a different file.
Examples
See the example for dumpk. The only difference between dumpk and dumpk3 is that dumpk3 can write 608
See Also
dumpk, dumpk2, dumpk4, readk, readk2, readk3, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
609
dumpk4
dumpk4 Periodically writes four orchestra control-signal values to an external file.
Description
Periodically writes four orchestra control-signal values to a named external file in a specific format.
Syntax
dumpk4 ksig1, ksig2, ksig3, ksig4, ifilname, iformat, iprd
Initialization
ifilname -- character string (in double quotes, spaces permitted) denoting the external file name. May either be a full path name with target directory specified or a simple filename to be created within the current directory iformat -- specifies the output data format: 1 = 8-bit signed char(high order 8 bits of a 16-bit integer 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers 8 = ASCII floats (2 decimal places) Note that A-law and U-law output are not available, and that all formats except the last two are binary. The output file contains no header information. iprd -- the period of ksig output in seconds, rounded to the nearest orchestra control period. A value of 0 implies one control period (the enforced minimum), which will create an output file sampled at the orchestra control rate.
Performance
ksig1, ksig2, ksig3, ksig4 -- control-rate signals This opcode allows four generated control signal values to be saved in a named external file. The file contains no self-defining header information. But it contains a regularly sampled time series, suitable for later input or analysis. There may be any number of dumpk4 opcodes in an instrument or orchestra but each must write to a different file.
Examples
See the example for dumpk. The only difference between dumpk and dumpk4 is that dumpk4 can write 610
See Also
dumpk, dumpk2, dumpk3, readk, readk2, readk3, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
611
duserrnd
duserrnd Discrete USER-defined-distribution RaNDom generator.
Description
Discrete USER-defined-distribution RaNDom generator.
Syntax
aout duserrnd ktableNum iout duserrnd itableNum kout duserrnd ktableNum
Initialization
itableNum -- number of table containing the random-distribution function. Such table is generated by the user. See GEN40, GEN41, and GEN42. The table length does not need to be a power of 2
Performance
ktableNum -- number of table containing the random-distribution function. Such table is generated by the user. See GEN40, GEN41, and GEN42. The table length does not need to be a power of 2 duserrnd (discrete user-defined-distribution random generator) generates random values according to a discrete random distribution created by the user. The user can create the discrete distribution histogram by using GEN41. In order to create that table, the user has to define an arbitrary amount of number pairs, the first number of each pair representing a value and the second representing its probability (see GEN41 for more details). When used as a function, the rate of generation depends by the rate type of input variable XtableNum. In this case it can be embedded into any formula. Table number can be varied at k-rate, allowing to change the distribution histogram during the performance of a single note. duserrnd is designed be used in algorithmic music generation. duserrnd can also be used to generate values following a set of ranges of probabilities by using distribution functions generated by GEN42 (See GEN42 for more details). In this case, in order to simulate continuous ranges, the length of table XtableNum should be reasonably big, as duserrnd does not interpolate between table elements. For a tutorial about random distribution histograms and functions see: D. Lorrain. "A panoply of stochastic cannons". In C. Roads, ed. 1989. Music machine. Cambridge, Massachusetts: MIT press, pp. 351 - 379.
See Also
cuserrnd, urd 612
Credits
Author: Gabriel Maldonado New in Version 4.16
613
else
else Executes a block of code when an "if...then" condition is false.
Description
Executes a block of code when an "if...then" condition is false.
Syntax
else
Performance
else is used inside of a block of code between the "if...then" and endif opcodes. It defines which statements are executed when a "if...then" condition is false. Only one else statement may occur and it must be the last conditional statement before the endif opcode.
Examples
Here is an example of the else opcode. It uses the file else.csd [examples/else.csd].
614
See Also
elseif, endif, goto, if, igoto, kgoto, tigoto, timout More information on this opcode: http://www.csounds.com/journal/2006spring/controlFlow.html , written by Steven Yi
Credits
New in version 4.21
615
elseif
elseif Defines another "if...then" condition when a "if...then" condition is false.
Description
Defines another "if...then" condition when a "if...then" condition is false.
Syntax
elseif xa R xb then
where label is in the same instrument block and is not an expression, and where R is one of the Relational operators (<, =, <=, ==, !=) (and = for convenience, see also under Conditional Values).
Performance
elseif is used inside of a block of code between the "if...then" and endif opcodes. When a "if...then" condition is false, it defines another "if...then" condition to be met. Any number of elseif statements are allowed.
Examples
Here is an example of the elseif opcode. It uses the file elseif.csd [examples/elseif.csd].
616
;Ramp Up kenv linseg 0, p3 - .01, 1, .01, 0 endif aout vco2 .8, ipch, 10 aout moogvcf aout, ipch + (kenv * 5 * ipch) , .5 aout = aout * kenv outs aout, aout endin </CsInstruments> <CsScore> i 1 0 2 8.00 0 i 1 3 2 8.00 1 i 1 6 2 8.00 2 e </CsScore> </CsoundSynthesizer>
See Also
else, endif, goto, if, igoto, kgoto, tigoto, timout More information on this opcode: http://www.csounds.com/journal/2006spring/controlFlow.html , written by Steven Yi
Credits
New in version 4.21
617
endif
endif Closes a block of code that begins with an "if...then" statement.
Description
Closes a block of code that begins with an "if...then" statement.
Syntax
endif
Performance
Any block of code that begins with an "if...then" statement must end with an endif statement.
Examples
Here is an example of the endif opcode. It uses the file endif.csd [examples/endif.csd].
618
outs a1, a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; ; i ; i ; i e p4: 0=low note, Play Instrument 1 0 1 0 Play Instrument 1 1 1 1 Play Instrument 1 2 1 2 1=middle note, 2=high note. #1 for one second, low note. #1 for one second, middle note. #1 for one second, high note.
</CsScore> </CsoundSynthesizer>
See Also
elseif, else, goto, if, igoto, kgoto, tigoto, timout More information on this opcode: http://www.csounds.com/journal/2006spring/controlFlow.html , written by Steven Yi
Credits
New in version 4.21
619
endin
endin Ends the current instrument block.
Description
Ends the current instrument block.
Syntax
endin
Initialization
Ends the current instrument block. Instruments can be defined in any order (but they will always be both initialized and performed in ascending instrument number order). Instrument blocks cannot be nested (i.e. one block cannot contain another).
Note
There may be any number of instrument blocks in an orchestra.
Examples
Here is an example of the endin opcode. It uses the file endin.csd [examples/endin.csd].
620
a1 oscils iamp, icps, iphs out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
instr
Credits
Example written by Kevin Conder.
621
endop
endop Marks the end of an user-defined opcode block.
Description
Marks the end of an user-defined opcode block.
Syntax
endop
Performance
The syntax of a user-defined opcode block is as follows:
opcode name, outtypes, intypes xinarg1 [, xinarg2] [, xinarg3] ... [xinargN] xin [setksmps iksmps] ... the rest of the instrument's code. xout xoutarg1 [, xoutarg2] [, xoutarg3] ... [xoutargN] endop
The new opcode can then be used with the usual syntax:
[xinarg1] [, xinarg2] ... [xinargN] name [xoutarg1] [, xoutarg2] ... [xoutargN] [, iksmps]
Examples
Here is an example of the endop opcode. It uses the file endop.csd [examples/endop.csd].
622
/* example opcode 2: lowpass filter with local ksmps */ opcode Lowpass, a, akk setksmps 1 ain, ka1, ka2 xin aout init 0 aout = ain*ka1 + aout*ka2 xout aout endop /* example opcode 3: recursive call */ opcode RecursiveLowpass, a, akkpp ain, ka1, ka2, idep, icnt xin if (icnt >= idep) goto skip1 ain RecursiveLowpass ain, ka1, ka2, skip1: aout Lowpass ain, ka1, ka2 xout aout endop /* example opcode 4: de-click envelope */ opcode DeClick, a, a ain aenv xin linseg 0, 0.02, 1, p3 - 0.05, 1, 0.02, 0, 0.01, 0 xout ain * aenv ; apply envelope and write output endop /* instr 1 uses the example opcodes */ instr 1 kamp kcps a1 kflt a1 a1 = .6 ; amplitude expon 50, p3, 500 ; pitch Oscillator kamp, kcps ; call oscillator linseg 0.4, 1.5, 0.4, 1, 0.8, 1.5, 0.8 ; filter envelope RecursiveLowpass a1, kflt, 1 - kflt, 10 ; 10th order lowpass DeClick a1 outs a1, a1 ; read input parameters ; check if max depth reached idep, icnt + 1 ; call filter ; write output ; ; ; ; ; need sr=kr read input parameters initialize output simple tone-like filter write output
See Also
opcode, setksmps, xin, xout More information on this opcode: tp://www.csounds.com/journal/2006summer/controlFlow_part2.html , written by Steven Yi The user-defined opcode page: http://www.csounds.com/udo/ , maintained by Steven Yi ht-
Credits
623
Author: Istvan Varga, 2002; based on code by Matt J. Ingalls New in version 4.22
624
envlpx
envlpx Applies an envelope consisting of 3 segments.
Description
envlpx -- apply an envelope consisting of 3 segments: 1. stored function rise shape 2. modified exponential pseudo steady state 3. exponential decay
Syntax
ares envlpx xamp, irise, idur, idec, ifn, iatss, iatdec [, ixmod] kres envlpx kamp, irise, idur, idec, ifn, iatss, iatdec [, ixmod]
Initialization
irise -- rise time in seconds. A zero or negative value signifies no rise modification. idur -- overall duration in seconds. A zero or negative value will cause initialization to be skipped. idec -- decay time in seconds. Zero means no decay. An idec > idur will cause a truncated decay. ifn -- function table number of stored rise shape with extended guard point. iatss -- attenuation factor, by which the last value of the envlpx rise is modified during the note's pseudo steady state. A factor greater than 1 causes an exponential growth and a factor less than 1 creates an exponential decay. A factor of 1 will maintain a true steady state at the last rise value. Note that this attenuation is not by fixed rate (as in a piano), but is sensitive to a note's duration. However, if iatss is negative (or if steady state < 4 k-periods) a fixed attenuation rate of abs(iatss) per second will be used. 0 is illegal. iatdec -- attenuation factor by which the closing steady state value is reduced exponentially over the decay period. This value must be positive and is normally of the order of .01. A large or excessively small value is apt to produce a cutoff which is audible. A zero or negative value is illegal. ixmod (optional, between +- .9 or so) -- exponential curve modifier, influencing the steepness of the exponential trajectory during the steady state. Values less than zero will cause an accelerated growth or decay towards the target (e.g. subito piano). Values greater than zero will cause a retarded growth or decay. The default value is zero (unmodified exponential).
Performance
kamp, xamp -- input amplitude signal. Rise modifications are applied for the first irise seconds, and decay from time idur - idec. If these peri625
ods are separated in time there will be a steady state during which amp will be modified by the first exponential pattern. If rise and decay periods overlap then both modifications will be in effect for that time. If the overall duration idur is exceeded in performance, the final decay will continue on in the same direction, tending asymptotically to zero.
Examples
Here is an example of the envlpx opcode. It uses the file envlpx.csd [examples/envlpx.csd].
kenv envlpx .6, irise, idur, idec, ifn, iatss, iatdec kcps = cpspch(p4) asig vco2 kenv, kcps ;apply envlpx to the filter cut-off frequency asig moogvcf asig, kcps + (kenv * 8 * kcps) , .5 ;the higher the pitch, the higher the filter cut-off f outs asig, asig endin </CsInstruments> <CsScore> ; a linear rising envelope f 1 0 129 -7 0 128 1 i 1 0 2 7.00 .1 i 1 + 2 7.02 1 i 1 + 2 7.03 2 i 1 + 2 7.05 3 e </CsScore> </CsoundSynthesizer>
See Also
envlpxr, linen, linenr
Credits
626
Thanks goes to Luis Jure for pointing out a mistake with iatss.
627
envlpxr
envlpxr The envlpx opcode with a final release segment.
Description
envlpxr is the same as envlpx except that the final segment is entered only on sensing a MIDI note release. The note is then extended by the decay time.
Syntax
ares envlpxr xamp, irise, idec, ifn, iatss, iatdec [, ixmod] [,irind] kres envlpxr kamp, irise, idec, ifn, iatss, iatdec [, ixmod] [,irind]
Initialization
irise -- rise time in seconds. A zero or negative value signifies no rise modification. idec -- decay time in seconds. Zero means no decay. ifn -- function table number of stored rise shape with extended guard point. iatss -- attenuation factor, by which the last value of the envlpxr rise is modified during the note's pseudo steady state. A factor greater than 1 causes an exponential growth and a factor less than 1 creates an exponential decay. A factor of 1 will maintain a true steady state at the last rise value. Note that this attenuation is not by fixed rate (as in a piano), but is sensitive to a note's duration. However, if iatss is negative (or if steady state < 4 k-periods) a fixed attenuation rate of abs(iatss) per second will be used. 0 is illegal. iatdec -- attenuation factor by which the closing steady state value is reduced exponentially over the decay period. This value must be positive and is normally of the order of .01. A large or excessively small value is apt to produce a cutoff which is audible. A zero or negative value is illegal. ixmod (optional, between +- .9 or so) -- exponential curve modifier, influencing the steepness of the exponential trajectory during the steady state. Values less than zero will cause an accelerated growth or decay towards the target (e.g. subito piano). Values greater than zero will cause a retarded growth or decay. The default value is zero (unmodified exponential). irind (optional) -- independence flag. If left zero, the release time (idec) will influence the extended life of the current note following a note-off. If non-zero, the idec time is quite independent of the note extension (see below). The default value is 0.
Performance
kamp, xamp -- input amplitude signal. envlpxr is an example of the special Csound r units that contain a note-off sensor and release time extender. When each senses a score event termination or a MIDI noteoff, it will immediately extend the performance time of the current instrument by idec seconds unless it is made independent by irind. Then it will begin a decay from wherever it was at the time. You can use other pre-made envelopes which start a release segment upon recieving a note off message, 628
like linsegr and expsegr, or you can construct more complex envelopes using xtratim and release. Note that you don't need to use xtratim if you are using envlpxr, since the time is extended automatically. These r units can also be modified by MIDI noteoff velocities (see veloffs). If the irind flag is on (non-zero), the overall performance time is unaffected by note-off and veloff data. Multiple r units. When two or more r units occur in the same instrument it is usual to have only one of them influence the overall note duration. This is normally the master amplitude unit. Other units controlling, say, filter motion can still be sensitive to note-off commands while not affecting the duration by making them independent (irind non-zero). Depending on their own idec (release time) values, independent r units may or may not reach their final destinations before the instrument terminates. If they do, they will simply hold their target values until termination. If two or more r units are simultaneously master, note extension is by the greatest idec.
Examples
Here is an example of the envlpxr opcode. It uses the file envlpxr.csd [examples/envlpxr.csd].
See Also
envlpx, linen, linenr
Credits
Thanks goes to Luis Jure for pointing out a mistake with iatss. 629
ephasor
ephasor
Performance
Ephasor has been added to Csound 5.10, but its behavior will change for 5.11. Stay tuned...
Credits
Author: Victor Lazzarini 2008 New in version 5.10
630
eqfil
eqfil Equalizer filter
Description
The opcode eqfil is a 2nd order tunable equalisation filter based on Regalia and Mitra design ("Tunable Digital Frequency Response Equalization Filters", IEEE Trans. on Ac., Sp. and Sig Proc., 35 (1), 1987). It provides a peak/notch filter for building parametric/graphic equalisers. The amplitude response for this filter will be flat (=1) for kgain=1. With kgain bigger than 1, there will be a peak at the centre frequency, whose width is given by the kbw parameter, but outside this band, the response will tend towards 1. Conversely, if kgain is smaller than 1, a notch will be created around the CF.
Syntax
asig eqfil ain, kcf, kbw, kgain[, istor]
Initialization
istor --initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a nonzero value will allow previous information to remain. The default value is 0.
Performance
asig -- filtered output signal. ain -- input signal. kcf -- filter centre frequency. kbw -- peak/notch bandwidth (Hz). kgain -- peak/notch gain.
Examples
Here is an example of the eqfil opcode. It uses the file eqfil.csd [examples/eqfil.csd].
631
; -o eqfil.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kcf = p4 kfe expseg 10, p3*0.9, 1800, p3*0.1, 175 kenv linen .03, 0.05, p3, 0.05 ;low amplitude is needed to avoid clipping asig buzz kenv, kfe, sr/(2*kfe), 1 afil eqfil asig, kcf, 200, 10 outs afil*20, afil*20 endin </CsInstruments> <CsScore> ; a sine wave. f 1 0 16384 10 1 i 1 0 10 200 ;filter centre freq=200 i 1 + 10 1500 ;filter centre freq=1500 e </CsScore> </CsoundSynthesizer>
Credits
Author: Victor Lazzarini April 2007 New in version 5.06
632
event
event Generates a score event from an instrument.
Description
Generates a score event from an instrument.
Syntax
event "scorechar", kinsnum, kdelay, kdur, [, kp4] [, kp5] [, ...] event "scorechar", "insname", kdelay, kdur, [, kp4] [, kp5] [, ...]
Initialization
scorechar -- A string (in double-quotes) representing the first p-field in a score statement. This is usually e, f, or i. insname -- A string (in double-quotes) representing a named instrument.
Performance
kinsnum -- The instrument to use for the event. This corresponds to the first p-field, p1, in a score statement. kdelay -- When (in seconds) the event will occur from the current performance time. This corresponds to the second p-field, p2, in a score statement. kdur -- How long (in seconds) the event will happen. This corresponds to the third p-field, p3, in a score statement. kp4, kp5, ... (optional) -- Parameters representing additional p-field in a score statement. It starts with the fourth p-field, p4.
Note
Note that the event_i opcode can't accept string p-fields. If you need to pass strings when instantiating an instrument, use the scoreline or scoreline_i opcode.
Examples
Here is an example of the event opcode. It uses the file event.csd [examples/event.csd].
633
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o event.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - an oscillator with a high note. instr 1 ; Create a trigger and set its initial value to 1. ktrigger init 1 ; If the trigger is equal to 0, continue playing. ; If not, schedule another event. if (ktrigger == 0) goto contin ; kscoreop="i", an i-statement. ; kinsnum=2, play Instrument #2. ; kwhen=1, start at 1 second. ; kdur=0.5, play for a half-second. event "i", 2, 1, 0.5 ; Make sure the event isn't triggered again. ktrigger = 0 contin: a1 oscils 10000, 440, 1 out a1 endin ; Instrument #2 - an oscillator with a low note. instr 2 a1 oscils 10000, 220, 1 out a1 endin </CsInstruments> <CsScore> ; Make sure the score plays for two seconds. f 0 2 ; Play Instrument #1 for a half-second. i 1 0 0.5 e </CsScore> </CsoundSynthesizer>
Here is an example of the event opcode using a named instrument. It uses the file event_named.csd [examples/event_named.csd].
634
<CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - an oscillator with a high note. instr 1 ; Create a trigger and set its initial value to 1. ktrigger init 1 ; If the trigger is equal to 0, continue playing. ; If not, schedule another event. if (ktrigger == 0) goto contin ; kscoreop="i", an i-statement. ; kinsnum="low_note", instrument named "low_note". ; kwhen=1, start at 1 second. ; kdur=0.5, play for a half-second. event "i", "low_note", 1, 0.5 ; Make sure the event isn't triggered again. ktrigger = 0 contin: a1 oscils 10000, 440, 1 out a1 endin ; Instrument "low_note" - an oscillator with a low note. instr low_note a1 oscils 10000, 220, 1 out a1 endin </CsInstruments> <CsScore> ; Make sure the score plays for two seconds. f 0 2 ; Play Instrument #1 for a half-second. i 1 0 0.5 e </CsScore> </CsoundSynthesizer>
See also
event_i, schedule, schedwhen, schedkwhen, schedkwhennamed, scoreline, scoreline_i
Credits
Examples written by Kevin Conder. New in version 4.17 Thanks goes to Matt Ingalls for helping to fix the example. Thanks goes to Matt Ingalls for helping clarify the kwhen/kdelay parameter.
635
event_i
event_i Generates a score event from an instrument.
Description
Generates a score event from an instrument.
Syntax
event_i "scorechar", iinsnum, idelay, idur, [, ip4] [, ip5] [, ...] event_i "scorechar", "insname", idelay, idur, [, ip4] [, ip5] [, ...]
Initialization
scorechar -- A string (in double-quotes) representing the first p-field in a score statement. This is usually e, f, or i. insname -- A string (in double-quotes) representing a named instrument. iinsnum -- The instrument to use for the event. This corresponds to the first p-field, p1, in a score statement. idelay -- When (in seconds) the event will occur from the current performance time. This corresponds to the second p-field, p2, in a score statement. idur -- How long (in seconds) the event will happen. This corresponds to the third p-field, p3, in a score statement. ip4, ip5, ... (optional) -- Parameters representing additional p-field in a score statement. It starts with the fourth p-field, p4.
Performance
The event is added to the queue at initialisation time.
Note
Note that the event_i opcode can't accept string p-fields. If you need to pass strings when instantiating an instrument, use the scoreline or scoreline_i opcode.
See also
event, schedule, schedwhen, schedkwhen, schedkwhennamed, scoreline, scoreline_i
Credits
Written by Istvan Varga.
636
New in Csound5
637
exitnow
exitnow Exit Csound as fast as possible, with no cleaning up.
Description
In Csound4 calls an exit function to leave Csound as fast as possible. On Csound5 exits back to the driving code.
Syntax
exitnow
Performance
Stops Csound on the initialisation cycle.
638
exp
exp Returns e raised to the x-th power.
Description
Returns e raised to the xth power.
Syntax
exp(x) (no rate restriction)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the exp opcode. It uses the file exp.csd [examples/exp.csd].
instr 1 ;master instrument koct linseg 6, p3, 12 ; octave register straight rising from 6 to 12 kexp linseg 0, p3/3, 5, p3/3, 5, p3/3, 0 ;exponent goes from 0 to 5 and back kdens = exp(kexp) ;density is e to the power of kexp printks "Generated events per second: %d\n", 1, kdens ktrig metro kdens ;trigger single notes in kdens frequency if ktrig == 1 then ;call instr 10 for 1/kdens duration, .5 amplitude and koct register event "i", 10, 0, 1/kdens, .5, koct endif endin instr 10 ;performs one tone ioct rnd31 1, 0 ;random deviation maximum one octave plus/minus aenv transeg p4, p3, -6, 0 ;fast decaying envelope for p4 amplitude asin poscil aenv, cpsoct(p5+ioct), gisine ;sine for p5 octave register plus random deviation outs asin, asin endin
639
M: M: M: M: M: M: M: M:
See Also
abs, frac, int, log, log10, i, sqrt New in version 4.21
640
expcurve
expcurve This opcode implements a formula for generating a normalised exponential curve in range 0 - 1. It is based on the Max / MSP work of Eric Singer (c) 1994.
Description
Generates an exponential curve in range 0 to 1 of arbitrary steepness. Steepness index equal to or lower than 1.0 will result in Not-a-Number errors and cause unstable behavior. The formula used to calculate the curve is:
(exp(x * log(y))-1) / (y-1)
Syntax
kout expcurve kindex, ksteepness
Performance
kindex -- Index value. Expected range 0 to 1. ksteepness -- Steepness of the generated curve. Values closer to 1.0 result in a straighter line while larger values steepen the curve. kout -- Scaled output.
Examples
Here is an example of the expcurve opcode. It uses the file expcurve.csd [examples/expcurve.csd].
641
printks "mod = %f
e </CsScore> </CsoundSynthesizer>
See Also
scale, gainslider, logcurve
Credits
Author: David Akbari October 2006
642
expon
expon Trace an exponential curve between specified points.
Description
Trace an exponential curve between specified points.
Syntax
ares expon ia, idur, ib kres expon ia, idur, ib
Initialization
ia -- starting value. Zero is illegal for exponentials. ib -- value after idur seconds. For exponentials, must be non-zero and must agree in sign with ia. idur -- duration in seconds of the segment. A zero or negative value will cause all initialization to be skipped.
Performance
These units generate control or audio signals whose values can pass through 2 specified points. The idur value may or may not equal the instrument's performance time: a shorter performance will truncate the specified pattern, while a longer one will cause the defined segment to continue on in the same direction.
Examples
Here is an example of the expon opcode. It uses the file expon.csd [examples/expon.csd].
643
kpitch = p6 ;choose between expon or line if (kpitch == 0) then kpitch expon p4, p3, p5 elseif (kpitch == 1) then kpitch line p4, p3, p5 endif asig vco2 .6, kpitch outs asig, asig
endin </CsInstruments> <CsScore> i 1 0 2 300 600 0 ;if p6=0 then expon is used i 1 3 2 300 600 1 ;if p6=1 then line is used i 1 6 2 600 1200 0 i 1 9 2 600 1200 1 i 1 12 2 1200 2400 0 i 1 15 2 1200 2400 1 i 1 18 2 2400 30 0 i 1 21 2 2400 30 1 e </CsScore> </CsoundSynthesizer>
See Also
expseg, expsegr, line, linseg, linsegr
644
exprand
exprand Exponential distribution random number generator (positive values only).
Description
Exponential distribution random number generator (positive values only). This is an x-class noise generator.
Syntax
ares exprand klambda ires exprand klambda kres exprand klambda
Performance
klambda -- lambda parameter for the exponential distribution. The probablity density function of an exponential distribution is an exponential curve, whose mean is 0.69515/lambda. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the exprand opcode. It uses the file exprand.csd [examples/exprand.csd].
645
instr 1
klamda exprand 20 printk .2, klamda ; look aout oscili 0.8, 440+klamda, 1 ; & listen outs aout, aout endin instr 2 ; every run time different values
seed 0 klamda exprand 20 printk .2, klamda ; look aout oscili 0.8, 440+klamda, 1 ; & listen outs aout, aout endin </CsInstruments> <CsScore> ; sine wave f 1 0 16384 10 1 i 1 0 2 i 2 3 2 e </CsScore> </CsoundSynthesizer>
Seeding from current time 3034472128 i i i i i i i i i i i 2 2 2 2 2 2 2 2 2 2 2 time time time time time time time time time time time 3.00033: 3.20033: 3.40033: 3.60000: 3.80033: 4.00000: 4.20000: 4.40033: 4.60033: 4.80033: 5.00000: 6.67934 2.72431 14.51822 12.10120 1.12266 26.90772 0.43554 28.59836 27.01831 18.19911 4.45125
See Also
seed, betarand, bexprnd, cauchy, gauss, linrand, pcauchy, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995
646
expseg
expseg Trace a series of exponential segments between specified points.
Description
Trace a series of exponential segments between specified points.
Syntax
ares expseg ia, idur1, ib [, idur2] [, ic] [...] kres expseg ia, idur1, ib [, idur2] [, ic] [...]
Initialization
ia -- starting value. Zero is illegal for exponentials. ib, ic, etc. -- value after dur1 seconds, etc. For exponentials, must be non-zero and must agree in sign with ia. idur1 -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative value will terminate the initialization process with the preceding point, permitting the last-defined line or curve to be continued indefinitely in performance. The default is zero.
Performance
These units generate control or audio signals whose values can pass through 2 or more specified points. The sum of dur values may or may not equal the instrument's performance time: a shorter performance will truncate the specified pattern, while a longer one will cause the last-defined segment to continue on in the same direction. Note that the expseg opcode does not operate correctly at audio rate when segments are shorter than a kperiod. Try the expsega opcode instead.
Examples
Here is an example of the expseg opcode. It uses the file expseg.csd [examples/expseg.csd].
647
-odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o expseg.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; p4 = frequency in pitch-class notation. kcps = cpspch(p4) ; Create an amplitude envelope. kenv expseg 0.01, p3*0.25, 1, p3*0.75, 0.01 kamp = kenv * 30000 a1 oscil kamp, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i ; i ; i e Play Instrument 1 0 0.5 8.00 Play Instrument 1 1 0.5 8.01 Play Instrument 1 2 0.5 8.02 Play Instrument 1 3 0.5 8.03 #1 for a half-second, p4=8.00 #1 for a half-second, p4=8.01 #1 for a half-second, p4=8.02 #1 for a half-second, p4=8.03
</CsScore> </CsoundSynthesizer>
See Also
expon, expsega, expsegr, line, linseg, linsegr transeg
Credits
Author: Gabriel Maldonado Example written by Kevin Conder. New in Csound 3.57
648
expsega
expsega An exponential segment generator operating at a-rate.
Description
An exponential segment generator operating at a-rate. This unit is almost identical to expseg, but more precise when defining segments with very short durations (i.e., in a percussive attack phase) at audio rate.
Syntax
ares expsega ia, idur1, ib [, idur2] [, ic] [...]
Initialization
ia -- starting value. Zero is illegal. ib, ic, etc. -- value after idur1 seconds, etc. must be non-zero and must agree in sign with ia. idur1 -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative value will terminate the initialization process with the preceding point, permitting the last defined line or curve to be continued indefinitely in performance. The default is zero.
Performance
This unit generate audio signals whose values can pass through two or more specified points. The sum of dur values may or may not equal the instrument's performance time. A shorter performance will truncate the specified pattern, while a longer one will cause the last defined segment to continue on in the same direction.
Examples
Here is an example of the expsega opcode. It uses the file expsega.csd [examples/expsega.csd].
649
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Define a short percussive amplitude envelope that ; goes from 0.01 to 20,000 and back. aenv expsega 0.01, 0.1, 20000, 0.1, 0.01 a1 oscil aenv, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i ; i ; i e Play Instrument 1 0 1 Play Instrument 1 1 1 Play Instrument 1 2 1 Play Instrument 1 3 1 #1 for one second. #1 for one second. #1 for one second. #1 for one second.
</CsScore> </CsoundSynthesizer>
See Also
expseg, expsegr
Credits
Author: Gabriel Maldonado Example written by Kevin Conder. New in Csound 3.57
650
expsegr
expsegr Trace a series of exponential segments between specified points including a release segment.
Description
Trace a series of exponential segments between specified points including a release segment.
Syntax
ares expsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz kres expsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz
Initialization
ia -- starting value. Zero is illegal for exponentials. ib, ic, etc. -- value after dur1 seconds, etc. For exponentials, must be non-zero and must agree in sign with ia. idur1 -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative value will terminate the initialization process with the preceding point, permitting the last-defined line or curve to be continued indefinitely in performance. The default is zero. irel, iz -- duration in seconds and final value of a note releasing segment.
Performance
These units generate control or audio signals whose values can pass through 2 or more specified points. The sum of dur values may or may not equal the instrument's performance time: a shorter performance will truncate the specified pattern, while a longer one will cause the last-defined segment to continue on in the same direction. expsegr is amongst the Csound r units that contain a note-off sensor and release time extender. When each senses an event termination or MIDI noteoff, it immediately extends the performance time of the current instrument by irel seconds, and sets out to reach the value iz by the end of that period (no matter which segment the unit is in). r units can also be modified by MIDI noteoff velocities. For two or more extenders in an instrument, extension is by the greatest period. You can use other pre-made envelopes which start a release segment upon recieving a note off message, like linsegr and madsr, or you can construct more complex envelopes using xtratim and release. Note that you don't need to use xtratim if you are using expsegr, since the time is extended automatically.
Examples
Here is an example of the expsegr opcode. It uses the file expsegr.csd [examples/expsegr.csd].
651
See Also
linsegr, expsegr, envlpxr, mxadsr, madsr expon, expseg, expsega, xtratim
Credits
Author: Barry L. Vercoe New in Csound 3.47
652
fareylen
fareylen returns the length of a Farey Sequence.
Description
This opcode can be used in conjunction with GENfarey. It calculates the length of Farey Sequence Fn. Its length is given by: |Fn| = 1 + SUM over n phi(m) where phi(m) is Euler's totient function, which gives the number of integers # m that are coprime to m. Some values for the length of Fn given n: n |Fn| 12 23 35 47 5 11 6 13 7 19 8 23 9 29 10 33 11 43 12 47 13 59 14 65 15 73 16 81 17 97 18 103 19 121
Syntax
653
Performance
The length of the identified Farey sequence is returned. kfn -- Integer identifying the sequence.
Credits
Author: Georg Boenn University of Glamorgan, UK New in Csound version 5.13
654
fareyleni
fareyleni returns the length of a Farey Sequence.
Description
This opcode can be used in conjunction with GENfarey. It calculates the length of Farey Sequence Fn. Its length is given by: |Fn| = 1 + SUM over n phi(m) where phi(m) is Euler's totient function, which gives the number of integers # m that are coprime to m. Some values for the length of Fn given n: n |Fn| 12 23 35 47 5 11 6 13 7 19 8 23 9 29 10 33 11 43 12 47 13 59 14 65 15 73 16 81 17 97 18 103 19 121
Syntax
655
Initialisation
The length of the identified Farey sequence is returned. ifn -- Integer identifying the sequence.
Credits
Author: Georg Boenn University of Glamorgan, UK New in Csound version 5.13
656
ficlose
ficlose Closes a previously opened file.
Description
ficlose can be used to close a file which was opened with fiopen.
Syntax
ficlose ihandle ficlose Sfilename
Initialization
ihandle -- a number which identifies this file (generated by a previous fiopen). Sfilename -- A string in double quotes or string variable with the filename. The full path must be given if the file directory is not in the system PATH and is not present in the current directory.
Performance
ficlose closes a file which was previously opened with fiopen. ficlose is only needed if you need to read a file written to during the same csound performance, since only when csound ends a performance does it close and save data in all open files. The opcode ficlose is useful for instance if you want to save presets within files which you want to be accesible without having to terminate csound.
Note
If you don't need this functionality it is safer not to call ficlose, and just let csound close the files when it exits. If a files closed with ficlose is being accessed by another opcode (like fout or foutk), it will be closed later when it is no longer being used.
Warning
This opcode should be used with care, as the file handle will become invalid, and will cause an init error when an opcode tries to access the closed file.
Examples
Here is an example of the ficlose opcode. It uses the file ficlose.csd [examples/ficlose.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o ficlose.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gihand fiopen "test1.txt", 0 instr 1 ires random 0, 100 fouti gihand, 0, 1, ires ficlose gihand
See Also
fiopen, fout, fouti, foutir, foutk
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 5.02
658
filebit
filebit Returns the number of bits in each sample in a sound file.
Description
Returns the number of bits in each sample in a sound file.
Syntax
ir filebit ifilcod [, iallowraw]
Initialization
ifilcod -- sound file to be queried iallowraw -- (Optional) Allow raw sound files (default=1)
Performance
filebit returns the number of bits in each sample in the sound file ifilcod. In the case of floating point samples the value -1 is returned for floats and -2 for doubles. For non-PCM formats the value is negative, and based on libsndfile's format encoding.
Examples
Here is an example of the filebit opcode. It uses the file filebit.csd [examples/filebit.csd], and mary.wav [examples/mary.wav].
659
The audio file mary.wav is in monoaural CD format, so filebit's output should include a line like this:
instr 1: ibits = 8.000
See Also
filelen, filenchnls, filepeak, filesr
Credits
Author: Victor Lazzarini July 1999 Example written by John ffitch. New in Csound version 5.11
660
filelen
filelen Returns the length of a sound file.
Description
Returns the length of a sound file.
Syntax
ir filelen ifilcod, [iallowraw]
Initialization
ifilcod -- sound file to be queried iallowraw -- Allow raw sound files (default=1)
Performance
filelen returns the length of the sound file ifilcod in seconds. filelen can return the length of convolve and PVOC files if the "allow raw sound file" flag is not zero (it is non-zero by default).
Examples
Here is an example of the filelen opcode. It uses the file filelen.csd [examples/filelen.csd], fox.wav [examples/fox.wav], and kickroll.wav [examples/kickroll.wav].
661
;mono signal asig diskin2 p4, 1 outs asig, asig else ;stereo signal aL, aR diskin2 p4, .5, 0, 1 outs aL, aR endif endin </CsInstruments> <CsScore> i 1 0 3 "fox.wav" ;mono signal i 1 5 2 "kickroll.wav" ;stereo signal e </CsScore> </CsoundSynthesizer>
The mono audio file fox.wav is 2.8 seconds long, and the stereo file kickroll.wav is 0.9 seconds. So filelen's output should include a line for the mono and the stereo file like this:
instr 1: instr 1: ilen = 2.757 ilen = 0.857
See Also
filebit, filenchnls, filepeak, filesr
Credits
Author: Matt Ingalls July 1999 New in Csound version 3.57
662
filenchnls
filenchnls Returns the number of channels in a sound file.
Description
Returns the number of channels in a sound file.
Syntax
ir filenchnls ifilcod [, iallowraw]
Initialization
ifilcod -- sound file to be queried iallowraw -- (Optional) Allow raw sound files (default=1)
Performance
filenchnls returns the number of channels in the sound file ifilcod. filechnls can return the number of channels of convolve and PVOC files if the iallowraw flag is not zero (it is non-zero by default).
Examples
Here is an example of the filenchnls opcode. It uses the file filenchnls.csd, [examples/filenchnls.csd]fox.wav [examples/fox.wav], and kickroll.wav [examples/kickroll.wav].
663
;mono signal asig diskin2 p4, 1 outs asig, asig else ;stereo signal aL, aR diskin2 p4, .5, 0, 1 outs aL, aR endif endin </CsInstruments> <CsScore> i 1 0 3 "fox.wav" ;mono signal i 1 5 2 "kickroll.wav" ;stereo signal e </CsScore> </CsoundSynthesizer>
The audio file fox.wav is monoaural (1 channel), while kickroll.wav is stereo (2 channels) So filenchnls's output should include lines like this:
instr 1: instr 1: ichn = 1.000 ichn = 2.000
See Also
filebit, filelen, filepeak, filesr
Credits
Author: Matt Ingalls July 1999 New in Csound version 3.57
664
filepeak
filepeak Returns the peak absolute value of a sound file.
Description
Returns the peak absolute value of a sound file.
Syntax
ir filepeak ifilcod [, ichnl]
Initialization
ifilcod -- sound file to be queried ichnl (optional, default=0) -- channel to be used in calculating the peak value. Default is 0. ichnl = 0 returns peak value of all channels ichnl > 0 returns peak value of ichnl
Performance
filepeak returns the peak absolute value of the sound file ifilcod.
Examples
Here is an example of the filepeak opcode. It uses the file filepeak.csd [examples/filepeak.csd], and mary.wav [examples/mary.wav].
665
instr 1 ; Print out the peak absolute value of the ; audio file "mary.wav". ipeak filepeak "mary.wav" print ipeak endin </CsInstruments> <CsScore> ; Play Instrument #1 for 1 second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
The peak absolute value of the audio file mary.wav is 0.306902. So filepeak's output should include a line like this:
instr 1: ipeak = 0.307
See Also
filelen, filenchnls, filesr
Credits
Author: Matt Ingalls July 1999 Example written by Kevin Conder. New in Csound version 3.57
666
filesr
filesr Returns the sample rate of a sound file.
Description
Returns the sample rate of a sound file.
Syntax
ir filesr ifilcod [, iallowraw]
Initialization
ifilcod -- sound file to be queried iallowraw -- (Optional) Allow raw sound files (default=1)
Performance
filesr returns the sample rate of the sound file ifilcod. filesr can return the sample rate of convolve and PVOC files if the iallowraw flag is not zero (it is non-zero by default).
Examples
Here is an example of the filesr opcode. It uses the file filesr.csd [examples/filesr.csd], and mary.wav [examples/mary.wav].
667
The audio file mary.wav was sampled at 44.1 KHz. So filesr's output should include a line like this:
instr 1: isr = 44100.000
See Also
filebit, filelen, filenchnls, filepeak
Credits
Author: Matt Ingalls July 1999 Example written by Kevin Conder. New in Csound version 3.57
668
filevalid
filevalid Checks that a file can be used.
Description
Returns 1 if the sound file is valid, or 0 if not.
Syntax
ir filevalid ifilcod
Initialization
ifilcod -- sound file to be queried
Performance
filevalid returns 1 if the sound file ifilcod can be used.
Examples
Here is an example of the filevalid opcode. It uses the file filevalid.csd [examples/filevalid.csd], and mary.wav [examples/mary.wav].
669
See Also
filebit, filelen, filenchnls, filepeak, filesr
Credits
Author: Matt Ingalls July 2010 Example written by John ffitch. New in Csound version 4.13
670
filter2
filter2 Performs filtering using a transposed form-II digital filter lattice with no time-varying control.
Description
General purpose custom filter with no time-varying pole control. The filter coefficients implement the following difference equation: (1)*y(n) = b0*x[n] + b1*x[n-1] +...+ bM*x[n-M] - a1*y[n-1] -...- aN*y[n-N]
the system function for which is represented by: B(Z) b0 + b1*Z-1 + ... + bM*Z-M H(Z) = ---- = -------------------------A(Z) 1 + a1*Z-1 + ... + aN*Z-N
Syntax
ares filter2 asig, iM, iN, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN kres filter2 ksig, iM, iN, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN
Initialization
At initialization the number of zeros and poles of the filter are specified along with the corresponding zero and pole coefficients. The coefficients must be obtained by an external filter-design application such as Matlab and specified directly or loaded into a table via GEN01.
Performance
The filter2 opcodes perform filtering using a transposed form-II digital filter lattice with no time-varying control. Since filter2 implements generalized recursive filters, it can be used to specify a large range of general DSP algorithms. For example, a digital waveguide can be implemented for musical instrument modeling using a pair of delayr and delayw opcodes in conjunction with the filter2 opcode.
Examples
A first-order linear-phase lowpass FIR filter operating on a k-rate signal:
671
See Also
zfilter2
Credits
Author: Michael A. Casey M.I.T. Cambridge, Mass. 1997 New in version 3.47
672
fin
fin Read signals from a file at a-rate.
Description
Read signals from a file at a-rate.
Syntax
fin ifilename, iskipframes, iformat, ain1 [, ain2] [, ain3] [,...]
Initialization
ifilename -- input file name (can be a string or a handle number generated by fiopen). iskipframes -- number of frames to skip at the start (every frame contains a sample of each channel) iformat -- a number specifying the input file format for headerless files. If a header is found, this argument is ignored. 0 - 32 bit floating points without header 1 - 16 bit integers without header
Performance
fin (file input) is the complement of fout: it reads a multichannel file to generate audio rate signals. The user must be sure that the number of channels of the input file is the same as the number of ainX arguments.
Note
Please note that since this opcode generates its output using input parameters (on the right side of the opcode), these variables must be initialized before use, otherwise a 'used before defined' error will occur. You can use the init opcode for this.
Examples
Here is an example of the fin opcode. It uses the file fin.csd [examples/fin.csd] and fox.wav [examples/ fox.wav].
673
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o fin.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 asnd init 0 ;input of fin must be initialized fin "fox.wav", 0, 0, asnd ;read audiofile aenv follow asnd, 0.01 ;envelope follower kenv downsamp aenv asig rand kenv ;gate the noise with audiofile outs asig, asig endin </CsInstruments> <CsScore> i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
fini, fink
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
674
fini
fini Read signals from a file at i-rate.
Description
Read signals from a file at i-rate.
Syntax
fini ifilename, iskipframes, iformat, in1 [, in2] [, in3] [, ...]
Initialization
ifilename -- input file name (can be a string or a handle number generated by fiopen) iskipframes -- number of frames to skip at the start (every frame contains a sample of each channel) iformat -- a number specifying the input file format. If a header is found, this argument is ignored. 0 - floating points in text format (loop; see below) 1 - floating points in text format (no loop; see below) 2 - 32 bit floating points in binary format (no loop)
Performance
fini is the complement of fouti and foutir. It reads the values each time the corresponding instrument note is activated. When iformat is set to 0 and the end of file is reached, the file pointer is zeroed. This restarts the scan from the beginning. When iformat is set to 1 or 2, no looping is enabled and at the end of file the corresponding variables will be filled with zeroes.
Note
Please note that since this opcode generates its output using input parameters (on the right side of the opcode), these variables must be initialized before use, otherwise a 'used before defined' error will occur. You can use the init opcode for this.
See Also
fin, fink
Credits
Author: Gabriel Maldonado Italy 1999 675
676
fink
fink Read signals from a file at k-rate.
Description
Read signals from a file at k-rate.
Syntax
fink ifilename, iskipframes, iformat, kin1 [, kin2] [, kin3] [,...]
Initialization
ifilename -- input file name (can be a string or a handle number generated by fiopen) iskipframes -- number of frames to skip at the start (every frame contains a sample of each channel) iformat -- a number specifying the input file format. If a header is found, this argument is ignored. 0 - 32 bit floating points without header 1 - 16 bit integers without header
Performance
fink is the same as fin but operates at k-rate.
Note
Please note that since this opcode generates its output using input parameters (on the right side of the opcode), these variables must be initialized before use, otherwise a 'used before defined' error will occur. You can use the init opcode for this.
See Also
fin, fini
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
677
fiopen
fiopen Opens a file in a specific mode.
Description
fiopen can be used to open a file in one of the specified modes.
Syntax
ihandle fiopen ifilename, imode
Initialization
ihandle -- a number which specifies this file. ifilename -- the output file's name (in double-quotes). imode -- choose the mode of opening the file. imode can be a value chosen among the following: 0 - open a text file for writing 1 - open a text file for reading 2 - open a binary file for writing 3 - open a binary file for reading
Performance
fiopen opens a file to be used by the fout family of opcodes. It is safer to use it in the header section, external to any instruments. It returns a number, ihandle, which unequivocally refers to the opened file. If fiopen is called on an already open file, it just returns the same handle again, and does not close the file. Notice that fout and foutk can use either a string containing a file pathname, or a handle-number generated by fiopen. Whereas, with fouti and foutir, the target file can be only specified by means of a handlenumber.
Examples
Here is an example of the fiopen opcode. It uses the file fiopen.csd [examples/fiopen.csd].
678
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o fiopen.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 gihand fiopen "test1.txt", 0 instr 1 ires random 0, 100 fouti gihand, 0, 1, ires ficlose gihand
See Also
ficlose fout, fouti, foutir, foutk
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
679
flanger
flanger A user controlled flanger.
Description
A user controlled flanger.
Syntax
ares flanger asig, adel, kfeedback [, imaxd]
Initialization
imaxd(optional) -- maximum delay in seconds (needed for inital memory allocation)
Performance
asig -- input signal adel -- delay in seconds kfeedback -- feedback amount (in normal tasks this should not exceed 1, even if bigger values are allowed) This unit is useful for generating choruses and flangers. The delay must be varied at a-rate connecting adel to an oscillator output. Also the feedback can vary at k-rate. This opcode is implemented to allow kr different than sr (else delay could not be lower than ksmps) enhancing realtime performance. This unit is very similar to wguide1, the only difference is flanger does not have the lowpass filter.
Examples
Here is an example of the flanger opcode. It uses the file flanger.csd [examples/flanger.csd].
680
instr 1 kfeedback = p4 asnd vco2 .2, 50 adel linseg 0, p3*.5, 0.02, p3*.5, 0 ;max delay time =20ms aflg flanger asnd, adel, kfeedback asig clip aflg, 1, 1 outs asig+asnd, asig+asnd ;mix flanger with original endin </CsInstruments> <CsScore> i 1 0 10 .2 i 1 11 10 .8 ;lot of feedback e </CsScore> </CsoundSynthesizer>
See Also
More information on flanging on Wikipedia: http://en.wikipedia.org/wiki/Flanger
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.49
681
flashtxt
flashtxt Allows text to be displayed from instruments like sliders
Description
Allows text to be displayed from instruments like sliders etc. (only on Unix and Windows at present)
Syntax
flashtxt iwhich, String
Initialization
iwhich -- the number of the window. String -- the string to be displayed.
Performance
Note that this opcode is not available on Windows due to the implimentation of pipes on that system A window is created, identified by the iwhich argument, with the text string displayed. If the text is replaced by a number then the window id deleted. Note that the text windows are globally numbered so different instruments can change the text, and the window survives the instance of the instrument.
Examples
Here is an example of the flashtxt opcode. It uses the file flashtxt.csd [examples/flashtxt.csd].
682
</CsInstruments> <CsScore> ; Table 1: an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.11
683
FLbox
FLbox A FLTK widget that displays text inside of a box.
Description
A FLTK widget that displays text inside of a box.
Syntax
ihandle FLbox "label", itype, ifont, isize, iwidth, iheight, ix, iy [, image]
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLbox and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near corresponding widget. Notice that with FLbox, it is not necessary to call the FLsetTextType opcode at all in order to use a symbol. In this case, it is sufficient to set a label starting with @ followed by the proper formatting string. The following symbols are supported:
684
FLTK label supported symbols. The @ sign may be followed by the following optional formatting characters, in this order: 1. # forces square scaling rather than distortion to the widget's shape. 2. +[1-9] or -[1-9] tweaks the scaling a little bigger or smaller. 3. [1-9] rotates by a multiple of 45 degrees. 6 does nothing, the others point in the direction of that key on a numeric keypad. itype -- an integer number denoting the appearance of the widget. The following values are legal for itype: 1 - flat box 2 - up box 3 - down box 4 - thin up box 5 - thin down box 6 - engraved box 685
7 - embossed box 8 - border box 9 - shadow box 10 - rounded box 11 - rounded box with shadow 12 - rounded flat box 13 - rounded up box 14 - rounded down box 15 - diamond up box 16 - diamond down box 17 - oval box 18 - oval shadow box 19 - oval flat box ifont -- an integer number denoting the font of FLbox. ifont argument to set the font type. The following values are legal for ifont: 1 - helvetica (same as "Arial" under Windows) 2 - helvetica bold 3 - helvetica italic 4 - helvetica bold italic 5 - courier 6 - courier bold 7 - courier italic 8 - courier bold italic 9 - times 10 - times bold 11 - times italic 12 - times bold italic 13 - symbol 14 - screen
686
15 - screen bold 16 - dingbats isize -- size of the font. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of the upper left corner of the valuator, relative to the upper left corner of corresponding window. (Expressed in pixels.) iy -- vertical position of the upper left corner of the valuator, relative to the upper left corner of corresponding window. (Expressed in pixels.) image -- a handle referring to an eventual image opened with bmopen opcode. If it is set, it allows a skin for that widget.
Performance
FLbox is useful to show some text in a window. The text is bounded by a box, whose aspect depends on itype argument. Note that FLbox is not a valuator and its value is fixed. Its value cannot be modified.
Examples
Here is an example of the FLbox opcode. It uses the file FLbox.csd [examples/FLbox.csd].
687
; Font type (10='Times Bold') ifont = 10 ; Font size isize = 20 ; Width of the flbox iwidth = 400 ; Height of the flbox iheight = 30 ; Distance of the left edge of the flbox ; from the left edge of the panel ix = 150 ; Distance of the upper edge of the flbox ; from the upper edge of the panel iy = 100 ih3 FLbox "Use Text Boxes For Labelling", itype, ifont, isize, iwidth, iheight, ix, iy ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 endin </CsInstruments> <CsScore> ; Real-time performance for 1 hour. f 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLbutBank, FLbutton, FLprintk, FLprintk2, FLvalue
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
688
FLbutBank
FLbutBank A FLTK widget opcode that creates a bank of buttons.
Description
A FLTK widget opcode that creates a bank of buttons.
Syntax
kout, ihandle FLbutBank itype, inumx, inumy, iwidth, iheight, ix, iy, \ iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN]
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLbutBank and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) itype -- an integer number denoting the appearance of the widget. The valid numbers are: 1 - normal button 2 - light button 3 - check button 4 - round button You can add 20 to the value to create a "plastic" type button. (Note that there is no Platic Round button. i.e. if you set type to 24 it will look exactly like type 23). inumx -- number of buttons in each row of the bank. inumy -- number of buttons in each column of the bank ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window, expressed in pixels iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window, expressed in pixels iopcode -- score opcode type. You have to provide the ascii code of the letter corresponding to the score opcode. At present time only i (ascii code 105) score statements are supported. A zero value refers to a default value of i. So both 0 and 105 activates the i opcode. A value of -1 disables this opcode feature.
Performance
kout -- output value kp1, kp2, ..., kpN -- arguments of the activated instruments. 689
The FLbutBank opcode creates a bank of buttons. For example, the following line:
gkButton,ihb1
FLbutBank
FLbutBank. A click to a button checks that button. It may also uncheck a previous checked button belonging to the same bank. So the behaviour is always that of radio-buttons. Notice that each button is labeled with a progressive number. The kout argument is filled with that number when corresponding button is checked. FLbutBank not only outputs a value but can also activate (or schedule) an instrument provided by the user each time a button is pressed. If the iopcode argument is set to a negative number, no instrument is activated so this feature is optional. In order to activate an instrument, iopcode must be set to 0 or to 105 (the ascii code of character i, referring to the i score opcode). P-fields of the activated instrument are kp1 (instrument number), kp2 (action time), kp3 (duration) and so on with user p-fields. The itype argument sets the type of buttons identically to the FLbutton opcode. By adding 10 to the itype argument (i.e. by setting 11 for type 1, 12 for type 2, 13 for type 3 and 14 for type 4), it is possible to skip the current FLbutBank value when getting/setting snapshots (see General FLTK Widget-related Opcodes). You can also add 10 to "plastic" button types (31 for type 1, 32 for type 2, etc.) FLbutBank is very useful to retrieve snapshots.
Examples
Here is an example of [examples/FLbutBank.csd]. the FLbutBank opcode. It uses the file FLbutBank.csd
690
<CsInstruments> sr = 44100 nchnls = 1 FLpanel "Button Bank", 520, 140, 100, 100 ;itype = 2 ;Light Buttons itype = 22 ;Plastic Light Buttons inumx = 10 inumy = 4 iwidth = 500 iheight = 120 ix = 10 iy = 10 iopcode = 0 istarttim = 0 idur = 1 gkbutton, ihbb FLbutBank itype, inumx, inumy, iwidth, iheight, ix, iy, iopcode, 1, istarttim, idur FLpanelEnd FLrun instr 1 ibutton = i(gkbutton) prints "Button %i pushed!\\n", ibutton endin </CsInstruments> <CsScore> ; Real-time performance for 1 hour. f 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLbox, FLbutton, FLprintk, FLprintk2, FLvalue
Credits
Author: Gabriel Maldonado New in version 4.22
691
FLbutton
FLbutton A FLTK widget opcode that creates a button.
Description
A FLTK widget opcode that creates a button.
Syntax
kout, ihandle FLbutton "label", ion, ioff, itype, iwidth, iheight, ix, \ iy, iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN]
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLbutton and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. Notice that with FLbutton, it is not necessary to call the FLsetTextType opcode at all in order to use a symbol. In this case, it is sufficient to set a label starting with @ followed by the proper formatting string. The following symbols are supported:
692
FLTK label supported symbols. The @ sign may be followed by the following optional formatting characters, in this order: 1. # forces square scaling rather than distortion to the widget's shape. 2. +[1-9] or -[1-9] tweaks the scaling a little bigger or smaller. 3. [1-9] rotates by a multiple of 45 degrees. 6 does nothing, the others point in the direction of that key on a numeric keypad. ion -- value output when the button is checked. ioff -- value output when the button is unchecked. itype -- an integer number denoting the appearance of the widget. Several kind of buttons are possible, according to the value of itype argument: 1 - normal button 2 - light button 3 - check button 4 - round button 693
You can add 20 to the value to create a "plastic" type button. (Note that there is no Platic Round button. i.e. if you set type to 24 it will look exactly like type 23). This is the appearance of the buttons:
FLbutton. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iopcode -- score opcode type. You have to provide the ascii code of the letter corresponding to the score opcode. At present time only i (ascii code 105) score statements are supported. A zero value refers to a default value of i. So both 0 and 105 activates the i opcode. A value of -1 disables this opcode feature.
Performance
kout -- output value kp1, kp2, ..., kpN -- arguments of the activated instruments. Buttons of type 2, 3, and 4 also output (kout argument) the value contained in the ion argument when checked, and that contained in ioff argument when unchecked. By adding 10 to itype argument (i.e. by setting 11 for type 1, 12 for type 2, 13 for type 3 and 14 for type 4) it is possible to skip the button value when getting/setting snapshots (see later section). FLbutton not only outputs a value, but can also activate (or schedule) an instrument provided by the user each time a button is pressed. You can also add 10 to "plastic" button types (31 for type 1, 32 for type 2, etc.)
694
If the iopcode argument is set to a negative number, no instrument is activated. So this feature is optional. In order to activate an instrument, iopcode must be set to 0 or to 105 (the ascii code of character i, referring to the i score opcode). P-fields of the activated instrument are kp1 (instrument number), kp2 (action time), kp3 (duration) and so on with user p-fields. Notice that in dual state buttons (light button, check button and round button), the instrument is activated only when button state changes from unchecked to checked (not when passing from checked to unchecked).
Examples
Here is an example of the FLbutton opcode. It uses the file FLbutton.csd [examples/FLbutton.csd], and beats.wav [examples/beats.wav].
; Normal speed forwards gkplay, ihb1 FLbutton "@>", ion, ioff, itype, iwidth, iheight, ix, iy, iopcode, 1, istarttim, idur, ; Stationary gkstop, ihb2 FLbutton "@square", ion,ioff, itype, iwidth, iheight, ix+55, iy, iopcode, 2, istarttim ; Double speed backwards gkrew, ihb3 FLbutton "@<<", ion, ioff, itype, iwidth, iheight, ix + 110, iy, iopcode, 1, istarttim, ; Double speed forward gkff, ihb4 FLbutton "@>>", ion, ioff, itype, iwidth, iheight, ix+165, iy, iopcode, 1, istarttim, id ; Type 1 gkt1, iht1 FLbutton "1-Normal Button", ion, ioff, 1, 200, 40, ix, iy + 65, -1 ; Type 2 gkt2, iht2 FLbutton "2-Light Button", ion, ioff, 2, 200, 40, ix, iy + 110, -1 ; Type 3 gkt3, iht3 FLbutton "3-Check Button", ion, ioff, 3, 200, 40, ix, iy + 155, -1 ; Type 4 gkt4, iht4 FLbutton "4-Round Button", ion, ioff, 4, 200, 40, ix, iy + 200, -1 ; Type 21 gkt5, iht5 FLbutton "21-Plastic Button", ion, ioff, 21, 200, 40, ix, iy + 245, -1 ; Type 22
695
gkt6, iht6 FLbutton "22-Plastic Light Button", ion, ioff, 22, 200, 40, ix, iy + 290, -1 ; Type 23 gkt7, iht7 FLbutton "23-Plastic Check Button", ion, ioff, 23, 200, 40, ix, iy + 335, -1 FLpanelEnd FLrun ; Ensure that only 1 instance of instr 1 ; plays even if the play button is clicked repeatedly insnum = 1 icount = 1 maxalloc insnum, icount instr 1 asig diskin2 "beats.wav", p4, 0, 1 outs asig, asig endin instr 2 turnoff2 1, 0, 0 ;Turn off instr 1 turnoff ;Turn off this instrument endin </CsInstruments> <CsScore> ; Real-time performance for 1 hour. f 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLbox, FLbutBank, FLprintk, FLprintk2, FLvalue
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
696
FLcloseButton
FLcloseButton A FLTK widget opcode that creates a button that will close the panel window it is a part of.
Description
A FLTK widget opcode that creates a button that will close the panel window it is a part of.
Syntax
ihandle FLcloseButton "label", iwidth, iheight, ix, iy
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLcloseButton and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. Notice that with FLcloseButton, it is not necessary to call the FLsetTextType opcode at all in order to use a symbol. In this case, it is sufficient to set a label starting with @ followed by the proper formatting string. The following symbols are supported:
697
FLTK label supported symbols. The @ sign may be followed by the following optional formatting characters, in this order: 1. # forces square scaling rather than distortion to the widget's shape. 2. +[1-9] or -[1-9] tweaks the scaling a little bigger or smaller. 3. [1-9] rotates by a multiple of 45 degrees. 6 does nothing, the others point in the direction of that key on a numeric keypad. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
See Also
FLbutton, FLbox, FLbutBank, FLprintk, FLprintk2, FLvalue
Credits
698
699
FLcolor
FLcolor A FLTK opcode that sets the primary colors.
Description
Sets the primary colors to RGB values given by the user.
Syntax
FLcolor ired, igreen, iblue [, ired2, igreen2, iblue2]
Initialization
ired -- The red color of the target widget. The range for each RGB component is 0-255 igreen -- The green color of the target widget. The range for each RGB component is 0-255 iblue -- The blue color of the target widget. The range for each RGB component is 0-255 ired2 -- The red component for the secondary color of the target widget. The range for each RGB component is 0-255 igreen2 -- The green component for the secondary color of the target widget. The range for each RGB component is 0-255 iblue2 -- The blue component for the secondary color of the target widget. The range for each RGB component is 0-255
Performance
These opcodes modify the appearance of other widgets. There are two types of such opcodes, those that don't contain the ihandle argument which affect all subsequently declared widgets, and those with ihandle which affect only a target widget previously defined. FLcolor sets the primary colors to RGB values given by the user. This opcode affects the primary color of (almost) all widgets defined next its location. User can put several instances of FLcolor in front of each widget he intend to modify. However, to modify a single widget, it would be better to use the opcode belonging to the second type (i.e. those containing ihandle argument). FLcolor is designed to modify the colors of a group of related widgets that assume the same color. The influence of FLcolor on subsequent widgets can be turned off by using -1 as the only argument of the opcode. Also, using -2 (or -3) as the only value of FLcolor makes all next widget colors randomly selected. The difference is that -2 selects a light random color, while -3 selects a dark random color. Using ired2, igreen2, iblue2 is equivalent to using a separate FLcolor2.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
700
Credits
Author: Gabriel Maldonado New in version 4.22
701
FLcolor2
FLcolor2 A FLTK opcode that sets the secondary (selection) color.
Description
FLcolor2 is the same of FLcolor except it affects the secondary (selection) color.
Syntax
FLcolor2 ired, igreen, iblue
Initialization
ired -- The red color of the target widget. The range for each RGB component is 0-255 igreen -- The green color of the target widget. The range for each RGB component is 0-255 iblue -- The blue color of the target widget. The range for each RGB component is 0-255
Performance
These opcodes modify the appearance of other widgets. There are two types of such opcodes: those that don't contain the ihandle argument which affect all subsequently declared widgets, and those with ihandle which affect only a target widget previously defined. FLcolor2 is the same of FLcolor except it affects the secondary (selection) color. Setting it to -1 turns off the influence of FLcolor2 on subsequent widgets. A value of -2 (or -3) makes all next widget secondary colors randomly selected. The difference is that -2 selects a light random color, while -3 selects a dark random color.
See Also
FLcolor, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
702
FLcount
FLcount A FLTK widget opcode that creates a counter.
Description
Allows the user to increase/decrease a value with mouse clicks on a corresponding arrow button.
Syntax
kout, ihandle FLcount "label", imin, imax, istep1, istep2, itype, \ iwidth, iheight, ix, iy, iopcode [, kp1] [, kp2] [, kp3] [...] [, kpN]
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. Used by further opcodes that changes some valuator's properties. It is automatically set by the corresponding valuator. label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. imin -- minimum value of output range imax -- maximum value of output range istep1 -- a floating-point number indicating the increment of valuator value corresponding to of each mouse click. istep1 is for fine adjustments. istep2 -- a floating-point number indicating the increment of valuator value corresponding to of each mouse click. istep2 is for coarse adjustments. itype -- an integer number denoting the appearance of the valuator. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iopcode -- score opcode type. You have to provide the ascii code of the letter corresponding to the score opcode. At present time only i (ascii code 105) score statements are supported. A zero value refers to a default value of i. So both 0 and 105 activates the i opcode. A value of -1 disables this opcode feature.
Performance
kout -- output value kp1, kp2, ..., kpN -- arguments of the activated instruments. 703
FLcount allows the user to increase/decrease a value with mouse clicks on corresponding arrow buttons:
FLcount. There are two kind of arrow buttons, for larger and smaller steps. Notice that FLcount not only outputs a value and a handle, but can also activate (schedule) an instrument provided by the user each time a button is pressed. P-fields of the activated instrument are kp1 (instrument number), kp2 (action time), kp3 (duration) and so on with user p-fields. If the iopcode argument is set to a negative number, no instrument is activated. So this feature is optional.
Examples
Here is an example of the FLcount opcode. It uses the file FLcount.csd [examples/FLcount.csd].
FLpanel "Counter", 900, 400, 50, 50 ; Minimum value output by counter imin = 6 ; Maximum value output by counter imax = 12 ; Single arrow step size (semitones) istep1 = 1/12 ; Double arrow step size (octave) istep2 = 1 ; Counter type (1=double arrow counter) itype = 1 ; Width of the counter in pixels iwidth = 200 ; Height of the counter in pixels iheight = 30 ; Distance of the left edge of the counter ; from the left edge of the panel ix = 50 ; Distance of the top edge of the counter ; from the top edge of the panel iy = 50 ; Score event type (-1=ignored) iopcode = -1
704
gkoct, ihandle FLcount "pitch in oct format", imin, imax, istep1, istep2, itype, iwidth, iheight, i ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 iamp = 15000 ifn = 1 asig oscili iamp, cpsoct(gkoct), ifn out asig endin </CsInstruments> <CsScore> ; Function table that defines a single cycle ; of a sine wave. f 1 0 1024 10 1 ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLjoy, FLknob, FLroller, FLslider, FLtext
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
705
FLexecButton
FLexecButton A FLTK widget opcode that creates a button that executes a command.
Description
A FLTK widget opcode that creates a button that executes a command. Useful for opening up HTML documentation as About text or to start a separate program from an FLTK widget interface.
Warning
Because any command can be executed, the user is advised to be very careful when using this opcode and when running orchestras by others using this opcode.
Syntax
ihandle FLexecButton "command", iwidth, iheight, ix, iy
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLexecButton. command -- a double-quoted string containing a command to execute. Notice that with FLexecButton, the default text for the button is "About" and it is necessary to call the FLsetText opcode to change the text of the button. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Examples
Here is an example of the FLexecButton opcode. It uses the file FLexecButton.csd [examples/FLexecButton.csd].
706
<CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No display -odac -iadc -d ;;;RT audio I/O </CsOptions> <CsInstruments> sr = ksmps nchnls 44100 = 10 = 1
; Example by Jonathan Murphy 2007 ;;; reset amplitude range 0dbfs = 1 ;;; set the base colour for the panel FLcolor 100, 0, 200 ;;; define the panel FLpanel "FLexecButton", 250, 100, 0, 0 ;;; sliders to control time stretch and pitch gkstr, gistretch FLslider "Time", 0.5, 1.5, 0, 6, -1, 10, 60, 150, 20 gkpch, gipitch FLslider "Pitch", 0.5, 1.5, 0, 6, -1, 10, 60, 200, 20 ;;; set FLexecButton colour FLcolor 255, 255, 0 ;;; when this button is pressed, fourier analysis is performed on the file ;;; "beats.wav", producing the analysis file "beats.pvx" gipvoc FLexecButton "csound -U pvanal beats.wav beats.pvx", 60, 20, 20, 20 ;;; set FLexecButton text FLsetText "PVOC", gipvoc ;;; when this button is pressed, instr 10000 is called, exiting ;;; Csound immediately ;;; cancel previous colour FLcolor -1 ;;; set colour for kill button FLcolor 255, 0, 0 gkkill, gikill FLbutton "X", 1, 1, 1, 20, 20, 100, 20, 0, 10000, 0, 0.1 ;;; cancel previous colour FLcolor -1 ;;; set colour for play/stop and pause buttons FLcolor 0, 200, 0 ;;; pause and play/stop buttons gkpause, gipause FLbutton "@||", 1, 0, 2, 40, 20, 20, 60, -1 gkplay, giplay FLbutton "@|>", 1, 0, 2, 40, 20, 80, 60, -1 ;;; end the panel FLpanelEnd ;;; set initial values for time stretch and pitch FLsetVal_i 1, gistretch FLsetVal_i 1, gipitch ;;; run the panel FLrun instr 1 ; trigger play/stop ;;; is the play/stop button on or off? ;;; either way we need to trigger something, ;;; so we can't just use the value of gkplay kon trigger gkplay, 0, 0 koff trigger gkplay, 1, 1 ;;; if on, start instr 2 schedkwhen kon, -1, -1, 2, 0, -1 ;;; if off, stop instr 2 schedkwhen koff, -1, -1, -2, 0, -1 endin instr 2 ;;; paused or playing? if (gkpause == 1) kgoto pause kgoto start pause: ;;; if the pause button is on, skip sound production kgoto end start: ;;; get the length of the analysis file in seconds ilen filelen "beats.pvx" ;;; determine base frequency of playback icps = 1/ilen ;;; create a table over the length of the file
707
itpt ftgen 0, 0, 513, -7, 0, 512, ilen ;;; phasor for time control kphs phasor icps * gkstr ;;; use phasor as index into table kndx = kphs * 512 ;;; read table ktpt tablei kndx, itpt ;;; use value from table as time pointer into file fsig1 pvsfread ktpt, "beats.pvx" ;;; change playback pitch fsig2 pvscale fsig1, gkpch ;;; resynthesize aout pvsynth fsig2 ;;; envelope to avoid clicks and clipping aenv linsegr 0, 0.3, 0.75, 0.1, 0 aout = aout * aenv out aout end: endin instr 10000 exitnow endin </CsInstruments> <CsScore> i1 0 10000 e </CsScore> </CsoundSynthesizer> ; kill
See Also
FLbutton, FLbox, FLbutBank, FLprintk, FLprintk2, FLvalue
Credits
Author: Steven Yi Example by: Jonathan Murphy New in version 5.05
708
FLgetsnap
FLgetsnap Retrieves a previously stored FLTK snapshot.
Description
Retrieves a previously stored snapshot (in memory), i.e. sets all valuator to the corresponding values stored in that snaphot.
Syntax
inumsnap FLgetsnap index [, igroup]
Initialization
inumsnap -- current number of snapshots. index -- a number referring unequivocally to a snapshot. Several snapshots can be stored in the same bank. igroup -- (optional) an integer number referring to a snapshot-related group of widget. It allows to get/ set, or to load/save the state of a subset of valuators. Default value is zero that refers to the first group. The group number is determined by the opcode FLsetSnapGroup.
Note
The igroup parameter has not been yet fully implemented in the current version of csound. Please do not rely on it yet.
Performance
FLgetsnap retrieves a previously stored snapshot (in memory), i.e. sets all valuator to the corresponding values stored in that snapshot. The index argument unequivocally must refer to an already existing snapshot. If the index argument refers to an empty snapshot or to a snapshot that doesn't exist, no action is done. FLsetsnap outputs the current number of snapshots (inumsnap argument). For purposes of snapshot saving, widgets can be grouped, so that snapshots affect only a defined group of widgets. The opcode FLsetSnapGroup is used to specify the group for all widgets declared after it, until the next FLsetSnapGroup statement.
See Also
FLloadsnap, FLrun, FLsavesnap, FLsetsnap, FLsetSnapGroup, FLupdate
Credits
Author: Gabriel Maldonado New in version 4.22
709
FLgroup
FLgroup A FLTK container opcode that groups child widgets.
Description
A FLTK container opcode that groups child widgets.
Syntax
FLgroup "label", iwidth, iheight, ix, iy [, iborder] [, image]
Initialization
label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iborder (optional, default=0) -- border type of the container. It is expressed by means of an integer number chosen from the following: 0 - no border 1 - down box border 2 - up box border 3 - engraved border 4 - embossed border 5 - black line border 6 - thin down border 7 - thin up border If the integer number doesn't match any of the previous values, no border is provided as the default. image (optional) -- a handle referring to an eventual image opened with the bmopen opcode. If it is set, it allows a skin for that widget.
Although the documentation mentions the bmopen opcode, it has not been implemented in Csound 4.22.
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
See Also
FLgroupEnd, FLpack, FLpackEnd, FLpanel, FLpanelEnd, FLscroll, FLscrollEnd, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
711
FLgroupEnd
FLgroupEnd Marks the end of a group of FLTK child widgets.
Description
Marks the end of a group of FLTK child widgets.
Syntax
FLgroupEnd
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
See Also
FLgroup, FLpack, FLpackEnd, FLpanel, FLpanelEnd, FLscroll, FLscrollEnd, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
712
FLgroup_end
FLgroup_end Marks the end of a group of FLTK child widgets.
Description
Marks the end of a group of FLTK child widgets. This is another name for FLgroupEnd provides for compatibility. See FLgroupEnd
Credits
Author: Gabriel Maldonado New in version 4.22
713
FLhide
FLhide Hides the target FLTK widget.
Description
Hides the target FLTK widget, making it invisible.
Syntax
FLhide ihandle
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance).
Performance
FLhide hides target widget, making it invisible.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
714
FLhvsBox
FLhvsBox Displays a box with a grid useful for visualizing two-dimensional Hyper Vectorial Synthesis.
Description
FLhvsBox displays a box with a grid useful for visualizing two-dimensional Hyper Vectorial Synthesis.
Syntax
ihandle FLhvsBox inumlinesX, inumlinesY, iwidth, iheight, ix, iy [, image]
Initialization
ihandle an integer number used a univocally-defined handle for identifying a specific HVS box (see below). inumlinesX, inumlinesY - number of vertical and horizontal lines delimiting the HVS squared areas iwidth, iheight - width and height of the HVS box ix, iy - the position of the HVS box image (optional, default 0) an integer number denoting an RGB image opened with the bmopen opcode. A zero indicates no image.
Performance
FLhvsBox is a widget able to visualize current position of the HVS cursor in an HVS box (i.e. a squared area containing a grid). The number of horizontal and vertical lines of the grid can be defined with the inumlinesX, inumlinesY arguments. This opcode has to be declared inside an FLpanel - FLpanelEnd block. See the entry for hvs2 for an example of usage of FLhvsBox. FLhvsBoxSetValue is used to set the cursor position of an FLhvsBox widget.
Note
The opcode bmscan has not been implemented, so currently the parameter image has no effect.
See Also
hvs2, FLhvsBoxSetValue
Credits
Author: Gabriel Maldonado New in version 5.06 715
FLhvsBoxSetValue
FLhvsBoxSetValue Sets the cursor position of a previously-declared FLhvsBox widget.
Description
FLhvsBoxSetValue sets the cursor position of a previously-declared FLhvsBox widget.
Syntax
FLhvsBox kx, ky, ihandle
Initialization
ihandle an integer number used a univocally-defined handle for identifying a specific HVS box (see below).
Performance
kx, ky the coordinates of the HVS cursor position to be set. FLhvsBoxSetValue sets the cursor position of a previously-declared FLhvsBox widget. The kx and ky arguments, denoting the cursor position, have to be expressed in normalized values (0 to 1 range). See the entry for hvs2 for an example of usage of FLhvsBoxSetValue.
See Also
hvs2, FLhvsBox
Credits
Author: Gabriel Maldonado New in version 5.06
716
FLjoy
FLjoy A FLTK opcode that acts like a joystick.
Description
FLjoy is a squared area that allows the user to modify two output values at the same time. It acts like a joystick.
Syntax
koutx, kouty, ihandlex, ihandley FLjoy "label", iminx, imaxx, iminy, \ imaxy, iexpx, iexpy, idispx, idispy, iwidth, iheight, ix, iy
Initialization
ihandlex -- a handle value (an integer number) that unequivocally references a corresponding widget. Used by further opcodes that changes some valuator's properties. It is automatically set by the corresponding valuator. ihandley -- a handle value (an integer number) that unequivocally references a corresponding widget. Used by further opcodes that changes some valuator's properties. It is automatically set by the corresponding valuator. label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. iminx -- minimum x value of output range imaxx -- maximum x value of output range iminy -- minimum y value of output range imaxy -- maximum y value of output range iwidth -- width of widget. idispx -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user. idispy -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user. iexpx -- an integer number denoting the behaviour of valuator: 0 = valuator output is linear -1 = valuator output is exponential All other positive numbers for iexpx indicate the number of an existing table that is used for indexing. 717
Linear interpolation is provided in table indexing. A negative table number suppresses interpolation. iexpy -- an integer number denoting the behaviour of valuator: 0 = valuator output is linear -1 = valuator output is exponential All other positive numbers for iexpy indicate the number of an existing table that is used for indexing. Linear interpolation is provided in table indexing. A negative table number suppresses interpolation.
IMPORTANT!
Notice that the tables used by valuators must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. In fact, tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Performance
koutx -- x output value kouty -- y output value
Examples
Here is an example of the FLjoy opcode. It uses the file FLjoy.csd [examples/FLjoy.csd].
718
FLpanel "X Y Panel", 900, 400, 50, 50 ; Minimum value output by x movement (frequency) iminx = 200 ; Maximum value output by x movement (frequency) imaxx = 5000 ; Minimum value output by y movement (amplitude) iminy = 0 ; Maximum value output by y movement (amplitude) imaxy = 15000 ; Logarithmic change in x direction iexpx = -1 ; Linear change in y direction iexpy = 0 ; Display handle x direction (-1=not used) idispx = -1 ; Display handle y direction (-1=not used) idispy = -1 ; Width of the x y panel in pixels iwidth = 800 ; Height of the x y panel in pixels iheight = 300 ; Distance of the left edge of the x y panel from ; the left edge of the panel ix = 50 ; Distance of the top edge of the x y ; panel from the top edge of the panel iy = 50
gkfreqx, gkampy, ihandlex, ihandley FLjoy "X - Frequency Y - Amplitude", iminx, imaxx, iminy, imaxy ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 ifn = 1 asig oscili gkampy, gkfreqx, ifn out asig endin </CsInstruments> <CsScore> ; Function table that defines a single cycle ; of a sine wave. f 1 0 1024 10 1 ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLcount, FLknob, FLroller, FLslider, FLtext
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
719
FLkeyIn
FLkeyIn Reports keys pressed (on alphanumeric keyboard) when an FLTK panel has focus.
Description
FLkeyIn informs about the status of a key pressed by the user on the alphanumeric keyboard when an FLTK panel has got the focus.
Syntax
kascii FLkeyIn [ifn]
Initialization
ifn (optional, default value is zero) set the behavior of FLkeyIn (see below).
Performance
kascii - the ascii value of last pressed key. If the key is pressed, the value is positive, when the key is released the value is negative. FLkeyIn is useful to know whether a key has been pressed on the computer keyboard. The behavior of this opcode depends on the optional ifn argument. If ifn = 0 (default), FLkeyIn outputs the ascii code of the last pressed key. If it is a special key (ctrl, shift, alt, f1-f12 etc.), a value of 256 is added to the output value in order to distinguish it from normal keys. The output will continue to output the last key value, until a new key is pressed or released. Notice that the output will be negative when a key is depressed. If ifn is set to the number of an already-allocated table having at least 512 elements, then the table element having index equal to the ascii code of the key pressed is set to 1, all other table elements are set to 0. This allows to check the state of a certain key or set of keys. Be aware that you must set the ikbdcapture parameter to something other than 0 on a designated FLpanel for FLkeyIn to capture keyboard events from that panel.
Note
FLkeyIn works internally at k-rate, so it can't be used in the header as other FLTK opcodes. It must be used inside an instrument.
Examples
Here is an example of the FLkeyIn opcode. It uses the file FLkeyIn.csd [examples/FLkeyIn.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O </CsOptions> <CsInstruments> sr=44100 ksmps=128 nchnls=2 ;Example by Andres Cabrera 2007 FLpanel "FLkeyIn", 400, 300, -1, -1, 5, 1, 1 FLpanelEnd FLrun 0dbfs = 1 instr 1 kascii FLkeyIn ktrig changed kascii if (kascii > 0) then printf "Key Down: %i\n", ktrig, kascii else printf "Key Up: %i\n", ktrig, -kascii endif endin </CsInstruments> <CsScore> i 1 0 120 e </CsScore> </CsoundSynthesizer>
Credits
Author: Gabriel Maldonado New in version 5.06
721
FLknob
FLknob A FLTK widget opcode that creates a knob.
Description
A FLTK widget opcode that creates a knob.
Syntax
kout, ihandle FLknob "label", imin, imax, iexp, itype, idisp, iwidth, \ ix, iy [, icursorsize]
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically utput by FLknob and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. imin -- minimum value of output range. imax -- maximum value of output range. iexp -- an integer number denoting the behaviour of valuator: 0 = valuator output is linear -1 = valuator output is exponential All other positive numbers for iexp indicate the number of an existing table that is used for indexing. Linear interpolation is provided in table indexing. A negative table number suppresses interpolation.
IMPORTANT!
Notice that the tables used by valuators must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. In fact, tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra. itype -- an integer number denoting the appearance of the valuator. The itype argument can be set to the following values: 1 - a 3-D knob 2 - a pie-like knob 722
A 3-D knob.
A pie knob.
A clock knob.
A flat knob. idisp -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). icursorsize (optional) -- If FLknob's itype is set to 1 (3D knob), this parameter controls the size of knob cursor.
Performance
kout -- output value FLknob puts a knob in the corresponding container.
Examples
723
Here is an example of the FLknob opcode. It uses the file FLknob.csd [examples/FLknob.csd].
724
Here is another example of the FLknob opcode, showing the different styles of knobs and the usage of FLvalue to display a knob's value. It uses the file FLknob-2.csd [examples/FLknob-2.csd].
; Set the initial value of the widget FLsetVal_i 300, ihandle1 FLsetVal_i 1000, ihandle2 instr 1 ; Nothing here for now endin </CsInstruments> <CsScore> f 0 3600 e ;Dumy table to make csound wait for realtime events
725
</CsScore> </CsoundSynthesizer>
See Also
FLcount, FLjoy, FLroller, FLslider, FLtext
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
726
FLlabel
FLlabel A FLTK opcode that modifies the appearance of a text label.
Description
Modifies a set of parameters related to the text label appearence of a widget (i.e. size, font, alignment and color of corresponding text).
Syntax
FLlabel isize, ifont, ialign, ired, igreen, iblue
Initialization
isize -- size of the font of the target widget. Normal values are in the order of 15. Greater numbers enlarge font size, while smaller numbers reduce it. ifont -- sets the the font type of the label of a widget. Legal values for ifont argument are: 1 - Helvetica (same as Arial under Windows) 2 - Helvetica Bold 3 - Helvetica Italic 4 - Helvetica Bold Italic 5 - Courier 6 - Courier Bold 7 - Courier Italic 8 - Courier Bold Italic 9 - Times 10 - Times Bold 11 - Times Italic 12 - Times Bold Italic 13 - Symbol 14 - Screen 15 - Screen Bold 16 - Dingbats 727
ialign -- sets the alignment of the label text of the widget. Legal values for ialign argument are: 1 - align center 2 - align top 3 - align bottom 4 - align left 5 - align right 6 - align top-left 7 - align top-right 8 - align bottom-left 9 - align bottom-right ired -- The red color of the target widget. The range for each RGB component is 0-255 igreen -- The green color of the target widget. The range for each RGB component is 0-255 iblue -- The blue color of the target widget. The range for each RGB component is 0-255
Performance
FLlabel modifies a set of parameters related to the text label appearance of a widget, i.e. size, font, alignment and color of corresponding text. This opcode affects (almost) all widgets defined next its location. A user can put several instances of FLlabel in front of each widget he intends to modify. However, to modify a particular widget, it is better to use the opcode belonging to the second type (i.e. those containing the ihandle argument). The influence of FLlabel on the next widget can be turned off by using -1 as its only argument. FLlabel is designed to modify text attributes of a group of related widgets.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
728
FLloadsnap
FLloadsnap Loads all snapshots into the memory bank of the current orchestra.
Description
FLloadsnap loads all the snapshots contained in a file into the memory bank of the current orchestra.
Syntax
FLloadsnap "filename" [, igroup]
Initialization
"filename" -- a double-quoted string corresponding to a file to load a bank of snapshots. igroup -- (optional) an integer number referring to a snapshot-related group of widget. It allows to get/ set, or to load/save the state of a subset of valuators. Default value is zero that refers to the first group. The group number is determined by the opcode FLsetSnapGroup.
Note
The igroup parameter has not been yet fully implemented in the current version of csound. Please do not rely on it yet.
Performance
FLloadsnap loads all snapshots contained in filename into the memory bank of current orchestra. For purposes of snapshot saving, widgets can be grouped, so that snapshots affect only a defined group of widgets. The opcode FLsetSnapGroup is used to specify the group for all widgets declared after it, until the next FLsetSnapGroup statement.
See Also
FLgetsnap, FLrun, FLsetSnapGroup, FLsavesnap, FLsetsnap, FLupdate
Credits
Author: Gabriel Maldonado New in version 4.22
729
FLmouse
FLmouse Returns the mouse position and the state of the three mouse buttons.
Description
FLmouse returns the coordinates of the mouse position within an FLTK panel and the state of the three mouse buttons.
Syntax
kx, ky, kb1, kb2, kb3 FLmouse [imode]
Initialization
imode (optional, default = 0) Determines the mode for mouse location reporting. 0 - Absolute position normalized to range 0-1 1 - Absolute raw pixel position 2 - Raw pixel position, relative to FLTK panel
Performance
kx, ky the mouse coordinates, whose range depends on the imode argument (see above). kb1, kb2, kb3 the states of the mouse buttons, 1 when corresponding button is pressed, 0 when the button is not pressed. FLmouse returns the coordinates of the mouse position and the state of the three mouse buttons. The coordinates can be retrieved in three modes depending on the imode argument value (see above). Modes 0 and 1 report mouse position in relation to the complete screen (Absolute mode), while mode 2, reports the pixel position within an FLTK panel. Notice that FLmouse is only active when the mouse cursor passes on an FLpanel area.
Examples
Here is an example of the FLmouse opcode. It uses the file FLmouse.csd [examples/FLmouse.csd].
730
-d
;Example by Andres Cabrera 2007 giwidth = 400 giheight = 300 FLpanel "FLmouse", giwidth, giheight, 10, 10 FLpanelEnd FLrun 0dbfs = 1 instr 1 kx, ky, kb1, kb2, ktrig changed kx, printf "kx = %f kfreq = ((giwidth kb3 FLmouse 2 ky ;Print only if coordinates have changed ky = %f \n", ktrig, kx, ky ky)*1000/giwidth) + 300
; y coordinate determines frequency, x coordinate determines amplitude ; Left mouse button (kb1) doubles the frequency ; Right mouse button (kb3) activates sound on channel 2 aout oscil kx /giwidth , kfreq * (kb1 + 1), 1 outs aout, aout * kb3 endin </CsInstruments> <CsScore> f 1 0 1024 10 1 i 1 0 120 e </CsScore> </CsoundSynthesizer>
Credits
Author: Gabriel Maldonado New in version 5.06
731
flooper
flooper Function-table-based crossfading looper.
Description
This opcode reads audio from a function table and plays it back in a loop with user-defined start time, duration and crossfade time. It also allows the pitch of the loop to be controlled, including reversed playback. It accepts non-power-of-two tables, such as deferred-allocation GEN01 tables.
Syntax
asig flooper kamp, kpitch, istart, idur, ifad, ifn
Initialization
istart -- loop start pos in seconds idur -- loop duration in seconds ifad -- crossfade duration in seconds ifn -- function table number, generally created using GEN01
Performance
asig -- output sig kon -- amplitude control kpitch -- pitch control (transposition ratio); negative values play the loop back in reverse
Examples
Example 219.
aout flooper 16000, 1, 1, 4, 0.05, 1 out aout ; loop starts at 1 sec, for 4 secs, 0.05 crossfade
The example above shows the basic operation of flooper. Pitch can be controlled at the k-rate, as well as amplitude. The example assumes table 1 to contain at least 5.05 seconds of audio (4 secs loop duration, starting 1 sec into the table, using 0.05 secs after the loop end for the crossfade). Here is another example of the flooper opcode. It uses the file flooper.csd [examples/flooper.csd] and fox.wav [examples/fox.wav].
Example 220.
732
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o flooper.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 10 nchnls = 1 instr 1 kpitch line 1, p3, 4 aout flooper 26000, kpitch, 1, .53, 0.05, 1 out aout endin </CsInstruments> <CsScore> ; Table #1: an audio file. ; Its table size is deferred, ; and format taken from the soundfile header. f 1 0 0 1 "beats.wav" 0 0 0 i 1 0 4 e </CsScore> </CsoundSynthesizer>
Credits
Author: Victor Lazzarini April 2005 New plugin in version 5 April 2005.
733
flooper2
flooper2 Function-table-based crossfading looper.
Description
This opcode implements a crossfading looper with variable loop parameters and three looping modes, optionally using a table for its crossfade shape. It accepts non-power-of-two tables for its source sounds, such as deferred-allocation GEN01 tables.
Syntax
asig flooper2 kamp, kpitch, kloopstart, kloopend, kcrossfade, ifn \ [, istart, imode, ifenv, iskip]
Initialization
ifn -- sound source function table number, generally created using GEN01 istart -- playback start pos in seconds imode -- loop modes: 0 forward, 1 backward, 2 back-and-forth [def: 0] ifenv -- if non-zero, crossfade envelope shape table number. The default, 0, sets the crossfade to linear. iskip -- if 1, the opcode initialisation is skipped, for tied notes, performance continues from the position in the loop where the previous note stopped. The default, 0, does not skip initialisation
Performance
asig -- output sig kamp -- amplitude control kpitch -- pitch control (transposition ratio); negative values are not allowed. kloopstart -- loop start point (secs). Note that although k-rate, loop parameters such as this are only updated once per loop cycle. kloopend -- loop end point (secs), updated once per loop cycle. kcrossfade -- crossfade length (secs), updated once per loop cycle and limited to loop length. Mode 1 for imode will only loop backwards from the end point to the start point.
Examples
Example 221.
aout flooper2 16000, 1, 1, 5, 0.05, 1 ; loop starts at 1 sec, for 4 secs, 0.05 crossfade
734
out
aout
The example above shows the basic operation of flooper2. Pitch can be controlled at the k-rate, as well as amplitude and loop parameters. The example assumes table 1 to contain at least 5.05 seconds of audio (4 secs loop duration, starting 1 sec into the table, using 0.05 secs after the loop end for the crossfade). Looping is in mode 0 (normal forward loop). Here is another example of the flooper2 opcode. It uses the file flooper2.csd [examples/flooper2.csd] and fox.wav [examples/fox.wav].
Example 222.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o flooper2.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 10 nchnls = 1 instr 1 ; looping back and forth, 0.05 crossfade aout flooper2 16000, 1, 0, 1.6, 0.05, 1, 0, 2 out aout endin </CsInstruments> <CsScore> ; Table #1: an audio file. ; Its table size is deferred, ; and format taken from the soundfile header. f 1 0 0 1 "beats.wav" 0 0 0 i 1 0 6.5 e </CsScore> </CsoundSynthesizer>
Credits
Author: Victor Lazzarini July 2006 New plugin in version 5 July 2006.
735
floor
floor Returns the largest integer not greater than x
Description
Returns the largest integer not greater than x
Syntax
floor(x) (init-, control-, or audio-rate arg allowed)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the floor opcode. It uses the file floor.csd [examples/floor.csd].
736
See Also
abs, exp, int, log, log10, i, sqrt
Credits
Author: Istvan Varga New in Csound 5 2005
737
FLpack
FLpack Provides the functionality of compressing and aligning FLTK widgets.
Description
FLpack provides the functionality of compressing and aligning widgets.
Syntax
FLpack iwidth, iheight, ix, iy, itype, ispace, iborder
Initialization
iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). itype -- an integer number that modifies the appearance of the target widget. The itype argument expresses the type of packing: 0 - vertical 1 - horizontal ispace -- sets the space between the widgets. iborder -- border type of the container. It is expressed by means of an integer number chosen from the following: 0 - no border 1 - down box border 2 - up box border 3 - engraved border 4 - embossed border 5 - black line border 6 - thin down border 7 - thin up border 738
Performance
FLpack provides the functionality of compressing and aligning widgets. Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
Examples
The following example:
FLpanel "Panel1",450,300,100,100 FLpack 400,300, 10,40,0,15,3 ihs1 FLslider "FLslider ihs2 FLslider "FLslider ihs3 FLslider "FLslider ihs4 FLslider "FLslider ihs5 FLslider "FLslider ihs6 FLslider "FLslider ihs7 FLslider "FLslider FLpackEnd FLpanelEnd
500, 1000, 300, 5000, 350, 1000, 250, 5000, 220, 8000, 1, 5000, 1 870, 5000,
2 ,1, -1, 300,15, 20,50 2 ,3, -1, 300,15, 20,100 2 ,5, -1, 300,15, 20,150 1 ,11, -1, 300,30, 20,200 2 ,1, -1, 300,15, 20,250 ,13, -1, 300,15, 20,300 1 ,15, -1, 300,30, 20,350
FLpack.
739
See Also
FLgroup, FLgroupEnd, FLpackEnd, FLpanel, FLpanelEnd, FLscroll, FLscrollEnd, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
740
FLpackEnd
FLpackEnd Marks the end of a group of compressed or aligned FLTK widgets.
Description
Marks the end of a group of compressed or aligned FLTK widgets.
Syntax
FLpackEnd
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
See Also
FLgroup, FLgroupEnd, FLpack, FLpanel, FLpanelEnd, FLscroll, FLscrollEnd, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
741
FLpack_end
FLpack_End Marks the end of a group of compressed or aligned FLTK widgets.
Description
Marks the end of a group of compressed or aligned FLTK widgets. This is another name for FLpackEnd provided for compatibility. See FLpackEnd
Credits
Author: Gabriel Maldonado New in version 4.22
742
FLpanel
FLpanel Creates a window that contains FLTK widgets.
Description
Creates a window that contains FLTK widgets.
Syntax
FLpanel "label", iwidth, iheight [, ix] [, iy] [, iborder] [, ikbdcapture] [, iclose]
Initialization
label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. iwidth -- width of widget. iheight -- height of widget. ix (optional) -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy (optional) -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iborder (optional) -- border type of the container. It is expressed by means of an integer number chosen from the following: 0 - no border 1 - down box border 2 - up box border 3 - engraved border 4 - embossed border 5 - black line border 6 - thin down border 7 - thin up border ikbdcapture (default = 0) -- If this flag is set to 1, keyboard events are captured by the window (for use with sensekey and FLkeyIn) iclose (default = 0) -- If this flag is set to anything other than 0, the close button of the window is disabled, and the window cannot be closed by the user directly. It will close when csound exits.
743
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers. FLpanel creates a window. It must be followed by the opcode FLpanelEnd when all widgets internal to it are declared. For example:
"PanelPluto",450,550,100,100 ;***** start of container "FLslider 1", 500, 1000, 2 ,1, -1, 300,15, 20,50 "FLslider 2", 300, 5000, 2 ,3, -1, 300,15, 20,100 "FLslider 3", 350, 1000, 2 ,5, -1, 300,15, 20,150 "FLslider 4", 250, 5000, 1 ,11,-1, 300,30, 20,200 ;***** end of container
FLpanel. If the ikbdcapture flag is set, the window captures keyboard events, and sends them to all sensekey. This flag modifies the behavior of sensekey, and makes it receive events from the FLTK window instead of stdin.
Examples
Here is an example of the FLpanel opcode. It uses the file FLpanel.csd [examples/FLpanel.csd].
744
See Also
FLgroup, FLgroupEnd, FLpack, FLpackEnd, FLpanelEnd, FLscroll, FLscrollEnd, FLtabs, FLtabsEnd, sensekey
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
745
FLpanelEnd
FLpanelEnd Marks the end of a group of FLTK widgets contained inside of a window (panel).
Description
Marks the end of a group of FLTK widgets contained inside of a window (panel).
Syntax
FLpanelEnd
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
See Also
FLgroup, FLgroupEnd, FLpack, FLpackEnd, FLpanel, FLscroll, FLscrollEnd, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
746
FLpanel_end
FLpanel_end Marks the end of a group of FLTK widgets contained inside of a window (panel).
Description
Marks the end of a group of FLTK widgets contained inside of a window (panel). This is another name for FLpanelEnd provided for compatibility. See FLpanelEnd
Credits
Author: Gabriel Maldonado New in version 4.22
747
FLprintk
FLprintk A FLTK opcode that prints a k-rate value at specified intervals.
Description
FLprintk is similar to printk but shows values of a k-rate signal in a text field instead of on the console.
Syntax
FLprintk itime, kval, idisp
Initialization
itime -- how much time in seconds is to elapse between updated displays. idisp -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user.
Performance
kval -- k-rate signal to be displayed. FLprintk is similar to printk, but shows values of a k-rate signal in a text field instead of showing it in the console. The idisp argument must be filled with the ihandle return value of a previous FLvalue opcode. While FLvalue should be placed in the header section of an orchestra inside an FLpanel/FLpanelEnd block, FLprintk must be placed inside an instrument to operate correctly. For this reason, it slows down performance and should be used for debugging purposes only.
See Also
FLbox, FLbutBank, FLbutton, FLprintk2, FLvalue
Credits
Author: Gabriel Maldonado New in version 4.22
748
FLprintk2
FLprintk2 A FLTK opcode that prints a new value every time a control-rate variable changes.
Description
FLprintk2 is similar to FLprintk but shows a k-rate variable's value only when it changes.
Syntax
FLprintk2 kval, idisp
Initialization
idisp -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user.
Performance
kval -- k-rate signal to be displayed. FLprintk2 is similar to FLprintk, but shows the k-rate variable's value only each time it changes. Useful for monitoring MIDI control changes when using sliders. It should be used for debugging purposes only, since it slows-down performance.
See Also
FLbox, FLbutBank, FLbutton, FLprintk, FLvalue
Credits
Author: Gabriel Maldonado New in version 4.22
749
FLroller
FLroller A FLTK widget that creates a transversal knob.
Description
FLroller is a sort of knob, but put transversally.
Syntax
kout, ihandle FLroller "label", imin, imax, istep, iexp, itype, idisp, \ iwidth, iheight, ix, iy
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLroller and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. imin -- minimum value of output range. imax -- maximum value of output range. istep -- a floating-point number indicating the increment of valuator value corresponding to of each mouse click. The istep argument allows the user to arbitrarily slow roller's motion, enabling arbitrary precision. iexp -- an integer number denoting the behaviour of valuator: 0 = valuator output is linear -1 = valuator output is exponential All other positive numbers for iexp indicate the number of an existing table that is used for indexing. Linear interpolation is provided in table indexing. A negative table number suppresses interpolation.
IMPORTANT!
Notice that the tables used by valuators must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. In fact, tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra. itype -- an integer number denoting the appearance of the valuator. The itype argument can be set to the following values:
750
1 - horizontal roller 2 - vertical roller idisp -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Performance
kout -- output value FLroller is a sort of knob, but put transversally:
FLroller.
Examples
Here is an example of the FLroller opcode. It uses the file FLroller.csd [examples/FLroller.csd].
751
istep = 1 ; Logarithmic type roller selected iexp = -1 ; Roller graphic type (1=horizontal) itype = 1 ; Display handle (-1=not used) idisp = -1 ; Width of the roller in pixels iwidth = 300 ; Height of the roller in pixels iheight = 50 ; Distance of the left edge of the knob ; from the left edge of the panel ix = 300 ; Distance of the top edge of the knob ; from the top edge of the panel iy = 50
gkfreq, ihandle FLroller "Frequency", imin, imax, istep, iexp, itype, idisp, iwidth, iheight, ix, i ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 iamp = 15000 ifn = 1 asig oscili iamp, gkfreq, ifn out asig endin </CsInstruments> <CsScore> ; Function table that defines a single cycle ; of a sine wave. f 1 0 1024 10 1 ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLcount, FLjoy, FLknob, FLslider, FLtext
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
752
FLrun
FLrun Starts the FLTK widget thread.
Description
Starts the FLTK widget thread.
Syntax
FLrun
Performance
This opcode must be located at the end of all widget declarations. It has no arguments, and its purpose is to start the thread related to widgets. Widgets would not operate if FLrun is missing.
See Also
FLgetsnap, FLloadsnap, FLsavesnap, FLsetsnap, FLupdate
Credits
Author: Gabriel Maldonado New in version 4.22
753
FLsavesnap
FLsavesnap Saves all snapshots currently created into a file.
Description
FLsavesnap saves all snapshots currently created (i.e. the entire memory bank) into a file.
Syntax
FLsavesnap "filename" [, igroup]
Initialization
filename -- a double-quoted string corresponding to a file to store a bank of snapshots. igroup -- (optional) an integer number referring to a snapshot-related group of widget. It allows to get/ set, or to load/save the state of a subset of valuators. Default value is zero that refers to the first group. The group number is determined by the opcode FLsetSnapGroup.
Note
The igroup parameter has not been yet fully implemented in the current version of csound. Please do not rely on it yet.
Performance
FLsavesnap saves all snapshots currently created (i.e. the entire memory bank) into a file whose name is filename. Since the file is a text file, snapshot values can also be edited manually by means of a text editor. The format of the data stored in the file is the following (at present time, this could be changed in next Csound version):
----------- 0 ----------FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLslider 331.946 80 5000 -1 "frequency of the first oscillator" FLslider 385.923 80 5000 -1 "frequency of the second oscillator" FLslider 80 80 5000 -1 "frequency of the third oscillator" FLcount 0 0 10 0 "this index must point to the location number where snapshot is stored" FLbutton 0 0 1 0 "Store snapshot to current index" FLbutton 0 0 1 0 "Save snapshot bank to disk" FLbutton 0 0 1 0 "Load snapshot bank from disk" FLbox 0 0 1 0 "" ----------- 1 ----------FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLvalue 0 0 1 0 "" FLslider 819.72 80 5000 -1 "frequency of the first oscillator" FLslider 385.923 80 5000 -1 "frequency of the second oscillator" FLslider 80 80 5000 -1 "frequency of the third oscillator" FLcount 1 0 10 0 "this index must point to the location number where snapshot is stored" FLbutton 0 0 1 0 "Store snapshot to current index" FLbutton 0 0 1 0 "Save snapshot bank to disk" FLbutton 0 0 1 0 "Load snapshot bank from disk" FLbox 0 0 1 0 "" ----------- 2 -----------
754
As you can see, each snapshot contain several lines. Each snapshot is separated from previous and next snapshot by a line of this kind: "----------- snapshot Num -----------" Then there are several lines containing data. Each of these lines corresponds to a widget. The first field of each line is an unquoted string containing opcode name corresponding to that widget. Second field is a number that expresses current value of a snapshot. In current version, this is the only field that can be modified manually. The third and fourth fields shows minimum and maximum values allowed for that valuator. The fifth field is a special number that indicates if the valuator is linear (value 0), exponential (value -1), or is indexed by a table interpolating values (negative table numbers) or noninterpolating (positive table numbers). The last field is a quoted string with the label of the widget. Last line of the file is always "---------------------------" . Note that FLvalue andFLbox are not valuators and their values are fixed, so they cannot be modified. For purposes of snapshot saving, widgets can be grouped, so that snapshots affect only a defined group of widgets. The opcode FLsetSnapGroup is used to specify the group for all widgets declared after it, until the next FLsetSnapGroup statement.
Examples
Here is a simple example of the FLTK snapshot saving. It uses the file FLsavesnap_simple.csd [examples/FLsavesnap_simple.csd].
755
; giSWMtab4 ftgen 0, 0, 513, 21, 10, 1, .3 ; giSWMtab4M ftgen 0, 0, 64, 7, 1, 50, 1 FLpanel "Snapshots", 530, 190, 40, 410, 3 FLcolor 100, 118 ,140 ivalSM1 FLvalue "", 70, 20, 270, 20 gksliderA, gislidSM1 FLslider "Slider", -4, 4, 0, 3, ivalSM1, 250, 20, 20, 20 itext1 FLbox "store", 1, 1, 14, 50, 25, 355, 15 itext2 FLbox "load", 1, 1, 14, 50, 25, 415, 15 gksnap, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 364, 45, 0, 3, 0, 3, 1 gksnap, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 364, 75, 0, 3, 0, 3, 2 gksnap, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 364, 105, 0, 3, 0, 3, 3 gksnap, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 364, 135, 0, 3, 0, 3, 4 gkload, gkload, gkload, gkload, ibuttn1 ibuttn2 ibuttn3 ibuttn4 FLbutton FLbutton FLbutton FLbutton "1", "2", "3", "4", 1, 1, 1, 1, 0, 0, 0, 0, 11, 11, 11, 11, 25, 25, 25, 25, 25, 25, 25, 25, 424, 424, 424, 424, 45, 0, 4, 0, 3, 1 75, 0, 4, 0, 3, 2 105, 0, 4, 0, 3, 3 135, 0, 4, 0, 3, 4
ivalSM2 gkknobA, gislidSM2 FLpanelEnd FLsetVal_i 1, gislidSM1 FLsetVal_i 1, gislidSM2 FLrun instr 1 endin
FLvalue "", 70, 20, 270, 80 FLknob "Knob", -4, 4, 0, 3, ivalSM2, 60, 120, 60
instr 3 ; Save snapshot index init 0 ipstno = p4 Sfile sprintf "snapshot_simple.%d.snap", ipstno inumsnap, inumval FLsavesnap Sfile endin instr 4 ;Load snapshot index init 0 ipstno = p4 Sfile sprintf "snapshot_simple.%d.snap", ipstno FLloadsnap Sfile inumload FLgetsnap index ;, igroup endin </CsInstruments> <CsScore> f 0 3600 e </CsScore> </CsoundSynthesizer> FLsetsnap index ;, -1, igroup
Here is another example of FLTK snapshot saving using snapshot groups. It uses the file FLsavesnap.csd [examples/FLsavesnap.csd].
756
; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O </CsOptions> <CsInstruments> sr=48000 ksmps=128 nchnls=2 ; Example by Hector Centeno and Andres Cabrera 2007 ; giSWMtab4 ftgen 0, 0, 513, 21, 10, 1, .3 ; giSWMtab4M ftgen 0, 0, 64, 7, 1, 50, 1 FLpanel "Snapshots", 530, 350, 40, 410, 3 FLcolor 100, 118 ,140 FLsetSnapGroup 0 ivalSM1 FLvalue "", 70, 20, 270, 20 ivalSM2 FLvalue "", 70, 20, 270, 60 ivalSM3 FLvalue "", 70, 20, 270, 100 ivalSM4 FLvalue "", 70, 20, 270, 140 gksliderA, gislidSM1 FLslider "Slider A", -4, 4, 0, 3, ivalSM1, 250, 20, 20, 20 gksliderB, gislidSM2 FLslider "Slider B", 1, 10, 0, 3, ivalSM2, 250, 20, 20, 60 gksliderC, gislidSM3 FLslider "Slider C", 0, 1, 0, 3, ivalSM3, 250, 20, 20, 100 gksliderD, gislidSM4 FLslider "Slider D", 0, 1, 0, 3, ivalSM4, 250, 20, 20, 140 itext1 FLbox "store", 1, 1, 14, 50, 25, 355, 15 itext2 FLbox "load", 1, 1, 14, 50, 25, 415, 15 itext3 FLbox "G\nr\no\nu\np\n \n1", 1, 1, 14, 30, 145, 485, 15 gksnap, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 364, 45, 0, 3, 0, 3, 1 gksnap, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 364, 75, 0, 3, 0, 3, 2 gksnap, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 364, 105, 0, 3, 0, 3, 3 gksnap, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 364, 135, 0, 3, 0, 3, 4 gkload, ibuttn1 FLbutton "1", 1, 0, 11, 25, 25, 424, 45, 0, 4, 0, 3, 1 gkload, ibuttn2 FLbutton "2", 1, 0, 11, 25, 25, 424, 75, 0, 4, 0, 3, 2 gkload, ibuttn3 FLbutton "3", 1, 0, 11, 25, 25, 424, 105, 0, 4, 0, 3, 3 gkload, ibuttn4 FLbutton "4", 1, 0, 11, 25, 25, 424, 135, 0, 4, 0, 3, 4 FLcolor 100, 140 ,118 FLsetSnapGroup 1 ivalSM5 FLvalue "", 70, 20, 270, 190 ivalSM6 FLvalue "", 70, 20, 270, 230 ivalSM7 FLvalue "", 70, 20, 270, 270 ivalSM8 FLvalue "", 70, 20, 270, 310 gkknobA, gislidSM5 FLknob "Knob A", -4, 4, 0, 3, ivalSM5, 45, 10, 230 gkknobB, gislidSM6 FLknob "Knob B", 1, 10, 0, 3, ivalSM6, 45, 75, 230 gkknobC, gislidSM7 FLknob "Knob C", 0, 1, 0, 3, ivalSM7, 45, 140, 230 gkknobD, gislidSM8 FLknob "Knob D", 0, 1, 0, 3, ivalSM8, 45, 205, 230 itext4 FLbox "store", 1, 1, 14, 50, 25, 355, 185 itext5 FLbox "load", 1, 1, 14, 50, 25, 415, 185 itext6 FLbox "G\nr\no\nu\np\n \n2", 1, 1, 14, 30, 145, 485, 185 gksnap, ibuttn1 FLbutton "5", 1, 0, 11, 25, 25, 364, 215, 0, 3, 0, 3, 5 gksnap, ibuttn2 FLbutton "6", 1, 0, 11, 25, 25, 364, 245, 0, 3, 0, 3, 6 gksnap, ibuttn3 FLbutton "7", 1, 0, 11, 25, 25, 364, 275, 0, 3, 0, 3, 7 gksnap, ibuttn4 FLbutton "8", 1, 0, 11, 25, 25, 364, 305, 0, 3, 0, 3, 8 gkload, ibuttn1 FLbutton "5", 1, 0, 11, 25, 25, 424, 215, 0, 4, 0, 3, 5 gkload, ibuttn2 FLbutton "6", 1, 0, 11, 25, 25, 424, 245, 0, 4, 0, 3, 6 gkload, ibuttn3 FLbutton "7", 1, 0, 11, 25, 25, 424, 275, 0, 4, 0, 3, 7 gkload, ibuttn4 FLbutton "8", 1, 0, 11, 25, 25, 424, 305, 0, 4, 0, 3, 8 FLpanelEnd FLsetVal_i 1, gislidSM1 FLsetVal_i 1, gislidSM2 FLsetVal_i 0, gislidSM3 FLsetVal_i 0, gislidSM4 FLsetVal_i 1, gislidSM5 FLsetVal_i 1, gislidSM6 FLsetVal_i 0, gislidSM7 FLsetVal_i 0, gislidSM8 FLrun instr 1 endin instr 3 ; Save snapshot index init 0 ipstno = p4 igroup = 0 Sfile sprintf "PVCsynth.%d.snap", ipstno if ipstno > 4 then igroup = 1
757
endif inumsnap, inumval FLsavesnap Sfile endin instr 4 ;Load snapshot index init 0 ipstno = p4 igroup = 0 Sfile sprintf "PVCsynth.%d.snap", ipstno if ipstno > 4 then igroup = 1 endif FLloadsnap Sfile inumload FLgetsnap index , igroup endin </CsInstruments> <CsScore> ;Dummy table for FLgetsnap ; f 1 0 1024 10 1 f 0 3600 e </CsScore> </CsoundSynthesizer> FLsetsnap index , -1, igroup
See Also
FLgetsnap, FLloadsnap, FLsetSnapGroup, FLrun, FLsetsnap, FLupdate
Credits
Author: Gabriel Maldonado New in version 4.22
758
FLscroll
FLscroll A FLTK opcode that adds scroll bars to an area.
Description
FLscroll adds scroll bars to an area.
Syntax
FLscroll iwidth, iheight [, ix] [, iy]
Initialization
iwidth -- width of widget. iheight -- height of widget. ix (optional) -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy (optional) -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers. FLscroll adds scroll bars to an area. Normally you must set arguments iwidth and iheight equal to that of the parent window or other parent container. ix and iy are optional since they normally are set to zero. For example the following code:
FLpanel "PanelPluto",400,300,100,100 FLscroll 400,300 FLslider "FLslider 1", 500, 1000, 2 ,1, -1, FLslider "FLslider 2", 300, 5000, 2 ,3, -1, FLslider "FLslider 3", 350, 1000, 2 ,5, -1, FLslider "FLslider 4", 250, 5000, 1 ,11,-1, FLscrollEnd FLpanelEnd
will show scroll bars, when the main window size is reduced:
759
FLscroll.
Examples
Here is an example of the FLscroll opcode. It uses the file FLscroll.csd [examples/FLscroll.csd].
FLpanel "Text Box", 420, 200, 50, 50 iwidth = 420 iheight = 200 ix = 0 iy = 0 FLscroll iwidth, iheight, ix, iy ih3 FLbox "DRAG THE SCROLL BAR TO THE RIGHT IN ORDER TO READ THE REST OF THIS TEXT!", 1, 10, 20, 87 FLscrollEnd ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 endin
760
See Also
FLgroup, FLgroupEnd, FLpack, FLpackEnd, FLpanel, FLpanelEnd, FLscrollEnd, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
761
FLscrollEnd
FLscrollEnd A FLTK opcode that marks the end of an area with scrollbars.
Description
A FLTK opcode that marks the end of an area with scrollbars.
Syntax
FLscrollEnd
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
See Also
FLgroup, FLgroupEnd, FLpack, FLpackEnd, FLpanel, FLpanelEnd, FLscroll, FLtabs, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
762
FLscroll_end
FLscroll_end A FLTK opcode that marks the end of an area with scrollbars.
Description
A FLTK opcode that marks the end of an area with scrollbars. This is another name for FLscrollEnd provided for compatibility. See FLscrollEnd
Credits
Author: Gabriel Maldonado New in version 4.22
763
FLsetAlign
FLsetAlign Sets the text alignment of a label of a FLTK widget.
Description
FLsetAlign sets the text alignment of the label of the target widget.
Syntax
FLsetAlign ialign, ihandle
Initialization
ialign -- sets the alignment of the label text of widgets. The legal values for the ialign argument are: 1 - align center 2 - align top 3 - align bottom 4 - align left 5 - align right 6 - align top-left 7 - align top-right 8 - align bottom-left 9 - align bottom-right ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22 764
FLsetBox
FLsetBox Sets the appearance of a box surrounding a FLTK widget.
Description
FLsetBox sets the appearance of a box surrounding the target widget.
Syntax
FLsetBox itype, ihandle
Initialization
itype -- an integer number that modify the appearance of the target widget. Legal values for the itype argument are: 1 - flat box 2 - up box 3 - down box 4 - thin up box 5 - thin down box 6 - engraved box 7 - embossed box 8 - border box 9 - shadow box 10 - rounded box 11 - rounded box with shadow 12 - rounded flat box 13 - rounded up box 14 - rounded down box 15 - diamond up box 16 - diamond down box 17 - oval box 18 - oval shadow box 765
19 - oval flat box ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
766
FLsetColor
FLsetColor Sets the primary color of a FLTK widget.
Description
FLsetColor sets the primary color of the target widget.
Syntax
FLsetColor ired, igreen, iblue, ihandle
Initialization
ired -- The red color of the target widget. The range for each RGB component is 0-255 igreen -- The green color of the target widget. The range for each RGB component is 0-255 iblue -- The blue color of the target widget. The range for each RGB component is 0-255 ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
Examples
Here is an example of the FLsetcolor opcode. It uses the file FLsetcolor.csd [examples/FLsetcolor.csd].
767
gkfreq, ihandle FLslider "A Green Slider", 200, 5000, -1, 5, -1, 750, 30, 85, 150 ired1 = 0 igreen1 = 255 iblue1 = 0 FLsetColor ired1, igreen1, iblue1, ihandle gkfreq, ihandle FLslider "A Blue Slider", 200, 5000, -1, 5, -1, 750, 30, 85, 250 ired1 = 0 igreen1 = 0 iblue1 = 255 FLsetColor ired1, igreen1, iblue1, ihandle ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 endin </CsInstruments> <CsScore> ; 'Dummy' score event for 1 hour. f 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
768
FLsetColor2
FLsetColor2 Sets the secondary (or selection) color of a FLTK widget.
Description
FLsetColor2 sets the secondary (or selection) color of the target widget.
Syntax
FLsetColor2 ired, igreen, iblue, ihandle
Initialization
ired -- The red color of the target widget. The range for each RGB component is 0-255 igreen -- The green color of the target widget. The range for each RGB component is 0-255 iblue -- The blue color of the target widget. The range for each RGB component is 0-255 ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
769
FLsetFont
FLsetFont Sets the font type of a FLTK widget.
Description
FLsetFont sets the font type of the target widget.
Syntax
FLsetFont ifont, ihandle
Initialization
ifont -- sets the the font type of the label of a widget. Legal values for ifont argument are: 1 - Helvetica (same as Arial under Windows) 2 - Helvetica Bold 3 - Helvetica Italic 4 - Helvetica Bold Italic 5 - Courier 6 - Courier Bold 7 - Courier Italic 8 - Courier Bold Italic 9 - Times 10 - Times Bold 11 - Times Italic 12 - Times Bold Italic 13 - Symbol 14 - Screen 15 - Screen Bold 16 - Dingbats ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value dir770
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
771
FLsetPosition
FLsetPosition Sets the position of a FLTK widget.
Description
FLsetPosition sets the position of the target widget according to the ix and iy arguments.
Syntax
FLsetPosition ix, iy, ihandle
Initialization
ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
772
FLsetSize
FLsetSize Resizes a FLTK widget.
Description
FLsetSize resizes the target widget (not the size of its text) according to the iwidth and iheight arguments.
Syntax
FLsetSize iwidth, iheight, ihandle
Initialization
iwidth -- width of widget. iheight -- height of widget. ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
773
FLsetsnap
FLsetsnap Stores the current status of all FLTK valuators into a snapshot location.
Description
FLsetsnap stores the current status of all valuators present in the orchestra into a snapshot location (in memory).
Syntax
inumsnap, inumval FLsetsnap index [, ifn, igroup]
Initialization
inumsnap -- current number of snapshots. inumval -- number of valuators (whose value is stored in a snapshot) present in current orchestra. index -- a number referring unequivocally to a snapshot. Several snapshots can be stored in the same bank. ifn (optional) -- optional argument referring to an already allocated table, to store values of a snapshot. igroup -- (optional) an integer number referring to a snapshot-related group of widget. It allows to get/ set, or to load/save the state of a subset of valuators. Default value is zero that refers to the first group. The group number is determined by the opcode FLsetSnapGroup.
Note
The igroup parameter has not been yet fully implemented in the current version of csound. Please do not rely on it yet.
Performance
The FLsetsnap opcode stores current status of all valuators present in the orchestra into a snapshot location (in memory). Any number of snapshots can be stored in the current bank. Banks are structures that only exist in memory, there are no other reference to them other that they can be accessed by FLsetsnap, FLsavesnap, FLloadsnap and FLgetsnap opcodes. Only a single bank can be present in memory. If the optional ifn argument refers to an already allocated and valid table, the snapshot will be stored in the table instead of in the bank. So that table can be accessed from other Csound opcodes. The index argument unequivocally refers to a determinate snapshot. If the value of index refers to a previously stored snapshot, all its old values will be replaced with current ones. If index refers to a snapshot that doesn't exist, a new snapshot will be created. If the index value is not adjacent with that of a previously created snapshot, some empty snapshots will be created. For example, if a location with index 0 contains the only and unique snapshot present in a bank and the user stores a new snapshot using index 5, all locations between 1 and 4 will automatically contain empty snapshots. Empty snapshots don't contain any data and are neutral. FLsetsnap outputs the current number of snapshots (the inumsnap argument) and the total number of 774
values stored in each snapshot (inumval). inumval is equal to the number of valuators present in the orchestra. For purposes of snapshot saving, widgets can be grouped, so that snapshots affect only a defined group of widgets. The opcode FLsetSnapGroup is used to specify the group for all widgets declared after it, until the next FLsetSnapGroup statement.
See Also
FLgetsnap, FLloadsnap, FLsetSnapGroup, FLrun, FLsavesnap, FLupdate
Credits
Author: Gabriel Maldonado New in version 4.22
775
FLsetSnapGroup
FLsetSnapGroup Determines the snapshot group for FL valuators.
Description
FLsetSnapGroup determines the snapshot group of valuators declared after it.
Syntax
FLsetSnapGroup igroup
Initialization
igroup -- (optional) an integer number referring to a snapshot-related group of widget. It allows to get/ set, or to load/save the state of a subset of valuators.
Note
The igroup parameter has not been yet fully implemented in the current version of csound. Please do not rely on it yet.
Performance
For purposes of snapshot saving, widgets can be grouped, so that snapshots affect only a defined group of widgets. The opcode FLsetSnapGroup is used to specify the group for all widgets declared after it, until the next FLsetSnapGroup statement. FLsetSnapGroup determines the snapshot group of a declared valuator. To make a valuator belong to a stated group, you have to place FLsetSnapGroup just before the declaration of the widget itself. The group stated by FLsetSnapGroup lasts for all valuators declared after it, until a new FLsetSnapGroup statement with a different group is encountered. If no FLsetSnapGroup statement are present in an orchestra, the default group for all widgets will be group zero.
See Also
FLgetsnap, FLsetsnap, FLloadsnap, FLsavesnap
Credits
Author: Gabriel Maldonado New in version 4.22
776
FLsetText
FLsetText Sets the label of a FLTK widget.
Description
FLsetText sets the label of the target widget to the double-quoted text string provided with the itext argument.
Syntax
FLsetText "itext", ihandle
Initialization
itext -- a double-quoted string denoting the text of the label of the widget. ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
Examples
Here is an example of the FLsetText opcode. It uses the file FLsetText.csd [examples/FLsetText.csd].
777
; its value changes iname = i(gk1) print iname ; Must use FLsetText on the init pass! if (iname == 1) igoto text1 if (iname == 2) igoto text2 if (iname == 3) igoto text3 igoto end text1: FLsetText "FM",giha igoto end text2: FLsetText "GRANUL",giha igoto end text3: FLsetText "PLUCK",giha igoto end end: endin </CsInstruments> <CsScore> f 0 3600 </CsScore> </CsoundSynthesizer>
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
778
FLsetTextColor
FLsetTextColor Sets the color of the text label of a FLTK widget.
Description
FLsetTextColor sets the color of the text label of the target widget.
Syntax
FLsetTextColor ired, iblue, igreen, ihandle
Initialization
ired -- The red color of the target widget. The range for each RGB component is 0-255 igreen -- The green color of the target widget. The range for each RGB component is 0-255 iblue -- The blue color of the target widget. The range for each RGB component is 0-255 ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
779
FLsetTextSize
FLsetTextSize Sets the size of the text label of a FLTK widget.
Description
FLsetTextSize sets the size of the text label of the target widget.
Syntax
FLsetTextSize isize, ihandle
Initialization
isize -- size of the font of the target widget. Normal values are in the order of 15. Greater numbers enlarge font size, while smaller numbers reduce it. ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
780
FLsetTextType
FLsetTextType Sets some font attributes of the text label of a FLTK widget.
Description
FLsetTextType sets some attributes related to the fonts of the text label of the target widget.
Syntax
FLsetTextType itype, ihandle
Initialization
itype -- an integer number that modify the appearance of the target widget. The legal values of itype are: 0 - normal label 1 - no label (hides the text) 2 - symbol label (see below) 3 - shadow label 4 - engraved label 5- embossed label 6- bitmap label (not implemented yet) 7- pixmap label (not implemented yet) 8- image label (not implemented yet) 9- multi label (not implemented yet) 10- free-type label (not implemented yet) When using itype=3 (symbol label), it is possible to assign a graphical symbol instead of the text label of the target widget. In this case, the string of the target label must always start with @. If it starts with something else (or the symbol is not found), the label is drawn normally. The following symbols are supported:
781
FLTK label supported symbols. The @ sign may be followed by the following optional formatting characters, in this order: 1. # forces square scaling rather than distortion to the widget's shape. 2. +[1-9] or -[1-9] tweaks the scaling a little bigger or smaller. 3. [1-9] rotates by a multiple of 45 degrees. 6 does nothing, the others point in the direction of that key on a numeric keypad. Notice that with FLbox and FLbutton, it is not necessary to call FLsetTextType opcode at all in order to use a symbol. In this case, it is sufficient to set a label starting with @ followed by the proper formatting string. ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
782
783
FLsetVal_i
FLsetVal_i Sets the value of a FLTK valuator to a number provided by the user.
Description
FLsetVal_i forces the value of a valuator to a number provided by the user.
Syntax
FLsetVal_i ivalue, ihandle
Initialization
ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
Performance
ivalue -- Value to set the widget to.
Note
FLsetVal is not fully implemented yet, and may crash in certain cases (e.g. when setting the value of a widget connected to a FLvalue widget- in this case use two separate FLsetVal_i).
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
784
FLsetVal
FLsetVal Sets the value of a FLTK valuator at control-rate.
Description
FLsetVal is almost identical to FLsetVal_i. Except it operates at k-rate and it affects the target valuator only when ktrig is set to a non-zero value.
Syntax
FLsetVal ktrig, kvalue, ihandle
Initialization
ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
Performance
ktrig -- triggers the opcode when different than 0. kvalue -- Value to set the widget to.
Note
FLsetVal is not fully implemented yet, and may crash in certain cases (e.g. when setting the value of a widget connected to a FLvalue widget- in this case use two separate FLsetVal)
See Also
FLcolor, FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
785
FLshow
FLshow Restores the visibility of a previously hidden FLTK widget.
Description
FLshow restores the visibility of a previously hidden widget.
Syntax
FLshow ihandle
Initialization
ihandle -- an integer number (used as unique identifier) taken from the output of a previously located widget opcode (which corresponds to the target widget). It is used to unequivocally identify the widget when modifying its appearance with this class of opcodes. The user must not set the ihandle value directly, otherwise a Csound crash will occur.
See Also
FLcolor2, FLhide, FLlabel, FLsetAlign, FLsetBox, FLsetColor, FLsetColor2, FLsetFont, FLsetPosition, FLsetSize, FLsetText, FLsetTextColor, FLsetTextSize, FLsetTextType, FLsetVal_i, FLsetVal, FLshow
Credits
Author: Gabriel Maldonado New in version 4.22
786
FLslidBnk
FLslidBnk A FLTK widget containing a bank of horizontal sliders.
Description
FLslidBnk is a widget containing a bank of horizontal sliders.
Syntax
FLslidBnk "names", inumsliders [, ioutable] [, iwidth] [, iheight] [, ix] \ [, iy] [, itypetable] [, iexptable] [, istart_index] [, iminmaxtable]
Initialization
names -- a double-quoted string containing the names of each slider. Each slider can have a different name. Separate each name with @ character, for example: frequency@amplitude@cutoff. It is possible to not provide any name by giving a single space . In this case, the opcode will automatically assign a progressive number as a label for each slider. inumsliders -- the number of sliders. ioutable (optional, default=0) -- number of a previously-allocated table in which to store output values of each slider. The user must be sure that table size is large enough to contain all output cells, otherwise a segfault will crash Csound. By assigning zero to this argument, the output will be directed to the zak space in the k-rate zone. In this case, the zak space must be previously allocated with the zakinit opcode and the user must be sure that the allocation size is big enough to cover all sliders. The default value is zero (i.e. store output in zak space). istart_index (optional, default=0) -- an integer number referring to a starting offset of output cell locations. It can be positive to allow multiple banks of sliders to output in the same table or in the zak space. The default value is zero (no offset). iminmaxtable (optional, default=0) -- number of a previously-defined table containing a list of min-max pairs, referred to each slider. A zero value defaults to the 0 to 1 range for all sliders without necessity to provide a table. The default value is zero. iexptable (optional, default=0) -- number of a previously-defined table containing a list of identifiers (i.e. integer numbers) provided to modify the behaviour of each slider independently. Identifiers can assume the following values: -1 -- exponential curve response 0 -- linear response number > than 0 -- follow the curve of a previously-defined table to shape the response of the corresponding slider. In this case, the number corresponds to table number. You can assume that all sliders of the bank have the same response curve (exponential or linear). In this case, you can assign -1 or 0 to iexptable without worrying about previously defining any table. The default value is zero (all sliders have a linear response, without having to provide a table). itypetable (optional, default=0) -- number of a previously-defined table containing a list of identifiers 787
(i.e. integer numbers) provided to modify the aspect of each individual slider independently. Identifiers can assume the following values: 0 = Nice slider 1 = Fill slider 3 = Normal slider 5 = Nice slider 7 = Nice slider with down-box You can assume that all sliders of the bank have the same aspect. In this case, you can assign a negative number to itypetable without worrying about previously defining any table. Negative numbers have the same meaning of the corresponding positive identifiers with the difference that the same aspect is assigned to all sliders. You can also assign a random aspect to each slider by setting itypetable to a negative number lower than -7. The default value is zero (all sliders have the aspect of nice sliders, without having to provide a table). You can add 20 to a value inside the table to make the slider "plastic", or subtract 20 if you want to set the value for all widgets without defining a table (e.g. -21 to set all sliders types to Plastic Fill slider). iwidth (optional) -- width of the rectangular area containing all sliders of the bank, excluding text labels, that are placed to the left of that area. iheight (optional) -- height of the rectangular area containing all sliders of the bank, excluding text labels, that are placed to the left of that area. ix (optional) -- horizontal position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, at the left of that rectangle, in order to make sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area. iy (optional) -- vertical position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, at the left of that rectangle, in order to make sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area.
Performance
There are no k-rate arguments, even if cells of the output table (or the zak space) are updated at k-rate. FLslidBnk is a widget containing a bank of horizontal sliders. Any number of sliders can be placed into the bank (inumsliders argument). The output of all sliders is stored into a previously allocated table or into the zak space (ioutable argument). It is possible to determine the first location of the table (or of the zak space) in which to store the output of the first slider by means of istart_index argument. Each slider can have an individual label that is placed to the left of it. Labels are defined by the names argument. The output range of each slider can be individually set by means of an external table (iminmaxtable argument). The curve response of each slider can be set individually, by means of a list of identifiers placed in a table (iexptable argument). It is possible to define the aspect of each slider independently or to make all sliders have the same aspect (itypetable argument). The iwidth, iheight, ix, and iy arguments determine width, height, horizontal and vertical position of the rectangular area containing sliders. Notice that the label of each slider is placed to the left of them and is not included in the rectangular area containing sliders. So the user should leave enough space to the left of the bank by assigning a proper ix value in order to leave labels visible.
788
IMPORTANT!
Notice that the tables used by FLslidBnk must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. This is because tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra.
Examples
Here is an example of the FLslidBnk opcode. It uses the file FLslidBnk.csd [examples/FLslidBnk.csd].
789
See Also
FLslider, FLslidBnk2, FLvslidBnk, FLvslidBnk2
Credits
Author: Gabriel Maldonado New in version 4.22
790
FLslidBnk2
FLslidBnk2 A FLTK widget containing a bank of horizontal sliders.
Description
FLslidBnk2 is a widget containing a bank of horizontal sliders.
Syntax
FLslidBnk2 "names", inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index]
Initialization
names -- a double-quoted string containing the names of each slider. Each slider can have a different name. Separate each name with @ character, for example: frequency@amplitude@cutoff. It is possible to not provide any name by giving a single space . In this case, the opcode will automatically assign a progressive number as a label for each slider. inumsliders -- the number of sliders. ioutable (optional, default=0) -- number of a previously-allocated table in which to store output values of each slider. The user must be sure that table size is large enough to contain all output cells, otherwise a segfault will crash Csound. By assigning zero to this argument, the output will be directed to the zak space in the k-rate zone. In this case, the zak space must be previously allocated with the zakinit opcode and the user must be sure that the allocation size is big enough to cover all sliders. The default value is zero (i.e. store output in zak space). iconfigtable -- in the FLslidBnk2 and FLvslidBnk2 opcodes, this table replaces iminmaxtable, iexptable and istyletable, all these parameters being placed into a single table. This table has to be filled with a group of 4 parameters for each slider in this way: min1, max1, exp1, style1, min2, max2, exp2, style2, min3, max3, exp3, style3 etc. for example using GEN02 you can type: inum ftgen 1,0,256, -2, 0,1,0,1, 100, 5000, -1, 3, 50, 200, -1, 5,.. [etcetera]
In this example the first slider will be affected by the [0,1,0,1] parameters (the range will be 0 to 1, it will have linear response, and its aspect will be a fill slider), the second slider will be affected by the [100,5000,-1,3] parameters (the range is 100 to 5000, the response is exponential and the aspect is a normal slider), the third slider will be affected by the [50,200,-1,5] parameters (the range is 50 to 200, the behavior exponential, and the aspect is a nice slider), and so on. iwidth (optional) -- width of the rectangular area containing all sliders of the bank, excluding text labels, that are placed to the left of that area. iheight (optional) -- height of the rectangular area containing all sliders of the bank, excluding text labels, that are placed to the left of that area. ix (optional) -- horizontal position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, at the left of that rectangle, in order to make 791
sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area. iy (optional) -- vertical position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, at the left of that rectangle, in order to make sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area. istart_index (optional, default=0) -- an integer number referring to a starting offset of output cell locations. It can be positive to allow multiple banks of sliders to output in the same table or in the zak space. The default value is zero (no offset).
Performance
There are no k-rate arguments, even if cells of the output table (or the zak space) are updated at k-rate. FLslidBnk2 is a widget containing a bank of horizontal sliders. Any number of sliders can be placed into the bank (inumsliders argument). The output of all sliders is stored into a previously allocated table or into the zak space (ioutable argument). It is possible to determine the first location of the table (or of the zak space) in which to store the output of the first slider by means of istart_index argument. Each slider can have an individual label that is placed to the left of it. Labels are defined by the names argument. The output range of each slider can be individually set by means of the min and max values inside the iconfigtable table. The curve response of each slider can be set individually, by means of a list of identifiers placed in the iconfigtable table (exp argument). It is possible to define the aspect of each slider independently or to make all sliders have the same aspect (style argument in the iconfigtable table). The iwidth, iheight, ix, and iy arguments determine width, height, horizontal and vertical position of the rectangular area containing sliders. Notice that the label of each slider is placed to the left of them and is not included in the rectangular area containing sliders. So the user should leave enough space to the left of the bank by assigning a proper ix value in order to leave labels visible.
IMPORTANT!
Notice that the tables used by FLslidBnk2 must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. This is because tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra.
Examples
Here is an example of the FLslidBnk2 opcode. It uses the file FLslidBnk2.csd [examples/ FLslidBnk2.csd].
792
sr = 44100 ksmps = 100 nchnls = 2 ;Example by Gabriel Maldonado giElem init 8 giOutTab ftgen 1,0,128, 2, 0
;min1, max1, exp1, type1, min2, max2, exp2, type2, min3, max3, exp3, type3 etc. giConfigTab ftgen 2,0,128,-2, .1, 1000, -1, 3, .1, 1000, -1, 3, .1, 1000, -1, 3, .1, 5000, -1, 5, .1, 5000, -1, 5, .1, 5000, -1, giSine ftgen 3,0,256,10, 1
3 5,
FLpanel "This Panel contains a Slider Bank",600,600 FLslidBnk2 "mod1@mod2@mod3@amp@freq1@freq2@freq3@freqPo", giElem, giOutTab, giConfigTab, 400, 5 FLpanel_end FLrun instr 1 kmodindex1 kmodindex2 kmodindex3 kamp kfreq1 kfreq2 kfreq3 kfreq4 vtable1k init 0 init 0 init 0 init 0 init 0 init 0 init 0 init 0 giOutTab, kmodindex1 , kmodindex2, kmodindex3, kamp, kfreq1, kfreq2 , kfreq3, kfreq4
amod1 oscili kmodindex1, kfreq1, giSine amod2 oscili kmodindex2, kfreq2, giSine amod3 oscili kmodindex3, kfreq3, giSine aout oscili kamp, kfreq4+amod1+amod2+amod3, giSine outs aout, aout endin </CsInstruments> <CsScore> i1 0 3600 f0 3600 </CsScore> </CsoundSynthesizer>
See Also
FLslider, FLslidBnk, FLvslidBnk, FLvslidBnk2
Credits
Author: Gabriel Maldonado New in version 5.06
793
FLslidBnkGetHandle
FLslidBnkGetHandle gets the handle of last slider bank created.
Description
FLslidBnkGetHandle gets the handle of last slider bank created.
Syntax
ihandle FLslidBnkGetHandle
Initialization
ihandle - handle of the sliderBnk (to be used to set its values).
Performance
There are no k-rate arguments, even if cells of the output table (or the zak space) are updated at k-rate. FLslidBnkGetHandle gets the handle of last slider bank created. This opcode must follow corresponding FLslidBnk (or FLvslidBnk, FLslidBnk2 and FLvslidBnk2) immediately, in order to get its handle. See the entry for FLslidBnk2Setk to see an example of usage.
See Also
FLslider, FLslidBnk, FLslidBnk2, FLvslidBnk, FLvslidBnk2, FLslidBnk2Set, FLslidBnk2Setk
Credits
Author: Gabriel Maldonado New in version 5.06
794
FLslidBnkSet
FLslidBnkSet modify the values of a slider bank.
Description
FLslidBnkSet modifies the values of a slider bank according to an array of values stored in a table.
Syntax
FLslidBnkSet ihandle, ifn [, istartIndex, istartSlid, inumSlid]
Initialization
ihandle - handle of the sliderBnk (to be used to set its values). ifn - number of a table containing an array of values to set each slider to. istartIndex - (optional) starting index of the table element of to be evaluated firstly. Default value is zero istartSlid - (optional) starting slider to be evaluated. Default 0, denoting the first slider. inumSlid - (optional) number of sliders to be updated. Default 0, denoting all sliders.
Performance
FLslidBnkSet modifies the values of a slider bank (created with FLslidBnk or with FLvslidBnk) according to an array of values stored into table ifn. It actually allows to update an FLslidBnk (or FLvslidBnk) bank of sliders (for instance, using the slider8table opcode) to a set of values located in a table. User has to set ihandle argument to the handle got from FLslidBnkGetHandle opcode. It works at init-rate only. It is possible to reset only a range of sliders, by using the optional arguments istartIndex, istartSlid, inumSlid There is a k-rate version of this opcode called FLslidBnkSetk.
See Also
FLslider, FLslidBnkGetHandle, FLslidBnk, FLslidBnk2, FLvslidBnk, FLvslidBnk2 FLslidBnk2Set, FLslidBnkSetk
Credits
Author: Gabriel Maldonado New in version 5.06
795
FLslidBnkSetk
FLslidBnkSetk modify the values of a slider bank.
Description
FLslidBnkSetk modifies the values of a slider bank according to an array of values stored in a table.
Syntax
FLslidBnkSetk ktrig, ihandle, ifn [, istartIndex, istartSlid, inumSlid]
Initialization
ihandle - handle of the sliderBnk (to be used to set its values). ifn - number of a table containing an array of values to set each slider to. istartIndex - (optional) starting index of the table element of to be evaluated firstly. Default value is zero istartSlid - (optional) starting slider to be evaluated. Default 0, denoting the first slider. inumSlid - (optional) number of sliders to be updated. Default 0, denoting all sliders.
Performance
ktrig the output of FLslidBnkSetk consists of a trigger that informs if sliders have to be updated or not. A non-zero value forces the slider to be updated. FLslidBnkSetk is similar to FLslidBnkSet but allows k-rate to modify the values of FLslidBnk (FLslidBnkSetk can also be used with FLvslidBnk, obtaining identical result). It also allows the slider bank to be joined with MIDI. If you are using MIDI (for instance, when using the slider8table opcode), FLslidBnkSetk changes the values of FLslidBnk bank of sliders to a set of values located in a table. This opcode is actually able to serve as a MIDI bridge to the FLslidBnk widget when used together with the sliderXXtable set of opcodes (see slider8table entry for more information). Notice, that, when you want to use table indexing as a curve response, it is not possible to do it directly in the iconfigtable configuration of FLslidBnk2, when you intend to use the FLslidBnkSetk opcode. In fact, corresponding inputTable element of FLslidBnkSetk must be set in linear mode and respect the 0 to 1 range. Even the corresponding elements of sliderXXtable must be set in linear mode and in the normalized range. You can do table indexing later, by using the tab and tb opcodes, and rescaling output according to max and min values. By the other hand, it is possible to use linear and exponential curve response directly, by setting the actual min-max range and flag both in the iconfigtable of corresponding FLslidBnk2 and in sliderXXtable. FLslidBnkSetk the k-rate version of FLslidBnk2Set.
See Also
FLslider, FLslidBnkGetHandle, FLslidBnk, FLslidBnk2, FLvslidBnk, FLvslidBnk2 FLslidBnkSet, FLslidBnk2Set, slider8table
Credits
796
797
FLslidBnk2Set
FLslidBnk2Set modify the values of a slider bank.
Description
FLslidBnk2Set modifies the values of a slider bank according to an array of values stored in a table.
Syntax
FLslidBnk2Set ihandle, ifn [, istartIndex, istartSlid, inumSlid]
Initialization
ihandle - handle of the sliderBnk (to be used to set its values). ifn - number of a table containing an array of values to set each slider to. istartIndex - (optional) starting index of the table element of to be evaluated firstly. Default value is zero istartSlid - (optional) starting slider to be evaluated. Default 0, denoting the first slider. inumSlid - (optional) number of sliders to be updated. Default 0, denoting all sliders.
Performance
FLslidBnk2Set modifies the values of a slider bank (created with FLslidBnk2 or with FLvslidBnk2) according to an array of values stored into table ifn. It actually allows to update an FLslidBnk2 (or FLvslidBnk2) bank of sliders (for instance, using the slider8table opcode) to a set of values located in a table. User has to set ihandle argument to the handle got from FLslidBnkGetHandle opcode. It works at init-rate only. It is possible to reset only a range of sliders, by using the optional arguments istartIndex, istartSlid, inumSlid FLslidBnk2Set is identical to FLslidBnkSet, but works on FLslidBnk2 and FLvslidBnk2 instead of FLslidBnk and FLvslidBnk. There is a k-rate version of this opcode called FLslidBnk2Setk.
See Also
FLslider, FLslidBnkGetHandle, FLslidBnk, FLslidBnk2, FLvslidBnk, FLvslidBnk2 FLslidBnkSet, FLslidBnk2Setk
Credits
Author: Gabriel Maldonado New in version 5.06
798
FLslidBnk2Setk
FLslidBnk2Setk modify the values of a slider bank.
Description
FLslidBnk2Setk modifies the values of a slider bank according to an array of values stored in a table.
Syntax
FLslidBnk2Setk ktrig, ihandle, ifn [, istartIndex, istartSlid, inumSlid]
Initialization
ihandle - handle of the sliderBnk (to be used to set its values). ifn - number of a table containing an array of values to set each slider to. istartIndex - (optional) starting index of the table element of to be evaluated firstly. Default value is zero istartSlid - (optional) starting slider to be evaluated. Default 0, denoting the first slider. inumSlid - (optional) number of sliders to be updated. Default 0, denoting all sliders.
Performance
ktrig the output of FLslidBnk2Setk consists of a trigger that informs if sliders have to be updated or not. A non-zero value forces the slider to be updated. FLslidBnk2Setk is similar to FLslidBnkSet but allows k-rate to modify the values of FLslidBnk2 (FLslidBnk2Setk can also be used with FLvslidBnk2, obtaining identical result). It also allows the slider bank to be joined with MIDI. If you are using MIDI (for instance, when using the slider8table opcode), FLslidBnk2Setk changes the values of FLslidBnk2 bank of sliders to a set of values located in a table. This opcode is actually able to serve as a MIDI bridge to the FLslidBnk2 widget when used together with the sliderXXtable set of opcodes (see slider8table entry for more information). Notice, that, when you want to use table indexing as a curve response, it is not possible to do it directly in the iconfigtable configuration of FLslidBnk2, when you intend to use the FLslidBnk2Setk opcode. In fact, corresponding inputTable element of FLslidBnk2Setk must be set in linear mode and respect the 0 to 1 range. Even the corresponding elements of sliderXXtable must be set in linear mode and in the normalized range. You can do table indexing later, by using the tab and tb opcodes, and rescaling output according to max and min values. By the other hand, it is possible to use linear and exponential curve response directly, by setting the actual min-max range and flag both in the iconfigtable of corresponding FLslidBnk2 and in sliderXXtable. FLslidBnk2Setk the k-rate version of FLslidBnk2Set.
Examples
Here is an example of the FLslidBnk2Setk opcode. It uses the file FLslidBnk2Setk.csd [examples/ FLslidBnk2Setk.csd].
799
;** exponential ascending curve for slider mapping ;** rescaled curve for slider mapping 1, 500, -1, 13, \ 1, 500, -1, 13, \ 1, 500, -1, 13, \ 1, 5000, -1, 13, \ 1000, 1000, 1000, 5000, -1, -1, -1, -1, 5, \ 5, \ 5, \ 5
\ 1, 1, 1, 1,
FLpanel "Multiple FM",600,600 FLslidBnk2 "mod1@mod2@mod3@amp@freq1@freq2@freq3@freqPo", giElem, giOutTab2, giConfigTab, 400, giHandle FLslidBnkGetHandle FLpanel_end
FLrun instr 1 ktrig slider8table 1, giOutTab, 0, \ ; ctl min max init func 27, 1, 500, 3, -1, \ ;1 repeat rate 28, 1, 500, 4, -1, \ ;2 random freq. amount 29, 1, 500, 1, -1, \ ;3 random amp. amount 30, 1, 5000, 1, -1, \ ;4 number of concurrent loop points \ 31, 1, 1000, 1, -1, \;5 kloop1 32, 1, 1000, 1, -1, \;6 kloop2 33, 1, 1000, 1, -1, \;7 kloop3 34, 1, 1000, 1, -1 ;8 kloop4 kmodindex1 init 0 kmodindex2 init 0 kmodindex3 init 0 kamp init 0 kfreq1 init 0 kfreq2 init 0 kfreq3 init 0 kfreq4 init 0 vtable1k giOutTab2, kmodindex1, kmodindex2, kmodindex3, kamp, kfreq1, kfreq2, kfreq3, kfreq4 ; *kflag, *ihandle, *ifn, *startInd, *startSlid, *numSlid; FLslidBnk2Setk ktrig, giHandle, giOutTab, 0, 0, giElem printk2 kmodindex1 printk2 kmodindex2,10 printk2 kmodindex3,20 printk2 kamp,30 amod1 oscili kmodindex1, kfreq1, giSine amod2 oscili kmodindex2, kfreq2, giSine amod3 oscili kmodindex3, kfreq3, giSine aout oscili kamp, kfreq4+amod1+amod2+amod3, giSine outs aout, aout endin </CsInstruments> <CsScore> i1 0 3600 </CsScore>
800
</CsoundSynthesizer>
See Also
FLslider, FLslidBnkGetHandle, FLslidBnk, FLslidBnk2, FLvslidBnk, FLvslidBnk2 FLslidBnkSet, FLslidBnk2Set, slider8table
Credits
Author: Gabriel Maldonado New in version 5.06
801
FLslider
FLslider Puts a slider into the corresponding FLTK container.
Description
FLslider puts a slider into the corresponding container.
Syntax
kout, ihandle FLslider "label", imin, imax, iexp, itype, idisp, iwidth, \ iheight, ix, iy
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLslider and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. imin -- minimum value of output range (corresponds to the left value for horizontal sliders, and the top value for vertical sliders). imax -- maximum value of output range (corresponds to the right value for horizontal sliders, and the bottom value for vertical sliders). The imin argument may be greater than imax argument. This has the effect of reversing the object so the larger values are in the opposite direction. This also switches which end of the filled sliders is filled. iexp -- an integer number denoting the behaviour of valuator: 0 = valuator output is linear -1 = valuator output is exponential All other positive numbers for iexp indicate the number of an existing table that is used for indexing. Linear interpolation is provided in table indexing. A negative table number suppresses interpolation.
IMPORTANT!
Notice that the tables used by valuators must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. This is because tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra. itype -- an integer number denoting the appearance of the valuator. The itype argument can be set to the following values: 802
1 - shows a horizontal fill slider 2 - a vertical fill slider 3 - a horizontal engraved slider 4 - a vertical engraved slider 5 - a horizontal nice slider 6 - a vertical nice slider 7 - a horizontal up-box nice slider 8 - a vertical up-box nice slider
FLslider - a horizontal nice slider (itype=5). You can also create "plastic" looking sliders by adding 20 to itype. idisp -- a handle value that was output from a previous instance of the FLvalue opcode to display the current value of the current valuator in the FLvalue widget itself. If the user doesn't want to use this feature that displays current values, it must be set to a negative number by the user. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Performance
kout -- output value FLsliders are created with the minimum value by default in the left/at the top. If you want to reverse the slider, reverse the values. See the example below.
Examples
803
Here is an example of the FLslider opcode. It uses the file FLslider.csd [examples/FLslider.csd].
804
</CsScore> </CsoundSynthesizer>
Here is another example of the FLslider opcode, showing the slider types and other options. It also shows the usage of FLvalue to display a widget's contents. It uses the file FLslider-2.csd [examples/ FLslider-2.csd].
805
gihandle21 FLslider "Type 21", 200, 5000, -1, 21, givalue21, 320, 20, ix, iy gihandle23 FLslider "Type 23", 0, 15000, 0, 23, givalue23, 320, 20, ix, iy + 40 slider gihandle25 FLslider "Type 25", 1, 0, 0, 25, givalue25, 320, 20, ix, iy + 80 0, 1, 0, 22, givalue22, 20, 100, ix+ 30 , iy + 120 1, 0, 0, 24, givalue24, 20, 100, ix + 165 , iy + 120 0, 1, 0, 26, givalue26, 20, 100, ix + 290 , iy + 120 21, 150, 30, 30, 260, 0, 10, 0, 1
;Vertical sliders gkdummy22, gihandle22 FLslider "Type 22", ; Reversed slider gkdummy24, gihandle24 FLslider "Type 24", gkdummy26, gihandle26 FLslider "Type 26", ;Button to add color to the sliders gkcolors, ihdummy FLbutton "Color", 1, 0, FLpanelEnd FLrun
;Set some widget's initial value FLsetVal_i 500, gihandle1 FLsetVal_i 1000, gihandle3 instr 10 ; Set the color of widgets FLsetColor 200, 230, 0, gihandle1 FLsetColor 0, 123, 100, gihandle2 FLsetColor 180, 23, 12, gihandle3 FLsetColor 10, 230, 0, gihandle4 FLsetColor 0, 0, 0, gihandle5 FLsetColor 0, 0, 0, gihandle6 FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor 200, 230, 0, givalue1 0, 123, 100, givalue2 180, 23, 12, givalue3 10, 230, 0, givalue4 255, 255, 255, givalue5 255, 255, 255, givalue6 20, 23, 100, gihandle1 200,0 ,123 , gihandle2 180, 180, 100, gihandle3 180, 23, 12, gihandle4 180, 180, 100, gihandle5 180, 23, 12, gihandle6
FLsetColor2 FLsetColor2 FLsetColor2 FLsetColor2 FLsetColor2 FLsetColor2 FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor FLsetColor
200, 230, 0, gihandle21 0, 123, 100, gihandle22 180, 23, 12, gihandle23 10, 230, 0, gihandle24 0, 0, 0, gihandle25 0, 0, 0, gihandle26 200, 230, 0, givalue21 0, 123, 100, givalue22 180, 23, 12, givalue23 10, 230, 0, givalue24 255, 255, 255, givalue25 255, 255, 255, givalue26 20, 23, 100, gihandle21 200,0 ,123 , gihandle22 180, 180, 100, gihandle23 180, 23, 12, gihandle24 180, 180, 100, gihandle25 180, 23, 12, gihandle26
; Slider values must be updated for colors to change FLsetVal_i 250, gihandle1 FLsetVal_i 0.5, gihandle2 FLsetVal_i 0, gihandle3 FLsetVal_i 0, gihandle4 FLsetVal_i 0, gihandle5 FLsetVal_i 0.5, gihandle6 FLsetVal_i 250, gihandle21 FLsetVal_i 0.5, gihandle22 FLsetVal_i 500, gihandle23 FLsetVal_i 0, gihandle24 FLsetVal_i 0, gihandle25 FLsetVal_i 0.5, gihandle26 endin
806
</CsInstruments> <CsScore> f 0 3600 ;Dumy table to make csound wait for realtime events e </CsScore> </CsoundSynthesizer>
See Also
FLcount, FLjoy, FLknob, FLroller, FLslidBnk, FLtext
Credits
Author: Gabriel Maldonado New in version 4.22 February 2004. Thanks to a note from Dave Phillips, deleted the extraneous istep parameter. Example written by Iain McCurdy, edited by Kevin Conder.
807
FLtabs
FLtabs Creates a tabbed FLTK interface.
Description
FLtabs is a file card tabs interface that is useful to display several areas containing widgets in the same windows, alternatively. It must be used together with FLgroup, another container that groups child widgets.
Syntax
FLtabs iwidth, iheight, ix, iy
Initialization
iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window. Expressed in pixels. iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window. Expressed in pixels.
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers. FLtabs is a file card tabs interface that is useful to display several alternate areas containing widgets in the same window.
FLtabs. It must be used together with FLgroup, another FLTK container opcode that groups child widgets.
Examples
The following example code:
808
FLpanel "Panel1", 450, 550, 100, 100 FLscroll 450, 550, 0, 0 FLtabs 400, 550, 5, 5 gk1, gk2, gk3, gk4, gk5, gk6, gk7, gk8, ihs ihs ihs ihs ihs ihs ihs ihs FLgroup "sliders", FLslider "FLslider FLslider "FLslider FLslider "FLslider FLslider "FLslider FLslider "FLslider FLslider "FLslider FLslider "FLslider FLslider "FLslider FLgroupEnd FLgroup "rollers", FLroller "FLroller FLroller "FLroller FLroller "FLroller FLroller "FLroller FLroller "FLroller FLroller "FLroller FLroller "FLroller FLgroupEnd 380, 500, 10, 40, 1 1", 500, 1000, 2 ,1, -1, 300,15, 20,50 2", 300, 5000, 2 ,3, -1, 300,15, 20,100 3", 350, 1000, 2 ,5, -1, 300,15, 20,150 4", 250, 5000, 1 ,11, -1, 300,30, 20,200 5", 220, 8000, 2 ,1, -1, 300,15, 20,250 6", 1, 5000, 1 ,13, -1, 300,15, 20,300 7", 870, 5000, 1 ,15, -1, 300,30, 20,350 8", 20, 20000, 2 ,6, -1, 30,400, 350,50 380, 500, 10, 30, 2 1", 50, 1000,.1,2 ,1 ,-1, 200,22, 20,50 2", 80, 5000,1,2 ,1 ,-1, 200,22, 20,100 3", 50, 1000,.1,2 ,1 ,-1, 200,22, 20,150 4", 80, 5000,1,2 ,1 ,-1, 200,22, 20,200 5", 50, 1000,.1,2 ,1 ,-1, 200,22, 20,250 6", 80, 5000,1,2 ,1 ,-1, 200,22, 20,300 7",50, 5000,1,1 ,2 ,-1, 30,300, 280,50
FLgroup "joysticks", 380, 500, 10, 40, 3 gk1, gk2, ihj1, ihj2 FLjoy "FLjoy", 50, 18000, 50, 18000, 2, 2, -1, -1, 300, 300, 30, 60 FLgroupEnd FLtabsEnd FLscrollEnd FLpanelEnd
810
FLtabs example, joysticks tab. (Each picture shows a different tab selection inside the same window.)
Examples
Here is an example of the FLtabs opcode. It uses the file FLtabs.csd [examples/FLtabs.csd].
811
</CsInstruments> <CsScore> ; Function table that defines a single cycle ; of a sine wave. f 1 0 1024 10 1 ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLgroup, FLgroupEnd, FLpack, FLpackEnd, FLpanel, FLpanelEnd, FLscroll, FLscrollEnd, FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
812
FLtabsEnd
FLtabsEnd Marks the end of a tabbed FLTK interface.
Description
Marks the end of a tabbed FLTK interface.
Syntax
FLtabsEnd
Performance
Containers are useful to format the graphic appearance of the widgets. The most important container is FLpanel, that actually creates a window. It can be filled with other containers and/or valuators or other kinds of widgets. There are no k-rate arguments in containers.
See Also
FLgroup, FLgroupEnd, FLpack, FLpackEnd, FLpanel, FLpanelEnd, FLscroll, FLscrollEnd, FLtabs
Credits
Author: Gabriel Maldonado New in version 4.22
813
FLtabs_end
FLtabs_end Marks the end of a tabbed FLTK interface.
Description
Marks the end of a tabbed FLTK interface. This is another name for FLtabsEnd provided for compatibility. See FLtabsEnd
Credits
Author: Gabriel Maldonado New in version 4.22
814
FLtext
FLtext A FLTK widget opcode that creates a textbox.
Description
FLtext allows the user to modify a parameter value by directly typing it into a text field.
Syntax
kout, ihandle FLtext "label", imin, imax, istep, itype, iwidth, \ iheight, ix, iy
Initialization
ihandle -- a handle value (an integer number) that unequivocally references a corresponding widget. This is used by other opcodes that modify a widget's properties (see Modifying FLTK Widget Appearance). It is automatically output by FLtext and must not be set by the user label. (The user label is a double-quoted string containing some user-provided text placed near the widget.) label -- a double-quoted string containing some user-provided text, placed near corresponding widget. imin -- minimum value of output range. imax -- maximum value of output range. istep -- a floating-point number indicating the increment of valuator value corresponding to the mouse dragging. The istep argument allows the user to arbitrarily slow mouse motion, enabling arbitrary precision. itype -- an integer number denoting the appearance of the valuator. The itype argument can be set to the following values: 1 - normal behaviour 2 - dragging operation is suppressed, instead it will appear two arrow buttons. A mouse-click on one of these buttons can increase/decrease the output value. 3 - text editing is suppressed, only mouse dragging modifies the output value. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Performance
815
kout -- output value FLtext allows the user to modify a parameter value by directly typing it into a text field:
FLtext. Its value can also be modified by clicking on it and dragging the mouse horizontally. The istep argument allows the user to arbitrarily set the response on mouse dragging.
Examples
Here is an example of the FLtext opcode. It uses the file FLtext.csd [examples/FLtext.csd].
816
ifn = 1 asig oscili iamp, gkfreq, ifn out asig endin </CsInstruments> <CsScore> ; Function table that defines a single cycle ; of a sine wave. f 1 0 1024 10 1 ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLcount, FLjoy, FLknob, FLroller, FLslider
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder.
817
FLupdate
FLupdate Same as the FLrun opcode.
Description
Same as the FLrun opcode.
Syntax
FLupdate
818
fluidAllOut
fluidAllOut Collects all audio from all Fluidsynth engines in a performance
Syntax
aleft, aright fluidAllOut
Description
Collects all audio from all Fluidsynth engines in a performance
Performance
aleft -- Left channel audio output. aright -- Right channel audio output. Invoke fluidAllOut in an instrument definition numbered higher than any fluidcontrol instrument definitions. All SoundFonts send their audio output to this one opcode. Send a note with an indefinite duration to this instrument to turn the SoundFonts on for as long as required. In this implementation, SoundFont effects such as chorus or reverb are used if and only if they are defaults for the preset. There is no means of turning such effects on or off, or of changing their parameters, from Csound.
Examples
Here is an example of the fluidsynth opcodes. It uses the file fluidAllOut.orc [examples/fluidAllOut.orc].
sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 0dbfs = 32767 ; LOAD SOUNDFONTS gienginenum1 fluidEngine gienginenum2 fluidEngine isfnum1 fluidLoad "Piano Steinway Grand Model C (21,738KB).sf2", gienginenum1, 1 ; Bright Steinway, program 1, channel 1 fluidProgramSelect gienginenum1, 1, isfnum1, 0, 1 ; Concert Steinway with reverb, program 2, channel 3 fluidProgramSelect gienginenum1, 3, isfnum1, 0, 2 isfnum2 fluidLoad "63.3mg The Sound Site Album Bank V1.0.SF2", gienginenum2, 1 ; General MIDI, program 50, channel 2 fluidProgramSelect gienginenum2, 2, isfnum2, 0, 50 ; SEND NOTES TO STEINWAY SOUNDFONT instr 1 ; FluidSynth Steinway Rev ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 1 ikey = p4 ivelocity = p5 istatus = 144 fluidControl gienginenum1, istatus, ichannel, ikey, ivelocity endin
819
instr 2 ; GM soundfont ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 2 ikey = p4 ivelocity = p5 istatus = 144 fluidNote gienginenum2, ichannel, ikey, ivelocity endin instr 3 ; FluidSynth Steinway Rev ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 3 ikey = p4 ivelocity = p5 istatus = 144 fluidNote gienginenum1, ichannel, ikey, ivelocity endin ; COLLECT AUDIO FROM ALL SOUNDFONTS instr 100 ; Fluidsynth output ; INITIALIZATION ; Normalize so iamplitude for p5 of 80 == ampdb(80). iamplitude = ampdb(p5) * (10000.0 / 0.1) ; AUDIO aleft, aright fluidAllOut outs aleft * iamplitude, aright * iamplitude endin
Here is another more complex example of the fluidsynth opcodes written by Istvan Varga. It uses the file fluidcomplex.csd [examples/fluidcomplex.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages Load external midi file -d -m2 -o dac -T -F Anna.mid ;;;RT audio I/O </CsOptions> <CsInstruments> sr = 44100 ksmps = 128 nchnls = 2 0dbfs = 1 ; Example by Istvan Varga ; disable triggering of instruments by MIDI events ichn = 1 lp1: massign ichn, 0 loop_le ichn, 1, 16, lp1 pgmassign 0, 0 ; initialize FluidSynth gifld gisf2 fluidEngine fluidLoad "07AcousticGuitar.sf2", gifld, 1
; k-rate version of fluidProgramSelect opcode fluidProgramSelect_k, 0, kkkkk keng, kchn, ksf2, kbnk, kpre xin igoto skipInit doInit: fluidProgramSelect i(keng), i(kchn), i(ksf2), i(kbnk), i(kpre) reinit doInit rireturn skipInit:
820
endop instr 1 ; initialize channels kchn init 1 if (kchn == 1) then lp2: fluidControl gifld, 192, kchn - 1, 0, 0 fluidControl gifld, 176, kchn - 1, 7, 100 fluidControl gifld, 176, kchn - 1, 10, 64 loop_le kchn, 1, 16, lp2 endif ; send any MIDI events received to FluidSynth nxt: kst, kch, kd1, kd2 midiin if (kst != 0) then if (kst != 192) then fluidControl gifld, kst, kch - 1, kd1, kd2 else fluidProgramSelect_k gifld, kch - 1, gisf2, 0, kd1 endif kgoto nxt endif ; get audio output from FluidSynth aL, aR fluidOut gifld outs aL, aR endin </CsInstruments> <CsScore> i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
fluidEngine, fluidNote, fluidLoad
Credits
Opcode by Michael Gogins (gogins at pipeline dot com). Thanks to Peter Hanappe for Fluidsynth, and to Steven Yi for seeing that it is necessary to break up the Fluidsynth into several different Csound opcodes.
821
fluidCCi
fluidCCi Sends a MIDI controller data message to fluid.
Syntax
fluidCCi iEngineNumber, iChannelNumber, iControllerNumber, iValue
Description
Sends a MIDI controller data (MIDI controller number and value to use) message to a fluid engine by number on the user specified MIDI channel number.
Initialization
iEngineNumber -- engine number assigned from fluidEngine iChannelNumber -- MIDI channel number to which the Fluidsynth program is assigned: from 0 to 255. MIDI channels numbered 16 or higher are virtual channels. iControllerNumber -- MIDI controller number to use for this message iValue -- value to set for controller (usually 0-127)
Performance
This opcode is useful for setting controller values at init time. For continous changes, use fluidCCk.
See Also
fluidEngine, fluidNote, fluidLoad, fluidCCk
Credits
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth.
822
fluidCCk
fluidCCk Sends a MIDI controller data message to fluid.
Syntax
fluidCCk iEngineNumber, iChannelNumber, iControllerNumber, kValue
Description
Sends a MIDI controller data (MIDI controller number and value to use) message to a fluid engine by number on the user specified MIDI channel number.
Initialization
iEngineNumber -- engine number assigned from fluidEngine iChannelNumber -- MIDI channel number to which the Fluidsynth program is assigned: from 0 to 255. MIDI channels numbered 16 or higher are virtual channels. iControllerNumber -- MIDI controller number to use for this message
Performance
kValue -- value to set for controller (usually 0-127)
See Also
fluidEngine, fluidNote, fluidLoad, fluidCCi
Credits
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth.
823
fluidControl
fluidControl Sends MIDI note on, note off, and other messages to a SoundFont preset.
Syntax
fluidControl ienginenum, kstatus, kchannel, kdata1, kdata2
Description
The fluid opcodes provide a simple Csound opcode wrapper around Peter Hanappe's Fluidsynth SoundFont2 synthesizer. This implementation accepts any MIDI note on, note off, controller, pitch bend, or program change message at k-rate. Maximum polyphony is 4096 simultaneously sounding voices. Any number of SoundFonts may be loaded and played simultaneously.
Initialization
ienginenum -- engine number assigned from fluidEngine
Performance
kstatus -- MIDI channel message status byte: 128 for note off, 144 for note on, 176 for control change, 192 for program change, or 224 for pitch bend. kchannel -- MIDI channel number to which the Fluidsynth program is assigned: from 0 to 255. MIDI channels numbered 16 or higher are virtual channels. kdata1 -- For note on, MIDI key number: from 0 (lowest) to 127 (highest), where 60 is middle C. For continuous controller messages, controller number. kdata2 -- For note on, MIDI key velocity: from 0 (no sound) to 127 (loudest). For continous controller messages, controller value. Invoke fluidControl in instrument definitions that actually play notes and send control messages. Each instrument definition must consistently use one MIDI channel that was assigned to a Fluidsynth program using fluidLoad. In this implementation, SoundFont effects such as chorus or reverb are used if and only if they are defaults for the preset. There is no means of turning such effects on or off, or of changing their parameters, from Csound.
See Also
fluidEngine, fluidNote, fluidLoad
Credits
Opcodes by Michael Gogins (gogins at pipeline dot com). Thanks to Peter Hanappe for Fluidsynth, and to Steven Yi for seeing that it is necessary to break up the Fluidsynth into several different Csound opcodes. New in Csound5.00 824
fluidEngine
fluidEngine Instantiates a fluidsynth engine.
Syntax
ienginenum fluidEngine [iReverbEnabled] [, iChorusEnabled] [,iNumChannels] [, iPolyphony]
Description
Instantiates a fluidsynth engine, and returns ienginenum to identify the engine. ienginenum is passed to other other opcodes for loading and playing SoundFonts and gathering the generated sound.
Initialization
ienginenum -- engine number assigned from fluidEngine. iReverbEnabled -- optionally set to 0 to disable any reverb effect in the loaded SoundFonts. iChorusEnabled -- optionally set to 0 to disable any chorus effect in the loaded SoundFonts. iNumChannels -- number of channels to use; range is 16-256 and Csound default is 256 (Fluidsynth's default is 16). iPolyphony -- number of voices to be played in parallel; range is 16-4096 and Csound default is 4096 (Fluidsynth's default is 256). Note: this is not the number of notes played at the same time as a single note may use create multiple voices depending on instrument zones and velocity/key of played note.
Examples
Here is an example of the fluidsynth opcodes. It uses the file fluidAllOut.orc [examples/fluidAllOut.orc].
sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 0dbfs = 32767 ; LOAD SOUNDFONTS gienginenum1 fluidEngine gienginenum2 fluidEngine isfnum1 fluidLoad "Piano Steinway Grand Model C (21,738KB).sf2", gienginenum1, 1 ; Bright Steinway, program 1, channel 1 fluidProgramSelect gienginenum1, 1, isfnum1, 0, 1 ; Concert Steinway with reverb, program 2, channel 3 fluidProgramSelect gienginenum1, 3, isfnum1, 0, 2 isfnum2 fluidLoad "63.3mg The Sound Site Album Bank V1.0.SF2", gienginenum2, 1 ; General MIDI, program 50, channel 2 fluidProgramSelect gienginenum2, 2, isfnum2, 0, 50 ; SEND NOTES TO STEINWAY SOUNDFONT instr 1 ; FluidSynth Steinway Rev ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 1 ikey = p4 ivelocity = p5
825
istatus endin
instr 2 ; GM soundfont ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 2 ikey = p4 ivelocity = p5 istatus = 144 fluidNote gienginenum2, ichannel, ikey, ivelocity endin instr 3 ; FluidSynth Steinway Rev ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 3 ikey = p4 ivelocity = p5 istatus = 144 fluidNote gienginenum1, ichannel, ikey, ivelocity endin ; COLLECT AUDIO FROM ALL SOUNDFONTS instr 100 ; Fluidsynth output ; INITIALIZATION ; Normalize so iamplitude for p5 of 80 == ampdb(80). iamplitude = ampdb(p5) * (10000.0 / 0.1) ; AUDIO aleft, aright fluidAllOut outs aleft * iamplitude, aright * iamplitude endin
Here is another example of the fluidsynth opcodes using 2 engines. It uses the file fluid-2.orc [examples/fluid-2.orc].
sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 0dbfs = 32767 ; LOAD SOUNDFONTS gienginenum1 fluidEngine gienginenum2 fluidEngine isfnum1 fluidLoad "Piano Steinway Grand Model C (21,738KB).sf2", gienginenum1, 1 ; Bright Steinway, program 1, channel 1 fluidProgramSelect gienginenum1, 1, isfnum1, 0, 1 ; Concert Steinway with reverb, program 2, channel 3 fluidProgramSelect gienginenum1, 3, isfnum1, 0, 2 isfnum2 fluidLoad "63.3mg The Sound Site Album Bank V1.0.SF2", gienginenum2, 1 ; General MIDI, program 50, channel 2 fluidProgramSelect gienginenum2, 2, isfnum2, 0, 50 ; SEND NOTES TO STEINWAY SOUNDFONT instr 1 ; FluidSynth Steinway Rev ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 1 ikey = p4 ivelocity = p5 fluidNote gienginenum1, ichannel, ikey, ivelocity endin instr 2 ; GM soundfont ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields.
826
; Use channel assigned in fluidload. ichannel = 2 ikey = p4 ivelocity = p5 fluidNote gienginenum2, ichannel, ikey, ivelocity endin instr 3 ; FluidSynth Steinway Rev ; INITIALIZATION mididefault 60, p3 ; Default duration of 60 -- overridden by score. midinoteonkey p4, p5 ; Channels MIDI input to pfields. ; Use channel assigned in fluidload. ichannel = 3 ikey = p4 ivelocity = p5 fluidNote gienginenum1, ichannel, ikey, ivelocity endin ; COLLECT AUDIO FROM ALL SOUNDFONTS instr 100 ; Fluidsynth output ; INITIALIZATION ; Normalize so iamplitude for p5 of 80 == ampdb(80). iamplitude1 = ampdb(p5) * (10000.0 / 0.1) iamplitude2 = ampdb(p6) * (10000.0 / 0.1) ; AUDIO aleft1, aright1 fluidOut aleft2, aright2 fluidOut outs endin gienginenum1 gienginenum2 (aleft1 * iamplitude1) + (aleft2 * iamplitude2), \ (aright1 * iamplitude1) + (aright2 * iamplitude2)
Here is another more complex example of the fluidsynth opcodes written by Istvan Varga. It uses the file fluidcomplex.csd [examples/fluidcomplex.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages Load external midi file -d -m2 -o dac -T -F Anna.mid ;;;RT audio I/O </CsOptions> <CsInstruments> sr = 44100 ksmps = 128 nchnls = 2 0dbfs = 1 ; Example by Istvan Varga ; disable triggering of instruments by MIDI events ichn = 1 lp1: massign ichn, 0 loop_le ichn, 1, 16, lp1 pgmassign 0, 0 ; initialize FluidSynth gifld gisf2 fluidEngine fluidLoad "07AcousticGuitar.sf2", gifld, 1
; k-rate version of fluidProgramSelect opcode fluidProgramSelect_k, 0, kkkkk keng, kchn, ksf2, kbnk, kpre xin igoto skipInit doInit: fluidProgramSelect i(keng), i(kchn), i(ksf2), i(kbnk), i(kpre) reinit doInit rireturn skipInit: endop instr 1 ; initialize channels
827
kchn init 1 if (kchn == 1) then lp2: fluidControl gifld, 192, kchn - 1, 0, 0 fluidControl gifld, 176, kchn - 1, 7, 100 fluidControl gifld, 176, kchn - 1, 10, 64 loop_le kchn, 1, 16, lp2 endif ; send any MIDI events received to FluidSynth nxt: kst, kch, kd1, kd2 midiin if (kst != 0) then if (kst != 192) then fluidControl gifld, kst, kch - 1, kd1, kd2 else fluidProgramSelect_k gifld, kch - 1, gisf2, 0, kd1 endif kgoto nxt endif ; get audio output from FluidSynth aL, aR fluidOut gifld outs aL, aR endin </CsInstruments> <CsScore> i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
fluidNote, fluidLoad
Credits
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth. Optional iNumChannels and iPolyphony parameters added in 5.07
828
fluidLoad
fluidLoad Loads a SoundFont into a fluidEngine, optionally listing SoundFont contents.
Syntax
isfnum fluidLoad soundfont, ienginenum[, ilistpresets]
Description
Loads a SoundFont into an instance of a fluidEngine, optionally listing banks and presets for SoundFont.
Initialization
isfnum -- number assigned to just-loaded soundfont. soundfont -- string specifying a SoundFont filename. Note that any number of SoundFonts may be loaded (obviously, by different invocations of fluidLoad). ienginenum -- engine number assigned from fluidEngine ilistpresets -- optional, if specified, lists all Fluidsynth programs for the just-loaded SoundFont. A Fluidsynth program is a combination of SoundFont ID, bank number, and preset number that is assigned to a MIDI channel.
Performance
Invoke fluidLoad in the orchestra header, any number of times. The same SoundFont may be invoked to assign programs to MIDI channels any number of times; the SoundFont is only loaded the first time.
Examples
Here is an example of the fluidLoad opcode. It uses the file fluidLoad.csd [examples/fluidLoad.csd] and 07AcousticGuitar.sf2 [examples/07AcousticGuitar.sf2].
829
giengine fluidEngine ; soundfont path to manual/examples isfnum fluidLoad "07AcousticGuitar.sf2", giengine, 1 fluidProgramSelect giengine, 1, isfnum, 0, 0 instr 1 mididefault 60, p3 midinoteonkey p4, p5 ikey init p4 ivel init p5 fluidNote giengine, 1, ikey, ivel endin instr 99 imvol init 7 asigl, asigr fluidOut giengine outs asigl*imvol, asigr*imvol endin </CsInstruments> <CsScore> i 1 0 2 60 100 ;play one note from score and... i 99 0 60 ;play virtual keyboard for 60 sec. e </CsScore> </CsoundSynthesizer>
See Also
fluidEngine, fluidNote
Credits
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth. New in Csound5.00
830
fluidNote
fluidNote Plays a note on a channel in a fluidSynth engine.
Syntax
fluidNote ienginenum, ichannelnum, imidikey, imidivel
Description
Plays a note at imidikey pitch and imidivel velocity on ichannelnum channel of number ienginenum fluidEngine.
Initialization
ienginenum -- engine number assigned from fluidEngine ichannelnum -- which channel number to play a note on in the given fluidEngine imidikey -- MIDI key for note (0-127) imidivel -- MIDI velocity for note (0-127)
Examples
Here is an example of the fluidNote opcode. It uses the file fluidNote.csd [examples/fluidNote.csd] and 19Trumpet.sf2 [examples/19Trumpet.sf2].
831
ikey init p4 ivel init p5 fluidNote giengine, 1, ikey, ivel endin instr 99 imvol init 7 asigl, asigr fluidOut giengine outs asigl*imvol, asigr*imvol endin </CsInstruments> <CsScore> i 1 0 2 60 100 ;play one note from score and... i 99 0 60 ;play virtual keyboard for 60 sec. e </CsScore> </CsoundSynthesizer>
See Also
fluidEngine, fluidLoad
Credits
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth.
832
fluidOut
fluidOut Outputs sound from a given fluidEngine
Syntax
aleft, aright fluidOut ienginenum
Description
Outputs the sound from a fluidEngine.
Initialization
ienginenum -- engine number assigned from fluidEngine
Performance
aleft -- Left channel audio output. aright -- Right channel audio output. Invoke fluidOut in an instrument definition numbered higher than any fluidcontrol instrument definitions. All SoundFonts used in the fluidEngine numbered ienginenum send their audio output to this one opcode. Send a note with an indefinite duration to this instrument to turn the SoundFonts on for as long as required.
Examples
Here is an example of the fluidOut opcode with two fluidOuts. It uses the file fluidOut.csd, 01hpschd.sf2 [examples/01hpschd.sf2] and [examples/fluidOut.csd]22Bassoon.sf2 [examples/22Bassoon.sf2].
833
giengine1 fluidEngine ; soundfont path to manual/examples isfnum1 fluidLoad "01hpschd.sf2", giengine1, 1 fluidProgramSelect giengine1, 1, isfnum1, 0, 0 giengine2 fluidEngine ; soundfont path to manual/examples isfnum2 fluidLoad "22Bassoon.sf2", giengine2, 1 fluidProgramSelect giengine2, 1, isfnum2, 0, 70 instr 1 mididefault 60, p3 midinoteonkey p4, p5 ikey init p4 ivel init p5 fluidNote giengine1, 1, ikey, ivel endin instr 2 mididefault 60, p3 midinoteonkey p4, p5 ikey init p4 ivel init p5 fluidNote giengine2, 1, ikey, ivel endin instr 98 imvol init 7 asigl, asigr fluidOut giengine1 outs asigl*imvol, asigr*imvol endin instr 99 imvol init 4 asigl, asigr fluidOut giengine2 ;add a stereo flanger adelL linseg 0, p3*.5, 0.02, p3*.5, 0 ;max delay time =20ms adelR linseg 0.02, p3*.5, 0, p3*.5, 0.02 ;max delay time =20ms asigL flanger asigl, adelL, .6 asigR flanger asigr, adelR, .6 outs asigL*imvol, asigR*imvol endin </CsInstruments> <CsScore> i 1 0 2 60 100 ;play one note of instr 1 i 2 2 2 60 100 ;play another note of instr 2 and... i 98 0 60 ;play virtual keyboard for 60 sec. i 99 0 60 e </CsScore> </CsoundSynthesizer>
See Also
fluidEngine, fluidNote, fluidLoad
Credits
834
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth. New in Csound5.00
835
fluidProgramSelect
fluidProgramSelect Assigns a preset from a SoundFont to a channel on a fluidEngine.
Syntax
fluidProgramSelect ienginenum, ichannelnum, isfnum, ibanknum, ipresetnum
Description
Assigns a preset from a SoundFont to a channel on a fluidEngine.
Initialization
ienginenum -- engine number assigned from fluidEngine ichannelnum -- which channel number to use for the preset in the given fluidEngine isfnum -- number of the SoundFont from which the preset is assigned ibanknum -- number of the bank in the SoundFont from which the preset is assigned ipresetnum -- number of the preset to assign
Examples
Here is an example of the fluidsynth opcodes. It uses the file fluid.orc [examples/fluid.orc].
sr = 44100 ksmps = 100 nchnls = 2 giengine isfnum instr 1 mididefault midinoteonkey ikey ivel endin instr 99 imvol init asigl, asigr fluidOut outs endin 70000 giengine asigl * imvol, asigr * imvol init init fluidNote 60, p3 p4, p5 p4 p5 giengine, 1, ikey, ivel fluidEngine fluidLoad "07AcousticGuitar.sf2", giengine, 1 fluidProgramSelect giengine, 1, isfnum, 0, 0
See Also
fluidEngine, fluidNote, fluidLoad 836
Credits
Michael Gogins (gogins at pipeline dot com), Steven Yi. Thanks to Peter Hanappe for Fluidsynth.
837
fluidSetInterpMethod
fluidSetInterpMethod Set interpolation method for channel in Fluid Engine
Syntax
fluidSetInterpMethod ienginenum, ichannelnum, iInterpMethod
Description
Set interpolation method for channel in Fluid Engine. Lower order interpolation methods will render faster at lower fidelity while higher order interpolation methods will render slower at higher fidelity. Default interpolation for a channel is 4th order interpolation.
Initialization
ienginenum -- engine number assigned from fluidEngine ichannelnum -- which channel number to use for the preset in the given fluidEngine iInterpMethod -- interpolation method, can be any of the following 0 -- No Interpolation 1 -- Linear Interpolation 4 -- 4th Order Interpolation (Default) 7 -- 7th Order Interpolation (Highest)
Examples
Here is an example of the fluidSetInterpMethod opcode. It uses the file fluidSetInterpMethod.csd [examples/fluidSetInterpMethod.csd] and 07AcousticGuitar.sf2 [examples/07AcousticGuitar.sf2].
838
nchnls = 2 0dbfs = 1 giengine fluidEngine ; soundfont path to manual/examples isfnum fluidLoad "07AcousticGuitar.sf2", giengine, 1 fluidProgramSelect giengine, 1, isfnum, 0, 0 instr 1 mididefault 60, p3 midinoteonkey p4, p5 ikey init p4 ivel init p5 iInterpMethod = p6 fluidSetInterpMethod giengine, 1, iInterpMethod fluidNote giengine, 1, ikey, ivel endin instr 99 imvol init 7 asigl, asigr fluidOut giengine outs asigl*imvol, asigr*imvol endin </CsInstruments> <CsScore> ;hear the difference i 1 0 2 60 120 0 ;no interpolation i 1 3 2 72 120 0 i 1 6 2 60 120 7 ;7th order interpolation i 1 9 2 72 120 7 i 99 0 12 e </CsScore> </CsoundSynthesizer>
See Also
fluidEngine More information on soundfonts in the tp://booki.flossmanuals.net/csound/_v/1.0/d-reading-midi-files/ Floss Manuals: ht-
Credits
Author: Steven Yi New in version 5.07
839
FLvalue
FLvalue Shows the current value of a FLTK valuator.
Description
FLvalue shows current the value of a valuator in a text field.
Syntax
ihandle FLvalue "label", iwidth, iheight, ix, iy
Initialization
ihandle -- handle value (an integer number) that unequivocally references the corresponding valuator. It can be used for the idisp argument of a valuator. label -- a double-quoted string containing some user-provided text, placed near the corresponding widget. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the valuator, relative to the upper left corner of corresponding window (expressed in pixels).
Performance
FLvalue shows the current values of a valuator in a text field. It outputs ihandle that can then be used for the idisp argument of a valuator (see the FLTK Valuators section). In this way, the values of that valuator will be dynamically be shown in a text field.
Note
Note that FLvalue is not a valuator and its value cannot be modified.The value for an FLvalue widget should be set only by other widgets, and NOT from FLsetVal or FLsetVal_i since this can cause Csound to crash.
Examples
Here is an example of the FLvalue opcode. It uses the file FLvalue.csd [examples/FLvalue.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o FLvalue.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Using the opcode flvalue to display the output of a slider sr = 44100 kr = 441 ksmps = 100 nchnls = 1 FLpanel "Value Display Box", 900, 200, 50, 50 ; Width of the value display box in pixels iwidth = 50 ; Height of the value display box in pixels iheight = 20 ; Distance of the left edge of the value display ; box from the left edge of the panel ix = 65 ; Distance of the top edge of the value display ; box from the top edge of the panel iy = 55 idisp FLvalue "Hertz", iwidth, iheight, ix, iy gkfreq, ihandle FLslider "Frequency", 200, 5000, -1, 5, idisp, 750, 30, 125, 50 FLsetVal_i 500, ihandle ; End of panel contents FLpanelEnd ; Run the widget thread! FLrun instr 1 iamp = 15000 ifn = 1 asig oscili iamp, gkfreq, ifn out asig endin </CsInstruments> <CsScore> ; Function table that defines a single cycle ; of a sine wave. f 1 0 1024 10 1 ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLbox, FLbutBank, FLbutton, FLprintk, FLprintk2
Credits
Author: Gabriel Maldonado New in version 4.22 Example written by Iain McCurdy, edited by Kevin Conder. 841
FLvkeybd
FLvkeybd An FLTK widget opcode that creates a virtual keyboard widget.
Description
An FLTK widget opcode that creates a virtual keyboard widget. This must be used in conjunction with the virtual midi keyboard driver for this to operate correctly. The purpose of this opcode is for making demo versions of MIDI orchestras with the virtual keyboard embedded within the main window.
Note
The widget version of the virtual keyboard does not include the MIDI sliders found in the full window version of the virtual keyboard.
Syntax
FLvkeybd "keyboard.map", iwidth, iheight, ix, iy
Initialization
keyboard.map -- a double-quoted string containing the keyboard map to use. An empty string ("") may be used to use the default bank/channel name values. See Virtual Midi Keyboard for more information on keyboard mappings. iwidth -- width of widget. iheight -- height of widget. ix -- horizontal position of upper left corner of the keyboard, relative to the upper left corner of corresponding window (expressed in pixels). iy -- vertical position of upper left corner of the keyboard, relative to the upper left corner of corresponding window (expressed in pixels).
Note
The standard width and height for the virtual keyboard is 624x120 for the dialog version that is shown when FLvkeybd is not used.
See Also
FLbutton, FLbox, FLbutBank, FLprintk, FLprintk2, FLvalue
Credits
Author: Steven Yi New in version 5.05
842
FLvslidBnk
FLvslidBnk A FLTK widget containing a bank of vertical sliders.
Description
FLvslidBnk is a widget containing a bank of vertical sliders.
Syntax
FLvslidBnk "names", inumsliders [, ioutable] [, iwidth] [, iheight] [, ix] \ [, iy] [, itypetable] [, iexptable] [, istart_index] [, iminmaxtable]
Initialization
names -- a double-quoted string containing the names of each slider. Each slider can have a different name. Separate each name with @ character, for example: frequency@amplitude@cutoff. It is possible to not provide any name by giving a single space . In this case, the opcode will automatically assign a progressive number as a label for each slider. inumsliders -- the number of sliders. ioutable (optional, default=0) -- number of a previously-allocated table in which to store output values of each slider. The user must be sure that table size is large enough to contain all output cells, otherwise a segfault will crash Csound. By assigning zero to this argument, the output will be directed to the zak space in the k-rate zone. In this case, the zak space must be previously allocated with the zakinit opcode and the user must be sure that the allocation size is big enough to cover all sliders. The default value is zero (i.e. store output in zak space). istart_index (optional, default=0) -- an integer number referring to a starting offset of output cell locations. It can be positive to allow multiple banks of sliders to output in the same table or in the zak space. The default value is zero (no offset). iminmaxtable (optional, default=0) -- number of a previously-defined table containing a list of min-max pairs, referred to each slider. A zero value defaults to the 0 to 1 range for all sliders without necessity to provide a table. The default value is zero. iexptable (optional, default=0) -- number of a previously-defined table containing a list of identifiers (i.e. integer numbers) provided to modify the behaviour of each slider independently. Identifiers can assume the following values: -1 -- exponential curve response 0 -- linear response number > than 0 -- follow the curve of a previously-defined table to shape the response of the corresponding slider. In this case, the number corresponds to table number. You can assume that all sliders of the bank have the same response curve (exponential or linear). In this case, you can assign -1 or 0 to iexptable without worrying about previously defining any table. The default value is zero (all sliders have a linear response, without having to provide a table). itypetable (optional, default=0) -- number of a previously-defined table containing a list of identifiers 843
(i.e. integer numbers) provided to modify the aspect of each individual slider independently. Identifiers can assume the following values: 0 = Nice slider 1 = Fill slider 3 = Normal slider 5 = Nice slider 7 = Nice slider with down-box You can assume that all sliders of the bank have the same aspect. In this case, you can assign a negative number to itypetable without worrying about previously defining any table. Negative numbers have the same meaning of the corresponding positive identifiers with the difference that the same aspect is assigned to all sliders. You can also assign a random aspect to each slider by setting itypetable to a negative number lower than -7. The default value is zero (all sliders have the aspect of nice sliders, without having to provide a table). You can add 20 to a value inside the table to make the slider "plastic", or subtract 20 if you want to set the value for all widgets without defining a table (e.g. -21 to set all sliders types to Plastic Fill slider). iwidth (optional) -- width of the rectangular area containing all sliders of the bank, excluding text labels, that are placed below that area. iheight (optional) -- height of the rectangular area containing all sliders of the bank, excluding text labels, that are placed below that area. ix (optional) -- horizontal position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, below that rectangle, in order to make sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area. iy (optional) -- vertical position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, below that rectangle, in order to make sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area.
Performance
There are no k-rate arguments, even if cells of the output table (or the zak space) are updated at k-rate. FLvslidBnk is a widget containing a bank of vertical sliders. Any number of sliders can be placed into the bank (inumsliders argument). The output of all sliders is stored into a previously allocated table or into the zak space (ioutable argument). It is possible to determine the first location of the table (or of the zak space) in which to store the output of the first slider by means of istart_index argument. Each slider can have an individual label that is placed below it. Labels are defined by the names argument. The output range of each slider can be individually set by means of an external table (iminmaxtable argument). The curve response of each slider can be set individually, by means of a list of identifiers placed in a table (iexptable argument). It is possible to define the aspect of each slider independently or to make all sliders have the same aspect (itypetable argument). The iwidth, iheight, ix, and iy arguments determine width, height, horizontal and vertical position of the rectangular area containing sliders. Notice that the label of each slider is placed below them and is not included in the rectangular area containing sliders. So the user should leave enough space below the bank by assigning a proper iy value in order to leave labels visible. FLvslidBnk is identical to FLslidBnk except it contains vertical sliders instead of horizontal. Since the 844
width of each single slider is often small, it is recommended to leave only a single space in the names string ( ), in this case each slider will be automatically numbered.
IMPORTANT!
Notice that the tables used by FLvslidBnk must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. This is because tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra.
Examples
Here is an example of [examples/FLvslidBnk.csd]. the FLvslidBnk opcode. It uses the file FLvslidBnk.csd
845
</CsInstruments> <CsScore> ; Instrument 1 will play a note for 1 hour. i 1 0 3600 e </CsScore> </CsoundSynthesizer>
See Also
FLslider, FLslidBnk
Credits
Author: Gabriel Maldonado New in version 5.06
846
FLvslidBnk2
FLvslidBnk2 A FLTK widget containing a bank of vertical sliders.
Description
FLvslidBnk2 is a widget containing a bank of vertical sliders.
Syntax
FLvslidBnk2 "names", inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index]
Initialization
names -- a double-quoted string containing the names of each slider. Each slider can have a different name. Separate each name with @ character, for example: frequency@amplitude@cutoff. It is possible to not provide any name by giving a single space . In this case, the opcode will automatically assign a progressive number as a label for each slider. inumsliders -- the number of sliders. ioutable (optional, default=0) -- number of a previously-allocated table in which to store output values of each slider. The user must be sure that table size is large enough to contain all output cells, otherwise a segfault will crash Csound. By assigning zero to this argument, the output will be directed to the zak space in the k-rate zone. In this case, the zak space must be previously allocated with the zakinit opcode and the user must be sure that the allocation size is big enough to cover all sliders. The default value is zero (i.e. store output in zak space). iconfigtable -- in the FLslidBnk2 and FLvslidBnk2 opcodes, this table replaces iminmaxtable, iexptable and istyletable, all these parameters being placed into a single table. This table has to be filled with a group of 4 parameters for each slider in this way: min1, max1, exp1, style1, min2, max2, exp2, style2, min3, max3, exp3, style3 etc. for example using GEN02 you can type: inum ftgen 1,0,256, -2, 0,1,0,1, 100, 5000, -1, 3, 50, 200, -1, 5,.. [etcetera]
In this example the first slider will be affected by the [0,1,0,1] parameters (the range will be 0 to 1, it will have linear response, and its aspect will be a fill slider), the second slider will be affected by the [100,5000,-1,3] parameters (the range is 100 to 5000, the response is exponential and the aspect is a normal slider), the third slider will be affected by the [50,200,-1,5] parameters (the range is 50 to 200, the behavior exponential, and the aspect is a nice slider), and so on. iwidth (optional) -- width of the rectangular area containing all sliders of the bank, excluding text labels, that are placed below that area. iheight (optional) -- height of the rectangular area containing all sliders of the bank, excluding text labels, that are placed below that area. ix (optional) -- horizontal position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, below that rectangle, in order to make sure la847
bels of sliders to be visible. This is because the labels themselves are external to the rectangular area. iy (optional) -- vertical position of the upper left corner of the rectangular area containing all sliders belonging to the bank. You have to leave enough space, below that rectangle, in order to make sure labels of sliders to be visible. This is because the labels themselves are external to the rectangular area. istart_index (optional, default=0) -- an integer number referring to a starting offset of output cell locations. It can be positive to allow multiple banks of sliders to output in the same table or in the zak space. The default value is zero (no offset).
Performance
There are no k-rate arguments, even if cells of the output table (or the zak space) are updated at k-rate. FLvslidBnk2 is a widget containing a bank of vertical sliders. Any number of sliders can be placed into the bank (inumsliders argument). The output of all sliders is stored into a previously allocated table or into the zak space (ioutable argument). It is possible to determine the first location of the table (or of the zak space) in which to store the output of the first slider by means of istart_index argument. Each slider can have an individual label that is placed below it. Labels are defined by the names argument. The output range of each slider can be individually set by means of the min and max values inside the iconfigtable table. The curve response of each slider can be set individually, by means of a list of identifiers placed in the iconfigtable table (exp argument). It is possible to define the aspect of each slider independently or to make all sliders have the same aspect (style argument in the iconfigtable table). The iwidth, iheight, ix, and iy arguments determine width, height, horizontal and vertical position of the rectangular area containing sliders. Notice that the label of each slider is placed below them and is not included in the rectangular area containing sliders. So the user should leave enough space below the bank by assigning a proper iy value in order to leave labels visible. FLvslidBnk2 is identical to FLslidBnk2 except it contains vertical sliders instead of horizontal. Since the width of each single slider is often small, it is recommended to leave only a single space in the names string ( ), in this case each slider will be automatically numbered.
IMPORTANT!
Notice that the tables used by FLvslidBnk2 must be created with the ftgen opcode and placed in the orchestra before the corresponding valuator. They can not placed in the score. This is because tables placed in the score are created later than the initialization of the opcodes placed in the header section of the orchestra.
See Also
FLslider, FLslidBnk, FLslidBnk2, FLvslidBnk2
Credits
Author: Gabriel Maldonado New in version 5.06
848
FLxyin
FLxyin Senses the mouse cursor position in a user-defined area inside an FLpanel.
Description
Similar to xyin, sense the mouse cursor position in a user-defined area inside an FLpanel.
Syntax
koutx, kouty, kinside FLxyin ioutx_min, ioutx_max, iouty_min, iouty_max, \ iwindx_min, iwindx_max, iwindy_min, iwindy_max [, iexpx, iexpy, ioutx, iouty]
Initialization
ioutx_min, ioutx_max - the minimum and maximum limits of the interval to be output (X or horizontal axis). iouty_min, iouty_max - the minimum and maximum limits of the interval to be output (Y or vertical axis). iwindx_min, iwindx_max - the X coordinate of the horizontal edges of the sensible area, relative to the FLpanel ,in pixels. iwindy_min, iwindy_max - the Y coordinates of the vertical edges of the sensible area, relative to the FLpanel, in pixels. iexpx, iexpy - (optional) integer numbers denoting the behavior of the x or y output: 0 -> output is linear; -1 -> output is exponential; any other number indicates the number of an existing table that is used for indexing. With a positive value for table number, linear interpolation is provided in table indexing. A negative table number suppresses interpolation. Notice that in normal operations, the table should be normalized and unipolar (i.e. all table elements should be in the zero to one range). In this case all table elements will be rescaled according to imax and imin. Anyway, it is possible to use non-normalized tables (created with a negative table number, that can contain elements of any value), in order to access the actual values of table elements, without rescaling, by assigning 0 to iout_min and 1 to iout_max. ioutx, iouty (optional) initial output values.
Performance
koutx, kouty - output values, scaled according to user choices. kinside - a flag that informs if the mouse cursor falls out of the rectangle of the user-defined area. If it is out of the area, kinside is set to zero. FLxyin senses the mouse cursor position in a user-defined area inside an FLpanel. When FLxyin is called, the position of the mouse within the chosen area is returned at k-rate. It is possible to define the sensible area, as well the minimum and maximum values corresponding to the minimum and maximum mouse positions. Mouse buttons dont need to be pressed to make FLxyin to operate. It is able to function correctly even if other widgets (present in the FLpanel) overlap the sensible area. FLxyin unlike most other FLTK opcodes can't be used inside the header, since it is not a widget. It is just a definition of an area for mouse sensing within an FLTK panel. 849
Examples
Here is an example of the FLxyin opcode. It uses the file FLxyin.csd [examples/FLxyin.csd].
Here is another example of the FLxyin opcode. It uses the file FLxyin-2.csd [examples/FLxyin-2.csd].
850
instr 1
k1, k2, kinside FLxyin 50, 1000, 50, 1000, 100, 300, 50, 250, -2,-3 ;if k1 <= 50 || k1 >=5000 || k2 <=100 || k2 >= 8000 kgoto end ; if cursor is outside bounds, then don't a1 oscili 3000, k1, 1 a2 oscili 3000, k2, 1 outs a1,a2 printk2 k1 printk2 k2, 10 printk2 kinside, 20 end: endin </CsInstruments> <CsScore> f1 f2 f3 i1 0 0 0 0 1024 10 1 17 19 1 1 90 1 17 19 2 1 90 1 3600
</CsScore> </CsoundSynthesizer>
See Also
FLpanel
Credits
Author: Gabriel Maldonado New in version 5.06
851
fmb3
fmb3 Uses FM synthesis to create a Hammond B3 organ sound.
Description
Uses FM synthesis to create a Hammond B3 organ sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.
Syntax
ares fmb3 kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn
Initialization
fmb3 takes 5 tables for initialization. The first 4 are the basic inputs and the last is the low frequency oscillator (LFO) used for vibrato. The last table should usually be a sine wave. The initial waves should be: ifn1 -- sine wave ifn2 -- sine wave ifn3 -- sine wave ifn4 -- sine wave
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kc1, kc2 -- Controls for the synthesizer: kc1 -- Total mod index kc2 -- Crossfade of two modulators Algorithm -- 4 kvdepth -- Vibrator depth kvrate -- Vibrator rate
Examples
852
Here is an example of the fmb3 opcode. It uses the file fmb3.csd [examples/fmb3.csd].
See Also
fmbell, fmmetal, fmpercfl, fmrhode, fmwurlie
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. 853
854
fmbell
fmbell Uses FM synthesis to create a tublar bell sound.
Description
Uses FM synthesis to create a tublar bell sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.
Syntax
ares fmbell kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn
Initialization
All these opcodes take 5 tables for initialization. The first 4 are the basic inputs and the last is the low frequency oscillator (LFO) used for vibrato. The last table should usually be a sine wave. The initial waves should be: ifn1 -- sine wave ifn2 -- sine wave ifn3 -- sine wave ifn4 -- sine wave
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kc1, kc2 -- Controls for the synthesizer: kc1 -- Mod index 1 kc2 -- Crossfade of two outputs Algorithm -- 5 kvdepth -- Vibrator depth kvrate -- Vibrator rate
Examples
855
Here is an example of the fmbell opcode. It uses the file fmbell.csd [examples/fmbell.csd].
See Also
fmb3, fmmetal, fmpercfl, fmrhode, fmwurlie
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK 856
857
fmmetal
fmmetal Uses FM synthesis to create a Heavy Metal sound.
Description
Uses FM synthesis to create a Heavy Metal sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.
Syntax
ares fmmetal kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn
Initialization
All these opcodes take 5 tables for initialization. The first 4 are the basic inputs and the last is the low frequency oscillator (LFO) used for vibrato. The last table should usually be a sine wave. The initial waves should be: ifn1 -- sine wave ifn2 -- twopeaks.aiff [examples/twopeaks.aiff] ifn3 -- twopeaks.aiff [examples/twopeaks.aiff] ifn4 -- sine wave
Note
The file twopeaks.aiff is also ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. available at
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kc1, kc2 -- Controls for the synthesizer: kc1 -- Total mod index kc2 -- Crossfade of two modulators Algorithm -- 3 kvdepth -- Vibrator depth 858
Examples
Here is an example of the fmmetal opcode. It uses the file fmmetal.csd [examples/fmmetal.csd], and twopeaks.aiff [examples/twopeaks.aiff].
See Also
fmb3, fmbell, fmpercfl, fmrhode, fmwurlie 859
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK Example written by Kevin Conder. New in Csound version 3.47
860
fmpercfl
fmpercfl Uses FM synthesis to create a percussive flute sound.
Description
Uses FM synthesis to create a percussive flute sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.
Syntax
ares fmpercfl kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, \ ifn3, ifn4, ivfn
Initialization
All these opcodes take 5 tables for initialization. The first 4 are the basic inputs and the last is the low frequency oscillator (LFO) used for vibrato. The last table should usually be a sine wave. The initial waves should be: ifn1 -- sine wave ifn2 -- sine wave ifn3 -- sine wave ifn4 -- sine wave
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kc1, kc2 -- Controls for the synthesizer: kc1 -- Total mod index kc2 -- Crossfade of two modulators Algorithm -- 4 kvdepth -- Vibrator depth kvrate -- Vibrator rate
Examples
861
Here is an example of the fmpercfl opcode. It uses the file fmpercfl.csd [examples/fmpercfl.csd].
See Also
fmb3, fmbell, fmmetal, fmrhode, fmwurlie
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK 862
863
fmrhode
fmrhode Uses FM synthesis to create a Fender Rhodes electric piano sound.
Description
Uses FM synthesis to create a Fender Rhodes electric piano sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.
Syntax
ares fmrhode kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, \ ifn3, ifn4, ivfn
Initialization
All these opcodes take 5 tables for initialization. The first 4 are the basic inputs and the last is the low frequency oscillator (LFO) used for vibrato. The last table should usually be a sine wave. The initial waves should be: ifn1 -- sine wave ifn2 -- sine wave ifn3 -- sine wave ifn4 -- fwavblnk.aiff [examples/fwavblnk.aiff]
Note
The file fwavblnk.aiff is also ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. available at
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kc1, kc2 -- Controls for the synthesizer: kc1 -- Mod index 1 kc2 -- Crossfade of two outputs Algorithm -- 5 kvdepth -- Vibrator depth 864
Examples
Here is an example of the fmrhode opcode. It uses the file fmrhode.csd [examples/fmrhode.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
See Also
fmb3, fmbell, fmmetal, fmpercfl, fmwurlie 865
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK Example written by Kevin Conder. New in Csound version 3.47
866
fmvoice
fmvoice FM Singing Voice Synthesis
Description
FM Singing Voice Synthesis
Syntax
ares fmvoice kamp, kfreq, kvowel, ktilt, kvibamt, kvibrate, ifn1, \ ifn2, ifn3, ifn4, ivibfn
Initialization
ifn1, ifn2, ifn3,ifn3 -- Tables, usually of sinewaves.
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kvowel -- the vowel being sung, in the range 0-64 ktilt -- the spectral tilt of the sound in the range 0 to 99 kvibamt -- Depth of vibrato kvibrate -- Rate of vibrato
Examples
Here is an example of the fmvoice opcode. It uses the file fmvoice.csd [examples/fmvoice.csd].
867
nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kfreq = 110 ; Use the fourth p-field for the vowel. kvowel = p4 ktilt = 0 kvibamt = 0.005 kvibrate = 6 ifn1 = 1 ifn2 = 1 ifn3 = 1 ifn4 = 1 ivibfn = 1 a1 fmvoice kamp, kfreq, kvowel, ktilt, kvibamt, kvibrate, ifn1, ifn2, ifn3, ifn4, ivibfn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; ; i ; i ; i ; i ; i e p4 = vowel (a value from 0 Play Instrument #1 for one 1 0 1 1 Play Instrument #1 for one 1 1 1 2 Play Instrument #1 for one 1 2 1 3 Play Instrument #1 for one 1 3 1 4 Play Instrument #1 for one 1 4 1 5 to 64) second, vowel=1. second, vowel=2. second, vowel=3. second, vowel=4. second, vowel=5.
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
868
fmwurlie
fmwurlie Uses FM synthesis to create a Wurlitzer electric piano sound.
Description
Uses FM synthesis to create a Wurlitzer electric piano sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.
Syntax
ares fmwurlie kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn
Initialization
All these opcodes take 5 tables for initialization. The first 4 are the basic inputs and the last is the low frequency oscillator (LFO) used for vibrato. The last table should usually be a sine wave. The initial waves should be: ifn1 -- sine wave ifn2 -- sine wave ifn3 -- sine wave ifn4 -- fwavblnk.aiff [examples/fwavblnk.aiff]
Note
The file fwavblnk.aiff is also ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. available at
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kc1, kc2 -- Controls for the synthesizer: kc1 -- Mod index 1 kc2 -- Crossfade of two outputs Algorithm -- 5 kvdepth -- Vibrator depth 869
Examples
Here is an example of the fmwurlie opcode. It uses the file fmwurlie.csd [examples/fmwurlie.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
See Also
fmb3, fmbell, fmmetal, fmpercfl, fmrhode 870
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK Example written by Kevin Conder. New in Csound version 3.47
871
fof
fof Produces sinusoid bursts useful for formant and granular synthesis.
Description
Audio output is a succession of sinusoid bursts initiated at frequency xfund with a spectral peak at xform. For xfund above 25 Hz these bursts produce a speech-like formant with spectral characteristics determined by the k-input parameters. For lower fundamentals this generator provides a special form of granular synthesis.
Syntax
ares fof xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \ ifna, ifnb, itotdur [, iphs] [, ifmode] [, iskip]
Initialization
iolaps -- number of preallocated spaces needed to hold overlapping burst data. Overlaps are frequency dependent, and the space required depends on the maximum value of xfund * kdur. Can be over-estimated at no computation cost. Uses less than 50 bytes of memory per iolap. ifna, ifnb -- table numbers of two stored functions. The first is a sine table for sineburst synthesis (size of at least 4096 recommended). The second is a rise shape, used forwards and backwards to shape the sineburst rise and decay; this may be linear (GEN07) or perhaps a sigmoid (GEN19). itotdur -- total time during which this fof will be active. Normally set to p3. No new sineburst is created if it cannot complete its kdur within the remaining itotdur. iphs (optional, default=0) -- initial phase of the fundamental, expressed as a fraction of a cycle (0 to 1). The default value is 0. ifmode (optional, default=0) -- formant frequency mode. If zero, each sineburst keeps the xform frequency it was launched with. If non-zero, each is influenced by xform continuously. The default value is 0. iskip (optional, default=0) -- If non-zero, skip initialisation (allows legato use).
Performance
xamp -- peak amplitude of each sineburst, observed at the true end of its rise pattern. The rise may exceed this value given a large bandwidth (say, Q < 10) and/or when the bursts are overlapping. xfund -- the fundamental frequency (in Hertz) of the impulses that create new sinebursts. xform -- the formant frequency, i.e. freq of the sinusoid burst induced by each xfund impulse. This frequency can be fixed for each burst or can vary continuously (see ifmode). koct -- octaviation index, normally zero. If greater than zero, lowers the effective xfund frequency by attenuating odd-numbered sinebursts. Whole numbers are full octaves, fractions transitional. kband -- the formant bandwidth (at -6dB), expressed in Hz. The bandwidth determines the rate of exponential decay throughout the sineburst, before the enveloping described below is applied. 872
kris, kdur, kdec -- rise, overall duration, and decay times (in seconds) of the sinusoid burst. These values apply an enveloped duration to each burst, in similar fashion to a Csound linen generator but with rise and decay shapes derived from the ifnb input. kris inversely determines the skirtwidth (at -40 dB) of the induced formant region. kdur affects the density of sineburst overlaps, and thus the speed of computation. Typical values for vocal imitation are .003,.02,.007. Csound's fof generator is loosely based on Michael Clarke's C-coding of IRCAM's CHANT program (Xavier Rodet et al.). Each fof produces a single formant, and the output of four or more of these can be summed to produce a rich vocal imitation. fof synthesis is a special form of granular synthesis, and this implementation aids transformation between vocal imitation and granular textures. Computation speed depends on kdur, xfund, and the density of any overlaps.
Examples
Here is an example of the fof opcode. It uses the file fof.csd [examples/fof.csd].
873
; Fourth formant. k4amp = ampdb(-36) k4form init 3500 k4band init 130 ; Fifth formant. k5amp = ampdb(-60) k5form init 4950 k5band init 140 a1 fof k1amp, kfund, k1form, koct, k1band, kris, kdur, kdec, iolaps, ifna, ifnb, itotdur a2 fof k2amp, kfund, k2form, koct, k2band, kris, kdur, kdec, iolaps, ifna, ifnb, itotdur a3 fof k3amp, kfund, k3form, koct, k3band, kris, kdur, kdec, iolaps, ifna, ifnb, itotdur a4 fof k4amp, kfund, k4form, koct, k4band, kris, kdur, kdec, iolaps, ifna, ifnb, itotdur a5 fof k5amp, kfund, k5form, koct, k5band, kris, kdur, kdec, iolaps, ifna, ifnb, itotdur ; Combine all of the formants together. out (a1+a2+a3+a4+a5) * 16384 endin </CsInstruments> <CsScore> ; f ; f Table #1, a sine wave. 1 0 4096 10 1 Table #2. 2 0 1024 19 0.5 0.5 270 0.5 \ \ \ \ \
The formant values for the alto-"a" sound were taken from the Formant Values Appendix.
See Also
fof2, Formant Values Appendix
Credits
Added in version 1 (1990)
874
fof2
fof2 Produces sinusoid bursts including k-rate incremental indexing with each successive burst.
Description
Audio output is a succession of sinusoid bursts initiated at frequency xfund with a spectral peak at xform. For xfund above 25 Hz these bursts produce a speech-like formant with spectral characteristics determined by the k-input parameters. For lower fundamentals this generator provides a special form of granular synthesis. fof2 implements k-rate incremental indexing into ifna function with each successive burst.
Syntax
ares fof2 xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \ ifna, ifnb, itotdur, kphs, kgliss [, iskip]
Initialization
iolaps -- number of preallocated spaces needed to hold overlapping burst data. Overlaps are frequency dependent, and the space required depends on the maximum value of xfund * kdur. Can be over-estimated at no computation cost. Uses less than 50 bytes of memory per iolap. ifna, ifnb -- table numbers of two stored functions. The first is a sine table for sineburst synthesis (size of at least 4096 recommended). The second is a rise shape, used forwards and backwards to shape the sineburst rise and decay; this may be linear (GEN07) or perhaps a sigmoid (GEN19). itotdur -- total time during which this fof will be active. Normally set to p3. No new sineburst is created if it cannot complete its kdur within the remaining itotdur. iskip (optional, default=0) -- If non-zero, skip initialization (allows legato use).
Performance
xamp -- peak amplitude of each sineburst, observed at the true end of its rise pattern. The rise may exceed this value given a large bandwidth (say, Q < 10) and/or when the bursts are overlapping. xfund -- the fundamental frequency (in Hertz) of the impulses that create new sinebursts. xform -- the formant frequency, i.e. freq of the sinusoid burst induced by each xfund impulse. This frequency can be fixed for each burst or can vary continuously (see ifmode). koct -- octaviation index, normally zero. If greater than zero, lowers the effective xfund frequency by attenuating odd-numbered sinebursts. Whole numbers are full octaves, fractions transitional. kband -- the formant bandwidth (at -6dB), expressed in Hz. The bandwidth determines the rate of exponential decay throughout the sineburst, before the enveloping described below is applied. kris, kdur, kdec -- rise, overall duration, and decay times (in seconds) of the sinusoid burst. These values apply an enveloped duration to each burst, in similar fashion to a Csound linen generator but with rise and decay shapes derived from the ifnb input. kris inversely determines the skirtwidth (at -40 dB) of the induced formant region. kdur affects the density of sineburst overlaps, and thus the speed of computa875
tion. Typical values for vocal imitation are .003,.02,.007. kphs -- allows k-rate indexing of function table ifna with each successive burst, making it suitable for time-warping applications. Values of kphs are normalized from 0 to 1, 1 being the end of the function table ifna. kgliss -- sets the end pitch of each grain relative to the initial pitch, in octaves. Thus kgliss = 2 means that the grain ends two octaves above its initial pitch, while kgliss = -3/4 has the grain ending a major sixth below. Each 1/12 added to kgliss raises the ending frequency one half-step. If you want no glissando, set kgliss to 0. Csound's fof generator is loosely based on Michael Clarke's C-coding of IRCAM's CHANT program (Xavier Rodet et al.). Each fof produces a single formant, and the output of four or more of these can be summed to produce a rich vocal imitation. fof synthesis is a special form of granular synthesis, and this implementation aids transformation between vocal imitation and granular textures. Computation speed depends on kdur, xfund, and the density of any overlaps.
Note
The ending frequency of any grain is equal to kform * (2 ^ kgliss), so setting kgliss too high may result in aliasing. For example, kform = 3000 and kgliss = 3 places the ending frequency over the Nyquist if sr = 44100. It is a good idea to scale kgliss accordingly.
Examples
Here is an example of the fof2 opcode. It uses the file fof2.csd [examples/fof2.csd].
876
kfund line p4, p3, p5 kform line p6, p3, p7 koct line p8, p3, p9 kband line p10, p3, p11 kgliss line p16, p3, p17 kenv linen 5000, 0.03, p3, 0.03 aout ;to avoid clicking
fof2 kenv, kfund, kform, koct, kband, kris, kdur, kdec, iolaps, \ ifna, ifnb, itotdur, kphs, kgliss aout, aout
outs endin
</CsInstruments> <CsScore> f1 0 8192 10 1 f2 0 4096 7 0 4096 1 ; i1 i1 i1 i1 i1 i1 i1 i1 e </CsScore> </CsoundSynthesizer> 0 + + + + + + + 4 . . . . . . . kfund1 220 220 220 220 220 220 220 220 kfund2 220 220 220 220 220 220 220 440 kform1 510 510 510 510 510 510 510 510 kform2 510 910 510 510 510 510 510 510 koct1 0 0 0 0 0 0 0 0 koct2 0 0 0 1 0 0 0 0 kband1 kband2 kris 30 30 0.01 30 30 0.01 100 30 0.01 30 30 0.01 30 30 0.01 30 30 0.01 30 30 0.01 30 30 0.01 kdur 0.03 0.03 0.03 0.03 0.03 0.03 0.05 0.05 kdec 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 iolaps 20 20 20 20 20 20 100 100
kg
Here is another example of the fof2 opcode, which generates vowel tones using formants generated by fof2 coinciding with values from the Formant Values appendix. It uses the file fof2-2.csd [examples/ fof2-2.csd].
iolaps = 120 ifna = 1 ;f1 - sine wave ifnb = 2 ;f2 - linear rise shape itotdur = p3 iamp = p4 * 0dbfs ifreq1 = p5 ;starting frequency ifreq2 = p6 ;ending frequency kamp kfund koct kris kdur linseg 0, .003, iamp, itotdur-.007, iamp, .003, 0, .001, 0 expseg ifreq1, itotdur, ifreq2 init 0 init .003 init .02
877
kdec kphs kgliss iforma iformb iform1a iform2a iform3a iform4a iform5a idb1a idb2a idb3a idb4a idb5a iband1a iband2a iband3a iband4a iband5a iamp1a iamp2a iamp3a iamp4a iamp5a iform1b iform2b iform3b iform4b iform5b idb1b idb2b idb3b idb4b idb5b iband1b iband2b iband3b iband4b iband5b iamp1b iamp2b iamp3b iamp4b iamp5b kform1 kform2 kform3 kform4 kform5 kband1 kband2 kband3 kband4 kband5 kamp1 kamp2 kamp3 kamp4 kamp5
tab_i 0, iforma ;read values of 5 formants for 1st spectrum tab_i 1, iforma tab_i 2, iforma tab_i 3, iforma tab_i 4, iforma tab_i 5, iforma ;read decibel levels for same 5 formants tab_i 6, iforma tab_i 7, iforma tab_i 8, iforma tab_i 9, iforma tab_i 10, iforma ;read bandwidths for same 5 formants tab_i 11, iforma tab_i 12, iforma tab_i 13, iforma tab_i 14, iforma = ampdb(idb1a) ;convert db to linear multipliers = ampdb(idb2a) = ampdb(idb3a) = ampdb(idb4a) = ampdb(idb5a) tab_i 0, iformb ;values of 5 formants for 2nd spectrum tab_i 1, iformb tab_i 2, iformb tab_i 3, iformb tab_i 4, iformb tab_i 5, iformb ;decibel levels for 2nd set of formants tab_i 6, iformb tab_i 7, iformb tab_i 8, iformb tab_i 9, iformb tab_i 10, iformb ;bandwidths for 2nd set of formants tab_i 11, iformb tab_i 12, iformb tab_i 13, iformb tab_i 14, iformb = ampdb(idb1b) ;convert db to linear multipliers = ampdb(idb2b) = ampdb(idb3b) = ampdb(idb4b) = ampdb(idb5b) line line line line line line line line line line line line line line line iform1a, itotdur, iform1b ;transition between formants iform2a, itotdur, iform2b iform3a, itotdur, iform3b iform4a, itotdur, iform4b iform5a, itotdur, iform5b iband1a, itotdur, iband1b ;transition of bandwidths iband2a, itotdur, iband2b iband3a, itotdur, iband3b iband4a, itotdur, iband4b iband5a, itotdur, iband5b iamp1a, itotdur, iamp1b ;transition of amplitudes of formants iamp2a, itotdur, iamp2b iamp3a, itotdur, iamp3b iamp4a, itotdur, iamp4b iamp5a, itotdur, iamp5b spectrum kfund, kform1, kfund, kform2, kfund, kform3, kfund, kform4, kfund, kform5, koct, koct, koct, koct, koct, kband1, kband2, kband3, kband4, kband5, kris, kris, kris, kris, kris, kdur, kdur, kdur, kdur, kdur, kdec, kdec, kdec, kdec, kdec, iolaps, iolaps, iolaps, iolaps, iolaps, ifna, ifna, ifna, ifna, ifna, ifnb, ifnb, ifnb, ifnb, ifnb, itotdur, itotdur, itotdur, itotdur, itotdur, kphs, kphs, kphs, kphs, kphs,
;5 formants for each a1 fof2 kamp1, a2 fof2 kamp2, a3 fof2 kamp3, a4 fof2 kamp4, a5 fof2 kamp5, aout =
(a1+a2+a3+a4+a5) * kamp/5
aout*aenv, aout*aenv
</CsInstruments> <CsScore>
878
f1 0 8192 10 1 f2 0 4096 7 0 4096 1 ;**************************************************************** ; tables of formant values adapted from MiscFormants.html ; 100's: soprano 200's: alto 300's: countertenor 400's: tenor 500's: bass ; -01: "a" sound -02: "e" sound -03: "i" sound -04: "o" sound -05: "u" sound ; p-5 through p-9: frequencies of 5 formants ; p-10 through p-14: decibel levels of 5 formants ; p-15 through p-19: bandwidths of 5 formants
; formant frequencies decibel levels bandwidths ;soprano f101 0 16 -2 800 1150 2900 3900 4950 0.001 -6 -32 -20 -50 f102 0 16 -2 350 2000 2800 3600 4950 0.001 -20 -15 -40 -56 6 f103 0 16 -2 270 2140 2950 3900 4950 0.001 -12 -26 -26 -44 60 f104 0 16 -2 450 800 2830 3800 4950 0.001 -11 -22 -22 -50 40 f105 0 16 -2 325 700 2700 3800 4950 0.001 -16 -35 -40 -60 50 ;alto f201 0 16 -2 800 1150 2800 3500 4950 0.001 -4 -20 -36 -60 8 f202 0 16 -2 400 1600 2700 3300 4950 0.001 -24 -30 -35 -60 f203 0 16 -2 350 1700 2700 3700 4950 0.001 -20 -30 -36 -60 f204 0 16 -2 450 800 2830 3500 4950 0.001 -9 -16 -28 -55 f205 0 16 -2 325 700 2530 3500 4950 0.001 -12 -30 -40 -64 ;countertenor f301 0 16 -2 660 1120 2750 3000 3350 0.001 -6 -23 -24 -38 f302 0 16 -2 440 1800 2700 3000 3300 0.001 -14 -18 -20 -20 70 f303 0 16 -2 270 1850 2900 3350 3590 0.001 -24 -24 -36 -36 40 f304 0 16 -2 430 820 2700 3000 3300 0.001 -10 -26 -22 -34 40 f305 0 16 -2 370 630 2750 3000 3400 0.001 -20 -23 -30 -34 40 ;tenor f401 0 16 -2 650 1080 2650 2900 3250 0.001 -6 -7 -8 -22 8 f402 0 16 -2 400 1700 2600 3200 3580 0.001 -14 -12 -14 -20 70 f403 0 16 -2 290 1870 2800 3250 3540 0.001 -15 -18 -20 -30 40 f404 0 16 -2 400 800 2600 2800 3000 0.001 -10 -12 -12 -26 70 f405 0 16 -2 350 600 2700 2900 3300 0.001 -20 -17 -14 -26 40 ;bass f501 0 16 -2 600 1040 2250 2450 2750 0.001 -7 -9 -9 -20 6 f502 0 16 -2 400 1620 2400 2800 3100 0.001 -12 -9 -12 -18 f503 0 16 -2 250 1750 2600 3050 3340 0.001 -30 -16 -22 -28 f504 0 16 -2 400 750 2400 2600 2900 0.001 -11 -21 -20 -40 f505 0 16 -2 350 600 2400 2675 2950 0.001 -20 -32 -28 -36 ;**************************************************************** ; i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 e start 0 + + + + + 7 8 9 7 8 9 + + + dur 1 . . . . . . . . . . . . . . amp .8 .8 .8 .8 .8 .8 .4 .4 .4 .4 .4 .4 .4 .4 .4 start freq 440 412.5 495 end freq 412.5 550 330 start formant end formant 201 203 201 204 202 205 501 501 505 503 504
440 412.5 201 203 412.5 550 201 204 495 330 202 205 110 103.125 501 503 103.125 137.5 501 504 123.75 82.5 502 505 440 412.5 101 103 412.5 550 101 104 495 330 102 105
</CsScore> </CsoundSynthesizer>
See Also
fof
Credits
879
Author: Rasmus Ekman fof2 is a modification of fof by Rasmus Ekman New in Csound 3.45
880
fofilter
fofilter Formant filter.
Description
Fofilter generates a stream of overlapping sinewave grains, when fed with a pulse train. Each grain is the impulse response of a combination of two BP filters. The grains are defined by their attack time (determining the skirtwidth of the formant region at -60dB) and decay time (-6dB bandwidth). Overlapping will occur when 1/freq < decay, but, unlike FOF, there is no upper limit on the number of overlaps. The original idea for this opcode came from J McCartney's formlet class in SuperCollider, but this is possibly implemented differently(?).
Syntax
asig fofilter ain, kcf, kris, kdec[, istor]
Initialization
istor --initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a nonzero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal. kcf -- filter centre frequency kris -- impulse response attack time (secs). kdec -- impulse response decay time (secs).
Examples
Example 256. Example
kfe kenv asig afil expseg linen buzz fofilter out 10, p3*0.9, 180, p3*0.1, 175 1000, 0.05, p3, 0.05 kenv, kfe, sr/(2*kfe), 1 asig, 900, 0.007, 0.04 afil
Credits
Author: Victor Lazzarini 881
882
fog
fog Audio output is a succession of grains derived from data in a stored function table
Description
Audio output is a succession of grains derived from data in a stored function table ifna. The local envelope of these grains and their timing is based on the model of fof synthesis and permits detailed control of the granular synthesis.
Syntax
ares fog xamp, xdens, xtrans, aspd, koct, kband, kris, kdur, kdec, \ iolaps, ifna, ifnb, itotdur [, iphs] [, itmode] [, iskip]
Initialization
iolaps -- number of pre-located spaces needed to hold overlapping grain data. Overlaps are density dependent, and the space required depends on the maximum value of xdens * kdur. Can be over-estimated at no computation cost. Uses less than 50 bytes of memory per iolap. ifna, ifnb -- table numbers of two stored functions. The first is the data used for granulation, usually from a soundfile (GEN01). The second is a rise shape, used forwards and backwards to shape the grain rise and decay; this is normally a sigmoid (GEN19) but may be linear (GEN05). itotdur -- total time during which this fog will be active. Normally set to p3. No new grain is created if it cannot complete its kdur within the remaining itotdur. iphs (optional) -- initial phase of the fundamental, expressed as a fraction of a cycle (0 to 1). The default value is 0. itmode (optional) -- transposition mode. If zero, each grain keeps the xtrans value it was launched with. If non-zero, each is influenced by xtrans continuously. The default value is 0. iskip (optional, default=0) -- If non-zero, skip initialization (allows legato use).
Performance
xamp -- amplitude factor. Amplitude is also dependent on the number of overlapping grains, the interaction of the rise shape (ifnb) and the exponential decay (kband), and the scaling of the grain waveform (ifna). The actual amplitude may therefore exceed xamp. xdens -- density. The frequency of grains per second. xtrans -- transposition factor. The rate at which data from the stored function table ifna is read within each grain. This has the effect of transposing the original material. A value of 1 produces the original pitch. Higher values transpose upwards, lower values downwards. Negative values result in the function table being read backwards. aspd -- Starting index pointer. aspd is the normalized index (0 to 1) to table ifna that determines the movement of a pointer used as the starting point for reading data within each grain. (xtrans determines the rate at which data is read starting from this pointer.)
883
koct -- octaviation index. The operation of this parameter is identical to that in fof. kband, kris, kdur, kdec -- grain envelope shape. These parameters determine the exponential decay (kband), and the rise (kris), overall duration (kdur,) and decay (kdec ) times of the grain envelope. Their operation is identical to that of the local envelope parameters in fof.
Examples
;p4 = transposition factor ;p5 = speed factor ;p6 = function table for grain data i1 = sr/ftlen(p6) ;scaling to reflect sample rate and table length a1 phasor i1*p5 ;index for speed a2 fog 5000, 100, p4, a1, 0, 0, , .01, .02, .01, 2, p6, 1, p3, 0, 1
Credits
Author: Michael Clark Huddersfield May 1997 New in version 3.46 The Csound fog generator is by Michael Clarke, extending his earlier work based on IRCAM's FOF algorithm. Added notes by Rasmus Ekman on September 2002.
884
fold
fold Adds artificial foldover to an audio signal.
Description
Adds artificial foldover to an audio signal.
Syntax
ares fold asig, kincr
Performance
asig -- input signal kincr -- amount of foldover expressed in multiple of sampling rate. Must be >= 1 fold is an opcode which creates artificial foldover. For example, when kincr is equal to 1 with sr=44100, no foldover is added. When kincr is set to 2, the foldover is equivalent to a downsampling to 22050, when it is set to 4, to 11025 etc. Fractional values of kincr are possible, allowing a continuous variation of foldover amount. This can be used for a wide range of special effects.
Examples
Here is an example of the fold opcode. It uses the file fold.csd [examples/fold.csd].
885
endin </CsInstruments> <CsScore> ; Play Instrument #1 for four seconds. i 1 0 4 e </CsScore> </CsoundSynthesizer>
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
886
follow
follow Envelope follower unit generator.
Description
Envelope follower unit generator.
Syntax
ares follow asig, idt
Initialization
idt -- This is the period, in seconds, that the average amplitude of asig is reported. If the frequency of asig is low then idt must be large (more than half the period of asig )
Performance
asig -- This is the signal from which to extract the envelope.
Examples
Here is an example of the follow opcode. It uses the file follow.csd [examples/follow.csd], and beats.wav [examples/beats.wav].
887
af follow as, 0.01 ; Use a sine waveform. as oscil 4000, 440, 1 ; Have it use the amplitude of the followed WAV file. a1 balance as, af out a1 endin </CsInstruments> <CsScore> ; Just generate a nice, ordinary sine wave. f 1 0 32768 10 1 ; i ; i e Play Instrument #1 for two seconds. 1 0 2 Play Instrument #2 for two seconds. 2 2 2
</CsScore> </CsoundSynthesizer>
To avoid zipper noise, by discontinuities produced from complex envelope tracking, a lowpass filter could be used, to smooth the estimated envelope.
Credits
Author: Paris Smaragdis MIT, Cambridge 1995
888
follow2
follow2 Another controllable envelope extractor.
Description
A controllable envelope extractor using the algorithm attributed to Jean-Marc Jot.
Syntax
ares follow2 asig, katt, krel
Performance
asig -- the input signal whose envelope is followed katt -- the attack rate (60dB attack time in seconds) krel -- the decay rate (60dB decay time in seconds) The output tracks the amplitude envelope of the input signal. The rate at which the output grows to follow the signal is controlled by the katt, and the rate at which it decreases in response to a lower amplitude, is controlled by the krel. This gives a smoother envelope than follow.
Examples
Here is an example of the follow2 opcode. It uses the file follow2.csd [examples/follow2.csd], and beats.wav [examples/beats.wav].
889
instr 2 ; Follow the WAV file. as soundin "beats.wav" af follow2 as, 0.01, 0.1 ; Use a noise waveform. ar rand 44100 ; Have it use the amplitude of the followed WAV file. a1 balance ar, af out a1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for two seconds. 1 0 2 Play Instrument #2 for two seconds. 2 2 2
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch The algorithm for the follow2 is attributed to Jean-Marc Jot. University of Bath, Codemist Ltd. Bath, UK February 2000 Example written by Kevin Conder. New in Csound version 4.03 Added notes by Rasmus Ekman on September 2002.
890
foscil
foscil A basic frequency modulated oscillator.
Description
A basic frequency modulated oscillator.
Syntax
ares foscil xamp, kcps, xcar, xmod, kndx, ifn [, iphs]
Initialization
ifn -- function table number. Requires a wrap-around guard point. iphs (optional, default=0) -- initial phase of waveform in table ifn, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.
Performance
xamp -- the amplitude of the output signal. kcps -- a common denominator, in cycles per second, for the carrier and modulating frequencies. xcar -- a factor that, when multiplied by the kcps parameter, gives the carrier frequency. xmod -- a factor that, when multiplied by the kcps parameter, gives the modulating frequency. kndx -- the modulation index. foscil is a composite unit that effectively banks two oscil opcodes in the familiar Chowning FM setup, wherein the audio-rate output of one generator is used to modulate the frequency input of another (the carrier). Effective carrier frequency = kcps * xcar, and modulating frequency = kcps * xmod. For integral values of xcar and xmod, the perceived fundamental will be the minimum positive value of kcps * (xcar - n * xmod), n = 0,1,2,... The input kndx is the index of modulation (usually time-varying and ranging 0 to 4 or so) which determines the spread of acoustic energy over the partial positions given by n = 0,1,2,.., etc. ifn should point to a stored sine wave. Previous to version 3.50, xcar and xmod could be krate only. The actual formula used for this implementation of FM synthesis is xamp * cos(2# * t * kcps * xcar + kndx * sin(2# * t * kcps * xmod) - #), assuming that the table is a sine wave.
Examples
Here is an example of the foscil opcode. It uses the file foscil.csd [examples/foscil.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o foscil.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a basic FM waveform. instr 1 kamp = 10000 kcps = 440 kcar = 600 kmod = 210 kndx = 2 ifn = 1 a1 foscil kamp, kcps, kcar, kmod, kndx, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Example written by Kevin Conder.
892
foscili
foscili Basic frequency modulated oscillator with linear interpolation.
Description
Basic frequency modulated oscillator with linear interpolation.
Syntax
ares foscili xamp, kcps, xcar, xmod, kndx, ifn [, iphs]
Initialization
ifn -- function table number. Requires a wrap-around guard point. iphs (optional, default=0) -- initial phase of waveform in table ifn, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.
Performance
xamp -- the amplitude of the output signal. kcps -- a common denominator, in cycles per second, for the carrier and modulating frequencies. xcar -- a factor that, when multiplied by the kcps parameter, gives the carrier frequency. xmod -- a factor that, when multiplied by the kcps parameter, gives the modulating frequency. kndx -- the modulation index. foscili differs from foscil in that the standard procedure of using a truncated phase as a sampling index is here replaced by a process that interpolates between two successive lookups. Interpolating generators will produce a noticeably cleaner output signal, but they may take as much as twice as long to run. Adequate accuracy can also be gained without the time cost of interpolation by using large stored function tables of 2K, 4K or 8K points if the space is available.
Examples
Here is an example of the foscili opcode. It uses the file foscili.csd [examples/foscili.csd].
893
; -o foscili.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a basic FM waveform. instr 1 kamp = 10000 kcps = 440 kcar = 600 kmod = 210 kndx = 2 ifn = 1 a1 foscil kamp, kcps, kcar, kmod, kndx, ifn out a1 endin ; Instrument #2 - the basic FM waveform with extra interpolation. instr 2 kamp = 10000 kcps = 440 kcar = 600 kmod = 210 kndx = 2 ifn = 1 a1 foscili kamp, kcps, kcar, kmod, kndx, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave table with a small amount of data. f 1 0 4096 10 1 ; Play Instrument #1, the basic FM instrument, for ; two seconds. This should sound relatively rough. i 1 0 2 ; Play Instrument #2, the interpolated FM instrument, for ; two seconds. This should sound relatively smooth. i 2 2 2 e </CsScore> </CsoundSynthesizer>
Credits
Example written by Kevin Conder.
894
fout
fout Outputs a-rate signals to an arbitrary number of channels.
Description
fout outputs N a-rate signals to a specified file of N channels.
Syntax
fout ifilename, iformat, aout1 [, aout2, aout3,...,aoutN]
Initialization
ifilename -- the output file's name (in double-quotes). iformat -- a flag to choose output file format (note: Csound versions older than 5.0 may only support formats 0, 1, and 2): 0 - 32-bit floating point samples without header (binary PCM multichannel file) 1 - 16-bit integers without header (binary PCM multichannel file) 2 - 16-bit integers with a header. The header type depends on the render (-o) format. For example, if the user chooses the AIFF format (using the -A flag), the header format will be AIFF type. 3 - u-law samples with a header (see iformat=2). 4 - 16-bit integers with a header (see iformat=2). 5 - 32-bit integers with a header (see iformat=2). 6 - 32-bit floats with a header (see iformat=2). 7 - 8-bit unsigned integers with a header (see iformat=2). 8 - 24-bit integers with a header (see iformat=2). 9 - 64-bit floats with a header (see iformat=2). In addition, Csound versions 5.0 and later allow for explicitly selecting a particular header type by specifying the format as 10 * fileType + sampleFormat, where fileType may be 1 for WAV, 2 for AIFF, 3 for raw (headerless) files, and 4 for IRCAM; sampleFormat is one of the above values in the range 0 to 9, except sample format 0 is taken from the command line (-o), format 1 is 8-bit signed integers, and format 2 is a-law. So, for example, iformat=25 means 32-bit integers with AIFF header.
Performance
aout1,... aoutN -- signals to be written to the file. In the case of raw files, the expected range of audio signals is determined by the selected sample format; for sound files with a header like WAV and AIFF, the audio signals should be in the range -0dbfs to 0dbfs. fout (file output) writes samples of audio signals to a file with any number of channels. Channel number 895
depends by the number of aoutN variables (i.e. a mono signal with only an a-rate argument, a stereo signal with two a-rate arguments etc.) Maximum number of channels is fixed to 64. Multiple fout opcodes can be present in the same instrument, referring to different files. Notice that, unlike out, outs and outq, fout does not zero the audio variable so you must zero it after calling it. If polyphony is to be used, you can use vincr and clear opcodes for this task. Notice that fout and foutk can use either a string containing a file pathname, or a handle-number generated by fiopen. Whereas, with fouti and foutir, the target file can be only specified by means of a handlenumber.
Note
If you are using fout to generate an audio file for the global output of csound, you might want to use the monitor opcode, which can tap the output buffer, to avoid having to route
Examples
Here is a simple example of the fout opcode. It uses the file fout.csd [examples/fout.csd].
896
Here is an example of the fout opcode with a polyphonic score. It uses the file fout_poly.csd [examples/ fout_poly.csd] and beats.wav [examples/beats.wav].
; Make sure the global instrument, #99, is running ; during the entire performance (2 seconds). i 99 0 2 e
897
</CsScore> </CsoundSynthesizer>
Here is another example of fout, using it to save the contents of a table to an audio file. It uses the file fout_ftable.csd [examples/fout_ftable.csd] and beats.wav [examples/beats.wav].
Example 264. Example of the fout opcode to save the contents of an f-table.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o fout_ftable.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; By: Jonathan Murphy 2007 gilen gicps gitab = = ftgen instr 1 /******** write file to table ********/ ain aphs andx diskin2 phasor = tablew "beats.wav", 1, 0, 1 gicps aphs * gilen ain, andx, gitab 131072 sr/gilen 1, 0, gilen, 10, 1
/******** write table to file ********/ aosc table out fout endin </CsInstruments> <CsScore> i1 0 2 e </CsScore> </CsoundSynthesizer> aphs, gitab, 1 aosc "beats_copy.wav", 6, aosc
See Also
fiopen, fouti, foutir, foutk, monitor
Credits
Author: Gabriel Maldonado Italy 1999 The simple example was written by Kevin Conder. New in Csound version 3.56
898
899
fouti
fouti Outputs i-rate signals of an arbitrary number of channels to a specified file.
Description
fouti output N i-rate signals to a specified file of N channels.
Syntax
fouti ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN]
Initialization
ihandle -- a number which specifies this file. iformat -- a flag to choose output file format: 0 - floating point in text format 1 - 32-bit floating point in binary format iflag -- choose the mode of writing to the ASCII file (valid only in ASCII mode; in binary mode iflag has no meaning, but it must be present anyway). iflag can be a value chosen among the following: 0 - line of text without instrument prefix 1 - line of text with instrument prefix (see below) 2 - reset the time of instrument prefixes to zero (to be used only in some particular cases. See below) iout,..., ioutN -- values to be written to the file
Performance
fouti and foutir write i-rate values to a file. The main use of these opcodes is to generate a score file during a realtime session. For this purpose, the user should set iformat to 0 (text file output) and iflag to 1, which enable the output of a prefix consisting of the strings inum, actiontime, and duration, before the values of iout1...ioutN arguments. The arguments in the prefix refer to instrument number, action time and duration of current note. Notice that fout and foutk can use either a string containing a file pathname, or a handle-number generated by fiopen. Whereas, with fouti and foutir, the target file can be only specified by means of a handlenumber.
Examples
Here is an example of the fouti opcode. It uses the file fouti.csd [examples/fouti.csd].
900
See Also
fiopen, fout, foutir, foutk
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
901
foutir
foutir Outputs i-rate signals from an arbitrary number of channels to a specified file.
Description
foutir output N i-rate signals to a specified file of N channels.
Syntax
foutir ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN]
Initialization
ihandle -- a number which specifies this file. iformat -- a flag to choose output file format: 0 - floating point in text format 1 - 32-bit floating point in binary format iflag -- choose the mode of writing to the ASCII file (valid only in ASCII mode; in binary mode iflag has no meaning, but it must be present anyway). iflag can be a value chosen among the following: 0 - line of text without instrument prefix 1 - line of text with instrument prefix (see below) 2 - reset the time of instrument prefixes to zero (to be used only in some particular cases. See below) iout,..., ioutN -- values to be written to the file
Performance
fouti and foutir write i-rate values to a file. The main use of these opcodes is to generate a score file during a realtime session. For this purpose, the user should set iformat to 0 (text file output) and iflag to 1, which enable the output of a prefix consisting of the strings inum, actiontime, and duration, before the values of iout1...ioutN arguments. The arguments in the prefix refer to instrument number, action time and duration of current note. The difference between fouti and foutir is that, in the case of fouti, when iflag is set to 1, the duration of the first opcode is undefined (so it is replaced by a dot). Whereas, foutir is defined at the end of note, so the corresponding text line is written only at the end of the current note (in order to recognize its duration). The corresponding file is linked by the ihandle value generated by the fiopen opcode. So fouti and foutir can be used to generate a Csound score while playing a realtime session. Notice that fout and foutk can use either a string containing a file pathname, or a handle-number generated by fiopen. Whereas, with fouti and foutir, the target file can be only specified by means of a handlenumber. 902
See Also
fiopen, fout, fouti, foutk
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
903
foutk
foutk Outputs k-rate signals of an arbitrary number of channels to a specified file, in raw (headerless) format.
Description
foutk outputs N k-rate signals to a specified file of N channels.
Syntax
foutk ifilename, iformat, kout1 [, kout2, kout3,....,koutN]
Initialization
ifilename -- the output file's name (in double-quotes). iformat -- a flag to choose output file format (note: Csound versions older than 5.0 may only support formats 0 and 1): 0 - 32-bit floating point samples without header (binary PCM multichannel file) 1 - 16-bit integers without header (binary PCM multichannel file) 2 - 16-bit integers without header (binary PCM multichannel file) 3 - u-law samples without header 4 - 16-bit integers without header 5 - 32-bit integers without header 6 - 32-bit floats without header 7 - 8-bit unsigned integers without header 8 - 24-bit integers without header 9 - 64-bit floats without header
Performance
kout1,...koutN -- control-rate signals to be written to the file. The expected range of the signals is determined by the selected sample format. foutk operates in the same way as fout, but with k-rate signals. iformat can be set only in the range 0 to 9, or 0 to 1 with an old version of Csound. Notice that fout and foutk can use either a string containing a file pathname, or a handle-number generated by fiopen. Whereas, with fouti and foutir, the target file can be only specified by means of a handlenumber. 904
See Also
fiopen, fout, fouti, foutir
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
905
fprintks
fprintks Similar to printks but prints to a file.
Description
Similar to printks but prints to a file.
Syntax
fprintks "filename", "string", [, kval1] [, kval2] [...]
Initialization
"filename" -- name of the output file. "string" -- the text string to be printed. Can be up to 8192 characters and must be in double quotes.
Performance
kval1, kval2, ... (optional) -- The k-rate values to be printed. These are specified in string with the standard C value specifier (%f, %d, etc.) in the order given. fprintks is similar to the printks opcode except it outputs to a file and doesn't have a itime parameter. For more information about output formatting, please look at printks's documentation.
Examples
Here is an example of the fprintks opcode. It uses the file fprintks.csd [examples/fprintks.csd].
906
kdur linrand 10 kpitch linrand 8 ; Printing to to a file called "my.sco". fprintks "my.sco", "i1\\t%2.2f\\t%2.2f\\t%2.2f\\n", kstart, kdur, 4+kpitch knext linrand 1 kstart = kstart + knext endin </CsInstruments> <CsScore> /* Written by Matt Ingalls, edited by Kevin Conder. */ ; Play Instrument #1. i 1 0 0.001 </CsScore> </CsoundSynthesizer>
This example will generate a file called my.sco. It should contain lines like this:
i1 i1 i1 i1 0.00 0.20 0.67 1.31 3.94 3.35 3.65 1.42 10.26 6.22 11.33 4.13
Here is an example of the fprintks opcode, which converts a standard MIDI file to a csound score. It uses the file fprintks-2.csd [examples/fprintks-2.csd].
Example 267. Example of the fprintks opcode to convert a MIDI file to a csound score.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages ; -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: -n -Fmidichn_advanced.mid ;Don't write audio ouput to disk and use the file midichn_advanced.mid as MIDI input </CsOptions> <CsInstruments> sr = ksmps nchnls 48000 = 16 = 2
;Example by Jonathan Murphy 2007 ; assign all midi events to instr 1000 massign 0, 1000 pgmassign 0, 1000 instr 1000 ktim timeinsts kst, kch, kd1, kd2 midiin if (kst != 0) then ; p4 = MIDI event type p5 = channel p6= data1 p7= data2 fprintks "MIDI2cs.sco", "i1\\t%f\\t%f\\t%d\\t%d\\t%d\\t%d\\n", ktim, 1/kr, kst, kch, kd1, endif endin </CsInstruments> <CsScore>
907
This example will generate a file called MIDI2cs.sco containing i-events according to the MIDI file Here is an advanced example of the fprintks opcode, which generates scores for Csound. It uses the file scogen-2.csd [examples/scogen.csd].
Example 268. Example of the fprintks opcode to create a Csound score file generator using Csound.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages ; -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: -n ;Don't write audio ouput to disk </CsOptions> <CsInstruments> ;=========================================================== ; scogen.csd by: Matt Ingalls ; ; a "port" of sorts ; of the old "mills" score generator (scogen) ; ; this instrument creates a schottstaedt.sco file ; to be used with the schottstaedt.orc file ; ; as long as you dont save schottstaedt.orc as a .csd ; file, you should be able to keep it open in MacCsound ; and render each newly generated .sco file. ; ;=========================================================== gScoName = "/Users/matt/Desktop/schottstaedt.sco" sr = ; the name of the file to be generated
100 ; this defines our temporal resolution, ; an sr of 100 means we will generate p2 and p3 values ; to the nearest 1/100th of a second 1 ; set kr=sr so we can do everything at k-rate
ksmps =
; some print opcodes opcode PrintInteger, 0, k kval xin fprintks gScoName, "%d", kval endop opcode PrintFloat, 0, k kval xin fprintks gScoName, "%f", kval endop opcode PrintTab, 0, 0 fprintks gScoName, "%n" endop opcode PrintReturn, 0, 0 fprintks gScoName, "%r" endop ; recursively calling opcode to handle all the optional parameters opcode ProcessAdditionalPfields, 0, ikio iPtable, kndx, iNumPfields, iPfield xin ; additional pfields start at 5, we use a default 0 to identify the first call iPfield = (iPfield == 0 ? 5 : iPfield)
908
if (iPfield > iNumPfields) goto endloop ; find our tables iMinTable table 2*iPfield-1, iPtable iMaxTable table 2*iPfield, iPtable ; get values from our tables kMin tablei kndx, iMinTable kMax tablei kndx, iMaxTable ; find a random value in the range and write it to the score fprintks gScoName, "%t%f", kMin + rnd(kMax-kMin) ; recursively call for any additional pfields. ProcessAdditionalPfields iPtable, kndx, iNumPfields, iPfield + 1 endloop: endop /* =========================================================== Generate a gesture of i-statements p2 = start of the gesture p3 = duration of the gesture p4 = number of a function that contains a list of all function table numbers used to define the pfield random distribution p5 = scale generated p4 values according to density (0=off, 1=on) [todo] p6 = let durations overlap gesture duration (0=off, 1=on) [todo] p7 = seed for random number generator seed [todo] =========================================================== */ instr Gesture ; initialize iResolution = 1/sr kNextStart init p2 kCurrentTime init p2 iNumPfields table 0, p4 iInstrMinTable table 1, p4 iInstrMaxTable table 2, p4 iDensityMinTable table 3, p4 iDensityMaxTable table 4, p4 iDurMinTable table 5, p4 iDurMaxTable table 6, p4 iAmpMinTable table 7, p4 iAmpMaxTable table 8, p4 ; check to make sure there is enough data print iNumPfields if iNumPfields < 4 then prints "%dError: At least 4 p-fields (8 functions) need to be specified.%n", iNumPfields turnoff endif
; initial comment fprints gScoName, "%!Generated Gesture from %f to %f seconds%n %!%t%twith a p-max of %d%n%n", p2 ; k-rate stuff if (kCurrentTime >= kNextStart) then ; write a new note! kndx = (kCurrentTime-p2)/p3 ; get the required pfield ranges kInstMin tablei kndx, iInstrMinTable kInstMax tablei kndx, iInstrMaxTable kDensMin tablei kndx, iDensityMinTable kDensMax tablei kndx, iDensityMaxTable kDurMin tablei kndx, iDurMinTable kDurMax tablei kndx, iDurMaxTable kAmpMin tablei kndx, iAmpMinTable kAmpMax tablei kndx, iAmpMaxTable ; find random values for all our required parametrs and print the i-statement fprintks gScoName, "i%d%t%f%t%f%t%f", kInstMin + rnd(kInstMax-kInstMin), kNextStart, kDurMin + ; now any additional pfields ProcessAdditionalPfields p4, kndx, iNumPfields
909
PrintReturn ; calculate next starttime kDensity = kDensMin + rnd(kDensMax-kDensMin) if (kDensity < iResolution) then kDensity = iResolution endif kNextStart = kNextStart + kDensity endif kCurrentTime = kCurrentTime + iResolution endin </CsInstruments> <CsScore> /* =========================================================== scogen.sco this csound module generates a score file you specify a gesture of notes by giving the "gesture" instrument a number to a (negative) gen2 table. this table stores numbers to pairs of functions. each function-pair represents a range (min-max) of randomness for every pfield for the notes to be generated. =========================================================== */ ; common tables for pfield ranges f100 0 2 -7 0 2 0 ; static 0 f101 0 2 -7 1 2 1 ; static 1 f102 0 2 -7 0 2 1 ; ramp 0->1 f103 0 2 -7 1 2 0 ; ramp 1->0 f105 0 2 -7 10 2 10 ; static 10 f106 0 2 -7 .1 2 .1 ; static .1 ; specific pfield ranges f10 0 2 -7 f11 0 2 -7 f12 0 2 -7 ;=== ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; f1 .8 2 .01 ; density 8 2 4 ; pitchmin 8 2 12 ; pitchmax
table containing the function numbers used for all the p-field distributions
p1 table number p2 time table is instantiated p3 size of table (must be >= p5!) p4 gen# (should be = -2) p5 number of pfields of each note to be generated p6 table number of the function representing the minimum possible note number (p1) of a gene p7 table number of the function representing the maximum possible note number (p1) of a gene p8 table number of the function representing the minimum possible noteon-to-noteon time (p2 p9 table number of the function representing the maximum possible noteon-to-noteon time (p2 p10 table number of the function representing the minimum possible duration (p3) of a generat p11 table number of the function representing the maximum possible duration (p3) of a generat p12 table number of the function representing the maximum possible amplitude (p4) of a genera p13 table number of the function representing the maximum possible amplitude (p5) of a genera p14,p16.. table number of the function representing the minimum possible value for additional p15,p17.. table number of the function representing the maximum possible value for additional 0 siz 32 2 -2 #pds p1min 6 101 p1max p2min 101 10 p2max p3min 10 101 105 p3max p4min 100 106
This example will generate a file called schottstaedt.sco which can be used as a score together with schottstaedt.orc [examples/schottstaedt.orc]
910
See Also
printks
Credits
Author: Matt Ingalls January 2003
911
fprints
fprints Similar to prints but prints to a file.
Description
Similar to prints but prints to a file.
Syntax
fprints "filename", "string" [, ival1] [, ival2] [...]
Initialization
"filename" -- name of the output file. "string" -- the text string to be printed. Can be up to 8192 characters and must be in double quotes. ival1, ival2, ... (optional) -- The i-rate values to be printed. These are specified in string with the standard C value specifier (%f, %d, etc.) in the order given.
Performance
fprints is similar to the prints opcode except it outputs to a file. For more information about output formatting, please look at printks's documentation.
Examples
Here is an example of the fprints opcode. It uses the file fprints.csd [examples/fprints.csd].
912
endin </CsInstruments> <CsScore> /* Written by Matt Ingalls, edited by Kevin Conder. */ ; Play Instrument #1. i 1 0 0.001 </CsScore> </CsoundSynthesizer>
This example will generate a file called my.sco. It should contain a line like this:
;Generated score by ma++
See Also
prints
Credits
Author: Matt Ingalls January 2003
913
frac
frac Returns the fractional part of a decimal number.
Description
Returns the fractional part of x.
Syntax
frac(x) (init-rate or control-rate args; also works at audio rate in Csound5)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the frac opcode. It uses the file frac.csd [examples/frac.csd].
914
See Also
abs, exp, int, log, log10, i, sqrt
Credits
Example written by Kevin Conder.
915
freeverb
freeverb Opcode version of Jezar's Freeverb
Description
freeverb is a stereo reverb unit based on Jezar's public domain C++ sources, composed of eight parallel comb filters on both channels, followed by four allpass units in series. The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect.
Syntax
aoutL, aoutR freeverb ainL, ainR, kRoomSize, kHFDamp[, iSRate[, iSkip]]
Initialization
iSRate (optional, defaults to 44100): adjusts the reverb parameters for use with the specified sample rate (this will affect the length of the delay lines in samples, and, as of the latest CVS version, the high frequency attenuation). Only integer multiples of 44100 will reproduce the original character of the reverb exactly, so it may be useful to set this to 44100 or 88200 for an orchestra sample rate of 48000 or 96000 Hz, respectively. While iSRate is normally expected to be close to the orchestra sample rate, different settings may be useful for special effects. iSkip (optional, defaults to zero): if non-zero, initialization of the opcode will be skipped, whenever possible.
Performance
ainL, ainR -- input signals; usually both are the same, but different inputs can be used for special effect
Note
It is recommended to process the input signal(s) with the denorm opcode in order to avoid denormalized numbers which could significantly increase CPU usage in some cases aoutL, aoutR -- output signals for left and right channel kRoomSize (range: 0 to 1) -- controls the length of the reverb, a higher value means longer reverb. Settings above 1 may make the opcode unstable. kHFDamp (range: 0 to 1): high frequency attenuation; a value of zero means all frequencies decay at the same rate, while higher settings will result in a faster decay of the high frequency range.
Examples
Here is an example of the freeverb opcode. It uses the file freeverb.csd [examples/freeverb.csd].
916
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o freeverb.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 a1 kfrq a1 a2 a1 aL, aR instr 1 vco2 0.75, 440, 10 port 100, 0.008, 20000 butterlp a1, kfrq linseg 0, 0.003, 1, 0.01, 0.7, 0.005, 0, 1, 0 = a1 * a2 denorm a1 freeverb a1, a1, 0.9, 0.35, sr, 0 outs a1 + aL, a1 + aR endin
Credits
Author: Istvan Varga 2005
917
ftchnls
ftchnls Returns the number of channels in a stored function table.
Description
Returns the number of channels in a stored function table.
Syntax
ftchnls(x) (init-rate args only)
Performance
Returns the number of channels of a GEN01 table, determined from the header of the original file. If the original file has no header or the table was not created by these GEN01, ftchnls returns -1.
Examples
Here is an example of the ftchnls opcode. It uses the file ftchnls.csd [examples/ftchnls.csd], and mary.wav [examples/mary.wav].
918
e </CsScore> </CsoundSynthesizer>
Since the audio file mary.wav is monophonic (1 channel), its output should include a line like this:
instr 1: ichnls = 1.000
See Also
ftlen, ftlptim, ftsr, nsamp
Credits
Author: Chris McCormick Perth, Australia December 2001 Example written by Kevin Conder.
919
ftconv
ftconv Low latency multichannel convolution, using a function table as impulse response source.
Description
Low latency multichannel convolution, using a function table as impulse response source. The algorithm is to split the impulse response to partitions of length determined by the iplen parameter, and delay and mix partitions so that the original, full length impulse response is reconstructed without gaps. The output delay (latency) is iplen samples, and does not depend on the control rate, unlike in the case of other convolve opcodes.
Syntax
a1[, a2[, a3[, ... a8]]] ftconv ain, ift, iplen[, iskipsamples \ [, iirlen[, iskipinit]]]
Initialization
ift -- source ftable number. The table is expected to contain interleaved multichannel audio data, with the number of channels equal to the number of output variables (a1, a2, etc.). An interleaved table can be created from a set of mono tables with GEN52. iplen -- length of impulse response partitions, in sample frames; must be an integer power of two. Lower settings allow for shorter output delay, but will increase CPU usage. iskipsamples (optional, defaults to zero) -- number of sample frames to skip at the beginning of the table. Useful for reverb responses that have some amount of initial delay. If this delay is not less than iplen samples, then setting iskipsamples to the same value as iplen will eliminate any additional latency by ftconv. iirlen (optional) -- total length of impulse response, in sample frames. The default is to use all table data (not including the guard point). iskipinit (optional, defaults to zero) -- if set to any non-zero value, skip initialization whenever possible without causing an error.
Performance
ain -- input signal. a1 ... a8 -- output signal(s).
Example
Here is an example of the ftconv opcode. It uses the file ftconv.csd [examples/ftconv.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o ftconv.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 48000 ksmps = 32 nchnls = 2 0dbfs = 1 garvb gaW gaX gaY itmp init init init init 0 0 0 0 1, 0, 64, 1, 13.000, 1, 2.000, 1, 16.000, 1, 9.000, 1, 12.000, 1, 8.000, -2, 2, 40, -1, -1, -1, 123, 0.05, 0.85, 20000.0, 0.0, 0.50, 0.05, 0.85, 20000.0, 0.0, 0.25, 0.05, 0.85, 20000.0, 0.0, 0.35, 0.05, 0.85, 20000.0, 0.0, 0.35, 0.05, 0.85, 20000.0, 0.0, 0.35, 0.05, 0.85, 20000.0, 0.0, 0.35, 2, 2, 2, 2, 2, 2 \ \ \ \ \ \
ftgen
itmp itmp
ftgen 2, 0, 262144, -2, 0 spat3dt 2, -0.2, 1, 0, 1, 1, 2, 0.005 ftgen 3, 0, 262144, -52, 3, 2, 0, 4, 2, 1, 4, 2, 2, 4 instr 1
a1 kfrq a1 a2 a1
vco2 1, 440, 10 port 100, 0.008, 20000 butterlp a1, kfrq linseg 0, 0.003, 1, 0.01, 0.7, 0.005, 0, 1, 0 = a1 * a2 * 2 denorm a1 vincr garvb, a1 aw, ax, ay, az spat3di a1, p4, p5, p6, 1, 1, 2 vincr gaW, aw vincr gaX, ax vincr gaY, ay endin instr 2 denorm garvb ; skip as many samples as possible without truncating the IR arW, arX, arY ftconv garvb, 3, 2048, 2048, (65536 - 2048) aW = gaW + arW aX = gaX + arX aY = gaY + arY garvb = 0 gaW = 0 gaX = 0 gaY = 0 aWre, aWim aXre, aXim aYre, aYim aWXr = aWXiYr = aL = aR = hilbert aW hilbert aX hilbert aY 0.0928*aXre + 0.4699*aWre 0.2550*aXim - 0.1710*aWim + 0.3277*aYre aWXr + aWXiYr aWXr - aWXiYr
outs aL, aR endin </CsInstruments> <CsScore> i 1 0 0.5 i 1 1 0.5 i 1 2 0.5 0.0 1.4 2.0 2.0 -0.8 1.4 -0.6 0.0 -0.4
921
i i i i i i i e
1 1 1 1 1 1 2
3 4 5 6 7 8 0
0.5 1.4 -1.4 -0.2 0.5 0.0 -2.0 0.0 0.5 -1.4 -1.4 0.2 0.5 -2.0 0.0 0.4 0.5 -1.4 1.4 0.6 0.5 0.0 2.0 0.8 10
</CsScore> </CsoundSynthesizer>
See also
pconvolve, convolve, dconv.
Credits
Author: Istvan Varga 2005
922
ftcps
ftcps Returns the base frequency of a stored function table in Hz.
Description
Returns the base frequency of a stored function table in Hz..
Syntax
ftcps(x) (init-rate args only)
Performance
Returns the base frequency of stored function table, number x. ftcps is designed for tables storing audio waveforms read from files (see GEN01). ftcps returns -1 in case of an error (no base frequency set in table or non-existent table).
Examples
Here is an example of the ftcps opcode.
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Print out the base frequency of Table #1. ; if it has been set in the original file. icps = ftcps(1) print icps endin </CsInstruments> <CsScore> ; Table #1: Use an audio file, Csound will determine its base frequency, if set. f 1 0 0 1 "sample.wav" 0 0 0
923
See Also
ftchnls, ftlptim, ftsr, nsamp
Credits
Author: Victor Lazzarini 2010 Example written by Victor Lazzarini
924
ftfree
ftfree Deletes function table.
Description
Deletes function table.
Syntax
ftfree ifno, iwhen
Initialization
ifno -- the number of the table to be deleted iwhen -- if zero the table is deleted at init time; otherwise the table number is registered for being deleted at note deactivation.
Credits
Authors: Steven Yi, Istvan Varga 2005
925
ftgen
ftgen Generate a score function table from within the orchestra.
Description
Generate a score function table from within the orchestra.
Syntax
gir ftgen ifn, itime, isize, igen, iarga [, iargb ] [...]
Initialization
gir -- either a requested or automatically assigned table number above 100. ifn -- requested table number If ifn is zero, the number is assigned automatically and the value placed in gir. Any other value is used as the table number itime -- is ignored, but otherwise corresponds to p2 in the score f statement. isize -- table size. Corresponds to p3 of the score f statement. igen -- function table GEN routine. Corresponds to p4 of the score f statement. iarga, iargb, ... -- function table arguments. Correspond to p5 through pn of the score f statement.
Performance
This is equivalent to table generation in the score with the f statement.
Note
Csound was originally designed to support tables with power of two sizes only. Though this has changed in recent versions (you can use any size by using a negative number), many opcodes will not accept them.
Warning
Although Csound will not protest if ftgen is used inside instr-endin statements, this is not the intended or supported use, and must be handled with care as it has global effects. (In particular, a different size usually leads to relocation of the table, which may cause a crash or otherwise erratic behaviour.
Examples
Here is an example of the ftgen opcode. It uses the file ftgen.csd [examples/ftgen.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o ftgen.wav -W ;;; for file </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Table #1, a sine wave using the GEN10 routine. gitemp ftgen 1, 0, 16384, 10, 1 ; Instrument #1 - a basic oscillator. instr 1 kamp = 10000 kcps = 440 ; Use Table #1. ifn = 1 a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here is another example of the ftgen opcode. It uses the file ftgen-2.csd [examples/ftgen-2.csd].
927
"beats.wav" Sfile ; Find length Sfile ; Find sample rate ; Total number of samples
filelen filesr
loop: isize = isize * 2 ; Loop until isize is greater than number of samples if (isize < isamps) igoto loop itab ftgen print print 0, 0, isize, 1, Sfile, 0, 0, 0 isize isamps
See also
GEN routine overview, ftgentmp
Credits
Author: Barry L. Vercoe M.I.T., Cambridge, Mass 1997 Example written by Kevin Conder. Added warning April 2002 by Rasmus Ekman
928
ftgenonce
ftgenonce Generate a score function table from within the orchestra, which is deleted at the end of the note.
Description
Enables the creation of function tables entirely inside instrument definitions, without any duplication of data. The ftgenonce opcode is designed to simplify writing instrument definitions that can be re-used in different orchestras simply by #including them and plugging them into some output instrument. There is no need to define function tables either in the score, or in the orchestra header. The ftgenonce opcode is similar to ftgentmp, and has identical arguments. However, function tables are neither duplicated nor deleted. Instead, all of the arguments to the opcode are concatenated to form the key to a lookup table that points to the function table number. Thus, every request to ftgenonce with the same arguments receives the same instance of the function table data. Every change in the value of any ftgenonce argument causes the creation of a new function table.
Syntax
ifno ftgenonce ip1, ip2dummy, isize, igen, iarga, iargb, ...
Initialization
ifno -- an automatically assigned table number. ip1 -- the number of the table to be generated or 0 if the number is to be assigned. ip2dummy -- ignored. isize -- table size. Corresponds to p3 of the score f statement. igen -- function table GEN routine. Corresponds to p4 of the score f statement. iarga, iargb, ... -- function table arguments. Correspond to p5 through pn of the score f statement.
Note
Csound was originally designed to support tables with power of two sizes only. Though this has changed in recent versions (you can use any size by using a negative number), many opcodes will not accept them.
Credits
Authors: Michael Gogins 2009
929
ftgentmp
ftgentmp Generate a score function table from within the orchestra, which is deleted at the end of the note.
Description
Generate a score function table from within the orchestra, which is optionally deleted at the end of the note.
Syntax
ifno ftgentmp ip1, ip2dummy, isize, igen, iarga, iargb, ...
Initialization
ifno -- either a requested or automatically assigned table number above 100. ip1 -- the number of the table to be generated or 0 if the number is to be assigned, in which case the table is deleted at the end of the note activation. ip2dummy -- ignored. isize -- table size. Corresponds to p3 of the score f statement. igen -- function table GEN routine. Corresponds to p4 of the score f statement. iarga, iargb, ... -- function table arguments. Correspond to p5 through pn of the score f statement.
Note
Csound was originally designed to support tables with power of two sizes only. Though this has changed in recent versions (you can use any size by using a negative number), many opcodes will not accept them.
Examples
Here is an example of the ftgentmp opcode. It uses the file ftgentmp.csd [examples/ftgentmp.csd].
930
nchnls = 2 0dbfs = 1 instr 1 ifno ftgentmp print ifno endin instr 2 print ftlen(p4) endin </CsInstruments> <CsScore> i 1 0 10 i 2 2 1 101 i 1 5 10 i 2 7 1 102 i 2 12 1 101 i 2 17 1 102 e </CsScore> </CsoundSynthesizer> 0, 0, 512, 10, 1
The output of this csd shows that the tables are destroyed after the instrument instances that created them terminates, causing an init error if the tables are queried.
SECTION 1: new alloc for instr 1: ftable 101: instr 1: ifno = 101.000 B 0.000 .. 2.000 T 2.000 TT 2.000 new alloc for instr 2: instr 2: #i0 = 512.000 B 2.000 .. 5.000 T 5.001 TT 5.001 new alloc for instr 1: ftable 102: instr 1: ifno = 102.000 B 5.000 .. 7.000 T 7.001 TT 7.001 instr 2: #i0 = 512.000 B 7.000 .. 12.000 T 11.999 TT 11.999 INIT ERROR in instr 2: Invalid ftable #i0 ftlen.i p4 instr 2: #i0 = -1.000 B 12.000 - note deleted. i2 B 12.000 .. 17.000 T 17.000 TT 17.000 INIT ERROR in instr 2: Invalid ftable #i0 ftlen.i p4 instr 2: #i0 = -1.000 B 17.000 - note deleted. i2
M: M:
0.00000 0.00000
0.00000 0.00000
M:
0.00000
0.00000
M: 0.00000 0.00000 no. 101.000000 had 1 init errors M: 0.00000 0.00000 no. 102.000000 had 1 init errors
Credits
Authors: Istvan Varga 2005
931
ftlen
ftlen Returns the size of a stored function table.
Description
Returns the size of a stored function table.
Syntax
ftlen(x) (init-rate args only)
Performance
Returns the size (number of points, excluding guard point) of stored function table, number x. While most units referencing a stored table will automatically take its size into account (so tables can be of arbitrary length), this function reports the actual size if that is needed. Note that ftlen will always return a power-of-2 value, i.e. the function table guard point (see f Statement) is not included.As of Csound version 3.53, ftlen works with deferred function tables (see GEN01). ftlen differs from nsamp in that nsamp gives the number of sample frames loaded, while ftlen gives the total number of samples without the guard point. For example, with a stereo sound file of 10000 samples, ftlen() would return 19999 (i.e. a total of 20000 mono samples, not including a guard point), but nsamp() returns 10000.
Examples
Here is an example of the ftlen opcode. It uses the file ftlen.csd [examples/ftlen.csd], and mary.wav [examples/mary.wav].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Print out the size of Table #1. ; The size will be the number of points excluding the guard point. ilen = ftlen(1)
932
print ilen endin </CsInstruments> <CsScore> ; Table #1: Use an audio file, Csound will determine its size. f 1 0 0 1 "mary.wav" 0 0 0 ; Play Instrument #1 for 1 second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
The audio file mary.wav is 154390 samples long. The ftlen opcode reports it as 154389 samples long because it reserves 1 point for the guard point. Its output should include a line like this:
instr 1: ilen = 154389.000
See Also
ftchnls, ftlptim, ftsr, nsamp
Credits
Author: Barry L. Vercoe MIT Cambridge, Massachussetts 1997 Example written by Kevin Conder.
933
ftload
ftload Load a set of previously-allocated tables from a file.
Description
Load a set of previously-allocated tables from a file.
Syntax
ftload "filename", iflag, ifn1 [, ifn2] [...]
Initialization
"filename" -- A quoted string containing the name of the file to load. iflag -- Type of the file to load/save. (0 = binary file, Non-zero = text file) ifn1, ifn2, ... -- Numbers of tables to load.
Performance
ftload loads a list of tables from a file. (The tables have to be already allocated though.) The file's format can be binary or text.
Warning
The file's format is not compatible with a WAV-file and is not endian-safe.
Examples
See the example for ftsave.
See Also
ftloadk, ftsavek, ftsave
Credits
Author: Gabriel Maldonado New in version 4.21
934
ftloadk
ftloadk Load a set of previously-allocated tables from a file.
Description
Load a set of previously-allocated tables from a file.
Syntax
ftloadk "filename", ktrig, iflag, ifn1 [, ifn2] [...]
Initialization
"filename" -- A quoted string containing the name of the file to load. iflag -- Type of the file to load/save. (0 = binary file, Non-zero = text file) ifn1, ifn2, ... -- Numbers of tables to load.
Performance
ktrig -- The trigger signal. Load the file each time it is non-zero. ftloadk loads a list of tables from a file. (The tables have to be already allocated though.) The file's format can be binary or text. Unlike ftload, the loading operation can be repeated numerous times within the same note by using a trigger signal.
Warning
The file's format is not compatible with a WAV-file and is not endian-safe.
See Also
ftload, ftsavek, ftsave
Credits
Author: Gabriel Maldonado New in version 4.21
935
ftlptim
ftlptim Returns the loop segment start-time of a stored function table number.
Description
Returns the loop segment start-time of a stored function table number.
Syntax
ftlptim(x) (init-rate args only)
Performance
Returns the loop segment start-time (in seconds) of stored function table number x. This reports the duration of the direct recorded attack and decay parts of a sound sample, prior to its looped segment. Returns zero (and a warning message) if the sample does not contain loop points.
Examples
Here is an example of the ftlptim opcode. It uses the file ftlptim.csd [examples/ftlptim.csd], and mary.wav [examples/mary.wav].
936
i 1 0 1 e </CsScore> </CsoundSynthesizer>
Since the audio file mary.wav is non-looping, its output should include lines like this:
WARNING: non-looping sample instr 1: itim = 0.000
See Also
ftchnls, ftlen, ftsr, nsamp
Credits
Author: Barry L. Vercoe MIT Cambridge, Massachussetts 1997 Example written by Kevin Conder.
937
ftmorf
ftmorf Morphs between multiple ftables as specified in a list.
Description
Uses an index into a table of ftable numbers to morph between adjacent tables in the list.This morphed function is written into the table referenced by iresfn on every k-cycle.
Syntax
ftmorf kftndx, iftfn, iresfn
Initialization
iftfn -- The ftable function. The list of values are expected to be pre-existing ftable numbers. iresfn -- Table number of the morphed function The length of all the tables in iftfn must equal the length of iresfn.
Performance
kftndx -- the index into the iftfn table. If iftfn contains (6, 4, 6, 8, 7, 4): kftndx=4 will write the contents of f7 into iresfn. kftndx=4.5 will write the average of the contents of f7 and f4 into iresfn.
Note
iresfn is only updated if the morfing index changes it's value, if kftindx is static, no writing to iresfn will occur.
Examples
Here is an example of the ftmorf opcode. It uses the file ftmorf.csd [examples/ftmorf.csd].
938
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o ftmorf.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 kndx line ftmorf asig oscili out endin 0, p3, 7 kndx, 1, 2 30000, 440, 2 asig
</CsInstruments> <CsScore> f1 0 8 -2 3 4 5 6 7 8 9 10 f2 0 1024 10 1 /*contents of f2 dont matter */ f3 0 1024 10 1 f4 0 1024 10 0 1 f5 0 1024 10 0 0 1 f6 0 1024 10 0 0 0 1 f7 0 1024 10 0 0 0 0 1 f8 0 1024 10 0 0 0 0 0 1 f9 0 1024 10 0 0 0 0 0 0 1 f10 0 1024 10 1 1 1 1 1 1 1 i1 0 10 e </CsScore> </CsoundSynthesizer>
Credits
Author: William Pete Moss University of Texas at Austin Austin, Texas USA Jan. 2002 New in version 4.18
939
ftsave
ftsave Save a set of previously-allocated tables to a file.
Description
Save a set of previously-allocated tables to a file.
Syntax
ftsave "filename", iflag, ifn1 [, ifn2] [...]
Initialization
"filename" -- A quoted string containing the name of the file to save. iflag -- Type of the file to save. (0 = binary file, Non-zero = text file) ifn1, ifn2, ... -- Numbers of tables to save.
Performance
ftsave saves a list of tables to a file. The file's format can be binary or text.
Warning
The file's format is not compatible with a WAV-file and is not endian-safe.
Examples
Here is an example of the ftsave opcode. It uses the file ftsave.csd [examples/ftsave.csd].
940
; Table #1, make a gitmp1 ftgen 1, 0, ; Table #2, create gitmp2 ftgen 2, 0,
sine wave using the GEN10 routine. 32768, 10, 1 an empty table. 32768, 7, 0, 32768, 0
; Instrument #1 - a basic oscillator. instr 1 kamp = 20000 kcps = 440 ; Use Table #1. ifn = 1 a1 oscil kamp, kcps, ifn out a1 endin ; Instrument #2 - Load Table #1 into Table #2. instr 2 ; Save Table #1 to a file called "table1.ftsave". ftsave "table1.ftsave", 0, 1 ; Load the "table1.ftsave" file into Table #2. ftload "table1.ftsave", 0, 2 kamp = 20000 kcps = 440 ; Use Table #2, it should contain Table #1's sine wave now. ifn = 2 a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for 1 second. 1 0 1 Play Instrument #2 for 1 second. 2 2 1
</CsScore> </CsoundSynthesizer>
See Also
ftloadk, ftload, ftsavek
Credits
Author: Gabriel Maldonado Example written by Kevin Conder. New in version 4.21
941
ftsavek
ftsavek Save a set of previously-allocated tables to a file.
Description
Save a set of previously-allocated tables to a file.
Syntax
ftsavek "filename", ktrig, iflag, ifn1 [, ifn2] [...]
Initialization
"filename" -- A quoted string containing the name of the file to save. iflag -- Type of the file to save. (0 = binary file, Non-zero = text file) ifn1, ifn2, ... -- Numbers of tables to save.
Performance
ktrig -- The trigger signal. Save the file each time it is non-zero. ftsavek saves a list of tables to a file. The file's format can be binary or text. Unlike ftsave, the saving operation can be repeated numerous times within the same note by using a trigger signal.
Warning
The file's format is not compatible with a WAV-file and is not endian-safe.
See Also
ftloadk, ftload, ftsave
Credits
Author: Gabriel Maldonado New in version 4.21
942
ftsr
ftsr Returns the sampling-rate of a stored function table.
Description
Returns the sampling-rate of a stored function table.
Syntax
ftsr(x) (init-rate args only)
Performance
Returns the sampling-rate of a GEN01 generated table. The sampling-rate is determined from the header of the original file. If the original file has no header or the table was not created by these GEN01, ftsr returns 0. New in Csound version 3.49.
Examples
Here is an example of the ftsr opcode. It uses the file ftsr.csd [examples/ftsr.csd], and mary.wav [examples/mary.wav].
943
i 1 0 1 e </CsScore> </CsoundSynthesizer>
Since the audio file mary.wav uses a 44.1 Khz sampling rate, its output should a line like this:
instr 1: isr = 44100.000
See Also
ftchnls, ftlen, ftlptim, nsamp
Credits
Author: Gabriel Maldonado Italy October 1998 Example written by Kevin Conder.
944
gain
gain Adjusts the amplitude audio signal according to a root-mean-square value.
Description
Adjusts the amplitude audio signal according to a root-mean-square value.
Syntax
ares gain asig, krms [, ihp] [, iskip]
Initialization
ihp (optional, default=10) -- half-power point (in Hz) of a special internal low-pass filter. The default value is 10. iskip (optional, default=0) -- initial disposition of internal data space (see reson). The default value is 0.
Performance
asig -- input audio signal gain provides an amplitude modification of asig so that the output ares has rms power equal to krms. rms and gain used together (and given matching ihp values) will provide the same effect as balance.
Examples
Here is an example of the gain opcode. It uses the file gain.csd [examples/gain.csd].
945
</CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
balance, rms
946
gainslider
gainslider An implementation of a logarithmic gain curve which is similar to the gainslider~ object from Cycling 74 Max / MSP.
Description
This opcode is intended for use to multiply by an audio signal to give a console mixer like feel. There is no bounds in the source code so you can for example give higher than 127 values for extra amplitude but possibly clipped audio.
Syntax
kout gainslider kindex
Performance
kindex -- Index value. Nominal range from 0-127. For example a range of 0-152 will give you a range from -# to +18.0 dB. kout -- Scaled output.
Examples
Here is an example of the gainslider opcode. It uses the file gainslider.csd [examples/gainslider.csd].
947
aout = aout*kout outs aout, aout endin </CsInstruments> <CsScore> i1 0 30 e </CsScore> </CsoundSynthesizer>
See Also
scale, logcurve, expcurve
Credits
Author: David Akbari October 2006
948
gauss
gauss Gaussian distribution random number generator.
Description
Gaussian distribution random number generator. This is an x-class noise generator.
Syntax
ares gauss krange ires gauss krange kres gauss krange
Performance
krange -- the range of the random numbers (-krange to +krange). Outputs both positive and negative numbers. gauss returns random numbers following a normal distribution centered around 0.0 (mu = 0.0) with a variance (sigma) of krange / 3.83. Thus more than 99.99% of the random values generated are in the range -krange to +krange. If a mean value different of 0.0 is desired, this mean value has to be added to the generated numbers (see example below). For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the gauss opcode. It uses the file gauss.csd [examples/gauss.csd].
949
indx icount ix ix2 loop: i1 i1 ix ix2 if i1 >= icount endif imean istd
= = = =
0 1 0.0 0.0
gauss irange = i1 + imu = ix + i1 = ix2 + i1*i1 -(irange+imu) && i1 <= (irange+imu) then = icount+1 loop_lt indx, 1, isamples, loop = ix / isamples ;mean value = sqrt(ix2/isamples - imean*imean) ;standard deviation prints "mean = %3.3f, std = %3.3f, ", imean, istd prints "samples inside the given range: %3.3f\%\n", icount*100.0/isamples
endin </CsInstruments> <CsScore> i 1 0 0.1 1.0 0 100000 i 1 0.1 0.1 3.83 0 100000 i 1 0.2 0.1 5.745 2.7 100000 </CsScore> </CsoundSynthesizer>
; range = 1, mu = 0.0, sigma = 1/3.83 = 0.261 ; range = 3.83, mu = 0.0, sigma = 1 ; range = 5.745, mu = 2.7, sigma = 5.745/3.83 = 1.5
See Also
seed, betarand, bexprnd, cauchy, exprand, linrand, pcauchy, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Precisions about mu and sigma added by Franois Pinot after a discussion with Joachim Heintz on the Csound List, December 2010. Example written by Franois Pinot, adapted from a csd file by Joachim Heintz, December 2010. Existed in 3.30
950
gbuzz
gbuzz Output is a set of harmonically related cosine partials.
Description
Output is a set of harmonically related cosine partials.
Syntax
ares gbuzz xamp, xcps, knh, klh, kmul, ifn [, iphs]
Initialization
ifn -- table number of a stored function containing a cosine wave. A large table of at least 8192 points is recommended. iphs (optional, default=0) -- initial phase of the fundamental frequency, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is zero
Performance
The buzz units generate an additive set of harmonically related cosine partials of fundamental frequency xcps, and whose amplitudes are scaled so their summation peak equals xamp. The selection and strength of partials is determined by the following control parameters: knh -- total number of harmonics requested. If knh is negative, the absolute value is used. If knh is zero, a value of 1 is used. klh -- lowest harmonic present. Can be positive, zero or negative. In gbuzz the set of partials can begin at any partial number and proceeds upwards; if klh is negative, all partials below zero will reflect as positive partials without phase change (since cosine is an even function), and will add constructively to any positive partials in the set. kmul -- specifies the multiplier in the series of amplitude coefficients. This is a power series: if the klhth partial has a strength coefficient of A, the (klh + n)th partial will have a coefficient of A * (kmul ** n), i.e. strength values trace an exponential curve. kmul may be positive, zero or negative, and is not restricted to integers. buzz and gbuzz are useful as complex sound sources in subtractive synthesis. buzz is a special case of the more general gbuzz in which klh = kmul = 1; it thus produces a set of knh equal-strength harmonic partials, beginning with the fundamental. (This is a band-limited pulse train; if the partials extend to the Nyquist, i.e. knh = int (sr / 2 / fundamental freq.), the result is a real pulse train of amplitude xamp.) Although both knh and klh may be varied during performance, their internal values are necessarily integer and may cause pops due to discontinuities in the output. kmul, however, can be varied during performance to good effect. gbuzz can be amplitude- and/or frequency-modulated by either control or audio signals. N.B. This unit has its analog in GEN11, in which the same set of cosines can be stored in a function table for sampling by an oscillator. Although computationally more efficient, the stored pulse train has a fixed spectral content, not a time-varying one as above.
951
Examples
Here is an example of the gbuzz opcode. It uses the file gbuzz.csd [examples/gbuzz.csd].
See Also
buzz
Credits
Example written by Kevin Conder. September 2003. Thanks to Kanata Motohashi for correcting the mentions of the kmul parameter.
952
getcfg
getcfg Return Csound settings.
Description
Return various configuration settings in Svalue as a string at init time.
Syntax
Svalue getcfg iopt
Initialization
iopt -- The parameter to be returned, can be one of: 1: the maximum length of string variables in characters; this is at least the value of the -+max_str_len command line option - 1 2: the input sound file name (-i), or empty if there is no input file 3: the output sound file name (-o), or empty if there is no output file 4: return "1" if real time audio input or output is being used, and "0" otherwise 5: return "1" if running in beat mode (-t command line option), and "0" otherwise 6: the host operating system name 7: return "1" if a callback function for the chnrecv and chnsend opcodes has been set, and "0" otherwise (which means these opcodes do nothing)
Credits
Author: Istvan Varga 2006 New in version 5.02
953
gogobel
gogobel Audio output is a tone related to the striking of a cow bell or similar.
Description
Audio output is a tone related to the striking of a cow bell or similar. The method is a physical model developed from Perry Cook, but re-coded for Csound.
Syntax
ares gogobel kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivfn
Initialization
ihrd -- the hardness of the stick used in the strike. A range of 0 to 1 is used. 0.5 is a suitable value. ipos -- where the block is hit, in the range 0 to 1. imp -- a table of the strike impulses. The file marmstk1.wav [examples/marmstk1.wav] is a suitable function from measurements and can be loaded with a GEN01 table. It is also available at ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. ivfn -- shape of vibrato, usually a sine table, created by a function.
Performance
A note is played on a cowbell-like instrument, with the arguments as below. kamp -- Amplitude of note. kfreq -- Frequency of note played. kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the gogobel opcode. It uses the file gogobel.csd [examples/gogobel.csd], and marmstk1.wav [examples/marmstk1.wav],
954
-odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o gogobel.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; kamp = 31129.60 ; kfreq = 440 ; ihrd = 0.5 ; ipos = 0.561 ; imp = 1 ; kvibf = 6.0 ; kvamp = 0.3 ; ivfn = 2 a1 gogobel 31129.60, 440, 0.5, 0.561, 1, 6.0, 0.3, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1, the "marmstk1.wav" audio file. 1 0 256 1 "marmstk1.wav" 0 0 0 Table #2, a sine wave for the vibrato. 2 0 128 10 1
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
955
goto
goto Transfer control on every pass.
Description
Transfer control to label on every pass. (Combination of igoto and kgoto)
Syntax
goto label
Note
Using goto not as part of an if statement (as in: goto end), will cause initialization to be skipped on all the code the goto jumps over. In performance, leaving some opcodes uninitialized will cause deletion of the note/event. In these cases, using kgoto (as in: kgoto end) might be preferred."
Examples
Here is an example of the goto opcode. It uses the file goto.csd [examples/goto.csd].
956
</CsInstruments> <CsScore> ; Table #1: a simple sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
cggoto, cigoto, ckgoto, if, igoto, kgoto, tigoto, timout
Credits
Example written by Kevin Conder. Added a note by Jim Aikin.
957
grain
grain Generates granular synthesis textures.
Description
Generates granular synthesis textures.
Syntax
ares grain xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, igfn, \ iwfn, imgdur [, igrnd]
Initialization
igfn -- The ftable number of the grain waveform. This can be just a sine wave or a sampled sound. iwfn -- Ftable number of the amplitude envelope used for the grains (see also GEN20). imgdur -- Maximum grain duration in seconds. This is the biggest value to be assigned to kgdur. igrnd (optional) -- if non-zero, turns off grain offset randomness. This means that all grains will begin reading from the beginning of the igfn table. If zero (the default), grains will start reading from random igfn table positions.
Performance
xamp -- Amplitude of each grain. xpitch -- Grain pitch. To use the original frequency of the input sound, use the formula: sndsr / ftlen(igfn) where sndsr is the original sample rate of the igfn sound. xdens -- Density of grains measured in grains per second. If this is constant then the output is synchronous granular synthesis, very similar to fof. If xdens has a random element (like added noise), then the result is more like asynchronous granular synthesis. kampoff -- Maximum amplitude deviation from xamp. This means that the maximum amplitude a grain can have is xamp + kampoff and the minimum is xamp. If kampoff is set to zero then there is no random amplitude for each grain. kpitchoff -- Maximum pitch deviation from xpitch in Hz. Similar to kampoff. kgdur -- Grain duration in seconds. The maximum value for this should be declared in imgdur. If kgdur at any point becomes greater than imgdur, it will be truncated to imgdur. The grain generator is based primarily on work and writings of Barry Truax and Curtis Roads.
Examples
958
This example generates a texture with gradually shorter grains and wider amp and pitch spread. It uses the file grain.csd [examples/grain.csd], and mary.wav [examples/mary.wav].
kamp expseg 220, p3/2, 600, p3/2, 220 kpitch line ibasfrq, p3, ibasfrq * .8 kdens line 600, p3, 200 kaoff line 0, p3, 5000 kpoff line 0, p3, ibasfrq * .5 kgdur line .4, p3, .1 imaxgdur = .5 ar grain kamp, kpitch, kdens, kaoff, kpoff, kgdur, insnd, 5, imaxgdur, 0.0 out ar endin </CsInstruments> <CsScore> f5 0 512 20 2 ; Hanning window f10 0 262144 1 "mary.wav" 0 0 0 i1 0 6 e </CsScore> </CsoundSynthesizer>
Credits
Author: Paris Smaragdis MIT May 1997
959
grain2
grain2 Easy-to-use granular synthesis texture generator.
Description
Generate granular synthesis textures. grain2 is simpler to use, but grain3 offers more control.
Syntax
ares grain2 kcps, kfmd, kgdur, iovrlp, kfn, iwfn [, irpow] \ [, iseed] [, imode]
Initialization
iovrlp -- (fixed) number of overlapping grains. iwfn -- function table containing window waveform (Use GEN20 to calculate iwfn). irpow (optional, default=0) -- this value controls the distribution of grain frequency variation. If irpow is positive, the random distribution (x is in the range -1 to 1) is abs(x) ^ ((1 / irpow) - 1); for negative irpow values, it is (1 - abs(x)) ^ ((-1 / irpow) - 1) Setting irpow to -1, 0, or 1 will result in uniform distribution (this is also faster to calculate). The image below shows some examples for irpow. The default value of irpow is 0.
960
A graph of distributions for different values of irpow. iseed (optional, default=0) -- seed value for random number generator (positive integer in the range 1 to 2147483646 (231 - 2)). Zero or negative value seeds from current time (this is also the default). imode (optional default=0) -- sum of the following values: 8: interpolate window waveform (slower). 4: do not interpolate grain waveform (fast, but lower quality). 2: grain frequency is continuously modified by kcps and kfmd (by default, each grain keeps the frequency it was launched with). This may be slower at high control rates. 1: skip initialization.
Performance
ares -- output signal. kcps -- grain frequency in Hz. kfmd -- random variation (bipolar) in grain frequency in Hz. kgdur -- grain duration in seconds. kgdur also controls the duration of already active grains (actually the speed at which the window function is read). This behavior does not depend on the imode flags. kfn -- function table containing grain waveform. Table number can be changed at k-rate (this is useful to select from a set of band-limited tables generated by GEN30, to avoid aliasing).
961
Note
grain2 internally uses the same random number generator as rnd31. So reading its documentation is also recommended.
Examples
Here is an example of the grain2 opcode. It uses the file grain2.csd [examples/grain2.csd].
2, 2, 2, 2, 2, 2
\ \ \ \ \
ga01 init 0 /* generate bandlimited square waves */ i0 = 0 loop1: imaxh = sr / (2 * 440.0 * exp (log(2.0) * (i0 - 69) / 12)) i_ ftgen i0 + 256, 0, 4096, -30, 1, 1, imaxh i0 = i0 + 1 if (i0 < 127.5) igoto loop1 instr 1 p3 = p3 + 0.2
/* note velocity */ iamp = 0.0039 + p5 * p5 / 16192 /* vibrato */ kcps oscili 1, 8, 3 kenv linseg 0, 0.05, 0, 0.1, 1, 1, 1 /* frequency */ kcps = (kcps * kenv * 0.01 + 1) * 440 * exp(log(2) * (p4 - 69) / 12) /* grain ftable */ kfn = int(256 + 69 + 0.5 + 12 * log(kcps / 440) / log(2)) /* grain duration */
962
kgdur port 100, 0.1, 20 kgdur = kgdur / kcps a1 grain2 kcps, a1 butterlp a1, a2 grain2 kcps, a2 butterbp a2, a2 butterbp a2, aenv1 linseg 0, aenv2 linseg 3, aenv3 linseg 1, a1 = ga01 = kcps * 0.02, kgdur, 50, kfn, 2, -0.5, 22, 2 3000 kcps * 0.02, 4 / kcps, 50, kfn, 2, -0.5, 23, 2 12000, 8000 12000, 8000 0.01, 1, 1, 1 0.05, 1, 1, 1 p3 - 0.2, 1, 0.07, 0, 1, 0
/* output instr */ instr 81 i1 = 0.000001 aLl, aLh, aRl, aRh spat3di ga01 + i1*i1*i1*i1, 3.0, 4.0, 0.0, 0.5, 7, 4 ga01 = 0 aLl butterlp aLl, 800.0 aRl butterlp aRl, 800.0 outs aLl + aLh, aRl + aRh endin </CsInstruments> <CsScore> t 0 60 i i i i 1 1 1 1 0.0 2.0 4.0 4.0 1.3 1.3 1.3 1.3 60 67 64 72 127 127 112 112
See Also
grain3
Credits
Author: Istvan Varga New in version 4.15 Updated April 2002 by Istvan Varga
963
grain3
grain3 Generate granular synthesis textures with more user control.
Description
Generate granular synthesis textures. grain2 is simpler to use but grain3 offers more control.
Syntax
ares grain3 kcps, kphs, kfmd, kpmd, kgdur, kdens, imaxovr, kfn, iwfn, \ kfrpow, kprpow [, iseed] [, imode]
Initialization
imaxovr -- maximum number of overlapping grains. The number of overlaps can be calculated by (kdens * kgdur); however, it can be overestimated at no cost in rendering time, and a single overlap uses (depending on system) 16 to 32 bytes of memory. iwfn -- function table containing window waveform (Use GEN20 to calculate iwfn). iseed (optional, default=0) -- seed value for random number generator (positive integer in the range 1 to 2147483646 (231 - 2)). Zero or negative value seeds from current time (this is also the default). imode (optional, default=0) -- sum of the following values: 64: synchronize start phase of grains to kcps. 32: start all grains at integer sample location. This may be faster in some cases, however it also makes the timing of grain envelopes less accurate. 16: do not render grains with start time less than zero. (see the image below; this option turns off grains marked with red on the image). 8: interpolate window waveform (slower). 4: do not interpolate grain waveform (fast, but lower quality). 2: grain frequency is continuously modified by kcps and kfmd (by default, each grain keeps the frequency it was launched with). This may be slower at high control rates. It also controls phase modulation (kphs). 1: skip initialization.
964
A diagram showing grains with a start time less than zero in red.
Performance
ares -- output signal. kcps -- grain frequency in Hz. kphs -- grain phase. This is the location in the grain waveform table, expressed as a fraction (between 0 to 1) of the table length. kfmd -- random variation (bipolar) in grain frequency in Hz. kpmd -- random variation (bipolar) in start phase. kgdur -- grain duration in seconds. kgdur also controls the duration of already active grains (actually the speed at which the window function is read). This behavior does not depend on the imode flags. kdens -- number of grains per second. kfrpow -- this value controls the distribution of grain frequency variation. If kfrpow is positive, the random distribution (x is in the range -1 to 1) is abs(x) ^ ((1 / kfrpow) - 1) ; for negative kfrpow values, it is (1 - abs(x)) ^ ((-1 / kfrpow) - 1) Setting kfrpow to -1, 0, or 1 will result in uniform distribution (this is also faster to calculate). The image below shows some examples for kfrpow. The default value of kfrpow is 0.
965
A graph of distributions for different values of kfrpow. kprpow -- distribution of random phase variation (see kfrpow). Setting kphs and kpmd to 0.5, and kprpow to 0 will emulate grain2. kfn -- function table containing grain waveform. Table number can be changed at k-rate (this is useful to select from a set of band-limited tables generated by GEN30, to avoid aliasing).
Note
grain3 internally uses the same random number generator as rnd31. So reading its documentation is also recommended.
Examples
Here is an example of the grain3 opcode. It uses the file grain3.csd [examples/grain3.csd].
966
sr = 48000 kr = 1000 ksmps = 48 nchnls = 1 /* Bartlett window */ itmp ftgen 1, 0, 16384, 20, 3, 1 /* sawtooth wave */ itmp ftgen 2, 0, 16384, 7, 1, 16384, -1 /* sine */ itmp ftgen 4, 0, 1024, 10, 1 /* window for "soft sync" with 1/32 overlap */ itmp ftgen 5, 0, 16384, 7, 0, 256, 1, 7936, 1, 256, 0, 7936, 0 /* generate bandlimited sawtooth waves */ itmp ftgen 3, 0, 4096, -30, 2, 1, 2048 icnt = 0 loop01: ; 100 tables for 8 octaves from 30 Hz ifrq = 30 * exp(log(2) * 8 * icnt / 100) itmp ftgen icnt + 100, 0, 4096, -30, 3, 1, sr / (2 * ifrq) icnt = icnt + 1 if (icnt < 99.5) igoto loop01 /* convert frequency to table number */ #define FRQ2FNUM(xout'xcps'xbsfn) # $xout = int(($xbsfn) + 0.5 + (100 / 8) * log(($xcps) / 30) / log(2)) $xout limit $xout, $xbsfn, $xbsfn + 99 # /* instr 1: pulse width modulated grains */ instr 1 kfrq = 523.25 ; frequency $FRQ2FNUM(kfnum'kfrq'100) ; table number kfmd = kfrq * 0.02 ; random variation in frequency kgdur = 0.2 ; grain duration kdens = 200 ; density iseed = 1 ; random seed kphs oscili 0.45, 1, 4 ; phase a1 grain3 kfrq, 0, kfmd, 0.5, kgdur, kdens, 100, \ kfnum, 1, -0.5, 0, iseed, 2 a2 grain3 kfrq, 0.5 + kphs, kfmd, 0.5, kgdur, kdens, 100, \ kfnum, 1, -0.5, 0, iseed, 2 ; de-click aenv linseg 0, 0.01, 1, p3 - 0.05, 1, 0.04, 0, 1, 0 out aenv * 2250 * (a1 - a2) endin /* instr 2: phase variation */ instr 2 kfrq = 220 ; frequency $FRQ2FNUM(kfnum'kfrq'100) ; table number kgdur = 0.2 ; grain duration kdens = 200 ; density iseed = 2 ; random seed kprdst expon 0.5, p3, 0.02 ; distribution a1 grain3 kfrq, 0.5, 0, 0.5, kgdur, kdens, 100, kfnum, 1, 0, -kprdst, iseed, 64 ; de-click aenv linseg 0, 0.01, 1, p3 - 0.05, 1, 0.04, 0, 1, 0 out aenv * 1500 * a1 endin /* instr 3: "soft sync" */ instr 3 \
967
kdens = kgdur =
130.8 2 / kdens
kfrq expon 880, p3, 220 ; oscillator frequency $FRQ2FNUM(kfnum'kfrq'100) ; table number a1 grain3 kfrq, 0, 0, 0, kgdur, kdens, 3, kfnum, 5, 0, 0, 0, 2 a2 grain3 kfrq, 0.667, 0, 0, kgdur, kdens, 3, kfnum, 5, 0, 0, 0, 2 ; de-click aenv linseg 0, 0.01, 1, p3 - 0.05, 1, 0.04, 0, 1, 0 out aenv * 10000 * (a1 - a2) endin </CsInstruments> <CsScore> t i i i e 0 1 2 3 60 0 3 4 3 8 3
</CsScore> </CsoundSynthesizer>
See Also
grain2
Credits
Author: Istvan Varga New in version 4.15 Updated April 2002 by Istvan Varga
968
granule
granule A more complex granular synthesis texture generator.
Description
The granule unit generator is more complex than grain, but does add new possibilities. granule is a Csound unit generator which employs a wavetable as input to produce granularly synthesized audio output. Wavetable data may be generated by any of the GEN subroutines such as GEN01 which reads an audio data file into a wavetable. This enable a sampled sound to be used as the source for the grains. Up to 128 voices are implemented internally. The maximum number of voices can be increased by redefining the variable MAXVOICE in the grain4.h file. granule has a build-in random number generator to handle all the random offset parameters. Thresholding is also implemented to scan the source function table at initialization stage. This facilitates features such as skipping silence passage between sentences. The characteristics of the synthesis are controlled by 22 parameters. xamp is the amplitude of the output and it can be either audio rate or control rate variable.
Syntax
ares granule xamp, ivoice, iratio, imode, ithd, ifn, ipshift, igskip, \ igskip_os, ilength, kgap, igap_os, kgsize, igsize_os, iatt, idec \ [, iseed] [, ipitch1] [, ipitch2] [, ipitch3] [, ipitch4] [, ifnenv]
Initialization
ivoice -- number of voices. iratio -- ratio of the speed of the gskip pointer relative to output audio sample rate. eg. 0.5 will be half speed. imode -- +1 grain pointer move forward (same direction of the gskip pointer), -1 backward (oppose direction to the gskip pointer) or 0 for random. ithd -- threshold, if the sampled signal in the wavetable is smaller then ithd, it will be skipped. ifn -- function table number of sound source. ipshift -- pitch shift control. If ipshift is 0, pitch will be set randomly up and down an octave. If ipshift is 1, 2, 3 or 4, up to four different pitches can be set amount the number of voices defined in ivoice. The optional parameters ipitch1, ipitch2, ipitch3 and ipitch4 are used to quantify the pitch shifts. igskip -- initial skip from the beginning of the function table in sec. igskip_os -- gskip pointer random offset in sec, 0 will be no offset. ilength -- length of the table to be used starting from igskip in sec. igap_os -- gap random offset in % of the gap size, 0 gives no offset. igsize_os -- grain size random offset in % of grain size, 0 gives no offset. iatt -- attack of the grain envelope in % of grain size. 969
idec -- decade of the grain envelope in % of grain size. iseed (optional, default=0.5) -- seed for the random number generator. ipitch1, ipitch2, ipitch3, ipitch4 (optional, default=1) -- pitch shift parameter, used when ipshift is set to 1, 2, 3 or 4. Time scaling technique is used in pitch shift with linear interpolation between data points. Default value is 1, the original pitch. ifnenv (optional, default=0) -- function table number to be used to generate the shape of the envelope.
Performance
xamp -- amplitude. kgap -- gap between grains in sec. kgsize -- grain size in sec.
Examples
Here is an example of the granule opcode. It uses the file granule.csd [examples/granule.csd], and mary.wav [examples/mary.wav].
970
</CsoundSynthesizer>
The above example reads a sound file called mary.wav into wavetable number 1 with 262,144 samples. It generates 10 seconds of stereo audio output using the wavetable. In the orchestra file, all parameters required to control the synthesis are passed from the score file. A linseg function generator is used to generate an envelope with 0.5 second of linear attack and decay. Stereo effect is generated by using different seeds for the two granule function calls. In the example, 0.17 is added to p20 before passing into the second granule call to ensure that all of the random offset events are different from the first one. In the score file, the parameters are interpreted as: Parameter p5 (ivoice) p6 (iratio) p7 (imode) p8 (ithd) p9 (ifn) p10 (ipshift) p11 (igskip) Interpreted As the number of voices is set to 64 set to 0.5, it scans the wavetable at half of the speed of the audio output rate set to 0, the grain pointer only move forward set to 0, skipping the thresholding process set to 1, function table number 1 is used set to 4, four different pitches are going to be generated set to 0 and p12 (igskip_os) is set to 0.005, no skipping into the wavetable and a 5 mSec random offset is used set to 5, 5 seconds of the wavetable is to be used set to 0.01 and p15 (igap_os) is set to 50, 10 mSec gap with 50% random offset is to be used set to 0.02 and p17 (igsize_os) is set to 50, 20 mSec grain with 50% random offset is used set to 30, 30% of linear attack and decade is applied to the grain seed for the random number generator is set to 0.39 pitches set to 1 which is the original pitch, 1.42 which is a 5th up, 0.29 which is a 7th down and finally 2 which is an octave up.
p13 (ilength) p14 (kgap) p16 (kgsize) p18 (iatt) and p19 (idec) p20 (iseed) p21 - p24
Credits
Author: Allan Lee Belfast 1996 New in version 3.35
971
guiro
guiro Semi-physical model of a guiro sound.
Description
guiro is a semi-physical model of a guiro sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares guiro kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] [, ifreq1]
Initialization
idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 128. idamp (optional) -- the damping factor of the instrument. Not used. imaxshake (optional, default=0) -- amount of energy to add back into the system. The value should be in range 0 to 1. ifreq (optional) -- the main resonant frequency. The default value is 2500. ifreq1 (optional) -- the first resonant frequency.
Performance
kamp -- Amplitude of output. Note: As these instruments are stochastic, this is only an approximation.
Examples
Here is an example of the guiro opcode. It uses the file guiro.csd [examples/guiro.csd].
according to platform audio I/O only the line below: output any platform
972
kr = 4410 ksmps = 10 nchnls = 1 a1 instr 01 ;example of a guiro guiro p4, 0.01 out a1 endin
See Also
bamboo, dripwater, sleighbells, tambourine
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
973
harmon
harmon Analyze an audio input and generate harmonizing voices in synchrony.
Description
Analyze an audio input and generate harmonizing voices in synchrony.
Syntax
ares harmon asig, kestfrq, kmaxvar, kgenfreq1, kgenfreq2, imode, \ iminfrq, iprd
Initialization
imode -- interpreting mode for the generating frequency inputs kgenfreq1, kgenfreq2. 0: input values are ratios with respect to the audio signal analyzed frequency. 1: input values are the actual requested frequencies in Hz. iminfrq -- the lowest expected frequency (in Hz) of the audio input. This parameter determines how much of the input is saved for the running analysis, and sets a lower bound on the internal pitch tracker. iprd -- period of analysis (in seconds). Since the internal pitch analysis can be time-consuming, the input is typically analyzed only each 20 to 50 milliseconds.
Performance
kestfrq -- estimated frequency of the input. kmaxvar -- the maximum variance (expects a value betwee 0 and 1). kgenfreq1 -- the first generated frequency. kgenfreq2 -- the second generated frequency. This unit is a harmonizer, able to provide up to two additional voices with the same amplitude and spectrum as the input. The input analysis is assisted by two things: an input estimated frequency kestfrq (in Hz), and a fractional maximum variance kmaxvar about that estimate which serves to limit the size of the search. Once the real input frequency is determined, the most recent pulse shape is used to generate the other voices at their requested frequencies. The three frequency inputs can be derived in various ways from a score file or MIDI source. The first is the expected pitch, with a variance parameter allowing for inflections or inaccuracies; if the expected pitch is zero the harmonizer will be silent. The second and third pitches control the output frequencies; if either is zero the harmonizer will output only the non-zero request; if both are zero the harmonizer will be silent. When the requested frequency is higher than the input, the process requires additional computation due to overlapped output pulses. This is currently limited for efficiency reasons, with the result that only one voice can be higher than the input at any one time. This unit is useful for supplying a background chorus effect on demand, or for correcting the pitch of a faulty input vocal. There is essentially no delay between input and output. Output includes only the generated parts, and does not include the input.
974
Examples
Here is an example of the harmon opcode. It uses the file harmon.csd [examples/harmon.csd].
imode = 1 iminfrq = inote - 200 iprd = 0.1 ; Generate the harmony notes. a1 harmon avco, kestfrq, kmaxvar, kgenfreq1, kgenfreq2, \ imode, iminfrq, iprd out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
975
Author: Barry L. Vercoe M.I.T., Cambridge, Mass 1997 New in version 3.47 Example written by Kevin Conder.
976
harmon2
harmon2 Analyze an audio input and generate harmonizing voices in synchrony with formants preserved.
Description
Generate harmonizing voices with formants preserved.
Syntax
ares harmon2 asig, koct, kfrq1, kfrq2, icpsmode, ilowest[, ipolarity] ares harmon3 asig, koct, kfrq1, \ kfrq2, kfrq3, icpsmode, ilowest[, ipolarity] ares harmon4 asig, koct, kfrq1, \ kfrq2, kfrq3, kfrq4, icpsmode, ilowest[, ipolarity]
Initialization
icpsmode -- interpreting mode for the generating frequency inputs kfrq1, kfrq2, kfrq3 and kfrq4: 0: input values are ratios w.r.t. the cps equivalent of koct. 1: input values are the actual requested frequencies in cps. ilowest -- lowest value of the koct input for which harmonizing voices will be generated. ipolarity -- polarity of asig input, 1 = positive glottal pulses, 0 = negative. Default is 1.
Performance
Harmon2, harmon3 and harmon4 are high-performance harmonizers, able to provide up to four pitchshifted copies of the input asig with spectral formants preserved. The pitch-shifting algorithm requires an accurate running estimate (koct, in decimal oct units) of the pitched content of asig, normally gained from an independent pitch tracker such as specptrk. The algorithm then isolates the most recent full pulse within asig, and uses this to generate the other voices at their required pulse rates. If the frequency (or ratio) presented to kfrq1, kfrq2, kfrq3 or kfrq4 is zero, then no signal is generated for that voice. If any of them is non-zero, but the koct input is below the value ilowest, then that voice will output a direct copy of the input asig. As a consequence, the data arriving at the k-rate inputs can variously cause the generated voices to be turned on or off, to pass a direct copy of a non-voiced fricative source, or to harmonize the source according to some constructed algorithm. The transition from one mode to another is cross-faded, giving seemless alternating between voiced (harmonized) and nonvoiced fricatives during spoken or sung input. harmon2, harmon3, harmon4 are especially matched to the output of specptrk. The latter generates pitch data in decimal octave format; it also emits its base value if no pitch is identified (as in fricative noise) and emits zero if the energy falls below a threshold, so that harmon2, harmon3, harmon4 can be set to pass the direct signal in both cases. Of course, any other form of pitch estimation could also be used. Since pitch trackers usually incur a slight delay for accurate estimation (for specptrk the delay is printed by the spectrum unit), it is normal to delay the audio signal by the same amount so that harmon2, harmon3, harmon4 can work from a fully concurrent estimate.
977
Examples
Here is an example of the harmon2 opcode. It uses the file harmon.csd [examples/harmon.csd].
Credits
Author: Barry L. Vercoe M.I.T., Cambridge, Mass 2006 New in version 5.04
978
hilbert
hilbert A Hilbert transformer.
Description
An IIR implementation of a Hilbert transformer.
Syntax
ar1, ar2 hilbert asig
Performance
asig -- input signal ar1 -- sine output of asig ar2 -- cosine output of asig hilbert is an IIR filter based implementation of a broad-band 90 degree phase difference network. The input to hilbert is an audio signal, with a frequency range from 15 Hz to 15 kHz. The outputs of hilbert have an identical frequency response to the input (i.e. they sound the same), but the two outputs have a constant phase difference of 90 degrees, plus or minus some small amount of error, throughout the entire frequency range. The outputs are in quadrature. hilbert is useful in the implementation of many digital signal processing techniques that require a signal in phase quadrature. ar1 corresponds to the cosine output of hilbert, while ar2 corresponds to the sine output. The two outputs have a constant phase difference throughout the audio range that corresponds to the phase relationship between cosine and sine waves. Internally, hilbert is based on two parallel 6th-order allpass filters. Each allpass filter implements a phase lag that increases with frequency; the difference between the phase lags of the parallel allpass filters at any given point is approximately 90 degrees. Unlike an FIR-based Hilbert transformer, the output of hilbert does not have a linear phase response. However, the IIR structure used in hilbert is far more efficient to compute, and the nonlinear phase response can be used in the creation of interesting audio effects, as in the second example below.
Examples
The first example implements frequency shifting, or single sideband amplitude modulation. Frequency shifting is similar to ring modulation, except the upper and lower sidebands are separated into individual outputs. By using only one of the outputs, the input signal can be "detuned," where the harmonic components of the signal are shifted out of harmonic alignment with each other, e.g. a signal with harmonics at 100, 200, 300, 400 and 500 Hz, shifted up by 50 Hz, will have harmonics at 150, 250, 350, 450, and 550 Hz. Here is the first example of the hilbert opcode. It uses the file hilbert.csd [examples/hilbert.csd], and mary.wav [examples/mary.wav].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o hilbert.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 idur = p3 ; Initial amount of frequency shift. ; It can be positive or negative. ibegshift = p4 ; Final amount of frequency shift. ; It can be positive or negative. iendshift = p5 ; A simple envelope for determining the ; amount of frequency shift. kfreq linseg ibegshift, idur, iendshift ; Use the sound of your choice. ain soundin "mary.wav" ; Phase quadrature output derived from input signal. areal, aimag hilbert ain ; Quadrature oscillator. asin oscili 1, kfreq, 1 acos oscili 1, kfreq, 1, .25 ; Use ; See amod1 amod2 a trigonometric identity. the references for further details. = areal * acos = aimag * asin
; Both sum and difference frequencies can be ; output at once. ; aupshift corresponds to the sum frequencies. aupshift = (amod1 - amod2) * 0.7 ; adownshift corresponds to the difference frequencies. adownshift = (amod1 + amod2) * 0.7 ; Notice that the adding of the two together is ; identical to the output of ring modulation. out aupshift endin </CsInstruments> <CsScore> ; Sine table for quadrature oscillator. f 1 0 16384 10 1 ; Starting with no shift, ending with all ; frequencies shifted up by 200 Hz. i 1 0 2 0 200 ; Starting with no shift, ending with all ; frequencies shifted down by 200 Hz. i 1 2 2 0 -200 e </CsScore> </CsoundSynthesizer>
980
The second example is a variation of the first, but with the output being fed back into the input. With very small shift amounts (i.e. between 0 and +-6 Hz), the result is a sound that has been described as a barberpole phaser or Shepard tone phase shifter. Several notches appear in the spectrum, and are constantly swept in the direction opposite that of the shift, producing a filtering effect that is reminiscent of Risset's endless glissando. Here is the second example of the hilbert opcode. It uses the file hilbert_barberpole.csd [examples/hilbert_barberpole.csd], and mary.wav [examples/mary.wav].
Example 297. Example of the hilbert opcode sounding like a barberpole phaser.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o hilbert_barberpole.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 ; kr must equal sr for the barberpole effect to work. kr = 44100 ksmps = 1 nchnls = 2 ; Instrument #1 instr 1 idur = p3 ibegshift = p4 iendshift = p5 ; sawtooth wave, not bandlimited asaw phasor 100 ; add offset to center phasor amplitude between -.5 and .5 asaw = asaw - .5 ; sawtooth wave, with amplitude of 10000 ain = asaw * 20000 ; The envelope of the frequency shift. kfreq linseg ibegshift, idur, iendshift ; Phase quadrature output derived from input signal. areal, aimag hilbert ain ; The quadrature oscillator. asin oscili 1, kfreq, 1 acos oscili 1, kfreq, 1, .25 ; Based on trignometric identities. amod1 = areal * acos amod2 = aimag * asin ; Calculate the up-shift and down-shift. aupshift = (amod1 + amod2) * 0.7 adownshift = (amod1 - amod2) * 0.7 ; Mix in the original signal to achieve the barberpole effect. amix1 = aupshift + ain amix2 = aupshift + ain ; Make sure the output doesn't get louder than the original signal. aout1 balance amix1, ain aout2 balance amix2, ain
981
outs aout1, aout2 endin </CsInstruments> <CsScore> ; Table 1: A sine wave for the quadrature oscillator. f 1 0 16384 10 1 ; ; ; i e The score. p4 = frequency shifter, starting frequency. p5 = frequency shifter, ending frequency. 1 0 6 -10 10
</CsScore> </CsoundSynthesizer>
Technical History
The use of phase-difference networks in frequency shifters was pioneered by Harald Bode1. Bode and Bob Moog provide an excellent description of the implementation and use of a frequency shifter in the analog realm in 2; this would be an excellent first source for those that wish to explore the possibilities of single sideband modulation. Bernie Hutchins provides more applications of the frequency shifter, as well as a detailed technical analysis3. A recent paper by Scott Wardle4 describes a digital implementation of a frequency shifter, as well as some unique applications.
References
1. H. Bode, "Solid State Audio Frequency Spectrum Shifter." AES Preprint No. 395 (1965). 2. H. Bode and R.A. Moog, "A High-Accuracy Frequency Shfiter for Professional Audio Applications." Journal of the Audio Engineering Society, July/August 1972, vol. 20, no. 6, p. 453. 3. B. Hutchins. Musical Engineer's Handbook (Ithaca, NY: Electronotes, 1975), ch. 6a. 4. S. Wardle, "A Hilbert-Transformer Frequency Shifter for Audio." Available online at http://www.iua.upf.es/dafx98/papers/.
Credits
Author: Sean Costello Seattle, Washington 1999 New in Csound version 3.55 The examples were updated April 2002. Thanks go to Sean Costello for fixing the barberpole example.
982
hrtfer
hrtfer Creates 3D audio for two speakers.
Description
Output is binaural (headphone) 3D audio.
Syntax
aleft, aright hrtfer asig, kaz, kelev, HRTFcompact
Initialization
kAz -- azimuth value in degrees. Positive values represent position on the right, negative values are positions on the left. kElev -- elevation value in degrees. Positive values represent position above horizontal, negative values are positions under horizontal. At present, the only file which can be used with hrtfer is HRTFcompact [examples/HRTFcompact]. It must be passed to the opcode as the last argument within quotes as shown above. HRTFcompact may also be obtained via ftp://ftp.cs.bath.ac.uk/pub/dream/utilities/Analysis/HRTFcompact anonymous ftp from:
Performance
These unit generators place a mono input signal in a virtual 3D space around the listener by convolving the input with the appropriate HRTF data specified by the opcode's azimuth and elevation values. hrtfer allows these values to be k-values, allowing for dynamic spatialization. hrtfer can only place the input at the requested position because the HRTF is loaded in at i-time (remember that currently, CSound has a limit of 20 files it can hold in memory, otherwise it causes a segmentation fault). The output will need to be scaled either by using balance or by multiplying the output by some scaling constant.
Note
The sampling rate of the orchestra must be 44.1kHz. This is because 44.1kHz is the sampling rate at which the HRTFs were measured. In order to be used at a different rate, the HRTFs would need to be re-sampled at the desired rate.
Examples
Here is an example of the hrtfer opcode. It uses the file hrtfer.csd [examples/hrtfer.csd], HRTFcompact [examples/HRTFcompact], and beats.wav [examples/beats.wav].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o hrtfer.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 instr 1 kaz kel asrc aleft,aright aleftscale arightscale outs endin linseg 0, p3, -360 linseg -40, p3, 45 ; move the sound in circle ; around the listener, changing ; elevation as its turning
soundin "beats.wav" hrtfer asrc, kaz, kel, "HRTFcompact" = aleft * 200 = aright * 200 aleftscale, arightscale
See Also
hrtfmove, hrtfmove2, hrtfstat.
Credits
Authors: Eli Breder and David MacIntyre Montreal 1996 Fixed the example thanks to a message from Istvan Varga.
984
hrtfmove
hrtfmove Generates dynamic 3d binaural audio for headphones using magnitude interpolation and phase truncation.
Description
This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener by convolving the source with stored head related transfer function (HRTF) based filters.
Syntax
aleft, aright hrtfmove asrc, kAz, kElev, ifilel, ifiler [, imode, ifade, isr]
Initialization Initialization
ifilel -- left HRTF spectral data file ifiler -- right HRTF spectral data file
Note
Spectral datafiles (based on the MIT HRTF database) are available in 3 different sampling rates: 44.1, 48 and 96 khz and are labelled accordingly. Input and processing sr should match datafile sr. Files should be in the current directory or the SADIR (see Environment Variables). imode -- optional, default 0 for phase truncation, 1 for minimum phase ifade -- optional, number of processing buffers for phase change crossfade (default 8). Legal range is 1-24. A low value is recommended for complex sources (4 or less: a higher value may make the crossfade audible), a higher value (8 or more: a lower value may make the inconsistency when the filter changes phase values audible) for narrowband sources. Does not effect minimum phase processing.
Note
Ocassionally fades may overlap (when unnaturally fast/complex trajectories are requested). In this case, a warning will be printed. Use a smaller crossfade or slightly change trajectory to avoid any possible inconsistencies that may arise. isr - optional, default 44.1kHz, legal values: 44100, 48000 and 96000. kAz -- azimuth value in degrees. Positive values represent position on the right, negative values are positions on the left. kElev -- elevation value in degrees. Positive values represent position above horizontal, negative values are positions below horizontal (min -40). Artifact-free user-defined trajectories are made possible using an interpolation algorithm based on spec985
tral magnitude interpolation and phase truncation. Crossfades are implemented to minimise/eliminate any inconsistencies caused by updating phase values. These crossfades are performed over a user definable number of convolution processing buffers. Complex sources may only need to crossfade over 1 buffer; narrow band sources may need several. The opcode also offers minimum phase based processing, a more traditional and complex method. In this mode, the hrtf filters used are reduced to minimum phase representations and the interpolation process then uses the relationship between minimum phase magnitude and phase spectra. Interaural time difference, which is inherent to the phase truncation process, is reintroduced in the minimum phase process using variable delay lines.
Examples
Here is an example of the hrtfmove opcode. It uses the file hrtfmove.csd [examples/hrtfmove.csd].
kamp = p4 kcps = cpspch(p5) icps = cpspch(p5) a1 pluck kamp, kcps, icps, 0, 1 gasrc = a1 endin instr 10 ;uses output from instr1 as source kaz linseg 0, p3, 720 ;2 full rotations
aleft,aright hrtfmove gasrc, kaz,0, "hrtf-44100-left.dat","hrtf-44100-right.dat" outs aleft, aright endin </CsInstruments> <CsScore> ; Play Instrument 1: a simple arpeggio i1 0 .2 15000 8.00 i1 + .2 15000 8.04 i1 + .2 15000 8.07 i1 + .2 15000 8.11 i1 + .2 15000 9.02 i1 + 1.5 15000 8.11 i1 + 1.5 15000 8.07 i1 + 1.5 15000 8.04 i1 + 1.5 15000 8.00 i1 + 1.5 15000 7.09 i1 + 1.5 15000 8.00
986
See Also
hrtfmove2, hrtfstat, hrtfer.
Credits
Author: Brian Carty Maynooth 2008
987
hrtfmove2
hrtfmove2 Generates dynamic 3d binaural audio for headphones using a Woodworth based spherical head model with improved low frequency phase accuracy.
Description
This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener using head related transfer function (HRTF) based filters.
Syntax
aleft, aright hrtfmove2 asrc, kAz, kElev, ifilel, ifiler [,ioverlap, iradius, isr]
Initialization
ifilel -- left HRTF spectral data file ifiler -- right HRTF spectral data file
Note
Spectral datafiles (based on the MIT HRTF database) are available in 3 different sampling rates: 44.1, 48 and 96 khz and are labelled accordingly. Input and processing sr should match datafile sr. Files should be in the current directory or the SADIR (see Environment Variables). ioverlap -- optional, number of overlaps for STFT processing (default 4). See STFT section of manual. iradius -- optional, head radius used for phase spectra calculation in centimeters (default 9.0) isr - optional, default 44.1kHz, legal values: 44100, 48000 and 96000.
Performance
asrc -- Input/source signal. kAz -- azimuth value in degrees. Positive values represent position on the right, negative values are positions on the left. kElev -- elevation value in degrees. Positive values represent position above horizontal, negative values are positions below horizontal (min -40). Artifact-free user-defined trajectories are made possible using an interpolation algorithm based on spectral magnitude interpolation and a derived phase spectrum based on the Woodworth spherical head model. Accuracy is increased for the data set provided by extracting and applying a frequency dependent scaling factor to the phase spectra, leading to a more precise low frequency interaural time difference. Users can control head radius for the phase derivation, allowing a crude level of individualisation. The dynamic source version of the opcode uses a Short Time Fourier Transform algorithm to avoid artefacts caused by derived phase spectra changes. STFT processing means this opcode is more computationally intensive than hrtfmove using phase truncation, but phase is constantly updated by hrtfmove2. 988
Examples
Here is an example of the hrtfmove2 opcode. It uses the file hrtfmove2.csd [examples/hrtfmove2.csd].
kamp = p4 kcps = cpspch(p5) icps = cpspch(p5) a1 pluck kamp, kcps, icps, 0, 1 gasrc = a1 endin instr 10 ;uses output from instr1 as source kaz linseg 0, p3, 720 ;2 full rotations
aleft,aright hrtfmove2 gasrc, kaz,0, "hrtf-44100-left.dat","hrtf-44100-right.dat" outs aleft, aright endin </CsInstruments> <CsScore> ; Play Instrument 1: a simple arpeggio i1 0 .2 15000 8.00 i1 + .2 15000 8.04 i1 + .2 15000 8.07 i1 + .2 15000 8.11 i1 + .2 15000 9.02 i1 + 1.5 15000 8.11 i1 + 1.5 15000 8.07 i1 + 1.5 15000 8.04 i1 + 1.5 15000 8.00 i1 + 1.5 15000 7.09 i1 + 1.5 15000 8.00 ; Play Instrument 10 for 10 seconds. i10 0 10 </CsScore> </CsoundSynthesizer>
See Also
hrtfmove, hrtfstat, hrtfer. 989
Credits
Author: Brian Carty Maynooth 2008
990
hrtfstat
hrtfstat Generates static 3d binaural audio for headphones using a Woodworth based spherical head model with improved low frequency phase accuracy.
Description
This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener using head related transfer function (HRTF) based filters. It produces a static output (azimuth and elevation parameters are i-rate), because a static source allows much more efficient processing than hrtfmove and hrtfmove2,.
Syntax
aleft, aright hrtfstat asrc, iAz, iElev, ifilel, ifiler [,iradius, isr]
Initialization
iAz -- azimuth value in degrees. Positive values represent position on the right, negative values are positions on the left. iElev -- elevation value in degrees. Positive values represent position above horizontal, negative values are positions below horizontal (min -40). ifilel -- left HRTF spectral data file ifiler -- right HRTF spectral data file
Note
Spectral datafiles (based on the MIT HRTF database) are available in 3 different sampling rates: 44.1, 48 and 96 khz and are labelled accordingly. Input and processing sr should match datafile sr. Files should be in the current directory or the SADIR (see Environment Variables). iradius -- optional, head radius used for phase spectra calculation in centimeters (default 9.0) isr - optional (default 44.1kHz). Legal values are 44100, 48000 and 96000.
Performance
Artifact-free user-defined static spatialisation is made possible using an interpolation algorithm based on spectral magnitude interpolation and a derived phase based on the Woodworth spherical head model. Accuracy is increased for the data set provided by extracting and applying a frequency dependent scaling factor to the phase spectra, leading to a more precise low frequency interaural time difference. Users can control head radius for the phase derivation, allowing a crude level of individualisation. The static source version of the opcode uses overlap add convolution (it does not need STFT processing, see hrtfmove2), and is thus considerably more efficient than hrtfmove2 or hrtfmove, but cannot generate moving sources.
991
Examples
It can be found in the file htrfstat.csd [examples/htrfstat.csd].
kamp = p4 kcps = cpspch(p5) icps = cpspch(p5) a1 pluck kamp, kcps, icps, 0, 1 gasrc = a1 endin instr 10 ;uses output from instr1 as source aleft,aright hrtfstat gasrc, 90,0, "hrtf-44100-left.dat","hrtf-44100-right.dat" outs aleft, aright endin </CsInstruments> <CsScore> ; Play Instrument 1: a plucked string i1 0 2 20000 8.00 ; Play Instrument 10 for 2 seconds. i10 0 2 </CsScore> </CsoundSynthesizer>
See Also
hrtfmove, hrtfmove2, hrtfer.
Credits
Author: Brian Carty Maynooth 992
2008
993
hsboscil
hsboscil An oscillator which takes tonality and brightness as arguments.
Description
An oscillator which takes tonality and brightness as arguments, relative to a base frequency.
Syntax
ares hsboscil kamp, ktone, kbrite, ibasfreq, iwfn, ioctfn \ [, ioctcnt] [, iphs]
Initialization
ibasfreq -- base frequency to which tonality and brighness are relative iwfn -- function table of the waveform, usually a sine ioctfn -- function table used for weighting the octaves, usually something like: f1 0 1024 -19 1 0.5 270 0.5 ioctcnt (optional) -- number of octaves used for brightness blending. Must be in the range 2 to 10. Default is 3. iphs (optional, default=0) -- initial phase of the oscillator. If iphs = -1, initialization is skipped.
Performance
kamp -- amplitude of note ktone -- cyclic tonality parameter relative to ibasfreq in logarithmic octave, range 0 to 1, values > 1 can be used, and are internally reduced to frac(ktone). kbrite -- brightness parameter relative to ibasfreq, achieved by weighting ioctcnt octaves. It is scaled in such a way, that a value of 0 corresponds to the orignal value of ibasfreq, 1 corresponds to one octave above ibasfreq, -2 corresponds to two octaves below ibasfreq, etc. kbrite may be fractional. hsboscil takes tonality and brightness as arguments, relative to a base frequency (ibasfreq). Tonality is a cyclic parameter in the logarithmic octave, brightness is realized by mixing multiple weighted octaves. It is useful when tone space is understood in a concept of polar coordinates. Making ktone a line, and kbrite a constant, produces Risset's glissando. Oscillator table iwfn is always read interpolated. Performance time requires about ioctcnt * oscili.
Examples
Here is an example of the hsboscil opcode. It uses the file hsboscil.csd [examples/hsboscil.csd].
994
Here is an example of the hsboscil opcode in a MIDI instrument. It uses the file hsboscil_midi.csd [examples/hsboscil_midi.csd].
995
; For Non-realtime ouput leave only the line below: ; -o hsboscil_midi.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; synth waveform giwave ftgen 1, 0, 1024, 10, 1, 1, 1, 1 ; blending window giblend ftgen 2, 0, 1024, -19, 1, 0.5, 270, 0.5 ; Instrument #1 - use hsboscil in a MIDI instrument. instr 1 ibase = cpsoct(6) ioctcnt = 5 ; all octaves sound alike. itona octmidi ; velocity is mapped to brightness ibrite ampmidi 3 ; Map an exponential envelope for the amplitude. kenv expon 20000, 1, 100 asig hsboscil kenv, itona, ibrite, ibase, giwave, giblend, ioctcnt out asig endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten minutes i 1 0 600 e </CsScore> </CsoundSynthesizer>
Credits
Author: Peter Neubcker Munich, Germany August, 1999 New in Csound version 3.58
996
hvs1
hvs1 Allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated kvariables.
Description
hvs1 allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated kvariables.
Syntax
hvs1 kx, inumParms, inumPointsX, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]
Initialization
inumParms - number of parameters controlled by the HVS. Each HVS snapshot is made up of inumParms elements. inumPointsX - number of points that each dimension of the HVS cube (or square in case of twodimensional HVS; or line in case of one-dimensional HVS) is made up. iOutTab - number of the table receiving the set of output-parameter instant values of the HVS. The total amount of parameters is defined by the inumParms argument. iPositionsTab a table filled with the individual positions of snapshots in the HVS matrix (see below for more information). iSnapTab a table filled with all the snapshots. Each snapshot is made up of a set of parameter values. The amount of elements contained in each snapshots is specified by the inumParms argument. The set of elements of each snapshot follows (and is adjacent) to the previous one in this table. So the total size of this table should be >= to inumParms multiplied the number of snapshots you intend to store for the HVS. iConfigTab (optional) a table containing the behavior of the HVS for each parameter. If the value of iConfigTab is zero (default), this argument is ignored, meaning that each parameter is treated with linear interpolation by the HVS. If iConfigTab is different than zero, then it must refer to an existing table whose contents are in its turn referring to a particolar kind of interpolation. In this table, a value of -1 indicates that corresponding parameter is leaved unchanged (ignored) by the HVS; a value of zero indicates that corresponding parameter is treated with linear-interpolation; each other values must be integer numbers indicating an existing table filled with a shape which will determine the kind of special interpolation to be used (table-based interpolation).
Performance
kx - these are externally-modified variables which controls the motion of the pointer in the HVS matrix cube (or square or line in case of HVS matrices made up of less than 3 dimensions). The range of these input arguments must be 0 to 1. Hyper Vectorial Synthesis is a technique that allows control of a huge set of parameters by using a simple and global approach. The key concepts of the HVS are: The set of HVS parameters, whose amount is fixed and defined by the inumParms argument. During the 997
HVS performance, all these parameters are variant and can be applied to any sound synthesis technique, as well as to any global control for algorithmic composition and any other kind of level. The user must previously define several sets of fixed values for each HVS parameter, each set corresponding to a determinate synthesis configuration. Each set of values is called snapshot, and can be considered as the coordinates of a bound of a multi-dimensional space. The HVS consists on moving a point in this multidimensional space (by using a special motion pointer, see below), according and inside the bounds defined by the snapshots. You can fix any amount of HVS parameters (each parameter being a dimension of the multi-dimensional space), even a huge number, the limit only depends on the processing power (and the memory) of your computer and on the complexity of the sound-synthesis you will use. The HVS cube (or square or line). This is the matrix (of 3, 2 or 1 dimensions, according to the hvs opcode you intend to use) of mainstays (or pivot) points of HVS. The total amount of pivot-points depends on the value of the inumPointsX, inumPointsY and inumPointsZ arguments. In the case of a 3-dimensional HVS matrix you can define, for instance, 3 points for the X dimension, 5 for the Y dimension and 2 for the Z dimension. In this case, the total number of pivot-points is 3 * 5 * 2 = 30. With this set of pivot points, the cube Is divided into smaller cubed zones each one bounded by eight nearby points. Each point is numbered. The numeral order of these points is enstabilished in the following way: number zero is the first point, number 1 the second and so on. Assuming you are using a 3-dimensional HVS cube having the number of points above mentioned (i.e. 3, 5 and 2 respectively for the X, Y and Z axis), the first point (point zero) is the upper-left-front vertex of the cube, by facing the XY plane of the cube. The second point is the middle point of the upper front edge of the cube and so on. You can refer to the figure below in order to understand how the numeral order of the pivot-points proceeds: For the 2-dimensional HVS, it is the same, by only omitting the rear cube face, so each zone is bounded by 4 pivot-points instead of 8. For the 1-dimensional HVS, the whole thing is even simpler because it is a line with the pivot-points proceeding from left to right. Each point is coupled with a snapshot. Snapshot order, as stored into the iSnapTab, can or cannot follow the order of the pivot-points numbers. In fact it is possible to alter this order by means the iPositionsTab, a table that remaps the position of each snapshot in relation to the pivot points. The iPositionsTab is made up of the positions of the snapshots (contained in the iSnapTab) in the two-dimensional grid. Each subsequent element is actually a pointer representing the position in the iSnapTab. For example, in a 2-dimensional HVS matrix such as the following (in this case having inumPointsX = 3 and inumPointsY = 5:
Table 10.
5 3 6 4 8 7 4 2 1 2 1 9 0 3 7
These numbers (to be stored in the iSnapTab table by using, for instance, the GEN02 function generator) represents the snapshot position within the grid (in this case a 3x5 matrix). So, the first element 5, has index zero and represents the 6th (element zero is the first) snapshot contained in the iSnapTab, the second element 7 represents the 8th element of iSnapTab and so on. Summing up, the vertices of each zone (a cubed zone is delimited by 8 vertices; a squared zone by 4 vertices and a linear zone by 2 points) are coupled with a determinate snapshot, whose number is remapped by the iSnapTab. Output values of the HVS are influenced by the motion pointer, a point whose position, in the HVS cube (or square or segment) is determined by the kx, ky and kz arguments. The values of these arguments, which must be in the 0 to 1 range, are externally set by the user. The output values, whose amount is equal to the inumParms argument, are stored in the iOutTab, a table that must be already allocated by the user, and must be at least inumParms size. In what way the motion pointer influences the output? Well, when the motion pointer falls in a determinate cubed zone, delimited, for instance, by 8 vertices 998
(or pivot points), we assume that each vertex has associated a different snapshot (i.e. a set of inumParms values), well, the output will be the weighted average value of the 8 vertices, calculated according on the distance of the motion pointer from each of the 8 vertices. In the case of a default behavior, when the iConfigTab argument is not set, the exact output is calculated by using linear interpolation which is applied to each different parameter of the HVS. Anyway, it is possible to influence this behavior by setting the iConfigTab argument to a number of a table whose contents can affect one or more HVS parameters. The iConfigTab table elements are associated to each HVS parameter and their values affect the HVS output in the following way: If iConfigTab is equal to -1, corresponding output is skipped, i.e. the element is not calculated, leaving corresponding element value in the iOutTab unchanged; If iConfigTab is equal to zero, then the normal HVS output is calculated (by using weighted average of the nearest vertex of current zone where it falls the motion pointer); If iConfigTab element is equal to an integer number > zero, then the contents of a table having that number is used as a shape of a table-based interpolation.
Examples
Here is an example of the hvs1 opcode. It uses the file hvs1.csd [examples/hvs1.csd].
0,0,0, \ 7,8,9
999
printk2 tb0(k0) printk2 tb0(k1), 10 printk2 tb0(k2), 20 aosc1 aosc2 aosc3 aosc4 aosc5 aosc6 oscil oscil oscil oscil oscil oscil tb0(k0)/20, tb0(k1)/20, tb0(k2)/20, tb0(k1)/20, tb0(k2)/20, tb0(k0)/20, tb0(k1)*100 tb0(k2)*100 tb0(k0)*100 tb0(k0)*100 tb0(k1)*100 tb0(k2)*100 + + + + + + 200, 200, 200, 200, 200, 200, 1 1 1 1 1 1
outs aosc1 + aosc2 + aosc3, aosc4 + aosc5 + aosc6 endin </CsInstruments> <CsScore> f1 0 1024 10 1 f0 3600 i1 0 3600 </CsScore> </CsoundSynthesizer>
See Also
hvs2, hvs3, vphaseseg
Credits
Author: Gabriel Maldonado New in version 5.06
1000
hvs2
hvs2 Allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated kvariables.
Description
hvs2 allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated kvariables.
Syntax
hvs2 kx, ky, inumParms, inumPointsX, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]
Initialization
inumParms - number of parameters controlled by the HVS. Each HVS snapshot is made up of inumParms elements. inumPointsX - number of points that each dimension of the HVS cube (or square in case of twodimensional HVS; or line in case of one-dimensional HVS) is made up. iOutTab - number of the table receiving the set of output-parameter instant values of the HVS. The total amount of parameters is defined by the inumParms argument. iPositionsTab a table filled with the individual positions of snapshots in the HVS matrix (see below for more information). iSnapTab a table filled with all the snapshots. Each snapshot is made up of a set of parameter values. The amount of elements contained in each snapshots is specified by the inumParms argument. The set of elements of each snapshot follows (and is adjacent) to the previous one in this table. So the total size of this table should be >= to inumParms multiplied the number of snapshots you intend to store for the HVS. iConfigTab (optional) a table containing the behavior of the HVS for each parameter. If the value of iConfigTab is zero (default), this argument is ignored, meaning that each parameter is treated with linear interpolation by the HVS. If iConfigTab is different than zero, then it must refer to an existing table whose contents are in its turn referring to a particolar kind of interpolation. In this table, a value of -1 indicates that corresponding parameter is leaved unchanged (ignored) by the HVS; a value of zero indicates that corresponding parameter is treated with linear-interpolation; each other values must be integer numbers indicating an existing table filled with a shape which will determine the kind of special interpolation to be used (table-based interpolation).
Performance
kx, ky - these are externally-modified variables which controls the motion of the pointer in the HVS matrix cube (or square or line in case of HVS matrices made up of less than 3 dimensions). The range of these input arguments must be 0 to 1. Hyper Vectorial Synthesis is a technique that allows control of a huge set of parameters by using a simple and global approach. The key concepts of the HVS are: The set of HVS parameters, whose amount is fixed and defined by the inumParms argument. During the 1001
HVS performance, all these parameters are variant and can be applied to any sound synthesis technique, as well as to any global control for algorithmic composition and any other kind of level. The user must previously define several sets of fixed values for each HVS parameter, each set corresponding to a determinate synthesis configuration. Each set of values is called snapshot, and can be considered as the coordinates of a bound of a multi-dimensional space. The HVS consists on moving a point in this multidimensional space (by using a special motion pointer, see below), according and inside the bounds defined by the snapshots. You can fix any amount of HVS parameters (each parameter being a dimension of the multi-dimensional space), even a huge number, the limit only depends on the processing power (and the memory) of your computer and on the complexity of the sound-synthesis you will use. The HVS cube (or square or line). This is the matrix (of 3, 2 or 1 dimensions, according to the hvs opcode you intend to use) of mainstays (or pivot) points of HVS. The total amount of pivot-points depends on the value of the inumPointsX, inumPointsY and inumPointsZ arguments. In the case of a 3-dimensional HVS matrix you can define, for instance, 3 points for the X dimension, 5 for the Y dimension and 2 for the Z dimension. In this case, the total number of pivot-points is 3 * 5 * 2 = 30. With this set of pivot points, the cube Is divided into smaller cubed zones each one bounded by eight nearby points. Each point is numbered. The numeral order of these points is enstabilished in the following way: number zero is the first point, number 1 the second and so on. Assuming you are using a 3-dimensional HVS cube having the number of points above mentioned (i.e. 3, 5 and 2 respectively for the X, Y and Z axis), the first point (point zero) is the upper-left-front vertex of the cube, by facing the XY plane of the cube. The second point is the middle point of the upper front edge of the cube and so on. You can refer to the figure below in order to understand how the numeral order of the pivot-points proceeds: For the 2-dimensional HVS, it is the same, by only omitting the rear cube face, so each zone is bounded by 4 pivot-points instead of 8. For the 1-dimensional HVS, the whole thing is even simpler because it is a line with the pivot-points proceeding from left to right. Each point is coupled with a snapshot. Snapshot order, as stored into the iSnapTab, can or cannot follow the order of the pivot-points numbers. In fact it is possible to alter this order by means the iPositionsTab, a table that remaps the position of each snapshot in relation to the pivot points. The iPositionsTab is made up of the positions of the snapshots (contained in the iSnapTab) in the two-dimensional grid. Each subsequent element is actually a pointer representing the position in the iSnapTab. For example, in a 2-dimensional HVS matrix such as the following (in this case having inumPointsX = 3 and inumPointsY = 5:
Table 11.
5 3 6 4 8 7 4 2 1 2 1 9 0 3 7
These numbers (to be stored in the iSnapTab table by using, for instance, the GEN02 function generator) represents the snapshot position within the grid (in this case a 3x5 matrix). So, the first element 5, has index zero and represents the 6th (element zero is the first) snapshot contained in the iSnapTab, the second element 7 represents the 8th element of iSnapTab and so on. Summing up, the vertices of each zone (a cubed zone is delimited by 8 vertices; a squared zone by 4 vertices and a linear zone by 2 points) are coupled with a determinate snapshot, whose number is remapped by the iSnapTab. Output values of the HVS are influenced by the motion pointer, a point whose position, in the HVS cube (or square or segment) is determined by the kx, ky and kz arguments. The values of these arguments, which must be in the 0 to 1 range, are externally set by the user. The output values, whose amount is equal to the inumParms argument, are stored in the iOutTab, a table that must be already allocated by the user, and must be at least inumParms size. In what way the motion pointer influences the output? Well, when the motion pointer falls in a determinate cubed zone, delimited, for instance, by 8 vertices 1002
(or pivot points), we assume that each vertex has associated a different snapshot (i.e. a set of inumParms values), well, the output will be the weighted average value of the 8 vertices, calculated according on the distance of the motion pointer from each of the 8 vertices. In the case of a default behavior, when the iConfigTab argument is not set, the exact output is calculated by using linear interpolation which is applied to each different parameter of the HVS. Anyway, it is possible to influence this behavior by setting the iConfigTab argument to a number of a table whose contents can affect one or more HVS parameters. The iConfigTab table elements are associated to each HVS parameter and their values affect the HVS output in the following way: If iConfigTab is equal to -1, corresponding output is skipped, i.e. the element is not calculated, leaving corresponding element value in the iOutTab unchanged; If iConfigTab is equal to zero, then the normal HVS output is calculated (by using weighted average of the nearest vertex of current zone where it falls the motion pointer); If iConfigTab element is equal to an integer number > zero, then the contents of a table having that number is used as a shape of a table-based interpolation.
Examples
Here is an example of the hvs2 opcode. It uses the file hvs2.csd [examples/hvs2.csd].
0,0,0, \ 7,8,9
1003
; Smooth control signals to avoid clicks kx portk gk1, 0.02 ky portk gk2, 0.02 ; hvs2 ;
kx, ky, inumParms, inumlinesX, inumlinesY, iOutTab, iPosTab, iSnapTab [, iConfigT kx, ky, ginumParms, ginumLinesX, ginumLinesY, giOutTab, giPosTab, giSnapTab ;, iConfigTa
k0 init 0 k1 init 1 k2 init 2 printk2 tb0(k0) printk2 tb0(k1), 10 printk2 tb0(k2), 20 kris init 0.003 kdur init 0.02 kdec init 0.007 ; Make parameters of synthesis depend on the table values produced by hvs ares1 fof 0.2, tb0(k0)*100 + 50, tb0(k1)*100 + 200, 0, tb0(k2) * 10 + 50, 0.003, 0.02, 0.007, 20, \ 1, 2, p3 ares2 fof 0.2, tb0(k1)*100 + 50, tb0(k2)*100 + 200, 0, tb0(k0) * 10 + 50, 0.003, 0.02, 0.007, 20, \ 1, 2, p3 outs ares1, ares2 endin </CsInstruments> <CsScore> f 1 0 1024 10 1 ;Sine wave f 2 0 1024 19 0.5 0.5 270 0.5 f0 3600 i1 0 3600 </CsScore> </CsoundSynthesizer>
Here is second example of the hvs2 opcode. It uses the file hvs2.csd [examples/hvs2-2.csd].
;Generate 9 tables with arbitrary points gitmp ftgen 100, 0, 16, -2, 70, 260, 390, 180, 200, 300, 980, 126, \
1004
330, 860, 580, 467, 220, 399, 1026, 1500 gitmp ftgen 200, 0, 16, -2, 100, 200, 300, 140, 600, 700, 330, 560, 780, 167, 220, 999, 1026, 1500 gitmp ftgen 300, 0, 16, -2, 400, 200, 300, 540, 600, 700, 330, 160, 780, 167, 820, 999, 1026, 1500 gitmp ftgen 400, 0, 16, -2, 100, 200, 800, 640, 600, 300, 330, 660, 780, 167, 220, 999, 1026, 1500 gitmp ftgen 500, 0, 16, -2, 200, 200, 360, 440, 600, 700, 330, 560, 380, 167, 220, 499, 1026, 1500 gitmp ftgen 600, 0, 16, -2, 100, 600, 300, 840, 600, 700, 330, 260, 980, 367, 120, 399, 1026, 1500 gitmp ftgen 700, 0, 16, -2, 100, 200, 300, 340, 200, 500, 330, 860, 780, 867, 120, 999, 1026, 1500 gitmp ftgen 800, 0, 16, -2, 100, 600, 300, 240, 200, 700, 130, 560, 980, 167, 220, 499, 1026, 1500 gitmp ftgen 900, 0, 16, -2, 100, 800, 200, 140, 600, 700, 330, 560, 780, 167, 120, 299, 1026, 1500
880, 126, \ 880, 126, \ 880, 126, \ 880, 126, \ 880, 126, \ 380, 126, \ 880, 126, \ 680, 126, \
giOutTab ftgen 5,0,8, -2, 0 giPosTab ftgen 6,0,32, -2, 0,1,2,3,4,5,6,7,8,9,10, 11, 15, 14, 13, 12 giSnapTab ftgen 8,0,64, -2, 1,1,1, 2,0,0, 3,2,0, 2,2,2, \ 5,2,1, 2,3,4, 6,1,7, 0,0,0, 1,3,5, 3,4,4, 1,5,8, 1,1,5, \ 4,3,2, 3,4,5, 7,6,5, 7,8,9 tb0_init giOutTab
FLpanel "hsv2",440,100,10,10,0 gk1,ih1 FLslider "X", 0,1, 0, 5, -1, 400,20, 20,10 gk2, ih2 FLslider "Y", 0, 1, 0, 5, -1, 400, 20, 20, 50 FLpanel_end FLpanel "hvsBox",280,280,500,1000,0 ;ihandle FLhvsBox inumlinesX, inumlinesY, iwidth, iheight, ix, iy [, image] gih1 FLhvsBox 16, 16, 250, 250, 10, 1 FLpanel_end FLrun instr 1 FLhvsBoxSetValue gk1, gk2, gih1 hvs2 k0 k1 k2 kspeed gk1,gk2, init init init init 0 1 2 0 ginumParms, ginumPointsX, ginumPointsY, giOutTab, giPosTab, giSnapTab ;, iConfigTab
k1 phasor kspeed ;slow phasor: 200 sec. kpch tableikt k1 * 16, int((tb0(k1)) +1)*100 ;scale phasor * length a1 oscilikt kenv, kpch, int(tb0(k0)) +1000;scale pitch slightly ahp butterlp a1, 2500 outs ahp, ahp endin </CsInstruments> <CsScore> f 10 f1000 f1001 f1002 f1003 f1004 f1005 f1006 f1007 0 0 0 0 0 0 0 0 0 1024 20 5 ;use of windowing function 1024 10 .33 .25 .5 1024 10 1 1024 10 .5 .25 .05 1024 10 .05 .10 .3 .5 1 1024 10 1 .5 .25 .125 .625 1024 10 .33 .44 .55 .66 1024 10 1 1 1 1 1 1024 10 .05 .25 .05 .25 .05 1
1005
See Also
hvs1, hvs3, vphaseseg
Credits
Author: Gabriel Maldonado New in version 5.06
1006
hvs3
hvs3 Allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated kvariables.
Description
hvs3 allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated kvariables.
Syntax
hvs3 kx, ky, kz, inumParms, inumPointsX, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]
Initialization
inumParms - number of parameters controlled by the HVS. Each HVS snapshot is made up of inumParms elements. inumPointsX - number of points that each dimension of the HVS cube (or square in case of twodimensional HVS; or line in case of one-dimensional HVS) is made up. iOutTab - number of the table receiving the set of output-parameter instant values of the HVS. The total amount of parameters is defined by the inumParms argument. iPositionsTab a table filled with the individual positions of snapshots in the HVS matrix (see below for more information). iSnapTab a table filled with all the snapshots. Each snapshot is made up of a set of parameter values. The amount of elements contained in each snapshots is specified by the inumParms argument. The set of elements of each snapshot follows (and is adjacent) to the previous one in this table. So the total size of this table should be >= to inumParms multiplied the number of snapshots you intend to store for the HVS. iConfigTab (optional) a table containing the behavior of the HVS for each parameter. If the value of iConfigTab is zero (default), this argument is ignored, meaning that each parameter is treated with linear interpolation by the HVS. If iConfigTab is different than zero, then it must refer to an existing table whose contents are in its turn referring to a particolar kind of interpolation. In this table, a value of -1 indicates that corresponding parameter is leaved unchanged (ignored) by the HVS; a value of zero indicates that corresponding parameter is treated with linear-interpolation; each other values must be integer numbers indicating an existing table filled with a shape which will determine the kind of special interpolation to be used (table-based interpolation).
Performance
kx, ky, kz - these are externally-modified variables which controls the motion of the pointer in the HVS matrix cube (or square or line in case of HVS matrices made up of less than 3 dimensions). The range of these input arguments must be 0 to 1. Hyper Vectorial Synthesis is a technique that allows control of a huge set of parameters by using a simple and global approach. The key concepts of the HVS are: The set of HVS parameters, whose amount is fixed and defined by the inumParms argument. During the 1007
HVS performance, all these parameters are variant and can be applied to any sound synthesis technique, as well as to any global control for algorithmic composition and any other kind of level. The user must previously define several sets of fixed values for each HVS parameter, each set corresponding to a determinate synthesis configuration. Each set of values is called snapshot, and can be considered as the coordinates of a bound of a multi-dimensional space. The HVS consists on moving a point in this multidimensional space (by using a special motion pointer, see below), according and inside the bounds defined by the snapshots. You can fix any amount of HVS parameters (each parameter being a dimension of the multi-dimensional space), even a huge number, the limit only depends on the processing power (and the memory) of your computer and on the complexity of the sound-synthesis you will use. The HVS cube (or square or line). This is the matrix (of 3, 2 or 1 dimensions, according to the hvs opcode you intend to use) of mainstays (or pivot) points of HVS. The total amount of pivot-points depends on the value of the inumPointsX, inumPointsY and inumPointsZ arguments. In the case of a 3-dimensional HVS matrix you can define, for instance, 3 points for the X dimension, 5 for the Y dimension and 2 for the Z dimension. In this case, the total number of pivot-points is 3 * 5 * 2 = 30. With this set of pivot points, the cube Is divided into smaller cubed zones each one bounded by eight nearby points. Each point is numbered. The numeral order of these points is enstabilished in the following way: number zero is the first point, number 1 the second and so on. Assuming you are using a 3-dimensional HVS cube having the number of points above mentioned (i.e. 3, 5 and 2 respectively for the X, Y and Z axis), the first point (point zero) is the upper-left-front vertex of the cube, by facing the XY plane of the cube. The second point is the middle point of the upper front edge of the cube and so on. You can refer to the figure below in order to understand how the numeral order of the pivot-points proceeds: For the 2-dimensional HVS, it is the same, by only omitting the rear cube face, so each zone is bounded by 4 pivot-points instead of 8. For the 1-dimensional HVS, the whole thing is even simpler because it is a line with the pivot-points proceeding from left to right. Each point is coupled with a snapshot. Snapshot order, as stored into the iSnapTab, can or cannot follow the order of the pivot-points numbers. In fact it is possible to alter this order by means the iPositionsTab, a table that remaps the position of each snapshot in relation to the pivot points. The iPositionsTab is made up of the positions of the snapshots (contained in the iSnapTab) in the two-dimensional grid. Each subsequent element is actually a pointer representing the position in the iSnapTab. For example, in a 2-dimensional HVS matrix such as the following (in this case having inumPointsX = 3 and inumPointsY = 5:
Table 12.
5 3 6 4 8 7 4 2 1 2 1 9 0 3 7
These numbers (to be stored in the iSnapTab table by using, for instance, the GEN02 function generator) represents the snapshot position within the grid (in this case a 3x5 matrix). So, the first element 5, has index zero and represents the 6th (element zero is the first) snapshot contained in the iSnapTab, the second element 7 represents the 8th element of iSnapTab and so on. Summing up, the vertices of each zone (a cubed zone is delimited by 8 vertices; a squared zone by 4 vertices and a linear zone by 2 points) are coupled with a determinate snapshot, whose number is remapped by the iSnapTab. Output values of the HVS are influenced by the motion pointer, a point whose position, in the HVS cube (or square or segment) is determined by the kx, ky and kz arguments. The values of these arguments, which must be in the 0 to 1 range, are externally set by the user. The output values, whose amount is equal to the inumParms argument, are stored in the iOutTab, a table that must be already allocated by the user, and must be at least inumParms size. In what way the motion pointer influences the output? Well, when the motion pointer falls in a determinate cubed zone, delimited, for instance, by 8 vertices 1008
(or pivot points), we assume that each vertex has associated a different snapshot (i.e. a set of inumParms values), well, the output will be the weighted average value of the 8 vertices, calculated according on the distance of the motion pointer from each of the 8 vertices. In the case of a default behavior, when the iConfigTab argument is not set, the exact output is calculated by using linear interpolation which is applied to each different parameter of the HVS. Anyway, it is possible to influence this behavior by setting the iConfigTab argument to a number of a table whose contents can affect one or more HVS parameters. The iConfigTab table elements are associated to each HVS parameter and their values affect the HVS output in the following way: If iConfigTab is equal to -1, corresponding output is skipped, i.e. the element is not calculated, leaving corresponding element value in the iOutTab unchanged; If iConfigTab is equal to zero, then the normal HVS output is calculated (by using weighted average of the nearest vertex of current zone where it falls the motion pointer); If iConfigTab element is equal to an integer number > zero, then the contents of a table having that number is used as a shape of a table-based interpolation.
See Also
hvs1, hvs2, vphaseseg
Credits
Author: Gabriel Maldonado New in version 5.06
1009
i
i Returns an init-type equivalent of a k-rate argument.
Description
Returns an init-type equivalent of a k-rate argument.
Syntax
i(x) (control-rate args only)
Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Note
Using i() with a k-rate expression argument is not recommended, and can produce unexpected results.
See Also
a, k, abs, exp, frac, int, log, log10, sqrt
1010
ibetarand
ibetarand Deprecated.
Description
Deprecated as of version 3.49. Use the betarand opcode instead.
1011
ibexprnd
ibexprnd Deprecated.
Description
Deprecated as of version 3.49. Use the bexprnd opcode instead.
1012
icauchy
icauchy Deprecated.
Description
Deprecated as of version 3.49. Use the cauchy opcode instead.
1013
ictrl14
ictrl14 Deprecated.
Description
Deprecated as of version 3.52. Use the ctrl14 opcode instead.
1014
ictrl21
ictrl21 Deprecated.
Description
Deprecated as of version 3.52. Use the ctrl21 opcode instead.
1015
ictrl7
ictrl7 Deprecated.
Description
Deprecated as of version 3.52. Use the ctrl7 opcode instead.
1016
iexprand
iexprand Deprecated.
Description
Deprecated as of version 3.49. Use the exprand opcode instead.
1017
if
if Branches conditionally at initialization or during performance time.
Description
if...igoto -- conditional branch at initialization time, depending on the truth value of the logical expression ia R ib. The branch is taken only if the result is true. if...kgoto -- conditional branch during performance time, depending on the truth value of the logical expression ka R kb. The branch is taken only if the result is true. if...goto -- combination of the above. Condition tested on every pass. if...then -- allows the ability to specify conditional if/else/endif blocks. All if...then blocks must end with an endif statement. elseif and else statements are optional. Any number of elseif statements are allowed. Only one else statement may occur and it must be the last conditional statement before the endif statement. Nested if...then blocks are allowed.
Note
Note that if the condition uses a k-rate variable (for instance, if kval > 0), the if...goto or if...then statement will be ignored during the i-time pass. This allows for opcode initialization, even if the k-rate variable has already been assigned an appropriate value by an earlier init statement.
Syntax
if ia R ib igoto label if ka R kb kgoto label if xa R xb goto label if xa R xb then
where label is in the same instrument block and is not an expression, and where R is one of the Relational operators (<, =, <=, ==, !=) (and = for convenience, see also under Conditional Values). If goto or then is used instead of kgoto or igoto, the behavior is determined by the type being compared. If the comparison used k-type variables, kgoto is used and viceversa.
Note
If/then/goto statements cannot do audio-type comparisons. You can't put a-type variables in the comparison expressions for these opcodes. The reason for this is that audio variables are actually vectors, which can't be compared in the same way as scalars. If you need to compare individua audio samples, use kr = 1 or Comparators
Examples
1018
Here is an example of the if...igoto combination. It uses the file igoto.csd [examples/igoto.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Get the value of the 4th p-field from the score. iparam = p4 ; If iparam is 1 then play the high note. ; If not then play the low note. if (iparam == 1) igoto highnote igoto lownote highnote: ifreq = 880 goto playit lownote: ifreq = 440 goto playit playit: ; Print the values of iparam and ifreq. print iparam print ifreq a1 oscil 10000, ifreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple sine wave. f 1 0 32768 10 1 ; ; i ; i e p4: 1 = high note, anything else = low note Play Instrument #1 for one second, a low note. 1 0 1 0 Play a Instrument #1 for one second, a high note. 1 1 1 1
</CsScore> </CsoundSynthesizer>
1019
instr 1: instr 1:
Here is an example of the if...kgoto combination. It uses the file kgoto.csd [examples/kgoto.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Change kval linearly from 0 to 2 over ; the period set by the third p-field. kval line 0, p3, 2 ; If kval is greater than or equal to 1 then play the high note. ; If not then play the low note. if (kval >= 1) kgoto highnote kgoto lownote highnote: kfreq = 880 goto playit lownote: kfreq = 440 goto playit playit: ; Print the values of kval and kfreq. printks "kval = %f, kfreq = %f\\n", 1, kval, kfreq a1 oscil 10000, kfreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
1020
Examples
Here is an example of the if...then combo. It uses the file ifthen.csd [examples/ifthen.csd].
</CsScore> </CsoundSynthesizer>
See Also
elseif, else, endif, goto, igoto, kgoto, tigoto, timout 1021
Credits
Examples written by Kevin Conder. Added a note by Jim Aikin. February 2004. Added a note by Matt Ingalls.
1022
igauss
igauss Deprecated.
Description
Deprecated as of version 3.49. Use the gauss opcode instead.
1023
igoto
igoto Transfer control during the i-time pass.
Description
During the i-time pass only, unconditionally transfer control to the statement labeled by label.
Syntax
igoto label
Examples
Here is an example of the igoto opcode. It uses the file igoto.csd [examples/igoto.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Get the value of the 4th p-field from the score. iparam = p4 ; If iparam is 1 then play the high note. ; If not then play the low note. if (iparam == 1) igoto highnote igoto lownote highnote: ifreq = 880 goto playit lownote: ifreq = 440 goto playit playit: ; Print the values of iparam and ifreq. print iparam print ifreq
1024
a1 oscil 10000, ifreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple sine wave. f 1 0 32768 10 1 ; ; i ; i e p4: 1 = high note, anything else = low note Play Instrument #1 for one second, a low note. 1 0 1 0 Play a Instrument #1 for one second, a high note. 1 1 1 1
</CsScore> </CsoundSynthesizer>
See Also
cggoto, cigoto, ckgoto, goto, if, kgoto, rigoto, tigoto, timout
Credits
Example written by Kevin Conder.
1025
ihold
ihold Creates a held note.
Description
Causes a finite-duration note to become a held note
Syntax
ihold
Performance
ihold -- this i-time statement causes a finite-duration note to become a held note. It thus has the same effect as a negative p3 ( see score i Statement), except that p3 here remains positive and the instrument reclassifies itself to being held indefinitely. The note can be turned off explicitly with turnoff, or its space taken over by another note of the same instrument number (i.e. it is tied into that note). Effective at i-time only; no-op during a reinit pass.
Examples
Here is an example of the ihold opcode. It uses the file ihold.csd [examples/ihold.csd].
1026
playit: ; Play the note. out a1 endin </CsInstruments> <CsScore> ; Table #1: an ordinary sine wave. f 1 0 32768 10 1 ; ; i ; i e p4 = turn the note off (if it is equal to 0). Start playing Instrument #1. 1 0 1 1 Turn Instrument #1 off after 3 seconds. 1 3 1 0
</CsScore> </CsoundSynthesizer>
See Also
i Statement, turnoff
Credits
Example written by Kevin Conder.
1027
ilinrand
ilinrand Deprecated.
Description
Deprecated as of version 3.49. Use the linrand opcode instead.
1028
imagecreate
imagecreate Create an empty image of a given size.
Description
Create an empty image of a given size. Individual pixel values can then be set with. imagegetpixel.
Syntax
iimagenum imagecreate iwidth, iheight
Initialization
iimagenum -- number assigned to the created image. iwidth -- desired image width. iheight -- desired image height.
Examples
Here is an example of the imagecreate opcode. It uses the file imageopcodes.csd [examples/imageopcodes.csd].
1029
imagesave giimage2, "imageout.png" endin instr 3 imagefree giimage1 imagefree giimage2 endin </CsInstruments> <CsScore> i1 1 1 i2 2 1 i3 3 1 e </CsScore> </CsoundSynthesizer>
See Also
imageload, imagesize, imagesave, imagegetpixel, imagesetpixel, imagefree
Credits
Author: Cesare Marilungo New in version 5.08
1030
imagefree
imagecreate Frees memory allocated for a previously loaded or created image.
Description
Frees memory allocated for a previously loaded or created image.
Syntax
imagefree iimagenum
Initialization
iimagenum -- reference of the image to free.
Examples
Here is an example of the imagefree opcode. It uses the file imageopcodes.csd [examples/imageopcodes.csd].
1031
See Also
imageload, imagecreate, imagesize, imagesave, imagegetpixel, imagesetpixel
Credits
Author: Cesare Marilungo New in version 5.08
1032
imagegetpixel
imagegetpixel Return the RGB pixel values of a previously opened or created image.
Description
Return the RGB pixel values of a previously opened or created image. An image can be loaded with imageload. An empty image can be created with imagecreate.
Syntax
ared, agreen, ablue imagegetpixel iimagenum, ax, ay kred, kgreen, kblue imagegetpixel iimagenum, kx, ky
Initialization
iimagenum -- the reference of the image.. It should be a value returned by imageload or imagecreate.
Performance
ax (kx) -- horizontal pixel position (must be a float from 0 to 1). ay (ky) -- vertical pixel position (must be a float from 0 to 1). ared (kred) -- red value of the pixel (mapped to a float from 0 to 1). agreen (kgreen) -- green value of the pixel (mapped to a float from 0 to 1). ablue (kblue) -- blue value of the pixel (mapped to a float from 0 to 1).
Examples
Here is an example of the imagegetpixel opcode. It uses the files imageopcodesdemo2.csd [examples/ imageopcodesdemo2.csd] test1.png [examples/test1.png] and test2.png [examples/test2.png].
1033
;Load the image - should be 512x512 pixels giimage imageload "test1.png" ;giimage imageload "test2.png" ;--try this too giimagew, giimageh imagesize giimage giwave ftgen 1, 0, 1024, 10, 1 gifrqs ftgen 2,0,512,-5, 1,512,10 giamps ftgen 3, 0, 512, 10, 1 instr 100 kindex = 0 icnt = giimageh kx_ linseg 0, p3, 1 kenv linseg 0, .2, 500, p3 - .4, 500, .2, 0 ; Read a column of pixels and store the red values ; inside the table 'giamps' loop: ky_ = kindex/giimageh ;Get the pixel color values at kx_, ky_ kred, kgreen, kblue imagegetpixel giimage, kx_, ky_ ;Write the red values inside the table 'giamps' tablew kred, kindex, giamps kindex = kindex+1 if (kindex < icnt) kgoto loop ; Use an oscillator bank (additive synthesis) to generate sound ; setting amplitudes for each partial according to the image asig adsynt kenv, 220, giwave, gifrqs, giamps, icnt, 2 outs asig, asig endin instr 101 ; Free memory used by the image imagefree giimage endin </CsInstruments> <CsScore> t 0 60 i100 1 20 i101 21 1 e </CsScore> </CsoundSynthesizer>
See Also
imageload, imagecreate, imagesize, imagesave, imagesetpixel, imagefree
Credits
Author: Cesare Marilungo New in version 5.08
1034
imageload
imageload Load an image.
Description
Load an image and return a reference to it. Individual pixel values can then be accessed with imagegetpixel.
Note
The image processing opcodes can only load png images
Syntax
iimagenum imageload filename
Initialization
iimagenum -- number assigned to the loaded image. filename -- The filename of the image to load (should be a valid PNG image file).
Examples
Here is an example of the imageload opcode. It uses the file imageopcodes.csd [examples/imageopcodes.csd].
1035
imagesetpixel giimage2, kx_, ky_, kr_, kg_, kb_ loop_lt kndx, 0.5, (giimageh), myloop endin instr 2 imagesave giimage2, "imageout.png" endin instr 3 imagefree giimage1 imagefree giimage2 endin </CsInstruments> <CsScore> i1 1 1 i2 2 1 i3 3 1 e </CsScore> </CsoundSynthesizer>
See Also
imagecreate, imagesize, imagesave, imagegetpixel, imagesetpixel, imagefree
Credits
Author: Cesare Marilungo New in version 5.08
1036
imagesave
imagesave Save a previously created image.
Description
Save a previously created image. An empty image can be created with imagecreate and its pixel RGB values can be set with imagesetpixel. The image will be saved in PNG format.
Syntax
imagesave iimagenum, filename
Initialization
iimagenum -- the reference of the image to be save. It should be a value returned by imagecreate. filename -- The filename to use to save the image.
Examples
Here is an example of the imagesave opcode. It uses the file imageopcodes.csd [examples/imageopcodes.csd].
1037
endin instr 3 imagefree giimage1 imagefree giimage2 endin </CsInstruments> <CsScore> i1 1 1 i2 2 1 i3 3 1 e </CsScore> </CsoundSynthesizer>
See Also
imageload, imagecreate, imagesize, imagegetpixel, imagesetpixel, imagefree
Credits
Author: Cesare Marilungo New in version 5.08
1038
imagesetpixel
imagesetpixel Set the RGB value of a pixel inside a previously opened or created image.
Description
Set the RGB value of a pixel inside a previously opened or created image. An image can be loaded with imageload. An empty image can be created with imagecreate and saved with imagesave.
Syntax
imagegetpixel iimagenum, ax, ay, ared, agreen, ablue imagegetpixel iimagenum, kx, ky, kred, kgreen, kblue
Initialization
iimagenum -- the reference of the image.. It should be a value returned by imageload or imagecreate.
Performance
ax (kx) -- horizontal pixel position (must be a float from 0 to 1). ay (ky) -- vertical pixel position (must be a float from 0 to 1). ared (kred) -- red value of the pixel (mapped to a float from 0 to 1). agreen (kgreen) -- green value of the pixel (mapped to a float from 0 to 1). ablue (kblue) -- blue value of the pixel (mapped to a float from 0 to 1).
Examples
Here is an example of the imagesetpixel opcode. It uses the file imageopcodes.csd [examples/imageopcodes.csd].
1039
giimagew, giimageh imagesize giimage1 giimage2 imagecreate giimagew,giimageh instr 1 kndx = 0 kx_ linseg 0, p3, 1 myloop: ky_ = kndx/(giimageh) kr_ kg_ kb_ imagegetpixel giimage1, kx_, ky_ imagesetpixel giimage2, kx_, ky_, kr_, kg_, kb_ loop_lt kndx, 0.5, (giimageh), myloop endin instr 2 imagesave giimage2, "imageout.png" endin instr 3 imagefree giimage1 imagefree giimage2 endin </CsInstruments> <CsScore> i1 1 1 i2 2 1 i3 3 1 e </CsScore> </CsoundSynthesizer>
See Also
imageload, imagecreate, imagesize, imagesave, imagegetpixel, imagefree
Credits
Author: Cesare Marilungo New in version 5.08
1040
imagesize
imagesize Return the width and height of a previously opened or created image.
Description
Return the width and height of a previously opened or created image. An image can be loaded with imageload. An empty image can be created with imagecreate.
Syntax
iwidth, iheight imagesize iimagenum
Initialization
iimagenum -- the reference of the image.. It should be a value returned by imageload or imagecreate. iwidth -- image width. iheight -- image height.
Examples
Here is an example of the imagesize opcode. It uses the file imageopcodes.csd [examples/imageopcodes.csd].
1041
instr 2 imagesave giimage2, "imageout.png" endin instr 3 imagefree giimage1 imagefree giimage2 endin </CsInstruments> <CsScore> i1 1 1 i2 2 1 i3 3 1 e </CsScore> </CsoundSynthesizer>
See Also
imageload, imagecreate, imagesave, imagegetpixel, imagesetpixel, imagefree
Credits
Author: Cesare Marilungo New in version 5.08
1042
imidic14
imidic14 Deprecated.
Description
Deprecated as of version 3.52. Use the midic14 opcode instead.
1043
imidic21
imidic21 Deprecated.
Description
Deprecated as of version 3.52. Use the midic21 opcode instead.
1044
imidic7
imidic7 Deprecated.
Description
Deprecated as of version 3.52. Use the midic7 opcode instead.
1045
in
in Reads mono audio data from an external device or stream.
Description
Reads mono audio data from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls=1. Doing so with orchestras with nchnls > 1 will cause incorrect audio input.
Syntax
ar1 in
Performance
Reads mono audio data from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer. Any number of these opcodes can read freely from this buffer.
See Also
diskin, inh, inh, ino, inq, ins, soundin
Credits
Authors: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997 Already in version 3.30
1046
in32
in32 Reads a 32-channel audio signal from an external device or stream.
Description
Reads a 32-channel audio signal from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls_i=32. Doing so with orchestras with nchnls_i > 32 will cause incorrect audio input.
Syntax
ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \ ar15, ar16, ar17, ar18, ar19, ar20, ar21, ar22, ar23, ar24, ar25, ar26, \ ar27, ar28, ar29, ar30, ar31, ar32 in32
Performance
in32 reads a 32-channel audio signal from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer.
See Also
inch, inx, inz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1047
inch
inch Reads from numbered channels in an external audio signal or stream.
Description
Reads from numbered channels in an external audio signal or stream.
Syntax
ain1[, ...] inch kchan1[,...]
Performance
ain1, ... - input audio signals kchan1,... - channel numbers inch reads from numbered channels determined by the corresponding kchan into the associated ain. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile). inch can also be used to receive audio in realtime from the audio interface using -iadc.
Note
The highest number for kchan available for use with inch depends on nchnls_i. If kchan is greater than nchnls_i, ain will be silent. Note that inch will give a warning but not an error in this case.
See Also
in32, inx, inz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07 Multiple arguments from version 5.13
1048
inh
inh Reads six-channel audio data from an external device or stream.
Description
Reads six-channel audio data from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls_i=6. Doing so with orchestras with nchnls_i > 6 will cause incorrect audio input.
Syntax
ar1, ar2, ar3, ar4, ar5, ar6 inh
Performance
Reads six-channel audio data from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer. Any number of these opcodes can read freely from this buffer.
See Also
diskin, in, ino, inq, ins, soundin
Credits
Author: John ffitch
1049
init
init Puts the value of the i-time expression into a k- or a-rate variable.
Syntax
ares init iarg ires init iarg kres init iarg ares, ... init iarg, ...
Description
Put the value of the i-time expression into a k- or a-rate variable.
Initialization
Puts the value of the i-time expression iarg into a k- or a-rate variable, i.e., initialize the result. Note that init provides the only case of an init-time statement being permitted to write into a perf-time (k- or arate) result cell; the statement has no effect at perf-time. Since version 5.13 it is possible to initialise upto 24 variables of the same class in one statement. If there are more output variables than input expressions then the last one is repeated. It is an error to have more inputs than outputs.
See Also
=, divz, tival
Credits
Init first appeared in the original Csound, but the extension to multiple values is by Author: John ffitch University of Bath, and Codemist Ltd. Bath, UK February 2010 New in version 5.13
1050
initc14
initc14 Initializes the controllers used to create a 14-bit MIDI value.
Description
Initializes the controllers used to create a 14-bit MIDI value.
Syntax
initc14 ichan, ictlno1, ictlno2, ivalue
Initialization
ichan -- MIDI channel (1-16) ictlno1 -- most significant byte controller number (0-127) ictlno2 -- least significant byte controller number (0-127) ivalue -- floating point value (must be within 0 to 1)
Performance
initc14 can be used together with both midic14 and ctrl14 opcodes for initializing the first controller's value. ivalue argument must be set with a number within 0 to 1. An error occurs if it is not. Use the following formula to set ivalue according with midic14 and ctrl14 min and max range: ivalue = (initial_value - min) / (max - min)
See Also
ctrl7, ctrl14, ctrl21, ctrlinit, initc7, initc21, midic7, midic14, midic21
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1051
initc21
initc21 Initializes the controllers used to create a 21-bit MIDI value.
Description
Initializes the controllers used to create a 21-bit MIDI value.
Syntax
initc21 ichan, ictlno1, ictlno2, ictlno3, ivalue
Initialization
ichan -- MIDI channel (1-16) ictlno1 -- most significant byte controller number (0-127) ictlno2 -- medium significant byte controller number (0-127) ictlno3 -- least significant byte controller number (0-127) ivalue -- floating point value (must be within 0 to 1)
Performance
initc21 can be used together with both midic21 and ctrl21 opcodes for initializing the first controller's value. ivalue argument must be set with a number within 0 to 1. An error occurs if it is not. Use the following formula to set ivalue according with midic21 and ctrl21 min and max range: ivalue = (initial_value - min) / (max - min)
See Also
ctrl7, ctrl14, ctrl21, ctrlinit, initc7, initc14, midic7, midic14, midic21
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1052
initc7
initc7 Initializes the controller used to create a 7-bit MIDI value.
Description
Initializes MIDI controller ictlno with ivalue
Syntax
initc7 ichan, ictlno, ivalue
Initialization
ichan -- MIDI channel (1-16) ictlno -- controller number (0-127) ivalue -- floating point value (must be within 0 to 1)
Performance
initc7 can be used together with both midic7 and ctrl7 opcodes for initializing the first controller's value. ivalue argument must be set with a number within 0 to 1. An error occurs if it is not. Use the following formula to set ivalue according with midic7 and ctrl7 min and max range: ivalue = (initial_value - min) / (max - min)
See Also
ctrl7, ctrl14, ctrl21, ctrlinit, initc14, initc21, midic7, midic14, midic21
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1053
inleta
inleta Receives an arate signal into an instrument through a named port.
Description
Receives an arate signal into an instrument through a named port.
Syntax
asignal inleta Sname
Initialization
Sname -- String name of the inlet port. The name of the inlet is implicitly qualified by the instrument name or number, so it is valid to use the same inlet name in more than one instrument (but not to use the same inlet name twice in one instrument).
Performance
asignal -- audio input signal During performance, the arate inlet signal is received from each instance of an instrument containing an outlet port to which this inlet has been connected using the connect opcode. The signals of all the outlets connected to an inlet are summed in the inlet.
See Also
outleta outletk outletf inletk inletf connect alwayson ftgenonce
Credits
By: Michael Gogins 2009
1054
inletk
inletk Receives a krate signal into an instrument from a named port.
Description
Receives a krate signal into an instrument from a named port.
Syntax
ksignal inletk Sname
Initialization
Sname -- String name of the inlet port. The name of the inlet is implicitly qualified by the instrument name or number, so it is valid to use the same inlet name in more than one instrument (but not to use the same inlet name twice in one instrument).
Performance
ksignal -- krate input signal During performance, the krate inlet signal is received from each instance of an instrument containing an outlet port to which this inlet has been connected using the connect opcode. The signals of all the outlets connected to an inlet are summed in the inlet.
See Also
outleta outletk outletf inleta inletf connect alwayson ftgenonce
Credits
By: Michael Gogins 2009
1055
inletf
inletf Receives an frate signal (fsig) into an instrument from a named port.
Description
Receives an frate signal (fsig) into an instrument from a named port.
Syntax
fsignal inletf Sname
Initialization
Sname -- String name of the inlet port. The name of the inlet is implicitly qualified by the instrument name or number, so it is valid to use the same inlet name in more than one instrument (but not to use the same inlet name twice in one instrument).
Performance
ksignal -- frate input signal During performance, the frate inlet signal is received from each instance of an instrument containing an outlet port to which this inlet has been connected using the connect opcode. The signals of all the outlets connected to an inlet are combined in the inlet.
See Also
outleta outletk outletf inleta inletk connect alwayson ftgenonce
Credits
By: Michael Gogins 2009
1056
ino
ino Reads eight-channel audio data from an external device or stream.
Description
Reads eight-channel audio data from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls_i=8. Doing so with orchestras with nchnls_i > 8 will cause incorrect audio input.
Syntax
ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8 ino
Performance
Reads eight-channel audio data from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer. Any number of these opcodes can read freely from this buffer.
See Also
diskin, in, inh, inh, inq, ins, soundin
Credits
Author: John ffitch
1057
inq
inq Reads quad audio data from an external device or stream.
Description
Reads quad audio data from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls_i=4. Doing so with orchestras with nchnls_i > 4 will cause incorrect audio input.
Syntax
ar1, ar2, ar3, a4 inq
Performance
Reads quad audio data from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer. Any number of these opcodes can read freely from this buffer.
See Also
diskin, in, inh, inh, ino, ins, soundin
Credits
Authors: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1058
inrg
inrg Allow input from a range of adjacent audio channels from the audio input device
Description
inrg reads audio from a range of adjacent audio channels from the audio input device.
Syntax
inrg kstart, ain1 [,ain2, ain3, ..., ainN]
Performance
kstart - the number of the first channel of the input device to be accessed (channel numbers starts with 1, which is the first channel) ain1, ain2, ... ainN - the output arguments filled with the incoming audio coming from corresponding channels. inrg allows input from a range of adjacent channels from the input device. kstart indicates the first channel to be accessed (channel 1 is the first channel). The user must be sure that the number obtained by summing kstart plus the number of accessed channels -1 is <= nchnls_i.
Note
Note that this opcode is exceptional in that it produces its output on the parameters to the right.
Credits
Author: Gabriel Maldonado New in version 5.06
1059
ins
ins Reads stereo audio data from an external device or stream.
Description
Reads stereo audio data from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls_i=2. Doing so with orchestras with nchnls_i > 2 will cause incorrect audio input.
Syntax
ar1, ar2 ins
Performance
Reads stereo audio data from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer. Any number of these opcodes can read freely from this buffer.
See Also
diskin, in, inh, inh, ino, inq, soundin mp3in,
Credits
Authors: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1060
insremot
insremot An opcode which can be used to implement a remote orchestra. This opcode will send note events from a source machine to one destination.
Description
With the insremot and insglobal opcodes you are able to perform instruments on remote machines and control them from a master machine. The remote opcodes are implemented using the master/client model. All the machines involved contain the same orchestra but only the master machine contains the information of the score. During the performance the master machine sends the note events to the clients. The insremot opcode will send events from a source machine to one destination if you want to send events to many destinations (broadcast) use the insglobal opcode instead. These two opcodes can be used in combination.
Syntax
insremot idestination, isource, instrnum [,instrnum...]
Initialization
idestination -- a string that is the intended host computer (e.g. 192.168.0.100). This is the destination host which receives the events from the given instrument. isource -- a string that is the intended host computer (e.g. 192.168.0.100). This is the source host which generates the events of the given instrument and sends it to the address given by idestination. instrnum -- a list of instrument numbers which will be played on the destination machine
Examples
Here is an example of the insremot opcode. It uses the files insremot.csd [examples/insremot.csd] and insremotM.csd [examples/insremotM.csd].
1061
<CsInstruments> nchnls = 1 insremot "192.168.1.100", "192.168.1.101", 1 instr 1 aq barmodel 1, 1, p4, 0.001, 0.23, 5, p5, p6, p7 out aq endin </CsInstruments> <CsScore> f0 360 e </CsScore> </CsoundSynthesizer>
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o insremotM.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> nchnls = 1 insremot "192.168.1.100", "192.168.1.101", 1 instr 1 aq barmodel 1, 1, p4, 0.001, 0.23, 5, p5, p6, p7 out aq endin </CsInstruments> <CsScore> i1 0 0.5 3 0.2 500 0.05 i1 0.5 0.5 -3 0.3 1000 0.05 i1 1.0 0.5 -3 0.4 1000 0.1 i1 1.5 4.0 -3 0.5 800 0.05 e </CsScore> </CsoundSynthesizer>
See also
insglobal, midglobal, midremot, remoteport
Credits
Author: Simon Schampijer 2006 New in version 5.03
1062
insglobal
insglobal An opcode which can be used to implement a remote orchestra. This opcode will send note events from a source machine to many destinations.
Description
With the insremot and insglobal opcodes you are able to perform instruments on remote machines and control them from a master machine. The remote opcodes are implemented using the master/client model. All the machines involved contain the same orchestra but only the master machine contains the information of the score. During the performance the master machine sends the note events to the clients. The insglobal opcode sends the events to all the machines involved in the remote concert. These machines are determined by the insremot definitions made above the insglobal command. To send events to only one machine use insremot.
Syntax
insglobal isource, instrnum [,instrnum...]
Initialization
isource -- a string that is the intended host computer (e.g. 192.168.0.100). This is the source host which generates the events of the given instrument(s) and sends it to all the machines involved in the remote concert. instrnum -- a list of instrument numbers which will be played on the destination machines
Examples
See the entry for insremot for an example of usage.
See also
insremot, midglobal, midremot, remoteport
Credits
Author: Simon Schampijer 2006 New in version 5.03
1063
instimek
instimek Deprecated.
Description
Deprecated as of version 3.62. Use the timeinstk opcode instead.
Credits
David M. Boothe originally pointed out this deprecated name.
1064
instimes
instimes Deprecated.
Description
Deprecated as of version 3.62. Use the timeinsts opcode instead.
Credits
David M. Boothe originally pointed out this deprecated name.
1065
instr
instr Starts an instrument block.
Description
Starts an instrument block.
Syntax
instr i, j, ...
Initialization
Starts an instrument block defining instruments i, j, ... i, j, ... must be numbers, not expressions. Any positive integer is legal, and in any order, but excessively high numbers are best avoided.
Note
There may be any number of instrument blocks in an orchestra. Instruments can be defined in any order (but they will always be both initialized and performed in ascending instrument number order, with the exception of notes triggered by real time events that are initialized in the order of being received but still performed in ascending instrument number order). Instrument blocks cannot be nested (i.e. one block cannot contain another).
Performance
Calling an Instrument within an Instrument
Warning
This behavior is not fully available in Csound 5. In Csound 5, you must use the subinstr opcode. You can call an instrument within an instrument as if it were an opcode either with the subinstr opcode or by specifying an instrument with a text name:
By default, all output parameters correspond to the called instrument's output with the signal output opcodes. All input parameters are mapped to the called instrument's p-fields starting with the fourth one, p4. The values of the called instrument's second and third p-fields, p2 and p3, are automatically set to those of the calling instrument's. 1066
A named instrument must be defined before any instrument that calls it.
Hint
If you use the outc opcode, you can create an instrument that will compile and function in any orchestra of any number of channels greater than or equal to the output channels of the instrument. A nice feature to use with named instruments is the #include feature. You can then define your named instruments in separate files, using #include when you need to use one.
Examples
Here is an example of the instr opcode. It uses the file instr.csd [examples/instr.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 iamp = 10000 icps = 440 iphs = 0 a1 oscils iamp, icps, iphs out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
endin, in, out, opcode, endop, setksmps, xin, xout, subinstr, subinstrinit
1067
Credits
Example written by Kevin Conder.
1068
int
int Extracts an integer from a decimal number.
Description
Returns the integer part of x.
Syntax
int(x) (init-rate or control-rate; also works at audio rate in Csound5)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the int opcode. It uses the file int.csd [examples/int.csd].
1069
See Also
abs, exp, frac, log, log10, i, sqrt
Credits
Example written by Kevin Conder.
1070
integ
integ Modify a signal by integration.
Description
Modify a signal by integration.
Syntax
ares integ asig [, iskip] kres integ ksig [, iskip]
Initialization
iskip (optional) -- initial disposition of internal save space (see reson). The default value is 0.
Performance
integ and diff perform integration and differentiation on an input control signal or audio signal. Each is the converse of the other, and applying both will reconstruct the original signal. Since these units are special cases of low-pass and high-pass filters, they produce a scaled (and phase shifted) output that is frequency-dependent. Thus diff of a sine produces a cosine, with amplitude 2 * pi * Hz / sr that of the original (for each component partial); integ will inversely affect the magnitudes of its component inputs. With this understanding, these units can provide useful signal modification.
Examples
Here is an example of the integ opcode. It uses the file integ.csd [examples/integ.csd].
1071
endin instr 2 ; with diff asig diskin2 "fox.wav", 1 ares diff asig outs ares, ares endin instr 3 ; with integ asig diskin2 "fox.wav", 1 aint integ asig aint = aint*.05 outs aint, aint endin instr 4 ; with diff and integ asig diskin2 "fox.wav", 1 ares diff asig aint integ ares outs aint, aint endin </CsInstruments> <CsScore> i i i i e </CsScore> </CsoundSynthesizer> 1 2 3 4 0 1 2 3 1 1 1 1
See Also
diff, downsamp, interp, samphold, upsamp
1072
interp
interp Converts a control signal to an audio signal using linear interpolation.
Description
Converts a control signal to an audio signal using linear interpolation.
Syntax
ares interp ksig [, iskip] [, imode]
Initialization
iskip (optional, default=0) -- initial disposition of internal save space (see reson). The default value is 0. imode (optional, default=0) -- sets the initial output value to the first k-rate input instead of zero. The following graphs show the output of interp with a constant input value, in the original, when skipping init, and in the new mode:
| ________ | / | / |/ |/ -+-----------|
1073
|____________ | | | | -+-----------|
Performance
ksig -- input k-rate signal. interp converts a control signal to an audio signal. It uses linear interpolation between successive kvals.
Examples
Here is an example of the interp opcode. It uses the file interp.csd [examples/interp.csd].
1074
; The amplitude envelope will sound smoother due to ; linear interpolation at the higher a-rate, 8000. a1 oscil aamp, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 256 10 1 ; i ; i e Play Instrument #1 for two seconds. 1 0 2 Play Instrument #2 for two seconds. 2 2 2
</CsScore> </CsoundSynthesizer>
See Also
diff, downsamp, integ, samphold, upsamp
Credits
Example written by Kevin Conder. Updated November 2002, thanks to a note from both Rasmus Ekman and Istvan Varga.
1075
invalue
invalue Reads a k-rate signal from a user-defined channel.
Description
Reads a k-rate signal or string from a user-defined channel.
Syntax
kvalue invalue "channel name" Sname invalue "channel name"
Performance
kvalue -- The k-rate value that is read from the channel. Sname -- The string variable that is read from the channel. "channel name" -- An integer, string (in double-quotes), or string variable identifying the channel.
See Also
outvalue
Credits
Author: Matt Ingalls
1076
inx
inx Reads a 16-channel audio signal from an external device or stream.
Description
Reads a 16-channel audio signal from an external device or stream.
Warning
This opcode is designed to be used only with orchestras that have nchnls=16. Doing so with orchestras with nchnls > 16 will cause incorrect audio input.
Syntax
ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, \ ar13, ar14, ar15, ar16 inx
Performance
inx reads a 16-channel audio signal from an external device or stream. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer.
See Also
in32, inch, inz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1077
inz
inz Reads multi-channel audio samples into a ZAK array from an external device or stream.
Description
Reads multi-channel audio samples into a ZAK array from an external device or stream.
Syntax
inz ksig1
Performance
inz reads audio samples in nchnls into a ZAK array starting at ksig1. If the command-line -i flag is set, sound is read continuously from the audio input stream (e.g. stdin or a soundfile) into an internal buffer.
See Also
in32, inch, inx
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1078
ioff
ioff Deprecated.
Description
Deprecated as of version 3.52. Use the noteoff opcode instead.
1079
ion
ion Deprecated.
Description
Deprecated as of version 3.52. Use the noteon opcode instead.
1080
iondur
iondur Deprecated.
Description
Deprecated as of version 3.52. Use the noteondur opcode instead.
1081
iondur2
iondur2 Deprecated.
Description
Deprecated as of version 3.52. Use the noteondur2 opcode instead.
1082
ioutat
ioutat Deprecated.
Description
Deprecated as of version 3.52. Use the outiat opcode instead.
1083
ioutc
ioutc Deprecated.
Description
Deprecated as of version 3.52. Use the outic opcode instead.
1084
ioutc14
ioutc14 Deprecated.
Description
Deprecated as of version 3.52. Use the outic14 opcode instead.
1085
ioutpat
ioutpat Deprecated.
Description
Deprecated as of version 3.52. Use the outipat opcode instead.
1086
ioutpb
ioutpb Deprecated.
Description
Deprecated as of version 3.52. Use the outipb opcode instead.
1087
ioutpc
ioutpc Deprecated.
Description
Deprecated as of version 3.52. Use the outipc opcode instead.
1088
ipcauchy
ipcauchy Deprecated.
Description
Deprecated as of version 3.49. Use the pcauchy opcode instead.
1089
ipoisson
ipoisson Deprecated.
Description
Deprecated as of version 3.49. Use the poisson opcode instead.
1090
ipow
ipow Deprecated.
Description
Deprecated as of version 3.48. Use the pow opcode instead.
1091
is16b14
is16b14 Deprecated.
Description
Deprecated as of version 3.52. Use the s16b14 opcode instead.
1092
is32b14
is32b14 Deprecated.
Description
Deprecated as of version 3.52. Use the s32b14 opcode instead.
1093
islider16
islider16 Deprecated.
Description
Deprecated as of version 3.52. Use the slider16 opcode instead.
1094
islider32
islider32 Deprecated.
Description
Deprecated as of version 3.52. Use the slider32 opcode instead.
1095
islider64
islider64 Deprecated.
Description
Deprecated as of version 3.52. Use the slider64 opcode instead.
1096
islider8
islider8 Deprecated.
Description
Deprecated as of version 3.52. Use the slider8 opcode instead.
1097
itablecopy
itablecopy Deprecated.
Description
Deprecated as of version 3.52. Use the tableicopy opcode instead.
1098
itablegpw
itablegpw Deprecated.
Description
Deprecated as of version 3.52. Use the tableigpw opcode instead.
1099
itablemix
itablemix Deprecated.
Description
Deprecated as of version 3.52. Use the tableimix opcode instead.
1100
itablew
itablew Deprecated.
Description
Deprecated as of version 3.52. Use the tableiw opcode instead.
1101
itrirand
itrirand Deprecated.
Description
Deprecated as of version 3.49. Use the trirand opcode instead.
1102
iunirand
iunirand Deprecated.
Description
Deprecated as of version 3.49. Use the unirand opcode instead.
1103
iweibull
iweibull Deprecated.
Description
Deprecated as of version 3.49. Use the weibull opcode instead.
1104
JackoAudioIn
JackoAudioIn Receives an audio signal from a Jack port.
Description
Receives an audio signal from a Jack audio input port inside this instance of Csound, which in turn has received the signal from its connected external Jack audio output port.
Syntax
asignal JackoAudioIn ScsoundPortName
Initialization
ScsoundPortName -- The short name ("portname") of the internal Jack audio input port.
Performance
asignal -- Audio received from the external Jack output port to which ScsoundPortName is connected.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1105
JackoAudioInConnect
JackoAudioInConnect Creates an audio connection from a Jack port to Csound.
Description
In the orchestra header, creates an audio connection from an external Jack audio output port to a Jack audio input port inside this instance of Csound.
Syntax
JackoAudioInConnect SexternalPortName, ScsoundPortName
Initialization
SexternalPortName -- The full name ("clientname:portname") of an external Jack audio output port. ScsoundPortName -- The short name ("portname") of the internal Jack audio input port.
Performance
The actual audio must be read with the JackoAudioIn opcode.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1106
JackoAudioOut
JackoAudioOut Sends an audio signal to a Jack port.
Description
Sends an audio signal to an internal Jack audio output port, and in turn to its connected external Jack audio input port. Note that it is possible to send audio out via Jack to the system audio interface, while at the same time rendering to a regular Csound output soundfile.
Syntax
JackoAudioOut ScsoundPortName, asignal
Initialization
ScsoundPortName -- The short name ("portname") of the internal Jack audio output port.
Performance
asignal -- Audio to be sent to the external Jack audio input port to which CsoundPortName is connected. Audio from multiple instances of the opcode sending to the same Jack port is summed before sending.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoMidiOut, JackoMidiOut, JackoTransport.
Credits
By: Michael Gogins 2010
1107
JackoAudioOutConnect
JackoAudioOutConnect Creates an audio connection from Csound to a Jack port.
Description
In the orchestra header, creates an audio connection from a Jack audio output port inside this instance of Csound to an external Jack audio input port.
Syntax
JackoAudioOutConnect ScsoundPortName, SexternalPortName
Initialization
ScsoundPortName -- The short name ("portname") of the internal Jack audio output port. SexternalPortName -- The full name ("clientname:portname") of an external Jack audio input port.
Performance
The actual audio must be written with the JackoAudioOut opcode.
See Also
The Jacko Opcodes, JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1108
JackoFreewheel
JackoFreewheel Turns Jack's freewheeling mode on or off.
Description
Turns Jack's freewheeling mode on or off. When freewheeling is on, if supported by the rest of the Jack system, Csound will run as fast as possible, which may be either faster or slower than real time. This is essential for rendering scores that are too dense for real-time performance to a soundfile, without xruns or dropouts.
Syntax
JackoFreewheel [ienabled]
Initialization
ienabled -- Turns freewheeling on (the default) or off.
See Also
JackoInit, JackoInfo, JackoAudioInConnect, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1109
JackoInfo
JackoInfo Prints information about the Jack system.
Description
Prints the Jack daemon and client names, the sampling rate and frames per period, and all active Jack port names, types, states, and connections.
Syntax
JackoInfo
Initialization
May be called any number of times in the orchestra header, for example both before and after creating Jack ports in the Csound orchestra header.
See Also
JackoInit, JackoFreewheel, JackoAudioInConnect, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1110
JackoInit
JackoInit Initializes Csound as a Jack client.
Description
Initializes this instance of Csound as a Jack client. Csound's sr must be equal to the Jack daemon's frames per second. Csound's ksmps must be equal to the Jack daemon's frames per period. Frames per period must not only (a) be a power of 2, but also (b) go evenly into the frames per second, e.g. 128 frames per period goes into 48000 frames per second 375 times, for a latency or MIDI time granularity of about 2.7 milliseconds (as good as or better than the absolute best human performers). The order of processing of all signals that pass from Jack input ports, through Csound processing, and to Jack output ports, must be properly determined by sequence of instrument and opcode definition within Csound.
Syntax
JackoInit SclientName, ServerName
Initialization
Sname -- String name of the inlet port. The name of the inlet is implicitly qualified by the instrument name or number, so it is valid to use the same inlet name in more than one instrument (but not to use the same inlet name twice in one instrument). SclientName -- The name of the Jack client; normally, should be "csound". ServerName -- The name of the Jack daemon; normally, will be "default". This opcode must be called once and only once in the orchestra header, and before any other Jack opcodes. If more than one instance of Csound is using the Jack opcodes at the same time, then each instance of Csound must use a different client name.
See Also
JackoInfo, JackoFreewheel, JackoAudioInConnect, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1111
JackoMidiInConnect
JackoMidiInConnect Creates a MIDI connection from a Jack port to Csound.
Description
In the orchestra header, creates a MIDI connection from an external Jack MIDI output port to this instance of Csound.
Syntax
JackoMidiInConnect SexternalPortName, ScsoundPortName
Initialization
SexternalPortName -- The full name ("clientname:portname") of an external Jack MIDI output port. ScsoundPortName -- The short name ("portname") of the internal Jack MIDI input port. Must be used in conjunction with the -M0 -+rtmidi=null Csound command-line options. Can be used in with the MIDI inter-operability command-line options and/or opcodes to enable the use of ordinary Csound instrument definitions to render external scores or MIDI sequences. Note that Csound can connect to ALSA ports through Jack, but in that case you will have to identify the port by its alias in the JackInfo printout.
Performance
The actual MIDI events will be received in the regular Csound way, i.e. through a MIDI driver and the sensevents mechanism, rather than through a Jack input port opcode. The granularity of timing is Csound's kperiod.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoAudioOutConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1112
JackoMidiOutConnect
JackoMidiOutConnect Creates a MIDI connection from Csound to a Jack port.
Description
In the orchestra header, creates a connection from a Jack MIDI output port inside this instance of Csound to an external Jack MIDI input port.
Syntax
JackoMidiOutConnect ScsoundPortName, SexternalPortName
Initialization
ScsoundPortName -- The short name ("portname") of the internal Jack MIDI output port. SexternalPortName -- The full name ("clientname:portname") of an external Jack MIDI input port.
Performance
The actual MIDI data must be written with the JackoMidiOut or JackoNoteOut opcodes.
See Also
JackoInfo JackoInfo JackoFreewheel JackoAudioOutConnect JackoMidiInConnect JackoMidiOutConnect JackoOn JackoAudioIn JackoAudioOut JackoMidiOut JackoNoteOut JackoTransport
Credits
By: Michael Gogins 2010
1113
JackoMidiOut
JackoMidiOut Sends a MIDI channel message to a Jack port.
Description
Sends a MIDI channel message to a Jack MIDI output port inside this instance of Csound, and in turn to its connected external Jack MIDI input port.
Syntax
JackoMidiOut ScsoundPortName, kstatus, kchannel, kdata1[, kdata2]
Initialization
ScsoundPortName -- The short name ("portname") of the internal Jack audio output port.
Performance
kstatus -- MIDI status byte; must indicate a MIDI channel message. kchannel -- MIDI channel (from 0 through 15). kdata1 -- First data byte of a MIDI channel message. kdata2 -- Optional second data byte of a MIDI channel message. This opcode can be called any number of times in the same kperiod. Messages from multiple instances of the opcode sending to the same port are collected before sending. Running status, system exclusive messages, and real-time messages are not supported. The granularity of timing is Csound's kperiod.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1114
JackoNoteOut
JackoNoteOut Sends a MIDI channel message to a Jack port.
Description
Sends a MIDI channel message to a Jack MIDI output port inside this instance of Csound, and in turn to its connected external Jack MIDI input port.
Syntax
JackoNoteOut ScsoundPortName, kstatus, kchannel, kdata1[, kdata2]
Initialization
ScsoundPortName -- The short name ("portname") of the internal Jack audio output port.
Performance
kstatus -- MIDI status byte; must indicate a MIDI channel message. kchannel -- MIDI channel (from 0 through 15). kdata1 -- First data byte of a MIDI channel message. kdata2 -- Optional second data byte of a MIDI channel message. This opcode can be called any number of times in the same kperiod. Messages from multiple instances of the opcode sending to the same port are collected before sending. Running status, system exclusive messages, and real-time messages are not supported. The granularity of timing is Csound's kperiod.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioInConnect, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoMidiOut, The Jacko Opcodes.
Credits
By: Michael Gogins 2010
1115
JackoOn
JackoOn Enables or disables all Jack ports.
Description
In the orchestra header, after all Jack connections have been created, enables or disables all Jack input and output opcodes inside this instance of Csound to read or write data.
Syntax
JackoOn [iactive]
Initialization
iactive -- A flag that turns the ports on (the default) or off.
See Also
JackoInit, JackoFreewheel, JackoAudioInConnect, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoAudioIn, JackoAudioOut, JackoMidiOut, JackoNoteOut, JackoTransport.
Credits
By: Michael Gogins 2010
1116
JackoTransport
JackoTransport Control the Jack transport.
Description
Starts, stops, or repositions the Jack transport. This is useful, e.g., for starting an external sequencer playing to send MIDI messages to Csound.
Syntax
JackoTransport kcommand, [kposition]
Performance
kcommand -- 0 means "no action", 1 starts the transport, 2 stops the transport, and 3 positions the transport to kposition seconds from the beginning of performance (i.e. time 0 in the score). kposition -- Time to position to the transport, in seconds from the beginning of performance (i.e. time 0 in the score). This opcode can be used at init time or during performance. The granularity of timing is Csound's kperiod.
See Also
JackoInfo, JackoInfo, JackoFreewheel, JackoAudioOutConnect, JackoMidiInConnect, JackoMidiOutConnect, JackoOn, JackoAudioIn, JackoMidiOut, JackoNoteOut.
Credits
By: Michael Gogins 2010
1117
jacktransport
jacktransport Start/stop jack_transport and can optionally relocate the playback head.
Description
Start/stop jack_transport and can optionally relocate the playback head.
Syntax
jacktransport icommand [, ilocation]
Initialization
icommand -- 1 to start playing, 0 to stop. ilocation -- optional location in seconds to specify where the playback head should be moved. If omitted, the transport is started from current location.
Note
Since jacktransport depends on jack audio connection kit, it will work only on Linux or Mac OS X systems which have the jack server running.
Examples
Here is a simple example of the jacktransport opcode. It uses the file jacktransport.csd [examples/ jacktransport.csd].
instr 1 jacktransport p4, p5 endin instr 2 jacktransport p4 endin </CsInstruments> <CsScore> i2 0 5 1; play i2 5 1 0; stop
1118
i1 6 5 1 2 ; move at 2 seconds and start playing back i1 11 1 0 0 ; stop and rewind e </CsScore> </CsoundSynthesizer>
Credits
Author: Cesare Marilungo New in version 5.08
1119
jitter
jitter Generates a segmented line whose segments are randomly generated.
Description
Generates a segmented line whose segments are randomly generated.
Syntax
kout jitter kamp, kcpsMin, kcpsMax
Performance
kamp -- Amplitude of jitter deviation kcpsMin -- Minimum speed of random frequency variations (expressed in cps) kcpsMax -- Maximum speed of random frequency variations (expressed in cps) jitter generates a segmented line whose segments are randomly generated inside the +kamp and -kamp interval. Duration of each segment is a random value generated according to kcpsmin and kcpsmax values. jitter can be used to make more natural and analog-sounding some static, dull sound. For best results, it is suggested to keep its amplitude moderate.
Examples
Here is an example of the jitter opcode. It uses the file jitter.csd [examples/jitter.csd].
1120
outs aplain, aplain endin ; Instrument #2 -- instrument with jitter. instr 2 ; Create a signal modulated the jitter opcode. kamp init 2 kcpsmin init 4 kcpsmax init 6 kj jitter kamp, kcpsmin, kcpsmax aplain vco 20000, 220, 2, 0.83 ajitter vco 20000, 220+kj, 2, 0.83 outs aplain, ajitter endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for 3 seconds. 1 0 3 Play Instrument #2 for 3 seconds. 2 3 3
</CsScore> </CsoundSynthesizer>
See Also
jitter2, vibr, vibrato
Credits
Author: Gabriel Maldonado Example written by Kevin Conder. New in Version 4.15
1121
jitter2
jitter2 Generates a segmented line with user-controllable random segments.
Description
Generates a segmented line with user-controllable random segments.
Syntax
kout jitter2 ktotamp, kamp1, kcps1, kamp2, kcps2, kamp3, kcps3
Performance
ktotamp -- Resulting amplitude of jitter2 kamp1 -- Amplitude of the first jitter component kcps1 -- Speed of random variation of the first jitter component (expressed in cps) kamp2 -- Amplitude of the second jitter component kcps2 -- Speed of random variation of the second jitter component (expressed in cps) kamp3 -- Amplitude of the third jitter component kcps3 -- Speed of random variation of the third jitter component (expressed in cps) jitter2 also generates a segmented line such as jitter, but in this case the result is similar to the sum of three randi opcodes, each one with a different amplitude and frequency value (see randi for more details), that can be varied at k-rate. Different effects can be obtained by varying the input arguments. jitter2 can be used to make more natural and analog-sounding some static, dull sound. For best results, it is suggested to keep its amplitude moderate.
Examples
Here is an example of the jitter2 opcode. It uses the file jitter2.csd [examples/jitter2.csd].
1122
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; Instrument #1 -- plain instrument. instr 1 aplain vco 20000, 220, 2, 0.83 outs aplain, aplain endin ; Instrument #2 -- instrument with jitter. instr 2 ; Create a signal modulated with the jitter2 opcode. ktotamp init 2 kamp1 init 0.66 kcps1 init 3 kamp2 init 0.66 kcps2 init 3 kamp3 init 0.66 kcps3 init 3 kj jitter2 ktotamp, kamp1, kcps1, kamp2, kcps2, \ kamp3, kcps3 aplain vco 20000, 220, 2, 0.83 ajitter vco 20000, 220+kj, 2, 0.83 outs aplain, ajitter endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for 3 seconds. 1 0 3 Play Instrument #2 for 3 seconds. 2 3 3
</CsScore> </CsoundSynthesizer>
See Also
jitter, vibr, vibrato
Credits
Author: Gabriel Maldonado Example written by Kevin Conder. New in Version 4.15
1123
jspline
jspline A jitter-spline generator.
Description
A jitter-spline generator.
Syntax
ares jspline xamp, kcpsMin, kcpsMax kres jspline kamp, kcpsMin, kcpsMax
Performance
kres, ares -- Output signal xamp -- Amplitude factor kcpsMin, kcpsMax -- Range of point-generation rate. Min and max limits are expressed in cps. jspline (jitter-spline generator) generates a smooth curve based on random points generated at [cpsMin, cpsMax] rate. This opcode is similar to randomi or randi or jitter, but segments are not straight lines, but cubic spline curves. Output value range is approximately > -xamp and < xamp. Actually, real range could be a bit greater, because of interpolating curves beetween each pair of random-points. At present time generated curves are quite smooth when cpsMin is not too different from cpsMax. When cpsMin-cpsMax interval is big, some little discontinuity could occurr, but it should not be a problem, in most cases. Maybe the algorithm will be improved in next versions. These opcodes are often better than jitter when user wants to naturalize or analogize digital sounds. They could be used also in algorithmic composition, to generate smooth random melodic lines when used together with samphold opcode. Note that the result is quite different from the one obtained by filtering white noise, and they allow the user to obtain a much more precise control.
Credits
Author: Gabriel Maldonado New in Version 4.15
1124
k
k Converts a i-rate parameter to an k-rate value.
Description
Converts an i-rate value to control rate, for example to be used with rnd() and birnd() to generate random numbers at k-rate.
Syntax
k(x) (i-rate args only)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
See Also
ia
Credits
Author: Istvan Varga New in version Csound 5.00
1125
kbetarand
kbetarand Deprecated.
Description
Deprecated as of version 3.49. Use the betarand opcode instead.
1126
kbexprnd
kbexprnd Deprecated.
Description
Deprecated as of version 3.49. Use the bexprnd opcode instead.
1127
kcauchy
kcauchy Deprecated.
Description
Deprecated as of version 3.49. Use the cauchy opcode instead.
1128
kdump
kdump Deprecated.
Description
Deprecated as of version 3.49. Use the dumpk opcode instead.
1129
kdump2
kdump2 Deprecated.
Description
Deprecated as of version 3.49. Use the dumpk2 opcode instead.
1130
kdump3
kdump3 Deprecated.
Description
Deprecated as of version 3.49. Use the dumpk3 opcode instead.
1131
kdump4
kdump4 Deprecated.
Description
Deprecated as of version 3.49. Use the dumpk4 opcode instead.
1132
kexprand
kexprand Deprecated.
Description
Deprecated as of version 3.49. Use the exprand opcode instead.
1133
kfilter2
kfilter2 Deprecated.
Description
Deprecated as of version 3.49. Use the filter2 opcode instead.
Credits
Author: Michael A. Casey M.I.T. Cambridge, Mass. 1997 New in version 3.47
1134
kgauss
kgauss Deprecated.
Description
Deprecated as of version 3.49. Use the gauss opcode instead.
1135
kgoto
kgoto Transfer control during the p-time passes.
Description
During the p-time passes only, unconditionally transfer control to the statement labeled by label.
Syntax
kgoto label
Examples
Here is an example of the kgoto opcode. It uses the file kgoto.csd [examples/kgoto.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Change kval linearly from 0 to 2 over ; the period set by the third p-field. kval line 0, p3, 2 ; If kval is greater than or equal to 1 then play the high note. ; If not then play the low note. if (kval >= 1) kgoto highnote kgoto lownote highnote: kfreq = 880 goto playit lownote: kfreq = 440 goto playit playit: ; Print the values of kval and kfreq. printks "kval = %f, kfreq = %f\\n", 1, kval, kfreq
1136
a1 oscil 10000, kfreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
cggoto, cigoto, ckgoto, goto, if, igoto, tigoto, timout
Credits
Example written by Kevin Conder.
1137
klinrand
klinrand Deprecated.
Description
Deprecated as of version 3.49. Use the linrand opcode instead.
1138
kon
kon Deprecated.
Description
Deprecated as of version 3.49. Use the midion opcode instead.
1139
koutat
koutat Deprecated.
Description
Deprecated as of version 3.52. Use the outkat opcode instead.
1140
koutc
koutc Deprecated.
Description
Deprecated as of version 3.52. Use the outkc opcode instead.
1141
koutc14
koutc14 Deprecated.
Description
Deprecated as of version 3.52. Use the outkc14 opcode instead.
1142
koutpat
koutpat Deprecated.
Description
Deprecated as of version 3.52. Use the outkpat opcode instead.
1143
koutpb
koutpb Deprecated.
Description
Deprecated as of version 3.52. Use the outkpb opcode instead.
1144
koutpc
koutpc Deprecated.
Description
Deprecated as of version 3.52. Use the outkpc opcode instead.
1145
kpcauchy
kpcauchy Deprecated.
Description
Deprecated as of version 3.49. Use the pcauchy opcode instead.
1146
kpoisson
kpoisson Deprecated.
Description
Deprecated as of version 3.49. Use the poisson opcode instead.
1147
kpow
kpow Deprecated.
Description
Deprecated as of version 3.48. Use the pow opcode instead.
1148
kr
kr Sets the control rate.
Description
These statements are global value assignments, made at the beginning of an orchestra, before any instrument block is defined. Their function is to set certain reserved symbol variables that are required for performance. Once set, these reserved symbols can be used in expressions anywhere in the orchestra.
Syntax
kr = iarg
Initialization
kr = (optional) -- set control rate to iarg samples per second. The default value is 1000. In addition, any global variable [53] can be initialized by an init-time assignment anywhere before the first instr statement. All of the above assignments are run as instrument 0 (i-pass only) at the start of real performance. Beginning with Csound version 3.46, kr can be omitted. Csound will use the default values, or calculate kr from defined ksmps and sr. It is usually better to just specify ksmps and sr and let csound calculate kr.
Examples
sr = 10000 kr = 500 ksmps = 20 gi1 = sr/2. ga init 0 itranspose = octpch(.0l)
See Also
ksmps, nchnls, nchnls_i, sr
1149
kread
kread Deprecated.
Description
Deprecated as of version 3.52. Use the readk opcode instead.
1150
kread2
kread2 Deprecated.
Description
Deprecated as of version 3.52. Use the readk2 opcode instead.
1151
kread3
kread3 Deprecated.
Description
Deprecated as of version 3.52. Use the readk3 opcode instead.
1152
kread4
kread4 Deprecated.
Description
Deprecated as of version 3.52. Use the readk4 opcode instead.
1153
ksmps
ksmps Sets the number of samples in a control period.
Description
These statements are global value assignments, made at the beginning of an orchestra, before any instrument block is defined. Their function is to set certain reserved symbol variables that are required for performance. Once set, these reserved symbols can be used in expressions anywhere in the orchestra.
Syntax
ksmps = iarg
Initialization
ksmps = (optional) -- set the number of samples in a control period. This value must equal sr/kr. The default value is 10. In addition, any global variable [53] can be initialized by an init-time assignment anywhere before the first instr statement. All of the above assignments are run as instrument 0 (i-pass only) at the start of real performance. Beginning with Csound version 3.46, either ksmps may be omitted. Csound will attempt to calculate the omitted value from the specified sr and krvalues, but it should evaluate to an integer.
Warning
ksmps must be an integer value.
Examples
sr = 10000 kr = 500 ksmps = 20 gi1 = sr/2. ga init 0 itranspose = octpch(.0l)
See Also
kr, nchnls, nchnls_i, sr
Credits
Thanks to a note from Gabriel Maldonado, added a warning about integer values.
1154
ktableseg
ktableseg Deprecated.
Description
Deprecated. Use the tableseg opcode instead.
Syntax
ktableseg ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]
1155
ktrirand
ktrirand Deprecated.
Description
Deprecated as of version 3.49. Use the trirand opcode instead.
1156
kunirand
kunirand Deprecated.
Description
Deprecated as of version 3.49. Use the unirand opcode instead.
1157
kweibull
kweibull Deprecated.
Description
Deprecated as of version 3.49. Use the weibull opcode instead.
1158
lfo
lfo A low frequency oscillator of various shapes.
Description
A low frequency oscillator of various shapes.
Syntax
kres lfo kamp, kcps [, itype] ares lfo kamp, kcps [, itype]
Initialization
itype (optional, default=0) -- determine the waveform of the oscillator. Default is 0. itype = 0 - sine itype = 1 - triangles itype = 2 - square (bipolar) itype = 3 - square (unipolar) itype = 4 - saw-tooth itype = 5 - saw-tooth(down) The sine wave is implemented as a 4096 table and linear interpolation. The others are calculated.
Performance
kamp -- amplitude of output kcps -- frequency of oscillator
Examples
Here is an example of the lfo opcode. It uses the file lfo.csd [examples/lfo.csd].
1159
; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o lfo.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 10 kcps = 5 itype = 4 k1 lfo kamp, kcps, itype ar oscil p4, p5+k1, 1 out ar endin </CsInstruments> <CsScore> ; Table #1: an ordinary sine wave. f 1 0 32768 10 1 ; ; ; i e p4 = amplitude of the output signal. p5 = frequency (in cycles per second) of the output signal. Play Instrument #1 for two seconds. 1 0 2 10000 220
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK November 1998 New in Csound version 3.491
1160
limit
limit Sets the lower and upper limits of the value it processes.
Description
Sets the lower and upper limits of the value it processes.
Syntax
ares limit asig, klow, khigh ires limit isig, ilow, ihigh kres limit ksig, klow, khigh
Initialization
isig -- input signal ilow -- low threshold ihigh -- high threshold
Performance
xsig -- input signal klow -- low threshold khigh -- high threshold limit sets the lower and upper limits on the xsig value it processes. If xhigh is lower than xlow, then the output will be the average of the two - it will not be affected by xsig. This opcode is useful in several situations, such as table indexing or for clipping and modeling a-rate, irate or k-rate signals.
See Also
mirror, wrap
Credits
Author: Robin Whittle Australia New in Csound version 3.46
1161
line
line Trace a straight line between specified points.
Description
Trace a straight line between specified points.
Syntax
ares line ia, idur, ib kres line ia, idur, ib
Initialization
ia -- starting value. ib -- value after idur seconds. idur -- duration in seconds of segment. A zero or negative value will cause all initialization to be skipped.
Performance
line generates control or audio signals whose values move linearly from an initial value to a final one.
Note
A common error with this opcode is to assume that the value of ib is held after the time idur1. line does not automatically end or stop at the end of the duration given. If your note length is longer than idur seconds, kres (or ares) will not come to rest at ib, but will instead continue to rise or fall with the same rate. If a rise (or fall) and then hold is required that the linseg opcode should be considered instead.
Examples
Here is an example of the line opcode. It uses the file line.csd [examples/line.csd].
1162
; -o line.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Define kcps as a frequency value that linearly declines ; from 880 to 220. It declines over the period set by p3. kcps line 880, p3, 220 a1 oscil 20000, kcps, 1 out a1 endin instr 2 kcps line 880, 1, 660 ; kcps won't stop at 660 if p3 > 1 a1 oscil 20000, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 ; Play Instrument #2 for two seconds. i 2 3 2 e </CsScore> </CsoundSynthesizer>
See Also
expon, expseg, expsegr, linseg, linsegr
Credits
Example written by Kevin Conder.
1163
linen
linen Applies a straight line rise and decay pattern to an input amp signal.
Description
linen -- apply a straight line rise and decay pattern to an input amp signal.
Syntax
ares linen xamp, irise, idur, idec kres linen kamp, irise, idur, idec
Initialization
irise -- rise time in seconds. A zero or negative value signifies no rise modification. idur -- overall duration in seconds. A zero or negative value will cause initialization to be skipped. idec -- decay time in seconds. Zero means no decay. An idec > idur will cause a truncated decay.
Performance
kamp, xamp -- input amplitude signal. Rise modifications are applied for the first irise seconds, and decay from time idur - idec. If these periods are separated in time there will be a steady state during which amp will be unmodified. If linen rise and decay periods overlap then both modifications will be in effect for that time. If the overall duration idur is exceeded in performance, the final decay will continue on in the same direction, going negative.
Note
A common error with this opcode is to assume that the value of 0 is the held after the envelope has finished at idur. linen does not automatically end or stop at the end of the duration given. If your note length is longer than idur seconds, kres (or ares) will not come to 1164
rest at 0, but will instead continue to fall with the same rate. If a decay and then hold is required then the linseg opcode should be considered instead.
See Also
envlpx, envlpxr, linenr
1165
linenr
linenr The linen opcode extended with a final release segment.
Description
linenr -- same as linen except that the final segment is entered only on sensing a MIDI note release. The note is then extended by the decay time.
Syntax
ares linenr xamp, irise, idec, iatdec kres linenr kamp, irise, idec, iatdec
Initialization
irise -- rise time in seconds. A zero or negative value signifies no rise modification. idec -- decay time in seconds. Zero means no decay. An idec > idur will cause a truncated decay. iatdec -- attenuation factor by which the closing steady state value is reduced exponentially over the decay period. This value must be positive and is normally of the order of .01. A large or excessively small value is apt to produce a cutoff which is audible. A zero or negative value is illegal.
Performance
kamp, xamp -- input amplitude signal. linenr is unique within Csound in containing a note-off sensor and release time extender. When it senses either a score event termination or a MIDI noteoff, it will immediately extend the performance time of the current instrument by idec seconds, then execute an exponential decay towards the factor iatdec. For two or more units in an instrument, extension is by the greatest idec. You can use other pre-made envelopes which start a release segment upon recieving a note off message, like linsegr and expsegr, or you can construct more complex envelopes using xtratim and release. Note that you don't need to use xtratim if you are using linenr, since the time is extended automatically. These r units can also be modified by MIDI noteoff velocities (see veloffs).
See Also
linsegr, expsegr, envlpxr, mxadsr, madsr, envlpx, linen, xtratim
1166
lineto
lineto Generate glissandos starting from a control signal.
Description
Generate glissandos starting from a control signal.
Syntax
kres lineto ksig, ktime
Performance
kres -- Output signal. ksig -- Input signal. ktime -- Time length of glissando in seconds. lineto adds glissando (i.e. straight lines) to a stepped input signal (for example, produced by randh or lpshold). It generates a straight line starting from previous step value, reaching the new step value in ktime seconds. When the new step value is reached, such value is held until a new step occurs. Be sure that ktime argument value is smaller than the time elapsed between two consecutive steps of the original signal, otherwise discontinuities will occur in output signal. When used together with the output of lpshold it emulates the glissando effect of old analog sequencers.
Note
No new value for ksig or ktime will have effect until the previous ktime has elapsed.
See Also
tlineto
Credits
Author: Gabriel Maldonado New in Version 4.13
1167
linrand
linrand Linear distribution random number generator (positive values only).
Description
Linear distribution random number generator (positive values only). This is an x-class noise generator.
Syntax
ares linrand krange ires linrand krange kres linrand krange
Performance
krange -- the range of the random numbers (0 - krange). Outputs only positive numbers. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the linrand opcode. It uses the file linrand.csd [examples/linrand.csd].
1168
instr 1 ; Generate a random number between 0 and 1. ; krange = 1 i1 linrand 1 print i1 endin ; Instrument #2. instr 2 ; Generate a random number between 0 and 1. ; krange = 1 seed 0 i1 linrand 1 print i1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 ; Play Instrument #2 for one second. i 2 1 1 e </CsScore> </CsoundSynthesizer>
See Also
seed, betarand, bexprnd, cauchy, exprand, gauss, pcauchy, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Example written by Kevin Conder.
1169
linseg
linseg Trace a series of line segments between specified points.
Description
Trace a series of line segments between specified points.
Syntax
ares linseg ia, idur1, ib [, idur2] [, ic] [...] kres linseg ia, idur1, ib [, idur2] [, ic] [...]
Initialization
ia -- starting value. ib, ic, etc. -- value after dur1 seconds, etc. idur1 -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative value will terminate the initialization process with the preceding point, permitting the last-defined line or curve to be continued indefinitely in performance. The default is zero.
Performance
These units generate control or audio signals whose values can pass through 2 or more specified points. The sum of dur values may or may not equal the instrument's performance time: a shorter performance will truncate the specified pattern, while a longer one will cause the last-defined segment to continue on in the same direction.
Note
A common error with this opcode is to assume that the last value is held after the total duration. linseg does not automatically end or stop at the end of the total duration. If your note length is longer than the sum of all idur values, kres (or ares) will not come to rest at the last given value, but will instead continue to rise or fall with the current rate. You can add a final segment at the same previous value to create a held final value.
Examples
Here is an example of the linseg opcode. It uses the file linseg.csd [examples/linseg.csd].
1170
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o linseg.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; p4 = frequency in pitch-class notation. kcps = cpspch(p4) ; Create an amplitude envelope. kenv linseg 0, p3*0.25, 1, p3*0.75, 0 kamp = kenv * 30000 a1 oscil kamp, kcps, 1 out a1 endin instr 2 ; p4 = frequency in pitch-class notation. kcps = cpspch(p4) ; Create an amplitude envelope. kenv linseg 0, 0.25, 1, 0.75, 0 kamp = kenv * 30000 a1 oscil kamp, kcps, 1 out a1 endin instr 3 ; p4 = frequency in pitch-class notation. kcps = cpspch(p4) ; Create an amplitude envelope. kenv linseg 0, 0.25, 1, 0.75, 0, 1, 0 kamp = kenv * 30000 a1 oscil kamp, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i ; i ; i Play Instrument 1 0 0.5 8.00 Play Instrument 1 1 0.5 8.01 Play Instrument 1 2 0.5 8.02 Play Instrument 1 3 0.5 8.03 #1 for a half-second, p4=8.00 #1 for a half-second, p4=8.01 #1 for a half-second, p4=8.02 #1 for a half-second, p4=8.03 ; kenv will stay at 0 indefinetely at the end ; kenv will go into negative if p3 > 1
i 2 4 i 3 6 e
1.5 8.00 ; Notice the problem with linseg 1.5 8.00 ; this is the solution (instr 3)
</CsScore>
1171
</CsoundSynthesizer>
See Also
expon, expseg, expsegr, line, linsegr transeg
Credits
Example written by Kevin Conder.
1172
linsegr
linsegr Trace a series of line segments between specified points including a release segment.
Description
Trace a series of line segments between specified points including a release segment.
Syntax
ares linsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz kres linsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz
Initialization
ia -- starting value. ib, ic, etc. -- value after dur1 seconds, etc. idur1 -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative value will terminate the initialization process with the preceding point, permitting the last-defined line or curve to be continued indefinitely in performance. The default is zero. irel, iz -- duration in seconds and final value of a note releasing segment. For Csound versions prior to 5.00, the release time cannot be longer than 32767/kr seconds. This limit has been extended to (231-1)/kr.
Performance
These units generate control or audio signals whose values can pass through 2 or more specified points. The sum of dur values may or may not equal the instrument's performance time: a shorter performance will truncate the specified pattern, while a longer one will cause the last-defined segment to continue on in the same direction. linsegr is amongst the Csound r units that contain a note-off sensor and release time extender. When each senses an event termination or MIDI noteoff, it immediately extends the performance time of the current instrument by irel seconds, and sets out to reach the value iz by the end of that period (no matter which segment the unit is in). r units can also be modified by MIDI noteoff velocities. For two or more extenders in an instrument, extension is by the greatest period. You can use other pre-made envelopes which start a release segment upon recieving a note off message, like linenr and expsegr, or you can construct more complex envelopes using xtratim and release. Note that you don't need to use xtratim if you are using linsegr, since the time is extended automatically.
Examples
Here is an example of the linsegr opcode. It uses the file linsegr.csd [examples/linsegr.csd]. 1173
</CsScore> </CsoundSynthesizer>
See Also
linenr, expsegr, envlpxr, mxadsr, madsr expon, expseg, expsega line, linseg, xtratim, transegr
Credits
Author: Barry L. Vercoe
1174
Example written by Kevin Conder. December 2002, December 2006. Thanks to Istvan Varga, added documentation about the maximum release time. New in Csound 3.47
1175
locsend
locsend Distributes the audio signals of a previous locsig opcode.
Description
locsend depends upon the existence of a previously defined locsig. The number of output signals must match the number in the previous locsig. The output signals from locsend are derived from the values given for distance and reverb in the locsig and are ready to be sent to local or global reverb units (see example below). The reverb amount and the balance between the 2 or 4 channels are calculated in the same way as described in the Dodge book (an essential text!).
Syntax
a1, a2 locsend a1, a2, a3, a4 locsend
Examples
asig some audio signal kdegree line kdistance line a1, a2, a3, a4 locsig ar1, ar2, ar3, ar4 locsend ga1 = ga1+ar1 ga2 = ga2+ar2 ga3 = ga3+ar3 ga4 = ga4+ar4 outq endin
instr 99 ; reverb instrument a1 reverb2 ga1, 2.5, .5 a2 reverb2 ga2, 2.5, .5 a3 reverb2 ga3, 2.5, .5 a4 reverb2 ga4, 2.5, .5 outq a1, a2, a3, a4 ga1=0 ga2=0 ga3=0 ga4=0
In the above example, the signal, asig, is sent around a complete circle once during the duration of a note while at the same time it becomes more and more distant from the listeners' location. locsig sends the appropriate amount of the signal internally to locsend. The outputs of the locsend are added to global accumulators in a common Csound style and the global signals are used as inputs to the reverb units in a separate instrument. locsig is useful for quad and stereo panning as well as fixed placed of sounds anywhere between two loudspeakers. Below is an example of the fixed placement of sounds in a stereo field.
instr 1
1176
a1, a2 ar1, ar2 ga1 = ga1+ar1 ga2 = ga2+ar2 endin instr 99 ; reverb.... endin
A few notes:
;place the sound in the left speaker and near: i1 0 1 0 1 ;place the sound in the right speaker and far: i1 1 1 90 25 ;place the sound equally between left and right and in the middle ground distance: i1 2 1 45 12 e
The next example shows a simple intuitive use of the distance value to simulate Doppler shift. The same value is used to scale the frequency as is used as the distance input to locsig.
kdistance line 1, p3, 10 kfreq = (ifreq * 340) / (340 + kdistance) asig oscili iamp, kfreq, 1 kdegree line 0, p3, 360 a1, a2, a3, a4 locsig asig, kdegree, kdistance, .1 ar1, ar2, ar3, ar4 locsend
See Also
locsig
Credits
Author: Richard Karpen Seattle, WA USA 1998 New in Csound version 3.48
1177
locsig
locsig Takes an input signal and distributes between 2 or 4 channels.
Description
locsig takes an input signal and distributes it among 2 or 4 channels using values in degrees to calculate the balance between adjacent channels. It also takes arguments for distance (used to attenuate signals that are to sound as if they are some distance further than the loudspeaker itself), and for the amount the signal that will be sent to reverberators. This unit is based upon the example in the Charles Dodge/ Thomas Jerse book, Computer Music, page 320.
Syntax
a1, a2 locsig asig, kdegree, kdistance, kreverbsend a1, a2, a3, a4 locsig asig, kdegree, kdistance, kreverbsend
Performance
kdegree -- value between 0 and 360 for placement of the signal in a 2 or 4 channel space configured as: a1=0, a2=90, a3=180, a4=270 (kdegree=45 would balanced the signal equally between a1 and a2). locsig maps kdegree to sin and cos functions to derive the signal balances (e.g.: asig=1, kdegree=45, a1=a2=.707). kdistance -- value >= 1 used to attenuate the signal and to calculate reverb level to simulate distance cues. As kdistance gets larger the sound should get softer and somewhat more reverberant (assuming the use of locsend in this case). kreverbsend -- the percentage of the direct signal that will be factored along with the distance and degree values to derive signal amounts that can be sent to a reverb unit such as reverb, or reverb2.
Examples
asig some audio signal kdegree line kdistance line a1, a2, a3, a4 locsig ar1, ar2, ar3, ar4 locsend ga1 = ga1+ar1 ga2 = ga2+ar2 ga3 = ga3+ar3 ga4 = ga4+ar4 outq endin
instr 99 ; reverb instrument a1 reverb2 ga1, 2.5, .5 a2 reverb2 ga2, 2.5, .5 a3 reverb2 ga3, 2.5, .5 a4 reverb2 ga4, 2.5, .5 outq a1, a2, a3, a4 ga1=0 ga2=0 ga3=0 ga4=0
1178
In the above example, the signal, asig, is sent around a complete circle once during the duration of a note while at the same time it becomes more and more "distant" from the listeners' location. locsig sends the appropriate amount of the signal internally to locsend. The outputs of the locsend are added to global accumulators in a common Csound style and the global signals are used as inputs to the reverb units in a separate instrument. locsig is useful for quad and stereo panning as well as fixed placed of sounds anywhere between two loudspeakers. Below is an example of the fixed placement of sounds in a stereo field.
instr 1 a1, a2 ar1, ar2 ga1 = ga1+ar1 ga2 = ga2+ar2 endin instr 99 ; reverb.... endin
A few notes:
;place the sound in the left speaker and near: i1 0 1 0 1 ;place the sound in the right speaker and far: i1 1 1 90 25 ;place the sound equally between left and right and in the middle ground distance: i1 2 1 45 12 e
The next example shows a simple intuitive use of the distance value to simulate Doppler shift. The same value is used to scale the frequency as is used as the distance input to locsig.
kdistance line 1, p3, 10 kfreq = (ifreq * 340) / (340 + kdistance) asig oscili iamp, kfreq, 1 kdegree line 0, p3, 360 a1, a2, a3, a4 locsig asig, kdegree, kdistance, .1 ar1, ar2, ar3, ar4 locsend
See Also
locsend
Credits
Author: Richard Karpen Seattle, WA USA 1998 New in Csound version 3.48 1179
log
log Returns a natural log.
Description
Returns the natural log of x (x positive only). The argument value is restricted for log, log10, and sqrt.
Syntax
log(x) (no rate restriction)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the log opcode. It uses the file log.csd [examples/log.csd].
1180
See Also
abs, exp, frac, int, log10, i, sqrt
Credits
Written by John ffitch. New in version 3.47 Example written by Kevin Conder.
1181
log10
log10 Returns a base 10 log.
Description
Returns the base 10 log of x (x positive only). The argument value is restricted for log, log10, and sqrt.
Syntax
log10(x) (no rate restriction)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the log10 opcode. It uses the file log10.csd [examples/log10.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 i1 = log10(8) print i1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
1182
See Also
abs, exp, frac, int, log, i, sqrt
Credits
Written by John ffitch. New in version 3.47 Example written by Kevin Conder.
1183
logbtwo
logbtwo Performs a logarithmic base two calculation.
Description
Performs a logarithmic base two calculation.
Syntax
logbtwo(x) (init-rate or control-rate args only)
Performance
logbtwo() returns the logarithm base two of x. The range of values admitted as argument is .25 to 4 (i.e. from -2 octave to +2 octave response). This function is the inverse of powoftwo(). These functions are fast, because they read values stored in tables. Also they are very useful when working with tuning ratios. They work at i- and k-rate.
Examples
Here is an example of the logbtwo opcode. It uses the file logbtwo.csd [examples/logbtwo.csd].
1184
</CsScore> </CsoundSynthesizer>
See Also
powoftwo
Credits
Author: Gabriel Maldonado Italy June 1998 Author: John ffitch University of Bath, Codemist, Ltd. Bath, UK July 1999 Example written by Kevin Conder. New in Csound version 3.57
1185
logcurve
logcurve This opcode implements a formula for generating a normalised logarithmic curve in range 0 - 1. It is based on the Max / MSP work of Eric Singer (c) 1994.
Description
Generates a logarithmic curve in range 0 to 1 of arbitrary steepness. Steepness index equal to or lower than 1.0 will result in Not-a-Number errors and cause unstable behavior. The formula used to calculate the curve is:
log(x * (y-1)+1) / (log(y)
Syntax
kout logcurve kindex, ksteepness
Performance
kindex -- Index value. Expected range 0 to 1. ksteepness -- Steepness of the generated curve. Values closer to 1.0 result in a straighter line while larger values steepen the curve. kout -- Scaled output.
Examples
Here is an example of the logcurve opcode. It uses the file logcurve.csd [examples/logcurve.csd].
1186
See Also
scale, gainslider, expcurve
Credits
Author: David Akbari October 2006
1187
loop_ge
loop_ge Looping constructions.
Description
Construction of looping operations.
Syntax
loop_ge loop_ge indx, idecr, imin, label kndx, kdecr, kmin, label
Initialization
indx -- i-rate variable to count loop. idecr -- value to decrement the loop. imin -- minimum value of loop index.
Performance
kndx -- k-rate variable to count loop. kdecr -- value to decrement the loop. kmin -- minimum value of loop index. The actions of loop_ge are equivalent to the code
indx = indx - idecr if (indx >= imin) igoto label
or
kndx = kndx - kdecr if (kndx >= kmin) kgoto label
See Also
loop_gt, loop_le and loop_lt.
Credits
Istvan Varga. 2006 New in Csound version 5.01
1188
loop_gt
loop_gt Looping constructions.
Description
Construction of looping operations.
Syntax
loop_gt loop_gt indx, idecr, imin, label kndx, kdecr, kmin, label
Initialization
indx -- i-rate variable to count loop. idecr -- value to decrement the loop. imin -- minimum value of loop index.
Performance
kndx -- k-rate variable to count loop. kdecr -- value to decrement the loop. kmin -- minimum value of loop index. The actions of loop_gt are equivalent to the code
indx = indx - idecr if (indx > imin) igoto label
or
kndx = kndx - kdecr if (kndx > kmin) kgoto label
See Also
loop_ge, loop_le and loop_lt.
Credits
Istvan Varga. New in Csound version 5.01
1189
loop_le
loop_le Looping constructions.
Description
Construction of looping operations.
Syntax
loop_le loop_le indx, incr, imax, label kndx, kncr, kmax, label
Initialization
indx -- i-rate variable to count loop. incr -- value to increment the loop. imax -- maximum value of loop index.
Performance
kndx -- k-rate variable to count loop. kncr -- value to increment the loop. kmax -- maximum value of loop index. The actions of loop_le are equivalent to the code
indx = indx + incr if (indx <= imax) igoto label
or
kndx = kndx + kncr if (kndx <= kmax) kgoto label
See Also
loop_ge, loop_gt and loop_lt.
Credits
Istvan Varga. New in Csound version 5.01
1190
loop_lt
loop_lt Looping constructions.
Description
Construction of looping operations.
Syntax
loop_lt loop_lt indx, incr, imax, label kndx, kncr, kmax, label
Initialization
indx -- i-rate variable to count loop. incr -- value to increment the loop. imax -- maximum value of loop index.
Performance
kndx -- k-rate variable to count loop. kncr -- value to increment the loop. kmax -- maximum value of loop index. The actions of loop_lt are equivalent to the code
indx = indx + incr if (indx < imax) igoto label
or
kndx = kndx + kncr if (kndx < kmax) kgoto label
See Also
loop_ge, loop_gt and loop_le.
Credits
Istvan Varga. New in Csound version 5.01
1191
loopseg
loopseg Generate control signal consisting of linear segments delimited by two or more specified points.
Description
Generate control signal consisting of linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.
Syntax
ksig loopseg kfreq, ktrig, ktime0, kvalue0 [, ktime1] [, kvalue1] \ [, ktime2] [, kvalue2] [...]
Performance
ksig -- Output signal. kfreq -- Repeat rate in Hz or fraction of Hz. ktrig -- If non-zero, retriggers the envelope from start (see trigger opcode), before the envelope cycle is completed. ktime0...ktimeN -- Times of points; expressed in fraction of a cycle. kvalue0...kvalueN -- Values of points loopseg opcode is similar to linseg, but the entire envelope is looped at kfreq rate. Notice that times are not expressed in seconds but in fraction of a cycle. Actually each duration represent is proportional to the other, and the entire cycle duration is proportional to the sum of all duration values. The sum of all duration is then rescaled according to kfreq argument. For example, considering an envelope made up of 3 segments, each segment having 100 as duration value, their sum will be 300. This value represents the total duration of the envelope, and is actually divided into 3 equal parts, a part for each segment. Actually, the real envelope duration in seconds is determined by kfreq. Again, if the envelope is made up of 3 segments, but this time the first and last segments have a duration of 50, whereas the central segment has a duration of 100 again, their sum will be 200. This time 200 represent the total duration of the 3 segments, so the central segment will be twice as long as the other segments. All parameters can be varied at k-rate. Negative frequency values are allowed, reading the envelope backward. ktime0 should always be set to 0, except if the user wants some special effect.
Examples
Here is an example of the loopseg opcode. It uses the file loopseg.csd [examples/loopseg.csd].
1192
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o loopseg.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 instr 1 kfreq line 1, p3, 20 klp loopseg kfreq, 0, 0, 0, 0.5, 30000, 1, 0 a1 oscil klp, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for five seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
lpshold loopxseg
Credits
Author: Gabriel Maldonado New in Version 4.13
1193
loopsegp
loopsegp Control signals based on linear segments.
Description
Generate control signal consisiting of linear segments delimited by two or more specified points. The entire envelope can be looped at time-variant rate. Each segment coordinate can also be varied at k-rate.
Syntax
ksig loopsegp kphase, kvalue0, kdur0, kvalue1 \ [, kdur1, ... , kdurN-1, kvalueN]
Performance
ksig - output signal kphase - point of the sequence read, expressed as a fraction of a cycle (0 to 1) kvalue0 ...kvalueN - values of points kdur0 ...kdurN-1 - duration of points expessed in fraction of a cycle loopsegp opcode is similar to loopseg; the only difference is that, instead of frequency, a time-variant phase is required. If you use phasor to get the phase value, you will have a behaviour identical to loopseg, but interesting results can be achieved when using phases having non-linear motions, making loopsegp more powerful and general than loopseg.
Examples
Here is an example of the loopsegp opcode. It uses the file loopsegp.csd [examples/loopsegp.csd].
1194
kph_freq phasor 2, iphase klow_freq line 200, p3, 100 kfreq loopsegp kph_freq, 400, 1, klow_freq, 1, 400 asig vco2 kamp, kfreq, 2, 0.5 outs asig, asig endin </CsInstruments> <CsScore> i1 0 3 0 i1 + . 0.50 </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. New in Csound 5. (Previously available only on CsoundAV)
1195
looptseg
looptseg Generate control signal consisting of exponential or linear segments delimited by two or more specified points.
Description
Generate control signal consisting of controllable exponential segments or linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.
Syntax
ksig looptseg kfreq, ktrig, ktime0, kvalue0, ktype, [, ktime1] [,ktype1] [, kvalue1] \ [, ktime2] [,ktype2] [, kvalue2] [...]
Performance
ksig -- Output signal. kfreq -- Repeat rate in Hz or fraction of Hz. ktrig -- If non-zero, retriggers the envelope from start (see trigger opcode), before the envelope cycle is completed. ktime0...ktimeN -- Times of points; expressed in fraction of a cycle. kvalue0...kvalueN -- Values of points ktype0...ktypeN -- shape of the envelope. If the value is 0 then the shap eis linear; otherwise it is an concave exponential (positive type) or a convex exponential (negative type). looptseg opcode is similar to transeg, but the entire envelope is looped at kfreq rate. Notice that times are not expressed in seconds but in fraction of a cycle. Actually each duration represent is proportional to the other, and the entire cycle duration is proportional to the sum of all duration values. The sum of all duration is then rescaled according to kfreq argument. For example, considering an envelope made up of 3 segments, each segment having 100 as duration value, their sum will be 300. This value represents the total duration of the envelope, and is actually divided into 3 equal parts, a part for each segment. Actually, the real envelope duration in seconds is determined by kfreq. Again, if the envelope is made up of 3 segments, but this time the first and last segments have a duration of 50, whereas the central segment has a duration of 100 again, their sum will be 200. This time 200 represent the total duration of the 3 segments, so the central segment will be twice as long as the other segments. All parameters can be varied at k-rate. Negative frequency values are allowed, reading the envelope backward. ktime0 should always be set to 0, except if the user wants some special effect.
Examples
Here is an example of the looptseg opcode. It uses the file looptseg.csd [examples/looptseg.csd].
1196
See Also
lpshold loopseg
Credits
Author: John ffitch New in Version 5.12
1197
loopxseg
loopxseg Generate control signal consisting of exponential segments delimited by two or more specified points.
Description
Generate control signal consisting of exponential segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.
Syntax
ksig loopxseg kfreq, ktrig, ktime0, kvalue0 [, ktime1] [, kvalue1] \ [, ktime2] [, kvalue2] [...]
Performance
ksig -- Output signal. kfreq -- Repeat rate in Hz or fraction of Hz. ktrig -- If non-zero, retriggers the envelope from start (see trigger opcode), before the envelope cycle is completed. ktime0...ktimeN -- Times of points; expressed in fraction of a cycle. kvalue0...kvalueN -- Values of points loopxseg opcode is similar to expseg, but the entire envelope is looped at kfreq rate. Notice that times are not expressed in seconds but in fraction of a cycle. Actually each duration represent is proportional to the other, and the entire cycle duration is proportional to the sum of all duration values. The sum of all duration is then rescaled according to kfreq argument. For example, considering an envelope made up of 3 segments, each segment having 100 as duration value, their sum will be 300. This value represents the total duration of the envelope, and is actually divided into 3 equal parts, a part for each segment. Actually, the real envelope duration in seconds is determined by kfreq. Again, if the envelope is made up of 3 segments, but this time the first and last segments have a duration of 50, whereas the central segment has a duration of 100 again, their sum will be 200. This time 200 represent the total duration of the 3 segments, so the central segment will be twice as long as the other segments. All parameters can be varied at k-rate. Negative frequency values are allowed, reading the envelope backward. ktime0 should always be set to 0, except if the user wants some special effect.
Examples
Here is an example of the loopxseg opcode. It uses the file loopxseg.csd [examples/loopxseg.csd].
1198
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o loopxseg.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 instr 1 kfreq line 1, p3, 20 klp loopxseg kfreq, 0, 0, 0, 0.5, 30000, 1, 0 a1 oscil klp, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for five seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
lpshold loopseg
Credits
Author: John ffitch New in Version 5.12
1199
lorenz
lorenz Implements the Lorenz system of equations.
Description
Implements the Lorenz system of equations. The Lorenz system is a chaotic-dynamic system which was originally used to simulate the motion of a particle in convection currents and simplified weather systems. Small differences in initial conditions rapidly lead to diverging values. This is sometimes expressed as the butterfly effect. If a butterfly flaps its wings in Australia, it will have an effect on the weather in Alaska. This system is one of the milestones in the development of chaos theory. It is useful as a chaotic audio source or as a low frequency modulation source.
Syntax
ax, ay, az lorenz ksv, krv, kbv, kh, ix, iy, iz, iskip [, iskipinit]
Initialization
ix, iy, iz -- the initial coordinates of the particle. iskip -- used to skip generated values. If iskip is set to 5, only every fifth value generated is output. This is useful in generating higher pitched tones. iskipinit (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
ksv -- the Prandtl number or sigma krv -- the Rayleigh number kbv -- the ratio of the length and width of the box in which the convection currents are generated kh -- the step size used in approximating the differential equation. This can be used to control the pitch of the systems. Values of .1-.001 are typical. The equations are approximated as follows: x = x + h*(s*(y - x)) y = y + h*(-x*z + r*x - y) z = z + h*(x*y - b*z)
Note
This algorithm uses internal non linear feedback loops which causes audio result to depend on the orchestra sampling rate. For example, if you develop a project with sr=48000Hz and if you want to produce an audio CD from it, you should record a file with sr=48000Hz and then downsample the file to 44100Hz using the srconv utility.
Examples
Here is an example of the lorenz opcode. It uses the file lorenz.csd [examples/lorenz.csd].
1201
aleft = aw2 + ay2 aright = aw2 - ay2 outs aleft, aright endin </CsInstruments> <CsScore> ; Table #1 a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for 5 seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
Credits
Author: Hans Mikelson February 1999 New in Csound version 3.53 Note added by Franois Pinot, August 2009
1202
lorisread
lorisread Imports a set of bandwidth-enhanced partials from a SDIF-format data file, applying control-rate frequency, amplitude, and bandwidth scaling envelopes, and stores the modified partials in memory.
Syntax
lorisread ktimpnt, ifilcod, istoreidx, kfreqenv, kampenv, kbwenv[, ifadetime]
Description
lorisread imports a set of bandwidth-enhanced partials from a SDIF-format data file, applying controlrate frequency, amplitude, and bandwidth scaling envelopes, and stores the modified partials in memory.
Initialization
ifilcod - integer or character-string denoting a control-file derived from reassigned bandwidth-enhanced analysis of an audio signal. An integer denotes the suffix of a file loris.sdif (e.g. loris.sdif.1); a characterstring (in double quotes) gives a filename, optionally a full pathname. If not a full pathname, the file is sought first in the current directory, then in the one given by the environment variable SADIR (if defined). The reassigned bandwidth-enhanced data file contains breakpoint frequency, amplitude, noisiness, and phase envelope values organized for bandwidth-enhanced additive resynthesis. The control data must conform to one of the SDIF formats that can be Loris stores partials in SDIF RBEP frames. Each RBEP frame contains one RBEP matrix, and each row in a RBEP matrix describes one breakpoint in a Loris partial. A RBEL frame containing one RBEL matrix describing the labeling of the partials may precede the first RBEP frame in the SDIF file. The RBEP and RBEL frame and matrix definitions are included in the SDIF file's header. In addition to RBEP frames, Loris can also read and write SDIF 1TRC frames. Since 1TRC frames do not represent bandwidth-enhancement or the exact timing of Loris breakpoints, their use is not recommended. 1TRC capabilities are provided to allow interchange with programs that are unable to handle RBEP frames. istoreidx, ireadidx, isrcidx, itgtidx are labels that identify a stored set of bandwidth-enhanced partials. lorisread imports partials from a SDIF file and stores them with the integer label istoreidx. lorismorph morphs sets of partials labeled isrcidx and itgtidx, and stores the resulting partials with the integer label istoreidx. lorisplay renders the partials stored with the label ireadidx. The labels are used only at initialization time, and may be reused without any cost or benefit in efficiency, and without introducing any interaction between instruments or instances. ifadetime (optional) - In general, partials exported from Loris begin and end at non-zero amplitude. In order to prevent artifacts, it is very often necessary to fade the partials in and out, instead of turning them abruptly on and off. Specification of a non-zero ifadetime causes partials to fade in at their onsets and to fade out at their terminations. This is achieved by adding two more breakpoints to each partial: one ifadetime seconds before the start time and another ifadetime seconds after the end time. (However, no breakpoint will be introduced at a time less than zero. If necessary, the onset fade time will be shortened.) The additional breakpoints at the partial onset and termination will have the same frequency and bandwidth as the first and last breakpoints in the partial, respectively, but their amplitudes will be zero. The phase of the new breakpoints will be extrapolated to preserve phase correctness. If no value is specified, ifadetime defaults to zero. Note that the fadetime may not be exact, since the partial parameter envelopes are sampled at the control rate (krate) and indexed by ktimpnt (see below), and not by real time.
1203
Performance
lorisread reads pre-computed Reassigned Bandwidth-Enhanced analysis data from a file stored in SDIF format, as described above. The passage of time through this file is specified by ktimpnt, which represents the time in seconds. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file. kfreqenv is a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. kampenv is a control-rate scale factor that is applied to all partial amplitude envelopes. kbwenv is a control-rate scale factor that is applied to all partial bandwidth or noisiness envelopes. The bandwidth-enhanced partial data is stored in memory with a specified label for future access by another generator.
Credits
This implementation of the Loris unit generators was written by Kelly Fitz ([email protected] [mailto:[email protected]]). It is patterned after a prototype implementation of the lorisplay unit generator written by Corbin Champion, and based on the method of Bandwidth-Enhanced Additive Synthesis and on the sound morphing algorithms implemented in the Loris library for sound modeling and manipulation. The opcodes were further adapted as a plugin for Csound 5 by Michael Gogins.
1204
lorismorph
lorismorph Morphs two stored sets of bandwidth-enhanced partials and stores a new set of partials representing the morphed sound. The morph is performed by linearly interpolating the parameter envelopes (frequency, amplitude, and bandwidth, or noisiness) of the bandwidth-enhanced partials according to control-rate frequency, amplitude, and bandwidth morphing functions.
Syntax
lorismorph isrcidx, itgtidx, istoreidx, kfreqmorphenv, kampmorphenv, kbwmorphenv
Description
lorismorph morphs two stored sets of bandwidth-enhanced partials and stores a new set of partials representing the morphed sound. The morph is performed by linearly interpolating the parameter envelopes (frequency, amplitude, and bandwidth, or noisiness) of the bandwidth-enhanced partials according to control-rate frequency, amplitude, and bandwidth morphing functions.
Initialization
istoreidx, ireadidx, isrcidx, itgtidx are labels that identify a stored set of bandwidth-enhanced partials. lorisread imports partials from a SDIF file and stores them with the integer label istoreidx. lorismorph morphs sets of partials labeled isrcidx and itgtidx, and stores the resulting partials with the integer label istoreidx. lorisplay renders the partials stored with the label ireadidx. The labels are used only at initialization time, and may be reused without any cost or benefit in efficiency, and without introducing any interaction between instruments or instances.
Performance
lorismorph generates a set of bandwidth-enhanced partials by morphing two stored sets of partials, the source and target partials, which may have been imported using lorisread, or generated by another unit generator, including another instance of lorismorph. The morph is performed by interpolating the parameters of corresponding (labeled) partials in the two source sounds. The sound morph is described by three control-rate morphing envelopes. kfreqmorphenv describes the interpolation of partial frequency values in the two source sounds. When kfreqmorphenv is 0, partial frequencies are obtained from the partials stored at isrcidx. When kfreqmorphenv is 1, partial frequencies are obtained from the partials at itgtidx. When kfreqmorphenv is between 0 and 1, the partial frequencies are interpolated between corresponding source and target partials. Interpolation of partial amplitudes and bandwidth (noisiness) coefficients are similarly described by kampmorphenv and kbwmorphenv.
Credits
This implementation of the Loris unit generators was written by Kelly Fitz ([email protected] [mailto:[email protected]]). It is patterned after a prototype implementation of the lorisplay unit generator written by Corbin Champion, and based on the method of Bandwidth-Enhanced Additive Synthesis and on the sound morphing algorithms implemented in the Loris library for sound modeling and manipulation. The opcodes were further adapted as a plugin for Csound 5 by Michael gogins.
1205
lorisplay
lorisplay renders a stored set of bandwidth-enhanced partials using the method of Bandwidth-Enhanced Additive Synthesis implemented in the Loris software, applying control-rate frequency, amplitude, and bandwidth scaling envelopes.
Syntax
ar lorisplay ireadidx, kfreqenv, kampenv, kbwenv
Description
lorisplay renders a stored set of bandwidth-enhanced partials using the method of Bandwidth-Enhanced Additive Synthesis implemented in the Loris software, applying control-rate frequency, amplitude, and bandwidth scaling envelopes.
Initialization
istoreidx, ireadidx, isrcidx, itgtidx are labels that identify a stored set of bandwidth-enhanced partials. lorisread imports partials from a SDIF file and stores them with the integer label istoreidx. lorismorph morphs sets of partials labeled isrcidx and itgtidx, and stores the resulting partials with the integer label istoreidx. lorisplay renders the partials stored with the label ireadidx. The labels are used only at initialization time, and may be reused without any cost or benefit in efficiency, and without introducing any interaction between instruments or instances.
Performance
lorisplay implements signal reconstruction using Bandwidth-Enhanced Additive Synthesis. The control data is obtained from a stored set of bandwidth-enhanced partials imported from an SDIF file using lorisread or constructed by another unit generator such as lorismorph. kfreqenv is a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. kampenv is a control-rate scale factor that is applied to all partial amplitude envelopes. kbwenv is a control-rate scale factor that is applied to all partial bandwidth or noisiness envelopes. The bandwidth-enhanced partial data is stored in memory with a specified label for future access by another generator.
Credits
This implementation of the Loris unit generators was written by Kelly Fitz ([email protected] [mailto:[email protected]]). It is patterned after a prototype implementation of the lorisplay unit generator written by Corbin Champion, and based on the method of Bandwidth-Enhanced Additive Synthesis and on the sound morphing algorithms implemented in the Loris library for sound modeling and manipulation. The opcodes were further adapted as a plugin for Csound 5 by Michael Gogins.
1206
loscil
loscil Read sampled sound from a table.
Description
Read sampled sound (mono or stereo) from a table, with optional sustain and release looping.
Syntax
ar1 [,ar2] loscil xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \ [, imod2] [, ibeg2] [, iend2]
Initialization
ifn -- function table number, typically denoting an sampled sound segment with prescribed looping points loaded using GEN01. The source file may be mono or stereo. ibas (optional) -- base frequency in Hz of the recorded sound. This optionally overrides the frequency given in the audio file, but is required if the file did not contain one. The default value is 261.626 Hz, i.e. middle C. (New in Csound 4.03). If this value is not known or not present, use 1 here and in kcps. imod1, imod2 (optional, default=-1) -- play modes for the sustain and release loops. A value of 1 denotes normal looping, 2 denotes forward & backward looping, 0 denotes no looping. The default value (-1) will defer to the mode and the looping points given in the source file. Make sure you select an appropriate mode if the file does not contain this information. ibeg1, iend1, ibeg2, iend2 (optional, dependent on mod1, mod2) -- begin and end points of the sustain and release loops. These are measured in sample frames from the beginning of the file, so will look the same whether the sound segment is monaural or stereo. If no loop points are specified, and a looping mode (imod1, imod2) is given, the file will be looped for the whole length.
Performance
ar1, ar2 -- the output at audio-rate. There is just ar1 for mono output. However, there is both ar1 and ar2 for stereo output. xamp -- the amplitude of the output signal. kcps -- the frequency of the output signal in cycles per second. loscil samples the ftable audio at a rate determined by kcps, then multiplies the result by xamp. The sampling increment for kcps is dependent on the table's base-note frequency ibas, and is automatically adjusted if the orchestra sr value differs from that at which the source was recorded. In this unit, ftable is always sampled with interpolation. If sampling reaches the sustain loop endpoint and looping is in effect, the point of sampling will be modified and loscil will continue reading from within that loop segment. Once the instrument has received a turnoff signal (from the score or from a MIDI noteoff event), the next sustain endpoint encountered will be ignored and sampling will continue towards the release loop end-point, or towards the last sample (henceforth to zeros). loscil is the basic unit for building a sampling synthesizer. Given a sufficient set of recorded piano tones, 1207
for example, this unit can resample them to simulate the missing tones. Locating the sound source nearest a desired pitch can be done via table lookup. Once a sampling instrument has begun, its turnoff point may be unpredictable and require an external release envelope; this is often done by gating the sampled audio with linenr, which will extend the duration of a turned-off instrument by a specific period while it implements a decay. If you want to loop the whole file, specify a looping mode in imod1 and do not enter any values for ibeg and iend.
Note
This is mono loscil:
a1 loscil 10000, 1, 1, 1 ,1
Examples
Here is an example of the loscil opcode. It uses the file loscil.csd [examples/loscil.csd], and beats.wav [examples/beats.wav].
1208
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 ; If you don't know the frequency of your audio file, ; set both the kcps and ibas parameters equal to 1. kcps = 1 ifn = 1 ibas = 1 a1 loscil kamp, kcps, ifn, ibas out a1 endin </CsInstruments> <CsScore> ; ; ; f Table #1: an audio file. Its table size is deferred, and format taken from the soundfile header. 1 0 0 1 "beats.wav" 0 0 0
; Play Instrument #1 for 6 seconds. ; This will loop the audio file several times. i 1 0 6 e </CsScore> </CsoundSynthesizer>
See Also
loscil3 and GEN01
Credits
Note about the mono/stereo difference was contributed by Rasmus Ekman. Example written by Kevin Conder.
1209
loscil3
loscil3 Read sampled sound from a table using cubic interpolation.
Description
Read sampled sound (mono or stereo) from a table, with optional sustain and release looping, using cubic interpolation.
Syntax
ar1 [,ar2] loscil3 xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \ [, imod2] [, ibeg2] [, iend2]
Initialization
ifn -- function table number, typically denoting an sampled sound segment with prescribed looping points loaded using GEN01. The source file may be mono or stereo. ibas (optional) -- base frequency in Hz of the recorded sound. This optionally overrides the frequency given in the audio file, but is required if the file did not contain one. The default value is 261.626 Hz, i.e. middle C. (New in Csound 4.03). If this value is not known or not present, use 1 here and in kcps. imod1, imod2 (optional, default=-1) -- play modes for the sustain and release loops. A value of 1 denotes normal looping, 2 denotes forward & backward looping, 0 denotes no looping. The default value (-1) will defer to the mode and the looping points given in the source file. Make sure you select an appropriate mode if the file does not contain this information. ibeg1, iend1, ibeg2, iend2 (optional, dependent on mod1, mod2) -- begin and end points of the sustain and release loops. These are measured in sample frames from the beginning of the file, so will look the same whether the sound segment is monaural or stereo. If no loop points are specified, and a looping mode (imod1, imod2) is given, the file will be looped for the whole length.
Performance
ar1, ar2 -- the output at audio-rate. There is just ar1 for mono output. However, there is both ar1 and ar2 for stereo output. xamp -- the amplitude of the output signal. kcps -- the frequency of the output signal in cycles per second. loscil3 is identical to loscil except that it uses cubic interpolation. New in Csound version 3.50.
1210
Use forward slashes: c:/music/samples/loop001.wav Use back-slash special characters, \\: c:\\music\\samples\\loop001.wav
Note
This is mono loscil3:
a1 loscil3 10000, 1, 1, 1, 1
Examples
Here is an example of the loscil3 opcode. It uses the file loscil3.csd [examples/loscil3.csd], and beats.wav [examples/beats.wav].
1211
<CsScore> ; ; ; f Table #1: an audio file. Its table size is deferred, and format taken from the soundfile header. 1 0 0 1 "beats.wav" 0 0 0
; Play Instrument #1 for 6 seconds. ; This will loop the drum pattern several times. i 1 0 6 e </CsScore> </CsoundSynthesizer>
See Also
loscil and GEN01
Credits
Note about the mono/stereo difference was contributed by Rasmus Ekman. Example written by Kevin Conder.
1212
loscilx
loscilx Loop oscillator.
Description
This file is currently a stub, but the syntax should be correct.
Syntax
ar1 [, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \ ar15, ar16] loscilx xamp, kcps, ifn \ [, iwsize, ibas, istrt, imod1, ibeg1, iend1]
See Also
sndload loscil
Credits
Written by Istvan Varga. 2006 New in Csound 5.03
1213
lowpass2
lowpass2 A resonant lowpass filter.
Description
Implementation of a resonant second-order lowpass filter.
Syntax
ares lowpass2 asig, kcf, kq [, iskip]
Initialization
iskip -- initial disposition of internal data space. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal to be filtered kcf -- cutoff or resonant frequency of the filter, measured in Hz kq -- Q of the filter, defined, for bandpass filters, as bandwidth/cutoff. kq should be between 1 and 500 lowpass2 is a second order IIR lowpass filter, with k-rate controls for cutoff frequency (kcf) and Q (kq). As kq is increased, a resonant peak forms around the cutoff frequency, transforming the lowpass filter response into a response that is similar to a bandpass filter, but with more low frequency energy. This corresponds to an increase in the magnitude and "sharpness" of the resonant peak. For high values of kq, a scaling function such as balance may be required. In practice, this allows for the simulation of the voltage-controlled filters of analog synthesizers, or for the creation of a pitch of constant amplitude while filtering white noise.
Examples
Here is an example of the lowpass2 opcode. It uses the file lowpass2.csd [examples/lowpass2.csd].
1214
; Orchestra file for resonant filter sweep of a sawtooth-like waveform. sr = 44100 kr = 2205 ksmps = 20 nchnls = 1 instr 1 idur ifreq iamp iharms = = = = p3 p4 p5 * .5 (sr*.4) / ifreq
; Sawtooth-like waveform asig gbuzz 1, ifreq, iharms, 1, .9, 1 ; Envelope to control filter cutoff kfreq linseg 1, idur * 0.5, 5000, idur * 0.5, 1 afilt lowpass2 asig,kfreq, 30
; Simple amplitude envelope kenv linseg 0, .1, iamp, idur -.2, iamp, .1, 0 out afilt * kenv endin </CsInstruments> <CsScore> /* Written by Sean Costello */ f1 0 8192 9 1 1 .25 i1 0 5 100 1000 i1 5 5 200 1000 e </CsScore> </CsoundSynthesizer>
Credits
Author: Sean Costello Seattle, Washington August 1999 New in Csound version 4.0
1215
lowres
lowres Another resonant lowpass filter.
Description
lowres is a resonant lowpass filter.
Syntax
ares lowres asig, kcutoff, kresonance [, iskip]
Initialization
iskip -- initial disposition of internal data space. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal kcutoff -- filter cutoff frequency point kresonance -- resonance amount lowres is a resonant lowpass filter derived from a Hans Mikelson orchestra. This implementation is much faster than implementing it in Csound language, and it allows kr lower than sr. kcutoff is not in Hz and kresonance is not in dB, so experiment for the finding best results.
Examples
Here is an example of the lowres opcode. It uses the file lowres.csd [examples/lowres.csd] and beats.wav [examples/beats.wav].
1216
; Instrument #1. instr 1 ; Use a nice sawtooth waveform. asig vco 5000, 440, 1 ; Vary the cutoff frequency from 30 to 300 Hz. kcutoff line 30, p3, 300 kresonance = 10 ; Apply the filter. a1 lowres asig, kcutoff, kresonance out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave for the vco opcode. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
lowresx
Credits
Author: Gabriel Maldonado (adapted by John ffitch) Italy Example written by Kevin Conder. New in Csound version 3.49
1217
lowresx
lowresx Simulates layers of serially connected resonant lowpass filters.
Description
lowresx is equivalent to more layers of lowres with the same arguments serially connected.
Syntax
ares lowresx asig, kcutoff, kresonance [, inumlayer] [, iskip]
Initialization
inumlayer -- number of elements in a lowresx stack. Default value is 4. There is no maximum. iskip -- initial disposition of internal data space. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal kcutoff -- filter cutoff frequency point kresonance -- resonance amount lowresx is equivalent to more layer of lowres with the same arguments serially connected. Using a stack of a larger number of filters allows a sharper cutoff. This is faster than using a larger number of instances of lowres in a Csound orchestra because only one initialization and k cycle are needed at time and the audio loop falls entirely inside the cache memory of processor. Based on an orchestra by Hans Mikelson
Examples
Here is an example of the lowresx opcode. It uses the file lowresx.csd [examples/lowresx.csd], and beats.wav [examples/beats.wav].
1218
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - play the sawtooth waveform through a ; stack of filters. instr 1 ; Use a nice sawtooth waveform. asig vco 5, 440, 1 ; Vary the cutoff frequency from 30 to 300 Hz. kcutoff line 30, p3, 600 kresonance = 3 inumlayer = 5 alr lowresx asig, kcutoff, kresonance, inumlayer ; It gets loud, so clip the output amplitude to 30,000. a1 clip alr, 1, 30000 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave for the vco opcode. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 4 e </CsScore> </CsoundSynthesizer>
See Also
lowres
Credits
Author: Gabriel Maldonado (adapted by John ffitch) Italy New in Csound version 3.49
1219
lpf18
lpf18 A 3-pole sweepable resonant lowpass filter.
Description
Implementation of a 3 pole sweepable resonant lowpass filter.
Syntax
ares lpf18 asig, kfco, kres, kdist
Performance
kfco -- the filter cutoff frequency in Hz. Should be in the range 0 to sr/2. kres -- the amount of resonance. Self-oscillation occurs when kres is approximately 1. Should usually be in the range 0 to 1, however, values slightly greater than 1 are possible for more sustained oscillation and an overdrive effect. kdist -- amount of distortion. kdist = 0 gives a clean output. kdist > 0 adds tanh() distortion controlled by the filter parameters, in such a way that both low cutoff and high resonance increase the distortion amount. Some experimentation is encouraged. lpf18 is a digital emulation of a 3 pole (18 dB/oct.) lowpass filter capable of self-oscillation with a builtin distortion unit. It is really a 3-pole version of moogvcf, retuned, recalibrated and with some performance improvements. The tuning and feedback tables use no more than 6 adds and 6 multiplies per control rate. The distortion unit, itself, is based on a modified tanh function driven by the filter controls.
Note
This filter requires that the input signal be normalized to one.
Examples
Here is an example of the lpf18 opcode. It uses the file lpf18.csd [examples/lpf18.csd].
1220
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Generate a sine waveform. ; Note that its amplitude (kamp) ranges from 0 to 1. kamp init 1 kcps init 440 knh init 3 ifn = 1 asine buzz kamp, kcps, knh, ifn ; Filter the sine waveform. ; Vary the cutoff frequency (kfco) from 300 to 3,000 Hz. kfco line 300, p3, 3000 kres init 0.8 kdist = p4 ivol = p5 aout lpf18 asine, kfco, kres, kdist out aout * ivol endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; different distortion and volumes to compensate i 1 0 4 0.2 30000 i 1 4.5 4 0.9 27000 e </CsScore> </CsoundSynthesizer>
Credits
Author: Josep M Comajuncosas Spain December 2000 Example written by Kevin Conder with help from Iain Duncan. Thanks goes to Iain for helping with the example. New in Csound version 4.10
1221
lpfreson
lpfreson Resynthesises a signal from the data passed internally by a previous lpread, applying formant shifting.
Description
Resynthesises a signal from the data passed internally by a previous lpread, applying formant shifting.
Syntax
ares lpfreson asig, kfrqratio
Performance
asig -- an audio driving function for resynthesis. kfrqratio -- frequency ratio. Must be greater than 0. lpfreson receives values internally produced by a leading lpread.lpread gets its values from the control file according to the input value ktimpnt (in seconds). If ktimpnt proceeds at the analysis rate, timenormal synthesis will result; proceeding at a faster, slower, or variable rate will result in time-warped synthesis. At each k-period, lpread interpolates between adjacent frames to more accurately determine the parameter values (presented as output) and the filter coefficient settings (passed internally to a subsequent lpreson). The error signal kerr (between 0 and 1) derived during predictive analysis reflects the deterministic/random nature of the analyzed source. This will emerge low for pitched (periodic) material and higher for noisy material. The transition from voiced to unvoiced speech, for example, produces an error signal value of about .3. During synthesis, the error signal value can be used to determine the nature of the lpreson driving function: for example, by arbitrating between pitched and non-pitched input, or even by determining a mix of the two. In normal speech resynthesis, the pitched input to lpreson is a wideband periodic signal or pulse train derived from a unit such as buzz, and the nonpitched source is usually derived from rand. However, any audio signal can be used as the driving function, the only assumption of the analysis being that it has a flat response. lpfreson is a formant shifted lpreson, in which kfrqratio is the (cps) ratio of shifted to original formant positions. This permits synthesis in which the source object changes its apparent acoustic size. lpfreson with kfrqratio = 1 is equivalent to lpreson. Generally, lpreson provides a means whereby the time-varying content and spectral shaping of a composite audio signal can be controlled by the dynamic spectral content of another. There can be any number of lpread/lpreson (or lpfreson) pairs in an instrument or in an orchestra; they can read from the same or different control files independently.
See Also
lpread, lpreson
1222
lphasor
lphasor Generates a table index for sample playback
Description
This opcode can be used to generate table index for sample playback (e.g. tablexkt).
Syntax
ares lphasor xtrns [, ilps] [, ilpe] [, imode] [, istrt] [, istor]
Initialization
ilps -- loop start. ilpe -- loop end (must be greater than ilps to enable looping). The default value of ilps and ilpe is zero. imode (optional: default = 0) -- loop mode. Allowed values are: 0: no loop 1: forward loop 2: backward loop 3: forward-backward loop istrt (optional: default = 0) -- The initial output value (phase). It must be less than ilpe if looping is enabled, but is allowed to be greater than ilps (i.e. you can start playback in the middle of the loop). istor (optional: default = 0) -- skip initialization if set to any non-zero value.
Performance
ares -- a raw table index in samples (same unit for loop points). Can be used as index with the table opcodes. xtrns -- transpose factor, expressed as a playback ratio. ares is incremented by this value, and wraps around loop points. For example, 1.5 means a fifth above, 0.75 means fourth below. It is not allowed to be negative.
Examples
Here is an example of the lphasor opcode. It uses the file lphasor.csd [examples/lphasor.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o lphashor.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Example by Jonathan Murphy Dec 2006 sr = ksmps nchnls instr 1 ifn = 1 ; table number ilen = nsamp(ifn) ; return actual number of samples in table itrns = 1 ; no transposition ilps = 0 ; loop starts at index 0 ilpe = ilen ; ends at value returned by nsamp above imode = 3 ; loop forwards & backwards istrt = 10000 ; commence playback at index 10000 samples ; lphasor provides index into f1 alphs lphasor itrns, ilps, ilpe, imode, istrt atab tablei alphs, ifn ; amplify signal atab = atab * 10000 out endin </CsInstruments> <CsScore> f 1 0 262144 1 "beats.wav" 0 4 1 i1 0 60 e </CsScore> </CsoundSynthesizer> atab 44100 = 10 = 1
Credits
Author: Istvan Varga January 2002 Example by: Jonathan Murphy New in version 4.18 Updated April 2002 and November 2002 by Istvan Varga
1224
lpinterp
lpslot, lpinterp Computes a new set of poles from the interpolation between two analysis.
Description
Computes a new set of poles from the interpolation between two analysis.
Syntax
lpinterp islot1, islot2, kmix
Initialization
islot1 -- slot where the first analysis was stored islot2 -- slot where the second analysis was stored kmix -- mix value between the two analysis. Should be between 0 and 1. 0 means analysis 1 only. 1 means analysis 2 only. Any value in between will produce interpolation between the filters. lpinterp computes a new set of poles from the interpolation between two analysis. The poles will be stored in the current lpslot and used by the next lpreson opcode.
Examples
Here is a typical orc using the opcodes:
ipower init 50000 ; Define sound generator ifreq init 440 asrc buzz ipower,ifreq,10,1 ktime line 0,p3,p3 lpslot 0 krmsr,krmso,kerr,kcps lpread lpslot 1 krmsr,krmso,kerr,kcps lpread kmix line 0,p3,1 lpinterp 0,1,kmix ares lpreson asrc aout balance ares,asrc out aout ; Define time lin ; Read square data poles ktime,"square.pol" ; Read triangle data poles ktime,"triangle.pol" ; Compute result of mixing ; and balance power
See Also
lpslot
Credits
Author: Gabriel Maldonado
1225
lposcil
lposcil Read sampled sound from a table with looping and high precision.
Description
Read sampled sound (mono or stereo) from a table, with looping, and high precision.
Syntax
ares lposcil kamp, kfreqratio, kloop, kend, ifn [, iphs]
Initialization
ifn -- function table number
Performance
kamp -- amplitude kfreqratio -- multiply factor of table frequency (for example: 1 = original frequency, 1.5 = a fifth up , .5 = an octave down) kloop -- start loop point (in samples) kend -- end loop point (in samples) lposcil (looping precise oscillator) allows varying at k-rate, the starting and ending point of a sample contained in a table (GEN01). This can be useful when reading a sampled loop of a wavetable, where repeat speed can be varied during the performance.
See Also
lposcil3, lposcila, lposcilsa, lposcilsa2
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.52
1226
lposcil3
lposcil3 Read sampled sound from a table with high precision and cubic interpolation.
Description
Read sampled sound (mono or stereo) from a table, with looping, and high precision. lposcil3 uses cubic interpolation.
Syntax
ares lposcil3 kamp, kfreqratio, kloop, kend, ifn [, iphs]
Initialization
ifn -- function table number
Performance
kamp -- amplitude kfreqratio -- multiply factor of table frequency (for example: 1 = original frequency, 1.5 = a fifth up , .5 = an octave down) kloop -- start loop point (in samples) kend -- end loop point (in samples) lposcil3 (looping precise oscillator) allows varying at k-rate, the starting and ending point of a sample contained in a table (GEN01). This can be useful when reading a sampled loop of a wavetable, where repeat speed can be varied during the performance.
See Also
lposcil
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.52
1227
lposcila
lposcila Read sampled sound from a table with looping and high precision.
Description
lposcila reads sampled sound from a table with looping and high precision.
Syntax
ar lposcila aamp, kfreqratio, kloop, kend, ift [,iphs]
Initialization
ift -- function table number iphs -- initial phase (in samples)
Performance
ar -- output signal aamp -- amplitude kfreqratio -- multiply factor of table frequency (for example: 1 = original frequency, 1.5 = a fifth up , .5 = an octave down) kloop -- start loop point (in samples) kend -- end loop point (in samples) lposcila is the same as lposcil, but has an audio-rate amplitude argument (instead of k-rate) to allow fast envelope transients.
See Also
lposcil, lposcilsa, lposcilsa2
Credits
Author: Gabriel Maldonado New in version 5.06
1228
lposcilsa
lposcilsa Read stereo sampled sound from a table with looping and high precision.
Description
lposcilsa reads stereo sampled sound from a table with looping and high precision.
Syntax
ar1, ar2 lposcilsa aamp, kfreqratio, kloop, kend, ift [,iphs]
Initialization
ift -- function table number iphs -- initial phase (in samples)
Performance
ar1, ar2 -- output signal aamp -- amplitude kfreqratio -- multiply factor of table frequency (for example: 1 = original frequency, 1.5 = a fifth up , .5 = an octave down) kloop -- start loop point (in samples) kend -- end loop point (in samples) lposcilsa is the same as lposcila, but works with stereo files loaded with GEN01.
See Also
lposcil, lposcila, lposcilsa2
Credits
Author: Gabriel Maldonado New in version 5.06
1229
lposcilsa2
lposcilsa2 Read stereo sampled sound from a table with looping and high precision.
Description
lposcilsa2 reads stereo sampled sound from a table with looping and high precision.
Syntax
ar1, ar2 lposcilsa2 aamp, kfreqratio, kloop, kend, ift [,iphs]
Initialization
ift -- function table number iphs -- initial phase (in samples)
Performance
ar1, ar2 -- output signal aamp -- amplitude kfreqratio -- multiply factor of table frequency (for example: 1 = original frequency, 2 = an octave up). Only integers are allowed kloop -- start loop point (in samples) kend -- end loop point (in samples) lposcilsa2 is the same as lposcilsa, but no interpolation is implemented and only works with integer kfreqratio values. Much faster than lposcilsa, it is mainly intended to be used with kfreqratio = 1, being in this case a fast substitute of soundin, since the soundfile must be entirely loaded in memory.
See Also
lposcil, lposcila, lposcilsa
Credits
Author: Gabriel Maldonado New in version 5.06
1230
lpread
lpread Reads a control file of time-ordered information frames.
Description
Reads a control file of time-ordered information frames.
Syntax
krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate]
Initialization
ifilcod -- integer or character-string denoting a control-file (reflection coefficients and four parameter values) derived from n-pole linear predictive spectral analysis of a source audio signal. An integer denotes the suffix of a file lp.m; a character-string (in double quotes) gives a filename, optionally a full pathname. If not fullpath, the file is sought first in the current directory, then in that of the environment variable SADIR (if defined). Memory usage depends on the size of the file, which is held entirely in memory during computation but shared by multiple calls (see also adsyn, pvoc). inpoles (optional, default=0) -- number of poles in the lpc analysis. It is required only when the control file does not have a header; it is ignored when a header is detected. ifrmrate (optional, default=0) -- frame rate per second in the lpc analysis. It is required only when the control file does not have a header; it is ignored when a header is detected.
Performance
lpread accesses a control file of time-ordered information frames, each containing n-pole filter coefficients derived from linear predictive analysis of a source signal at fixed time intervals (e.g. 1/100 of a second), plus four parameter values: krmsr -- root-mean-square (rms) of the residual of analysis krmso -- rms of the original signal kerr -- the normalized error signal kcps -- pitch in Hz ktimpnt -- The passage of time, in seconds, through the analysis file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file. lpread gets its values from the control file according to the input value ktimpnt (in seconds). If ktimpnt proceeds at the analysis rate, time-normal synthesis will result; proceeding at a faster, slower, or variable rate will result in time-warped synthesis. At each k-period, lpread interpolates between adjacent frames to more accurately determine the parameter values (presented as output) and the filter coefficient settings (passed internally to a subsequent lpreson). The error signal kerr (between 0 and 1) derived during predictive analysis reflects the deterministic/random nature of the analyzed source. This will emerge low for pitched (periodic) material and higher for 1231
noisy material. The transition from voiced to unvoiced speech, for example, produces an error signal value of about .3. During synthesis, the error signal value can be used to determine the nature of the lpreson driving function: for example, by arbitrating between pitched and non-pitched input, or even by determining a mix of the two. In normal speech resynthesis, the pitched input to lpreson is a wideband periodic signal or pulse train derived from a unit such as buzz, and the nonpitched source is usually derived from rand. However, any audio signal can be used as the driving function, the only assumption of the analysis being that it has a flat response. lpfreson is a formant shifted lpreson, in which kfrqratio is the (cps) ratio of shifted to original formant positions. This permits synthesis in which the source object changes its apparent acoustic size. lpfreson with kfrqratio = 1 is equivalent to lpreson. Generally, lpreson provides a means whereby the time-varying content and spectral shaping of a composite audio signal can be controlled by the dynamic spectral content of another. There can be any number of lpread/lpreson (or lpfreson) pairs in an instrument or in an orchestra; they can read from the same or different control files independently.
See Also
lpfreson, lpreson, LPANAL
1232
lpreson
lpreson Resynthesises a signal from the data passed internally by a previous lpread.
Description
Resynthesises a signal from the data passed internally by a previous lpread.
Syntax
ares lpreson asig
Performance
asig -- an audio driving function for resynthesis. lpreson receives values internally produced by a leading lpread.lpread gets its values from the control file according to the input value ktimpnt (in seconds). If ktimpnt proceeds at the analysis rate, timenormal synthesis will result; proceeding at a faster, slower, or variable rate will result in time-warped synthesis. At each k-period, lpread interpolates between adjacent frames to more accurately determine the parameter values (presented as output) and the filter coefficient settings (passed internally to a subsequent lpreson). The error signal kerr (between 0 and 1) derived during predictive analysis reflects the deterministic/random nature of the analyzed source. This will emerge low for pitched (periodic) material and higher for noisy material. The transition from voiced to unvoiced speech, for example, produces an error signal value of about .3. During synthesis, the error signal value can be used to determine the nature of the lpreson driving function: for example, by arbitrating between pitched and non-pitched input, or even by determining a mix of the two. In normal speech resynthesis, the pitched input to lpreson is a wideband periodic signal or pulse train derived from a unit such as buzz, and the nonpitched source is usually derived from rand. However, any audio signal can be used as the driving function, the only assumption of the analysis being that it has a flat response. lpfreson is a formant shifted lpreson, in which kfrqratio is the (cps) ratio of shifted to original formant positions. This permits synthesis in which the source object changes its apparent acoustic size. lpfreson with kfrqratio = 1 is equivalent to lpreson. Generally, lpreson provides a means whereby the time-varying content and spectral shaping of a composite audio signal can be controlled by the dynamic spectral content of another. There can be any number of lpread/lpreson (or lpfreson) pairs in an instrument or in an orchestra; they can read from the same or different control files independently.
See Also
lpfreson, lpread
1233
lpshold
lpshold Generate control signal consisting of held segments.
Description
Generate control signal consisting of held segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.
Syntax
ksig lpshold kfreq, ktrig, ktime0, kvalue0 [, ktime2] [, kvalue2] [...] [, ktime1] [, kvalue1] \
Performance
ksig -- Output signal kfreq -- Repeat rate in Hz or fraction of Hz ktrig -- If non-zero, retriggers the envelope from start (see trigger opcode), before the envelope cycle is completed. ktime0...ktimeN -- Times of points; expressed in fraction of a cycle kvalue0...kvalueN -- Values of points lpshold is similar to loopseg, but can generate only horizontal segments, i.e. holds values for each time interval placed between ktimeN and ktimeN+1. It can be useful, among other things, for melodic control, like old analog sequencers.
Examples
Here is an example of the lpshold opcode. It uses the file lpshold.csd [examples/lpshold.csd].
1234
; Instrument #1 instr 1 kfreq line 1, p3, 20 klp lpshold kfreq, 0, 0, 0, p3*0.25, 20000, p3*0.75, 0 a1 oscil klp, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for five seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
loopseg
Credits
Author: Gabriel Maldonado New in Version 4.13
1235
lpsholdp
lpsholdp Control signals based on held segments.
Description
Generate control signal consisiting of held segments delimited by two or more specified points. The entire envelope can be looped at time-variant rate. Each segment coordinate can also be varied at k-rate.
Syntax
ksig lpsholdp kphase, ktrig, ktime0, kvalue0 [, ktime2] [, kvalue2] [...] [, ktime1] [, kvalue1] \
Performance
ksig - output signal kphase kvalue0 ...kvalueN - values of points ktime0 ...ktimeN - times of points expessed in fraction of a cycle lpsholdp opcode is similar to lpshold; the only difference is that, instead of frequency, a time-variant phase is required. If you use a phasor to get the phase value, you will have a behaviour identical to lpshold, but interesting results can be achieved when using phases having non-linear motions, making lpsholdp more powerful and general than lpshold.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
1236
lpslot
lpslot Selects the slot to be use by further lp opcodes.
Description
Selects the slot to be use by further lp opcodes.
Syntax
lpslot islot
Initialization
islot -- number of slot to be selected.
Performance
lpslot selects the slot to be use by further lp opcodes. This is the way to load and reference several analyses at the same time.
Examples
Here is a typical orc using the opcodes:
ipower init 50000 ; Define sound generator ifreq init 440 asrc buzz ipower,ifreq,10,1 ktime line 0,p3,p3 lpslot 0 krmsr,krmso,kerr,kcps lpread lpslot 1 krmsr,krmso,kerr,kcps lpread kmix line 0,p3,1 lpinterp 0,1,kmix ares lpreson asrc aout balance ares,asrc out aout ; Define time lin ; Read square data poles ktime,"square.pol" ; Read triangle data poles ktime,"triangle.pol" ; Compute result of mixing ; and balance power
See Also
lpinterp
Credits
Author: Mark Resibois Brussels 1996
1237
1238
mac
mac Multiplies and accumulates a- and k-rate signals.
Description
Multiplies and accumulates a- and k-rate signals.
Syntax
ares mac asig1, ksig1 [, asig2] [, ksig2] [, asig3] [, ksig3] [...]
Performance
ksig1, etc. -- k-rate input signals asig1, etc. -- a-rate input signals mac multiplies and accumulates a- and k-rate signals. It is equivalent to: ares = asig1*ksig1 + asig2*ksig2 + asig3*ksig3 + ...
See Also
maca
Credits
Author: John ffitch University of Bath, Codemist, Ltd. Bath, UK May 1999 New in Csound version 3.54
1239
maca
maca Multiply and accumulate a-rate signals only.
Description
Multiply and accumulate a-rate signals only.
Syntax
ares maca asig1 , asig2 [, asig3] [, asig4] [, asig5] [...]
Performance
asig1, asig2, ... -- a-rate input signals maca multiplies and accumulates a-rate signals only. It is equivalent to: ares = asig1*asig2 + asig3*asig4 + asig5*asig6 + ...
See Also
mac
Credits
Author: John ffitch University of Bath, Codemist, Ltd. Bath, UK May 1999 New in Csound version 3.54
1240
madsr
madsr Calculates the classical ADSR envelope using the linsegr mechanism.
Description
Calculates the classical ADSR envelope using the linsegr mechanism.
Syntax
ares madsr iatt, idec, islev, irel [, idel] [, ireltim] kres madsr iatt, idec, islev, irel [, idel] [, ireltim]
Initialization
iatt -- duration of attack phase idec -- duration of decay islev -- level for sustain phase irel -- duration of release phase. idel -- period of zero before the envelope starts ireltim (optional, default=-1) -- Control release time after receiving a MIDI noteoff event. If less than zero, the longest release time given in the current instrument is used. If zero or more, the given value will be used for release time. Its default value is -1. (New in Csound 3.59 - not yet properly tested) Please note that the release time cannot be longer than 32767/kr seconds.
Performance
The envelope is in the range 0 to 1 and may need to be scaled further. The envelope may be described as:
1241
Picture of an ADSR envelope. The length of the sustain is calculated from the length of the note. This means adsr is not suitable for use with MIDI events. The opcode madsr uses the linsegr mechanism, and so can be used in MIDI applications. You can use other pre-made envelopes which start a release segment upon recieving a note off message, like linsegr and expsegr, or you can construct more complex envelopes using xtratim and release. Note that you don't need to use xtratim if you are using madsr, since the time is extended automatically.
Note
Times for iatt, idec and irel cannot be 0. If 0 is used, no envelope is generated. Use a very small value like 0.0001 if you need an instantaneous attack, decay or release.
Examples
Here is an example of the madsr opcode. It uses the file madsr.csd [examples/madsr.csd].
1242
; Instrument #1. instr 1 ; Attack time. iattack = 0.5 ; Decay time. idecay = 0 ; Sustain level. isustain = 1 ; Release time. irelease = 0.5 aenv madsr iattack, idecay, isustain, irelease a1 oscili 10000, 440, 1 out a1*aenv endin </CsInstruments> <CsScore> /* Written by Iain McCurdy */ ; Table #1, a sine wave. f 1 0 1024 10 1 ; Leave the score running for 6 seconds. f 0 6 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
linsegr, expsegr, envlpxr, mxadsr, madsr, xadsr expon, expseg, expsega line, linseg, xtratim
Credits
Author: John ffitch November 2002. Thanks to Rasmus Ekman, added documentation for the ireltim parameter. December 2002. Thanks to Iain McCurdy, added an example. December 2002. Thanks to Istvan Varga, added documentation about the maximum release time. New in Csound version 3.49.
1243
mandel
mandel Mandelbrot set
Description
Returns the number of iterations corresponding to a given point of complex plane by applying the Mandelbrot set formula.
Syntax
kiter, koutrig mandel ktrig, kx, ky, kmaxIter
Performance
kiter - number of iterations koutrig - output trigger signal ktrig - input trigger signal kx, ky - coordinates of a given point belonging to the complex plane kmaxIter - maximum iterations allowed mandel is an opcode that allows the use of the Mandelbrot set formula to generate an output that can be applied to any musical (or non-musical) parameter. It has two output arguments: kiter, that contains the iteration number of a given point, and koutrig, that generates a trigger 'bang' each time kiter changes. A new number of iterations is evaluated only when ktrig is set to a non-zero value. The coordinates of the complex plane are set in kx and ky, while kmaxIter contains the maximum number of iterations. Output values, which are integer numbers, can be mapped in any sorts of ways by the composer.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
1244
mandol
mandol An emulation of a mandolin.
Description
An emulation of a mandolin.
Syntax
ares mandol kamp, kfreq, kpluck, kdetune, kgain, ksize, ifn [, iminfreq]
Initialization
ifn -- table number containing the pluck wave form. The file mandpluk.aiff [examples/mandpluk.aiff] is suitable for this. It is also available at ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. iminfreq (optional, default=0) -- Lowest frequency to be played on the note. If it is omitted it is taken to be the same as the initial kfreq.
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kpluck -- The pluck position, in range 0 to 1. Suggest 0.4. kdetune -- The proportional detuning between the two strings. Suggested range 0.9 to 1. kgain -- the loop gain of the model, in the range 0.97 to 1. ksize -- The size of the body of the mandolin. Range 0 to 2.
Examples
Here is an example of the mandol opcode. It uses the file mandol.csd [examples/mandol.csd], and mandpluk.aiff [examples/mandpluk.aiff].
1245
</CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = p5 ; kfreq = 880 ; kpluck = 0.4 ; kdetune = 0.99 ; kgain = 0.99 ksize = p4 ; ifn = 1 ; ifreq = 220 a1 mandol kamp, 880, 0.4, 0.99, 0.99, ksize, 1, 220 out a1 endin </CsInstruments> <CsScore> ; Table #1: the "mandpluk.aiff" audio file f 1 0 8192 1 "mandpluk.aiff" 0 0 0 ; Play Instrument #1 for one second. i 1 0.5 1 2 45000 i 1 + 1 .3 10000 ;change volume to compensate e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK Example written by Kevin Conder. New in Csound version 3.47
1246
marimba
marimba Physical model related to the striking of a wooden block.
Description
Audio output is a tone related to the striking of a wooden block as found in a marimba. The method is a physical model developed from Perry Cook but re-coded for Csound.
Syntax
ares marimba kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec \ [, idoubles] [, itriples]
Initialization
ihrd -- the hardness of the stick used in the strike. A range of 0 to 1 is used. 0.5 is a suitable value. ipos -- where the block is hit, in the range 0 to 1. imp -- a table of the strike impulses. The file marmstk1.wav [examples/marmstk1.wav] is a suitable function from measurements and can be loaded with a GEN01 table. It is also available at ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. ivfn -- shape of vibrato, usually a sine table, created by a function idec -- time before end of note when damping is introduced idoubles (optional) -- percentage of double strikes. Default is 40%. itriples (optional) -- percentage of triple strikes. Default is 20%.
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the marimba opcode. It uses the file marimba.csd [examples/marimba.csd], and marmstk1.wav [examples/marmstk1.wav].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o marimba.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 ksmps = 128 nchnls = 2 ; Instrument #1. instr 1 ifreq = cpspch(p4) ihrd = 0.1 ipos = 0.561 imp = 1 kvibf = 6.0 kvamp = 0.05 ivibfn = 2 idec = 0.6 a1 marimba 20000, ifreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec, 20, 10 outs a1, a1 endin </CsInstruments> <CsScore> ; f ; f ; i i i i i i i i i i i i i i i i i i e </CsScore> </CsoundSynthesizer> Table #1, the "marmstk1.wav" audio file. 1 0 256 1 "marmstk1.wav" 0 0 0 Table #2, a sine wave for the vibrato. 2 0 128 10 1 Play Instrument #1 for one second. 1 0 1 8.09 1 + 0.5 8.00 1 + 0.5 7.00 1 + 0.25 8.02 1 + 0.25 8.01 1 + 0.25 7.09 1 + 0.25 8.02 1 + 0.25 8.01 1 + 0.25 7.09 1 + 0.3333 8.09 1 + 0.3333 8.02 1 + 0.3334 8.01 1 + 0.25 8.00 1 + 0.3333 8.09 1 + 0.3333 8.02 1 + 0.25 8.01 1 + 0.3333 7.00 1 + 0.3334 6.00
See Also
vibes
Credits
1248
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
1249
massign
massign Assigns a MIDI channel number to a Csound instrument.
Description
Assigns a MIDI channel number to a Csound instrument.
Syntax
massign ichnl, insnum[, ireset] massign ichnl, "insname"[, ireset]
Initialization
ichnl -- MIDI channel number (1-16). insnum -- Csound orchestra instrument number. If zero or negative, the channel is muted (i.e. it doesn't trigger a csound instrument, though information will still be received by opcodes like midiin). insname -- A string (in double-quotes) representing a named instrument. ireset -- If non-zero resets the controllers; default is to reset.
Performance
Assigns a MIDI channel number to a Csound instrument. Also useful to make sure a certain instrument (if its number is from 1 to 16) will not be triggered by midi noteon messages (if using something midiin to interpret midi information). In this case set insnum to 0 or a negative number. If ichan is set to 0, the value of insnum is used for all channels. This way you can route all MIDI channels to a single Csound instrument. You can also disable triggering of instruments from MIDI note events from all channels with the following line:
massign 0,0
This can be useful if you are doing all MIDI evaluation within Csound with an always on instrument(e.g. using midiin and turnon) to avoid doubling the instrument when a note is played.
See Also
ctrlinit
Credits
Author: Barry L. Vercoe - Mike Berry MIT, Cambridge, Mass. New in Csound version 3.47 1250
ireset parameter new in Csound5 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel range.
1251
max
max Produces a signal that is the maximum of any number of input signals.
Description
The max opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the maximum of all of the inputs. For a-rate signals, the inputs are compared one sample at a time (i.e. max does not scan an entire ksmps period of a signal for its local maximum as the max_k opcode does).
Syntax
amax max ain1 [, ain2] [, ain3] [, ain4] [...] kmax max kin1 [, kin2] [, kin3] [, kin4] [...]
Performance
ain1, ain2, ... -- a-rate signals to be compared. kin1, kin2, ... -- k-rate signals to be compared.
See Also
min, maxabs, minabs, maxaccum, minaccum, maxabsaccum, minabsaccum, max_k
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1252
maxabs
maxabs Produces a signal that is the maximum of the absolute values of any number of input signals.
Description
The maxabs opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the maximum of all of the inputs. It is identical to the max opcode except that it takes the absolute value of each input before comparing them. Therefore, the output is always non-negative. For a-rate signals, the inputs are compared one sample at a time (i.e. maxabs does not scan an entire ksmps period of a signal for its local maximum as the max_k opcode does).
Syntax
amax maxabs ain1 [, ain2] [, ain3] [, ain4] [...] kmax maxabs kin1 [, kin2] [, kin3] [, kin4] [...]
Performance
ain1, ain2, ... -- a-rate signals to be compared. kin1, kin2, ... -- k-rate signals to be compared.
See Also
minabs, max, min, maxaccum, minaccum, maxabsaccum, minabsaccum, max_k
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1253
maxabsaccum
maxabsaccum Accumulates the maximum of the absolute values of audio signals.
Description
maxabsaccum compares two audio-rate variables and stores the maximum of their absolute values into the first.
Syntax
maxabsaccum aAccumulator, aInput
Performance
aAccumulator -- audio variable to store the maximum value aInput -- signal that aAccumulator is compared to The maxabsaccum opcode is designed to accumulate the maximum value from among many audio signals that may be in different note instances, different channels, or otherwise cannot all be compared at once using the maxabs opcode. maxabsaccum is identical to maxaccum except that it takes the absolute value of aInput before the comparison. Its semantics are similar to vincr since aAccumulator is used as both an input and an output variable, except that maxabsaccum keeps the maximum absolute value instead of adding the signals together. maxabsaccum performs the following operation on each pair of samples:
aAccumulator will usually be a global audio variable. At the end of any given computation cycle (k-period), after its value is read and used in some way, the accumulator variable should usually be reset to zero (perhaps by using the clear opcode). Clearing to zero is sufficient for maxabsaccum, unlike the maxaccum opcode.
See Also
minabsaccum, maxaccum, minaccum, max, min, maxabs, minabs, vincr, clear
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1254
maxaccum
maxaccum Accumulates the maximum value of audio signals.
Description
maxaccum compares two audio-rate variables and stores the maximum value between them into the first.
Syntax
maxaccum aAccumulator, aInput
Performance
aAccumulator -- audio variable to store the maximum value aInput -- signal that aAccumulator is compared to The maxaccum opcode is designed to accumulate the maximum value from among many audio signals that may be in different note instances, different channels, or otherwise cannot all be compared at once using the max opcode. Its semantics are similar to vincr since aAccumulator is used as both an input and an output variable, except that maxaccum keeps the maximum value instead of adding the signals together. maxaccum performs the following operation on each pair of samples:
aAccumulator will usually be a global audio variable. At the end of any given computation cycle (k-period), after its value is read and used in some way, the accumulator variable should usually be reset to zero (perhaps by using the clear opcode). Care must be taken however if aInput is negative at any point, in which case the accumulator should be initialized and reset to some large enough negative value that will always be less than the input signals to which it is compared.
See Also
minaccum, maxabsaccum, minabsaccum, max, min, maxabs, minabs, vincr, clear
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1255
maxalloc
maxalloc Limits the number of allocations of an instrument.
Description
Limits the number of allocations of an instrument.
Syntax
maxalloc insnum, icount maxalloc Sinsname, icount
Initialization
insnum -- instrument number Sinsname -- instrument name icount -- number of instrument allocations
Performance
maxalloc limits the number of simultaneous instances (notes) of an instrument. Any score events after the maximum has been reached, are ignored. All instances of maxalloc must be defined in the header section, not in the instrument body.
Examples
Here is an example of the maxalloc opcode. It uses the file maxalloc.csd [examples/maxalloc.csd].
1256
; Limit Instrument #1 to three instances. maxalloc 1, 3 ; Instrument #1 instr 1 ; Generate a waveform, get the cycles per second from the 4th p-field. a1 oscil 6500, p4, 1 out a1 endin </CsInstruments> <CsScore> ; Just generate a nice, ordinary sine wave. f 1 0 32768 10 1 ; ; i i i i i e Play five instances of Instrument #1 for one second. Note that 4th p-field contains cycles per second. 1 0 1 220 1 0 1 440 1 0 1 880 1 0 1 1320 1 0 1 1760
</CsScore> </CsoundSynthesizer>
See Also
cpuprc, prealloc
Credits
Author: Gabriel Maldonado Italy July 1999 Example written by Kevin Conder. New in Csound version 3.57
1257
max_k
max_k Local maximum (or minimum) value of an incoming asig signal
Description
max_k outputs the local maximum (or minimum) value of the incoming asig signal, checked in the time interval between ktrig has become true twice.
Syntax
knumkout max_k asig, ktrig, itype
Initialization
itype - itype determinates the behaviour of max_k (see below)
Performance
asig - incoming (input) signal ktrig - trigger signal max_k outputs the local maximum (or minimum) value of the incoming asig signal, checked in the time interval between ktrig has become true twice. itype determinates the behaviour of max_k: 1 - absolute maximum (sign of negative values is changed to positive before evaluation) 2 - actual maximum 3 - actual minimum 4 - calculate average value of asig in the time interval This opcode can be useful in several situations, for example to implement a vu-meter.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
1258
mclock
mclock Sends a MIDI CLOCK message.
Description
Sends a MIDI CLOCK message.
Syntax
mclock ifreq
Initialization
ifreq -- clock message frequency rate in Hz
Performance
Sends a MIDI CLOCK message (0xF8) every 1/ifreq seconds. So ifreq is the frequency rate of CLOCK message in Hz.
See Also
mrtmsg
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47
1259
mdelay
mdelay A MIDI delay opcode.
Description
A MIDI delay opcode.
Syntax
mdelay kstatus, kchan, kd1, kd2, kdelay
Performance
kstatus -- status byte of MIDI message to be delayed kchan -- MIDI channel (1-16) kd1 -- first MIDI data byte kd2 -- second MIDI data byte kdelay -- delay time in seconds Each time that kstatus is other than zero, mdelay outputs a MIDI message to the MIDI out port after kdelay seconds. This opcode is useful in implementing MIDI delays. Several instances of mdelay can be present in the same instrument with different argument values, so complex and colorful MIDI echoes can be implemented. Further, the delay time can be changed at k-rate.
Examples
Here is an example of the mdelay opcode. It uses the file mdelay.csd [examples/mdelay.csd].
kstatus init 0
1260
ifund ivel
noteondur
;make four delay lines mdelay mdelay mdelay mdelay endin </CsInstruments> <CsScore> ; Dummy ftable f 0 60 </CsScore> </CsoundSynthesizer> kstatus,1,ifund+2, kstatus,1,ifund+4, kstatus,1,ifund+6, kstatus,1,ifund+8, ivel,idel1 ivel,idel2 ivel,idel3 ivel,idel4
Credits
Author: Gabriel Maldonado Italy November 1998 New in Csound version 3.492
1261
median
median A median filter, a variant FIR lowpass filter.
Description
Implementation of a median filter.
Syntax
ares median asig, ksize, imaxsize [, iskip]
Initialization
imaxsize -- the maximun size of the window used to select the data. iskip -- initial disposition of internal data space. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal to be filtered ksize -- size of the window over which the input is to be filtered. It must not exceed the maximum window size; if it does it is truncated. median is a simple filter that retuns the median value of the last ksize values. It has a lowpass action. The efficiency decreases as the window size increases.
Examples
Here is an example of the median opcode. It uses the file median.csd [examples/median.csd].
1262
e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch University of Bath May 2010 New in Csound version 5.13
1263
mediank
mediank A median filter, a variant FIR lowpass filter.
Description
Implementation of a median filter.
Syntax
kres mediank kin, ksize, imaxsize [, iskip]
Initialization
imaxsize -- the maximun size of the window used to select the data. iskip -- initial disposition of internal data space. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kin -- krate value to be filtered ksize -- size of the window over which the input is to be filtered. It must not exceed the maximum window size; if it does it is truncated. mediank is a simple filter that retuns the median value of the last ksize values. It has a lowpass action. The efficiency decreases as the window size increases.
Examples
Here is an example of the mediank opcode. It uses the file mediank.csd [examples/mediank.csd].
1264
Credits
Author: John ffitch University of Bath May 2010 New in Csound version 5.13
1265
metro
metro Trigger Metronome
Description
Generate a metronomic signal to be used in any circumstance an isochronous trigger is needed.
Syntax
ktrig metro kfreq [, initphase]
Initialization
initphase - initial phase value (in the 0 to 1 range)
Performance
ktrig - output trigger signal kfreq - frequency of trigger bangs in cps metro is a simple opcode that outputs a sequence of isochronous bangs (that is 1 values) each 1/kfreq seconds. Trigger signals can be used in any circumstance, mainly to temporize realtime algorithmic compositional structures.
Note
metro will produce a trigger signal of 1 when its phase is exactly 0 or 1. If you want to skip the initial trigger, use a very small value like 0.00000001.
Examples
Here is an example of the metro opcode. It uses the file metro.csd [examples/metro.csd]
1266
Credits
Written by Gabriel Maldonado. Example written by Andrs Cabrera. New in Csound 5 (Previously available only on CsoundAV)
1267
midic14
midic14 Allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range.
Description
Allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range.
Syntax
idest midic14 ictlno1, ictlno2, imin, imax [, ifn] kdest midic14 ictlno1, ictlno2, kmin, kmax [, ifn]
Initialization
idest -- output signal ictln1o -- most-significant byte controller number (0-127) ictlno2 -- least-significant byte controller number (0-127) imin -- user-defined minimum floating-point value of output imax -- user-defined maximum floating-point value of output ifn (optional) -- table to be read when indexing is required. Table must be normalized. Output is scaled according to imin and imax values.
Performance
kdest -- output signal kmin -- user-defined minimum floating-point value of output kmax -- user-defined maximum floating-point value of output midic14 (i- and k-rate 14 bit MIDI control) allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range. The minimum and maximum values can be varied at k-rate. It can use optional interpolated table indexing. It requires two MIDI controllers as input.
Note
Please note that the midic family of opcodes are designed for MIDI triggered events, and don't require a channel number since they will respond to the same channel as the one that triggered the instrument (see massign). However they will crash if called from a score driven event.
See Also
ctrl7, ctrl14, ctrl21, initc7, initc14, initc21, midic7, midic21 1268
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct controller number range.
1269
midic21
midic21 Allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range.
Description
Allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range.
Syntax
idest midic21 ictlno1, ictlno2, ictlno3, imin, imax [, ifn] kdest midic21 ictlno1, ictlno2, ictlno3, kmin, kmax [, ifn]
Initialization
idest -- output signal ictln1o -- most-significant byte controller number (0-127) ictlno2 -- mid-significant byte controller number (0-127) ictlno3 -- least-significant byte controller number (0-127) imin -- user-defined minimum floating-point value of output imax -- user-defined maximum floating-point value of output ifn (optional) -- table to be read when indexing is required. Table must be normalized. Output is scaled according to the imin and imax values.
Performance
kdest -- output signal kmin -- user-defined minimum floating-point value of output kmax -- user-defined maximum floating-point value of output midic21 (i- and k-rate 21 bit MIDI control) allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range. Minimum and maximum values can be varied at k-rate. It can use optional interpolated table indexing. It requires three MIDI controllers as input.
Note
Please note that the midic family of opcodes are designed for MIDI triggered events, and don't require a channel number since they will respond to the same channel as the one that triggered the instrument (see massign). However they will crash if called from a score driven event.
See Also
1270
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct controller number range.
1271
midic7
midic7 Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.
Description
Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.
Syntax
idest midic7 ictlno, imin, imax [, ifn] kdest midic7 ictlno, kmin, kmax [, ifn]
Initialization
idest -- output signal ictlno -- MIDI controller number (0-127) imin -- user-defined minimum floating-point value of output imax -- user-defined maximum floating-point value of output ifn (optional) -- table to be read when indexing is required. Table must be normalized. Output is scaled according to the imin and imax values.
Performance
kdest -- output signal kmin -- user-defined minimum floating-point value of output kmax -- user-defined maximum floating-point value of output midic7 (i- and k-rate 7 bit MIDI control) allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range. It also allows optional non-interpolated table indexing. In midic7 minimum and maximum values can be varied at k-rate.
Note
Please note that the midic family of opcodes are designed for MIDI triggered events, and don't require a channel number since they will respond to the same channel as the one that triggered the instrument (see massign). However they will crash if called from a score driven event.
See Also
ctrl7, ctrl14, ctrl21, initc7, initc14, initc21, midic14, midic21
1272
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct controller number range.
1273
midichannelaftertouch
midichannelaftertouch Gets a MIDI channel's aftertouch value.
Description
midichannelaftertouch is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midichannelaftertouch xchannelaftertouch [, ilow] [, ihigh]
Initialization
ilow (optional) -- optional low value after rescaling, defaults to 0. ihigh (optional) -- optional high value after rescaling, defaults to 127.
Performance
xchannelaftertouch -- returns the MIDI channel aftertouch during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the value of xchannelaftertouch with the corresponding value from MIDI input. If the instrument was NOT activated by MIDI input, the value of xchannelaftertouch remains unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of the midichannelaftertouch opcode. It uses the file midichannelaftertouch.csd [examples/midichannelaftertouch.csd].
1274
See Also
midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1275
midichn
midichn Returns the MIDI channel number from which the note was activated.
Description
midichn returns the MIDI channel number (1 - 16) from which the note was activated. In the case of score notes, it returns 0.
Syntax
ichn midichn
Initialization
ichn -- channel number. If the current note was activated from score, it is set to zero.
Examples
Here is a simple example of the midichn opcode. It uses the file midichn.csd [examples/midichn.csd].
1276
Here is an advanced example of the midichn opcode. It uses the file midichn_advanced.csd [examples/ midichn_advanced.csd]. Don't forget that you must include the -F flag when using an external MIDI file like midichn_advanced.mid.
; note counter
</CsScore>
1277
</CsoundSynthesizer>
See Also
pgmassign
Credits
Author: Istvan Varga May 2002 The simple example was written by Kevin Conder. New in version 4.20
1278
midicontrolchange
midicontrolchange Gets a MIDI control change value.
Description
midicontrolchange is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midicontrolchange xcontroller, xcontrollervalue [, ilow] [, ihigh]
Initialization
ilow (optional) -- optional low value after rescaling, defaults to 0. ihigh (optional) -- optional high value after rescaling, defaults to 127.
Performance
xcontroller -- specifies a MIDI controller number (0-127). xcontrollervalue -- returns the value of the MIDI controller during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of the xcontroller and xcontrollervalue with the corresponding values from MIDI input. If the instrument was NOT activated by MIDI input, the values of xcontroller and xcontrollervalue remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
See Also
midichannelaftertouch, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange 1279
Credits
Author: Michael Gogins New in version 4.20 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1280
midictrl
midictrl Get the current value (0-127) of a specified MIDI controller.
Description
Get the current value (0-127) of a specified MIDI controller.
Syntax
ival midictrl inum [, imin] [, imax] kval midictrl inum [, imin] [, imax]
Initialization
inum -- MIDI controller number (0-127) imin, imax -- set minimum and maximum limits on values obtained.
Performance
Get the current value (0-127) of a specified MIDI controller.
Warning
midictrl should only be used in notes that were triggered from MIDI, so that an associated channel number is available. For notes activated from the score, line events, or orchestra, the ctrl7 opcode that takes an explicit channel number should be used instead.
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Thanks goes to Rasmus Ekman for pointing out the correct controller number range.
1281
mididefault
mididefault Changes values, depending on MIDI activation.
Description
mididefault is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
mididefault xdefault, xvalue
Performance
xdefault -- specifies a default value that will be used during MIDI activation. xvalue -- overwritten by xdefault during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode will overwrite the value of xvalue with the value of xdefault. If the instrument was NOT activated by MIDI input, xvalue will remain unchanged. This enables score pfields to receive a default value during MIDI activation, and score values otherwise.
See Also
midichannelaftertouch, midicontrolchange, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins New in version 4.20
1282
midiin
midiin Returns a generic MIDI message received by the MIDI IN port.
Description
Returns a generic MIDI message received by the MIDI IN port
Syntax
kstatus, kchan, kdata1, kdata2 midiin
Performance
kstatus -- the type of MIDI message. Can be: 128 (note off) 144 (note on) 160 (polyphonic aftertouch) 176 (control change) 192 (program change) 208 (channel aftertouch) 224 (pitch bend 0 if no MIDI message are pending in the MIDI IN buffer kchan -- MIDI channel (1-16) kdata1, kdata2 -- message-dependent data values midiin has no input arguments, because it reads at the MIDI in port implicitly. It works at k-rate. Normally (i.e., when no messages are pending) kstatus is zero, only when MIDI data are present in the MIDI IN buffer, is kstatus set to the type of the relevant messages.
Note
Be careful when using midiin in low numbered instruments, since a MIDI note will launch additional instances of the instrument, resulting in duplicate events and weird behaviour. Use massign to direct MIDI note on messages to a different instrument or to disable triggering of instruments from MIDI.
Examples
Here is an example of the midiin opcode. It uses the file midiin.csd [examples/midiin.csd]. 1283
; Example by schwaahed 2006 massign pgmassign instr 130 init init 0 0 midiin 0, 130 0, 130 ; make sure that all channels ; and programs are assigned to test instr
knotelength knoteontime
if (kstatus == 128) then knoteofftime times knotelength = knoteofftime - knoteontime printks "kstatus= %d, kchan = %d, \\tnote# = %d, velocity = %d \\tNote OFF\\t%f %f\\n", 0, kstatus, kc elseif (kstatus == 144) then knoteontime times printks "kstatus= %d, kchan = %d, \\tnote#
elseif (kstatus == 160) then printks "kstatus= %d, kchan = %d, \\tkdata1 = %d, kdata2 = %d \\tPolyphonic Aftertouch\\n", 0, kstatus,
elseif (kstatus == 176) then printks "kstatus= %d, kchan = %d, \\t CC = %d, value = %d \\tControl Change\\n", 0, kstatus, kchan, kda
elseif (kstatus == 192) then printks "kstatus= %d, kchan = %d, \\tkdata1 = %d, kdata2 = %d \\tProgram Change\\n", 0, kstatus, kchan,
elseif (kstatus == 208) then printks "kstatus= %d, kchan = %d, \\tkdata1 = %d, kdata2 = %d \\tChannel Aftertouch\\n", 0, kstatus, k
elseif (kstatus == 224) then printks "kstatus= %d, kchan = %d, \\t ( data1 , kdata2 ) = ( %d, %d )\\tPitch Bend\\n", 0, kstatus, kch endif endin </CsInstruments> <CsScore> i130 0 3600 e </CsScore> </CsoundSynthesizer>
Credits
1284
1285
midinoteoff
midinoteoff Gets a MIDI noteoff value.
Description
midinoteoff is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midinoteoff xkey, xvelocity
Performance
xkey -- returns MIDI key during MIDI activation, remains unchanged otherwise. xvelocity -- returns MIDI velocity during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of the xkey and xvelocity with the corresponding values from MIDI input. If the instrument was NOT activated by MIDI input, the values of xkey and xvelocity remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of [examples/midinoteoff.csd]. the midinoteoff opcode. It uses the file midinoteoff.csd
1286
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midinoteoff.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kkey init 0 kvelocity init 0 midinoteoff kkey, kvelocity ; Display the key value when it changes. printk2 kkey endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1287
midinoteoncps
midinoteoncps Gets a MIDI note number as a cycles-per-second frequency.
Description
midinoteoncps is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midinoteoncps xcps, xvelocity
Performance
xcps -- returns MIDI key translated to cycles per second during MIDI activation, remains unchanged otherwise. xvelocity -- returns MIDI velocity during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of xcps and xvelocity with the corresponding values from MIDI input. If the instrument was NOT activated by MIDI input, the values of xcps and xvelocity remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of the midinoteoncps opcode. It uses the file midinoteoncps.csd [examples/ midinoteoncps.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midinoteoncps.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kcps init 0 kvelocity init 0 midinoteoncps kcps, kvelocity ; Display the cycles-per-second value when it changes. printk2 kcps endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1289
midinoteonkey
midinoteonkey Gets a MIDI note number value.
Description
midinoteonkey is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midinoteonkey xkey, xvelocity
Performance
xkey -- returns MIDI key during MIDI activation, remains unchanged otherwise. xvelocity -- returns MIDI velocity during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of xkey and xvelocity with the corresponding values from MIDI input. If the instrument was NOT activated by MIDI input, the values of xkey and xvelocity remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of the midinoteonkey opcode. It uses the file midinoteonkey.csd [examples/ midinoteonkey.csd].
1290
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midinoteonkey.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kkey init 0 kvelocity init 0 midinoteonkey kkey, kvelocity ; Display the key value when it changes. printk2 kkey endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1291
midinoteonoct
midinoteonoct Gets a MIDI note number value as octave-point-decimal value.
Description
midinoteonoct is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midinoteonoct xoct, xvelocity
Performance
xoct -- returns MIDI key translated to linear octaves during MIDI activation, remains unchanged otherwise. xvelocity -- returns MIDI velocity during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of xoct and xvelocity with the corresponding value from MIDI input. If the instrument was NOT activated by MIDI input, the values of xoct and xvelocity remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of the midinoteonoct opcode. It uses the file midinoteonoct.csd [examples/midinoteonoct.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midinoteonoct.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 koct init 0 kvelocity init 0 midinoteonoct koct, kvelocity ; Display the octave-point-decimal value when it changes. printk2 koct endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1293
midinoteonpch
midinoteonpch Gets a MIDI note number as a pitch-class value.
Description
midinoteonpch is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midinoteonpch xpch, xvelocity
Performance
xpch -- returns MIDI key translated to octave.pch during MIDI activation, remains unchanged otherwise. xvelocity -- returns MIDI velocity during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of xpch and xvelocity with the corresponding value from MIDI input. If the instrument was NOT activated by MIDI input, the values of xpch and xvelocity remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of the midinoteonpch opcode. It uses the file midinoteonpch.csd [examples/ midinoteonpch.csd].
1294
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midinoteonpch.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kpch init 0 kvelocity init 0 midinoteonpch kpch, kvelocity ; Display the pitch-class value when it changes. printk2 kpch endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midipitchbend, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1295
midion
midion Generates MIDI note messages at k-rate.
Description
Generates MIDI note messages at k-rate.
Syntax
midion kchn, knum, kvel
Performance
kchn -- MIDI channel number (1-16) knum -- note number (0-127) kvel -- velocity (0-127) midion (k-rate note on) plays MIDI notes with current kchn, knum and kvel. These arguments can be varied at k-rate. Each time the MIDI converted value of any of these arguments changes, last MIDI note played by current instance of midion is immediately turned off and a new note with the new argument values is activated. This opcode, as well as moscil, can generate very complex melodic textures if controlled by complex k-rate signals. Any number of midion opcodes can appear in the same Csound instrument, allowing a counterpointstyle polyphony within a single instrument.
Examples
Here is a simple example of the midion opcode. It uses the file midion_simple.csd [examples/midion_simple.csd].
1296
nchnls = 2 ; Example by Giorgio Zucco 2007 instr 1 ;Triggered by MIDI notes on channel 1 ifund notnum ivel veloc knote1 init ifund knote2 init ifund + 3 knote3 init ifund + 5 ;minor ;Needs midion midion midion endin </CsInstruments> <CsScore> ; Dummy ftable f0 60 </CsScore> </CsoundSynthesizer> chord on MIDI out channel 1 something plugged to csound's MIDI output 1, knote1,ivel 1, knote2,ivel 1, knote3,ivel
Here is another example of the midion opcode. It uses the file midion_scale.csd [examples/midion_scale.csd].
Example 371. Example of the midion opcode to generate random notes from a scale.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags. This example generates random notes from a given scale for every note received on the MIDI input. It generates MIDI notes on csound's MIDI output, so be sure to connect something.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d -M0 -Q1 ;;;RT audio I/O with MIDI in </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; Example by Giorgio Zucco 2007 instr 1 ; Triggered by MIDI notes on channel 1 ivel veloc
krate = 8 iscale = 100 ;f ; Random sequence from table f100 krnd randh int(14),krate,-1 knote table abs(krnd),iscale ; Generates random notes from the scale on ftable 100 ; on channel 1 of csound's MIDI output midion 1,knote,ivel
1297
See Also
moscil, midion2, noteon, noteoff, noteondur, noteondur2
Credits
Author: Gabriel Maldonado Italy May 1997 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1298
midion2
midion2 Sends noteon and noteoff messages to the MIDI OUT port.
Description
Sends noteon and noteoff messages to the MIDI OUT port when triggered by a value different than zero.
Syntax
midion2 kchn, knum, kvel, ktrig
Performance
kchn -- MIDI channel (1-16) knum -- MIDI note number (0-127) kvel -- note velocity (0-127) ktrig -- trigger input signal (normally 0) Similar to midion, this opcode sends noteon and noteoff messages to the MIDI out port, but only when ktrig is non-zero. This opcode is can work together with the output of the trigger opcode.
See Also
moscil, midion, noteon, noteoff, noteondur, noteondur2
Credits
Author: Gabriel Maldonado Italy 1998 New in Csound version 3.492 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1299
midiout
midiout Sends a generic MIDI message to the MIDI OUT port.
Description
Sends a generic MIDI message to the MIDI OUT port.
Syntax
midiout kstatus, kchan, kdata1, kdata2
Performance
kstatus -- the type of MIDI message. Can be: 128 (note off) 144 (note on) 160 (polyphonic aftertouch) 176 (control change) 192 (program change) 208 (channel aftertouch) 224 (pitch bend) 0 when no MIDI messages must be sent to the MIDI OUT port kchan -- MIDI channel (1-16) kdata1, kdata2 -- message-dependent data values midiout has no output arguments, because it sends a message to the MIDI OUT port implicitly. It works at k-rate. It sends a MIDI message only when kstatus is non-zero.
Warning
Warning: Normally kstatus should be set to 0. Only when the user intends to send a MIDI message, can it be set to the corresponding message type number.
Credits
Author: Gabriel Maldonado Italy 1998 1300
1301
midipitchbend
midipitchbend Gets a MIDI pitchbend value.
Description
midipitchbend is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midipitchbend xpitchbend [, ilow] [, ihigh]
Initialization
ilow (optional) -- optional low value after rescaling, defaults to 0. ihigh (optional) -- optional high value after rescaling, defaults to 127.
Performance
xpitchbend -- returns the MIDI pitch bend during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the value of xpitchbend with the corresponding value from MIDI input. If the instrument was NOT activated by MIDI input, the value of xpitchbend remains unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
Examples
Here is an example of the midipitchbend opcode. It uses the file midipitchbend.csd [examples/ midipitchbend.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o midipitchbend.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kpb init 0 midipitchbend kpb ; Display the pitch-bend value when it changes. printk2 kpb endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipolyaftertouch, midiprogramchange
Credits
Author: Michael Gogins Example written by Kevin Conder. New in version 4.20
1303
midipolyaftertouch
midipolyaftertouch Gets a MIDI polyphonic aftertouch value.
Description
midipolyaftertouch is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midipolyaftertouch xpolyaftertouch, xcontrollervalue [, ilow] [, ihigh]
Initialization
ilow (optional) -- optional low value after rescaling, defaults to 0. ihigh (optional) -- optional high value after rescaling, defaults to 127.
Performance
xpolyaftertouch -- returns MIDI polyphonic aftertouch during MIDI activation, remains unchanged otherwise. xcontrollervalue -- returns the value of the MIDI controller during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the values of xpolyaftertouch and xcontrollervalue with the corresponding values from MIDI input. If the instrument was NOT activated by MIDI input, the values of xpolyaftertouch and xcontrollervalue remain unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, 1304
Credits
Author: Michael Gogins New in version 4.20
1305
midiprogramchange
midiprogramchange Gets a MIDI program change value.
Description
midiprogramchange is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. In general, it should be possible to write instrument definitions that work identically with both scores and MIDI, including both MIDI files and real-time MIDI input, without using any conditional statements, and that take full advantage of MIDI voice messages. Note that correlating Csound instruments with MIDI channel numbers is done using the massign opcode for real-time performance,. For file-driven performance, instrument numbers default to MIDI channel number + 1, but the defaults are overridden by any MIDI program change messages in the file.
Syntax
midiprogramchange xprogram
Performance
xprogram -- returns the MIDI program change value during MIDI activation, remains unchanged otherwise. If the instrument was activated by MIDI input, the opcode overwrites the value of xprogram with the corresponding value from MIDI input. If the instrument was NOT activated by MIDI input, the value of xprogram remains unchanged. This enables score p-fields to receive MIDI input data during MIDI activation, and score values otherwise.
See Also
midichannelaftertouch, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch
Credits
Author: Michael Gogins New in version 4.20
1306
miditempo
miditempo Returns the current tempo at k-rate, of either the MIDI file (if available) or the score
Description
Returns the current tempo at k-rate, of either the MIDI file (if available) or the score
Syntax
ksig miditempo
Credits
Author: Istvan Varga March 2005 New in Csound5
1307
midremot
midremot An opcode which can be used to implement a remote midi orchestra. This opcode will send midi events from a source machine to one destination.
Description
With the midremot and midglobal opcodes you are able to perform instruments on remote machines and control them from a master machine. The remote opcodes are implemented using the master/client model. All the machines involved contain the same orchestra but only the master machine contains the information of the midi score. During the performance the master machine sends the midi events to the clients. The midremot opcode will send events from a source machine to one destination if you want to send events to many destinations (broadcast) use the midglobal opcode instead. These two opcodes can be used in combination.
Syntax
midremot idestination, isource, instrnum [,instrnum...]
Initialization
idestination -- a string that is the intended host computer (e.g. 192.168.0.100). This is the destination host which receives the events from the given instrument. isource -- a string that is the intended host computer (e.g. 192.168.0.100). This is the source host which generates the events of the given instrument and sends it to the address given by idestination. instrnum -- a list of instrument numbers which will be played on the destination machine
Examples
Here is an example of the midremot opcode. It uses the files insremot.csd [examples/midremot.csd].
1308
<CsInstruments> sr = 44100 kr = 441 ksmps = 100 nchnls = 2 massign massign massign massign massign 1,1 2,2 3,3 4,4 5,5
ga1 init 0 ga2 init 0 gi1 sfload gi2 sfload gi3 sfload gi4 sfload "19Trumpet.sf2" "01hpschd.sf2" "07AcousticGuitar.sf2" "22Bassoon.sf2"
gitab ftgen 1,0,1024,10,1 midremot "192.168.1.100", "192.168.1.101", 1 midremot "192.168.1.100", "192.168.1.102", 2 midremot "192.168.1.100", "192.168.1.103", 3 midglobal "192.168.1.100", 5 instr 1 sfpassign 0, gi1 ifreq cpsmidi iamp ampmidi 10 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.5 vincr ga2, a2*.5 endin instr 2 sfpassign 0, gi2 ifreq cpsmidi iamp ampmidi 15 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.4 vincr ga2, a2*.4 endin instr 3 sfpassign 0, gi3 ifreq cpsmidi iamp ampmidi 10 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0 kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.5 vincr ga2, a2*.5 endin instr 4 sfpassign 0, gi4 ifreq cpsmidi iamp ampmidi 15 inum notnum ivel veloc kamp linsegr 1,1,1,.1,0
1309
kfreq init 1 a1,a2 sfplay ivel,inum,kamp*iamp,kfreq,0,0 outs a1,a2 vincr ga1, a1*.5 vincr ga2, a2*.5 endin instr 5 kamp midic7 1,0,1 denorm ga1 denorm ga2 aL, aR reverbsc ga1, ga2, .9, 16000, sr, 0.5 outs aL, aR ga1 = 0 ga2 = 0 endin </CsInstruments> <CsScore> ; Score f0 160 </CsScore> </CsoundSynthesizer>
See also
insglobal, insremot, midglobal, remoteport
Credits
Author: Simon Schampijer 2006 New in version 5.03
1310
midglobal
midglobal An opcode which can be used to implement a remote midi orchestra. This opcode will broadcast the midi events to all the machines involved in the remote concert.
Description
With the midremot and midglobal opcodes you are able to perform instruments on remote machines and control them from a master machine. The remote opcodes are implemented using the master/client model. All the machines involved contain the same orchestra but only the master machine contains the information of the midi score. During the performance the master machine sends the midi events to the clients. The midglobal opcode sends the events to all the machines involved in the remote concert. These machines are determined by the midremot definitions made above the midglobal command. To send events to only one machine use midremot.
Syntax
midglobal isource, instrnum [,instrnum...]
Initialization
isource -- a string that is the intended host computer (e.g. 192.168.0.100). This is the source host which generates the events of the given instrument(s) and sends it to all the machines involved in the remote concert. instrnum -- a list of instrument numbers which will be played on the destination machines
Examples
See the entry for midremot for an example of usage.
See also
insglobal, insremot, midremot, remoteport
Credits
Author: Simon Schampijer 2006 New in version 5.03
1311
min
min Produces a signal that is the minimum of any number of input signals.
Description
The min opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the minimum of all of the inputs. For a-rate signals, the inputs are compared one sample at a time (i.e. min does not scan an entire ksmps period of a signal for its local minimum as the max_k opcode does).
Syntax
amin min ain1 [, ain2] [, ain3] [, ain4] [...] kmin min kin1 [, kin2] [, kin3] [, kin4] [...]
Performance
ain1, ain2, ... -- a-rate signals to be compared. kin1, kin2, ... -- k-rate signals to be compared.
See Also
max, maxabs, minabs, maxaccum, minaccum, maxabsaccum, minabsaccum, max_k
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1312
minabs
minabs Produces a signal that is the minimum of the absolute values of any number of input signals.
Description
The minabs opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the minimum of all of the inputs. It is identical to the min opcode except that it takes the absolute value of each input before comparing them. Therefore, the output is always non-negative. For a-rate signals, the inputs are compared one sample at a time (i.e. minabs does not scan an entire ksmps period of a signal for its local minimum as the max_k opcode does).
Syntax
amin minabs ain1 [, ain2] [, ain3] [, ain4] [...] kmin minabs kin1 [, kin2] [, kin3] [, kin4] [...]
Performance
ain1, ain2, ... -- a-rate signals to be compared. kin1, kin2, ... -- k-rate signals to be compared.
See Also
maxabs, max, min, maxaccum, minaccum, maxabsaccum, minabsaccum, max_k
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1313
minabsaccum
minabsaccum Accumulates the minimum of the absolute values of audio signals.
Description
minabsaccum compares two audio-rate variables and stores the minimum of their absolute values into the first.
Syntax
minabsaccum aAccumulator, aInput
Performance
aAccumulator -- audio variable to store the minimum value aInput -- signal that aAccumulator is compared to The minabsaccum opcode is designed to accumulate the minimum value from among many audio signals that may be in different note instances, different channels, or otherwise cannot all be compared at once using the minabs opcode. minabsaccum is identical to minaccum except that it takes the absolute value of aInput before the comparison. Its semantics are similar to vincr since aAccumulator is used as both an input and an output variable, except that minabsaccum keeps the minimum absolute value instead of adding the signals together. minabsaccum performs the following operation on each pair of samples:
aAccumulator will usually be a global audio variable. At the end of any given computation cycle (k-period), after its value is read and used in some way, the accumulator variable should usually be reset to some large enough positive value that will always be greater than the input signals to which it is compared.
See Also
maxabsaccum, maxaccum, minaccum, max, min, maxabs, minabs, vincr
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1314
minaccum
minaccum Accumulates the minimum value of audio signals.
Description
minaccum compares two audio-rate variables and stores the minimum value between them into the first.
Syntax
minaccum aAccumulator, aInput
Performance
aAccumulator -- audio variable to store the minimum value aInput -- signal that aAccumulator is compared to The minaccum opcode is designed to accumulate the minimum value from among many audio signals that may be in different note instances, different channels, or otherwise cannot all be compared at once using the min opcode. Its semantics are similar to vincr since aAccumulator is used as both an input and an output variable, except that minaccum keeps the minimum value instead of adding the signals together. minaccum performs the following operation on each pair of samples:
aAccumulator will usually be a global audio variable. At the end of any given computation cycle (k-period), after its value is read and used in some way, the accumulator variable should usually be reset to some large enough positive value that will always be greater than the input signals to which it is compared.
See Also
maxaccum, maxabsaccum, minabsaccum, max, min, maxabs, minabs, vincr
Credits
Author: Anthony Kozar March 2006 New in Csound version 5.01
1315
mincer
mincer Phase-locked vocoder processing.
Description
mincer implements phase-locked vocoder processing using function tables containing sampled-sound sources, with GEN01, and mincer will accept deferred allocation tables. This opcode allows for time and frequency-independent scaling. Time is controlled by a time index (in seconds) to the function table position and can be moved forward and backward at any chosen speed, as well as stopped at a given position ("frozen"). The quality of the effect is generally improved with phase locking switched on. mincer will also scale pitch, independently of frequency, using a transposition factor (k-rate).
Syntax
asig mincer atimpt, kamp, kpitch, klock, ktab[,ifftsize,idecim]
Initialization
ifftsize -- FFT size (power-of-two), defaults to 2048. idecim -- decimation, defaults to 4 (meaning hopsize = fftsize/4)
Performance
atimpt -- time position of current audio sample in secs. Table reading wraps around the ends of the function table. kamp -- amplitude scaling kpitch -- grain pitch scaling (1=normal pitch, < 1 lower, > 1 higher; negative, backwards) klock -- 0 or 1, to switch phase-locking on/off ktab -- source signal function table. Deferred-allocation tables (see GEN01) are accepted, but the opcode expects a mono source. Tables can be switched at k-rate.
Examples
Example 374. Example
1316
out a1
Credits
Author: Victor Lazzarini February 2010 New plugin in version 5.13 February 2005.
1317
mirror
mirror Reflects the signal that exceeds the low and high thresholds.
Description
Reflects the signal that exceeds the low and high thresholds.
Syntax
ares mirror asig, klow, khigh ires mirror isig, ilow, ihigh kres mirror ksig, klow, khigh
Initialization
isig -- input signal ilow -- low threshold ihigh -- high threshold
Performance
xsig -- input signal klow -- low threshold khigh -- high threshold mirror reflects the signal that exceeds the low and high thresholds. This opcode is useful in several situations, such as table indexing or for clipping and modeling a-rate, irate or k-rate signals.
See Also
limit, wrap
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.49
1318
MixerSetLevel
MixerSetLevel Sets the level of a send to a buss.
Syntax
MixerSetLevel isend, ibuss, kgain
Description
Sets the level at which signals from the send are added to the buss. The actual sending of the signal to the buss is performed by the MixerSend opcode.
Initialization
isend -- The number of the send, for example the number of the instrument sending the signal (but any integer can be used). ibuss -- The number of the buss, for example the number of the instrument receiving the signal (but any integer can be used). Setting the gain for a buss also creates the buss.
Performance
kgain -- The level (any real number) at which the signal from the send will be mixed onto the buss. The default is 0. Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, MixerClear must be invoked to reset the busses before the next kperiod.
Examples
In the orchestra, define an instrument to control mixer levels:
instr 1 MixerSetLevel endin p4, p5, p6
1319
i 1 0 0 3 ; to Output i 1 0 0 3 ; i ; i ; i
210 220
Chorus to Reverb 1 0 0 200 210 Chorus to Output 1 0 0 200 220 Reverb to Output 1 0 0 210 220
Credits
Michael Gogins (gogins at pipeline dot com).
1320
MixerSetLevel_i
MixerSetLevel_i Sets the level of a send to a buss.
Syntax
MixerSetLevel_i isend, ibuss, igain
Description
Sets the level at which signals from the send are added to the buss. This opcode, because all parameters are irate, may be used in the orchestra header. The actual sending of the signal to the buss is performed by the MixerSend opcode.
Initialization
isend -- The number of the send, for example the number of the instrument sending the signal (but any integer can be used). ibuss -- The number of the buss, for example the number of the instrument receiving the signal (but any integer can be used). igain -- The level (any real number) at which the signal from the send will be mixed onto the buss. The default is 0. Setting the gain for a buss also creates the buss.
Performance
Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, MixerClear must be invoked to reset the busses before the next kperiod.
Examples
In the orchestra header, set the gain for the send from buss 3 to buss 4:
MixerSetLevel_i 3, 4, 0.76
Credits
Michael Gogins (gogins at pipeline dot com).
1321
MixerGetLevel
MixerGetLevel Gets the level of a send to a buss.
Syntax
kgain MixerGetLevel isend, ibuss
Description
Gets the level at which signals from the send are being added to the buss. The actual sending of the signal to the buss is performed by the MixerSend opcode.
Initialization
isend -- The number of the send, for example the number of the instrument sending the signal. ibuss -- The number of the buss, for example the number of the instrument receiving the signal.
Performance
kgain -- The level (any real number) at which the signal from the send will be mixed onto the buss. This opcode reports the level set by MixerSetLevel for a send and buss pair. Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, MixerClear must be invoked to reset the busses to 0 before the next kperiod.
Credits
Michael Gogins (gogins at pipeline dot com).
1322
MixerSend
MixerSend Mixes an arate signal into a channel of a buss.
Syntax
MixerSend asignal, isend, ibuss, ichannel
Description
Mixes an arate signal into a channel of a buss.
Initialization
isend -- The number of the send, for example the number of the instrument sending the signal. The gain of the send is controlled by the MixerSetLevel opcode. The reason that the sends are numbered is to enable different levels for different sends to be set independently of the actual level of the signals. ibuss -- The number of the buss, for example the number of the instrument receiving the signal. ichannel -- The number of the channel. Each buss has nchnls channels.
Performance
asignal -- The signal that will be mixed into the indicated channel of the buss. Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, MixerClear must be invoked to reset the busses to 0 before the next kperiod.
Examples
instr 100 ; Fluidsynth output ; INITIALIZATION ; Normalize so iamplitude for p5 of 80 == iamplitude = ; AUDIO aleft, aright fluidAllOut asig1 = asig2 = ; To the chorus. MixerSend MixerSend ; To the reverb. MixerSend MixerSend ; To the output. MixerSend MixerSend endin ampdb(80). ampdb(p5) * 2.0 giFluidsynth aleft * iamplitude aright * iamplitude asig1, 100, 200, 0 asig2, 100, 200, 1 asig1, 100, 210, 0 asig2, 100, 210, 1 asig1, 100, 220, 0 asig2, 100, 220, 1
Credits
Michael Gogins (gogins at pipeline dot com). 1323
MixerReceive
MixerReceive Receives an arate signal from a channel of a buss.
Syntax
asignal MixerReceive ibuss, ichannel
Description
Receives an arate signal that has been mixed onto a channel of a buss.
Initialization
ibuss -- The number of the buss, for example the number of the instrument receiving the signal. ichannel -- The number of the channel. Each buss has nchnls channels.
Performance
asignal -- The signal that has been mixed onto the indicated channel of the buss. Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, MixerClear must be invoked to reset the busses to 0 before the next kperiod.
Examples
instr 220 ; Master output ; It applies a bass enhancement, compression and fadeout ; to the whole piece, outputs signals, and clears the mixer. a1 MixerReceive 220, 0 a2 MixerReceive 220, 1 ; Bass enhancement al1 butterlp a1, 100 al2 butterlp a2, 100 a1 = al1*1.5 + a1 a2 = al2*1.5 + a2 ; Global amplitude shape kenv linseg 0., p5 / 2.0, p4, p3 - p5, p4, p5 / 2.0, 0. a1=a1*kenv a2=a2*kenv ; Compression a1 dam a1, 5000, 0.5, 1, 0.2, 0.1 a2 dam a2, 5000, 0.5, 1, 0.2, 0.1 ; Remove DC bias a1blocked dcblock a2blocked dcblock ; Output signals outs a1blocked, a2blocked MixerClear endin a1 a2
1324
Credits
Michael Gogins (gogins at pipeline dot com).
1325
MixerClear
MixerClear Resets all channels of a buss to 0.
Syntax
MixerClear
Description
Resets all channels of a buss to 0.
Performance
Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, MixerClear must be invoked to reset the busses to 0 before the next kperiod.
Examples
instr 220 ; Master output ; It applies a bass enhancement, compression and fadeout ; to the whole piece, outputs signals, and clears the mixer. a1 MixerReceive 220, 0 a2 MixerReceive 220, 1 ; Bass enhancement al1 butterlp a1, 100 al2 butterlp a2, 100 a1 = al1*1.5 + a1 a2 = al2*1.5 + a2 ; Global amplitude shape kenv linseg 0., p5 / 2.0, p4, p3 - p5, p4, p5 / 2.0, 0. a1=a1*kenv a2=a2*kenv ; Compression a1 dam a1, 5000, 0.5, 1, 0.2, 0.1 a2 dam a2, 5000, 0.5, 1, 0.2, 0.1 ; Remove DC bias a1blocked dcblock a2blocked dcblock ; Output signals outs a1blocked, a2blocked MixerClear endin a1 a2
Credits
Author: Michael Gogins (gogins at pipeline dot com).
1326
mode
mode A filter that simulates a mass-spring-damper system
Description
Filters the incoming signal with the specified resonance frequency and quality factor. It can also be seen as a signal generator for high quality factor, with an impulse for the excitation. You can combine several modes to built complex instruments such as bells or guitar tables.
Syntax
aout mode ain, kfreq, kQ [, iskip]
Initialization
iskip (optional, default=0) -- if non zero skip the initialisation of the filter.
Performance
aout -- filtered signal ain -- signal to filter kfreq -- resonant frequency of the filter
Warning
This filter becomes unstable if sr/kfreq < pi (e.g kfreq > 14037 Hz @ 44 kHz) kQ -- quality factor of the filter The resonance time is roughly proportionnal to kQ/kfreq. See Modal Frequency Ratios for frequency ratios of real intruments which can be used to determine the values of kfreq.
Examples
Here is an example of the mode opcode. It uses the file mode.csd [examples/mode.csd].
1327
-odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o moogvcf.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 instr 1; 2 modes excitator idur init p3 ifreq11 init ifreq12 init iQ11 init iQ12 init iamp init ifreq21 init ifreq22 init iQ21 init iQ22 init p4 p5 p6 p7 ampdb(p8) p9 p10 p11 p12
; to simulate the shock between the excitator and the resonator ashock mpulse 3,0 aexc1 mode ashock,ifreq11,iQ11 aexc1 = aexc1*iamp aexc2 mode ashock,ifreq12,iQ12 aexc2 = aexc2*iamp aexc = (aexc1+aexc2)/2 ;"Contact" condition : when aexc reaches 0, the excitator looses ;contact with the resonator, and stops "pushing it" aexc limit aexc,0,3*iamp ; 2modes resonator ares1 ares2 mode aexc,ifreq21,iQ21 mode aexc,ifreq22,iQ22
ares = (ares1+ares2)/2 display aexc+ares,p3 outs aexc+ares,aexc+ares endin </CsInstruments> <CsScore> ;wooden excitator against glass resonator i1 0 8 1000 3000 12 8 70 440 888 ;felt against glass i1 4 8 80 188 8 ;wood against wood i1 8 8 1000 3000 ;felt against wood i1 12 8 80 180 8 i1 16 8 i1 23 8 1000 3000 80 180 8 3 12 3 70 8 70 440 70 440 888 440 630 500 630 60 500 420 60 53 53 420
12 8 3 70
;With a metallic excitator i1 33 8 1000 i1 37 8 1000 i1 42 8 1000 1800 1800 1800 1000 1000 2000 720 850 1720 70 70 70 440 440 440 882 630 442 500 500 60 53 500 500
1328
</CsScore> </CsoundSynthesizer>
Credits
Original UDO and documentation/example by Franois Blanc Opcode translation to C-code by Steven Yi New in version 5.04
1329
modmatrix
modmatrix Modulation matrix opcode with optimizations for sparse matrices.
Description
The opcode can be used to let a large number of k-rate modulator variables modulate a large number of k-rate parameter variables, with arbitrary scaling of each modulator-to-parameter connection. Csound ftables are used to hold both the input (parameter) variables, the modulator variables, and the scaling coefficients. Output variables are written to another Csound ftable.
Syntax
modmatrix iresfn, isrcmodfn, isrcparmfn, imodscale, inum_mod, \\ inum_parm, kupdate
Initialization
iresfn -- ftable number for the parameter output variables isrcmodfn -- ftable number for the modulation source variables isrcparmfn -- ftable number for the parameter input variables imodscale -- scaling/routing coefficient matrix. This is also a csound ftable, used as a matrix of inum_mod rows and inum_parm columns. inum_mod -- number of modulation variables inum_parm -- number of parmeter (input and output) variables. The arguments inum_mod and inum_parm do not have to be set to power-of-two values.
Performance
kupdate -- flag to update the scaling coefficients. When the flag is set to a nonzero value, the scaling coefficients are read directly from the imodscale ftable. When the flag is set to zero, the scaling coefficients are scanned, and an optimized scaling matrix stored internally in the opcode. For each modulator in isrcmodfn, scale it with the coefficient (in imodscale) determining to what degree it should influence each parameter. Then sum all modulators for each parameter and add the resulting modulator value to the input parameter value read from iscparmfn. Finally, write the output parameter values to table iresfn. The following tables give insight into the processing performed by the modmatrix opcode, for a simplified example using 3 parameter and 2 modulators. Lets call the parameters "cps1", "cps2", and "cutoff", and the modulators "lfo1" and "lfo2". The input variables may at a given point in time have these values:
Table 13.
1330
cps2 800
cutoff 3
Table 14.
lfo1 isrcmodfn 0.5 lfo2 -0.2
Table 15.
imodscale lfo1 lfo2 cps1 40 -50 cps2 0 100 cutoff -2 3
Table 16.
cps1 iresfn lfo2 430 -50 cps2 780 100 cutoff 1.4 3
The output value for "cps1" is calculated as 400+(0.5*40)+(-0.2*-50), similarly for "cps2" 800+(0.5*0)+(-0.2*100), and for cutoff: 3+(0.5*-2)+(-0.2*3) The imodscale ftable may be specified in the score like this:
f1 0 8 -2 200 0 2 50 300 -1.5
Obviously, the parameter and modulator variables need not be static values, and similarly, the scaling routing coefficient table may be continuously rewritten using opcodes like tablew.
Examples
Here is an example of the modmatrix opcode. It uses the file modmatrix.csd [examples/modmatrix.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio flags here according to platform ; Audio out Audio in ;-odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: -o modmatrix.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 kr = 441 ksmps = 100 nchnls = 2 0dbfs =
; basic waveforms giSine ftgen 0, 0, 65537, 10, 1 ; sine wave giSaw ftgen 0, 0, 4097, 7, 1, 4096, -1 ; saw (linear) giSoftSaw ftgen 0, 0, 65537, 30, giSaw, 1, 10 ; soft saw (only 10 first harmonics) ; modmatrix tables giMaxNumParam = 128 giMaxNumMod = 32 giParam_In ftgen 0, 0, giMaxNumParam, 2, 0 ; input parameters table ; output parameters table (parameter values with added modulators) giParam_Out ftgen 0, 0, giMaxNumParam, 2, 0 giModulators ftgen 0, 0, giMaxNumMod, 2, 0 ; modulators table ; modulation scaling and routing (mod matrix) table, start with empty table giModScale ftgen 0, 0, giMaxNumParam*giMaxNumMod, -2, 0 ;******************************************** ; generate the modulator signals ;******************************************** instr 1 ; LFO1, 1.5 Hz, normalized range (0.0 to 1.0) kLFO1 oscil 0.5, 1.5, giSine ; generate LFO signal kLFO1 = kLFO1+0.5 ; offset ; LFO2, 0.4 Hz, normalized range (0.0 to 1.0) kLFO2 oscil 0.5, 0.4, giSine ; generate LFO signal kLFO2 = kLFO2+0.5 ; offset ; write modulators to table tablew kLFO1, 0, giModulators tablew kLFO2, 1, giModulators endin ;******************************************** ; set parameter values ;******************************************** instr 2 ; Here we can set the parameter values icps1 = p4 icps2 = p5 icutoff = p6 ; write parameters to table tableiw icps1, 0, giParam_In tableiw icps2, 1, giParam_In tableiw icutoff, 2, giParam_In endin ;******************************************** ; mod matrix edit ;******************************************** instr 3 ; Here we can write to the modmatrix table by using tablew or tableiw
1332
p4 p5 = p6 p7 p8 = p9 iLfo1ToCps1, 0, giModScale iLfo1ToCps2, 1, giModScale iLfo1ToCutoff, 2, giModScale iLfo2ToCps1, 3, giModScale iLfo2ToCps2, 4, giModScale iLfo2ToCutoff, 5, giModScale
; and set the update flag for modulator matrix ; ***(must update to enable changes) ktrig init 1 chnset ktrig, "modulatorUpdateFlag" ktrig = 0 endin ;******************************************** ; mod matrix ;******************************************** instr 4 ; get the update flag kupdate chnget "modulatorUpdateFlag" ; run the mod matrix inum_mod = 2 inum_parm = 3 modmatrix giParam_Out, giModulators, giParam_In, \\ giModScale, inum_mod, inum_parm, kupdate ; and reset the update flag chnset 0, "modulatorUpdateFlag" endin ;******************************************** ; audio generator to test values ;******************************************** instr 5 ; basic parameters iamp = ampdbfs(-5) ; read modulated parameters from table kcps1 table 0, giParam_Out kcps2 table 1, giParam_Out kcutoff table 2, giParam_Out ; set filter parameters kCF_freq1 = kcps1*kcutoff kCF_freq2 = kcps2*kcutoff kReso = 0.7 kDist = 0.3 ; oscillators and filters a1 oscili iamp, kcps1, giSoftSaw a1 lpf18 a1, kCF_freq1, kReso, kDist a2 oscili iamp, kcps2, giSoftSaw a2 lpf18 a2, kCF_freq2, kReso, kDist outs endin </CsInstruments> <CsScore> ;******************************************** ; set initial parameters ; cps1 cps2 cutoff i2 0 1 400 800 3 ;******************************************** ; set modmatrix values a1, a2 ; reset the update flag
1333
; lfo1ToCps1 lfo1ToCps2 lfo1ToCut lfo2ToCps1 lfo2ToCps2 lfo2ToCut i3 0 1 40 0 -2 -50 100 ;******************************************** ; start "always on" instruments #define SCORELEN # 20 # ; set length of score i1 0 $SCORELEN i4 0 $SCORELEN i5 0 $SCORELEN e </CsScore> </CsoundSynthesizer> ; start modulators ; start mod matrix ; start audio oscillator
See Also
Linear Algebra Opcodes, Vectorial Opcodes, tablew.
Credits
By: Oeyvind Brandtsegg and Thom Johansen New in version 5.12
1334
monitor
monitor Returns the audio spout frame.
Description
Returns the audio spout frame (if active), otherwise it returns zero.
Syntax
aout1 [,aout2 ... aoutX] monitor
Performance
This opcode can be used for monitoring the output signal from csound. It should not be used for processing the signal further. See the entry for the fout opcode for an example of usage of monitor.
See also
fout, the Mixer opcodes and the Zak Patching System.
Credits
Istvan Varga 2006
1335
moog
moog An emulation of a mini-Moog synthesizer.
Description
An emulation of a mini-Moog synthesizer.
Syntax
ares moog kamp, kfreq, kfiltq, kfiltrate, kvibf, kvamp, iafn, iwfn, ivfn
Initialization
iafn, iwfn, ivfn -- three table numbers containing the attack waveform (unlooped), the main looping wave form, and the vibrato waveform. The files mandpluk.aiff [examples/mandpluk.aiff] and impuls20.aiff [examples/impuls20.aiff] are suitable for the first two, and a sine wave for the last.
Note
The files mandpluk.aiff and impuls20.aiff are also ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. available at
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kfiltq -- Q of the filter, in the range 0.8 to 0.9 kfiltrate -- rate control for the filter in the range 0 to 0.0002 kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the moog opcode. It uses the file moog.csd [examples/moog.csd], mandpluk.aiff [examples/mandpluk.aiff], and impuls20.aiff [examples/impuls20.aiff].
1336
; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o moog.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 22050 kr = 2205 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kfreq = 220 kfiltq = 0.81 kfiltrate = 0 kvibf = 1.4 kvamp = 2.22 iafn = 1 iwfn = 2 ivfn = 3 am moog kamp, kfreq, kfiltq, kfiltrate, kvibf, kvamp, iafn, iwfn, ivfn ; It tends to get loud, so clip moog's amplitude at 30,000. a1 clip am, 2, 30000 out a1 endin </CsInstruments> <CsScore> ; f ; f ; f Table #1: the "mandpluk.aiff" audio file 1 0 8192 1 "mandpluk.aiff" 0 0 0 Table #2: the "impuls20.aiff" audio file 2 0 256 1 "impuls20.aiff" 0 0 0 Table #3: a sine wave 3 0 256 10 1
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK Example written by Kevin Conder. New in Csound version 3.47
1337
moogladder
moogladder Moog ladder lowpass filter.
Description
Moogladder is an new digital implementation of the Moog ladder filter based on the work of Antti Huovilainen, described in the paper "Non-Linear Digital Implementation of the Moog Ladder Filter" (Proceedings of DaFX04, Univ of Napoli). This implementation is probably a more accurate digital representation of the original analogue filter.
Syntax
asig moogladder ain, kcf, kres[, istor]
Initialization
istor --initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a nonzero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal. kcf -- filter cutoff frequency kres -- resonance, generally < 1, but not limited to it. Higher than 1 resonance values might cause aliasing, analogue synths generally allow resonances to be above 1.
Examples
Example 378. Example
kfe kenv asig afil expseg linen buzz moogladder out 500, p3*0.9, 1800, p3*0.1, 3000 10000, 0.05, p3, 0.05 kenv, 100, sr/(200), 1 asig, kfe, 1 afil
Credits
Author: Victor Lazzarini January 2005 New plugin in version 5
1338
January 2005.
1339
moogvcf
moogvcf A digital emulation of the Moog diode ladder filter configuration.
Description
A digital emulation of the Moog diode ladder filter configuration.
Syntax
ares moogvcf asig, xfco, xres [,iscale, iskip]
Initialization
iscale (optional, default=1) -- internal scaling factor. Use if asig is not in the range +/-1. Input is first divided by iscale, then output is mutliplied iscale. Default value is 1. (New in Csound version 3.50) iskip (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
asig -- input signal xfco -- filter cut-off frequency in Hz. As of version 3.50, may i-,k-, or a-rate. xres -- amount of resonance. Self-oscillation occurs when xres is approximately one. As of version 3.50, may a-rate, i-rate, or k-rate. moogvcf is a digital emulation of the Moog diode ladder filter configuration. This emulation is based loosely on the paper Analyzing the Moog VCF with Considerations for Digital Implementation by Stilson and Smith (CCRMA). This version was originally coded in Csound by Josep Comajuncosas. Some modifications and conversion to C were done by Hans Mikelson.
Warning
This filter requires that the input signal be normalized to one. This can be easily achieved using 0dbfs, like this: ares moogvcf asig, kfco, kres, 0dbfs You can also use moogvcf2 which defaults scaling to 0dbfs.
Examples
Here is an example of the moogvcf opcode. It uses the file moogvcf.csd [examples/moogvcf.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o moogvcf.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Use a nice sawtooth waveform. asig vco 32000, 220, 1 ; Vary the filter-cutoff frequency from .2 to 2 KHz. kfco line 200, p3, 2000 ; Set the resonance amount to one. krez init 1 ; Scale the amplitude to 32768. iscale = 32768 a1 moogvcf asig, kfco, krez, iscale out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave for the vco opcode. f 1 0 16384 10 1 ; Play Instrument #1 for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
moogvcf2, biquad, rezzy
Credits
Author: Hans Mikelson October 1998 Example written by Kevin Conder. New in Csound version 3.49
1341
moogvcf2
moogvcf2 A digital emulation of the Moog diode ladder filter configuration.
Description
A digital emulation of the Moog diode ladder filter configuration.
Syntax
ares moogvcf2 asig, xfco, xres [,iscale, iskip]
Initialization
iscale (optional, default=0dBfs) -- internal scaling factor, as the operation of the code requires the signal to be in the range +/-1. Input is first divided by iscale, then output is mutliplied by iscale. iskip (optional, default=0) -- if non zero skip the initialisation of the filter.
Performance
asig -- input signal xfco -- filter cut-off frequency in Hz. which may be i-,k-, or a-rate. xres -- amount of resonance. Self-oscillation occurs when xres is approximately one. May be a-rate, irate, or k-rate. moogvcf2 is a digital emulation of the Moog diode ladder filter configuration. This emulation is based loosely on the paper Analyzing the Moog VCF with Considerations for Digital Implementation by Stilson and Smith (CCRMA). This version was originally coded in Csound by Josep Comajuncosas. Some modifications and conversion to C were done by Hans Mikelson and then adjusted. moogvcf2 is identical to moogvcf, except that the iscale parameter defaults to 0dbfs instead of 0, guaranteeing that amplitude will usually be OK.
Examples
Here is an example of the moogvcf2 opcode. It uses the file moogvcf2.csd [examples/moogvcf2.csd].
1342
</CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Use a nice sawtooth waveform. asig vco 32000, 220, 1 ; Vary the filter-cutoff frequency from .2 to 2 KHz. kfco line 200, p3, 2000 ; Set the resonance amount to one. krez init 1 a1 moogvcf2 asig, kfco, krez out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave for the vco opcode. f 1 0 16384 10 1 ; Play Instrument #1 for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
moogvcf, biquad, rezzy
Credits
Author: Hans Mikelson and John ffitch October 1998/ July 2006 Example written by Kevin Conder. New in Csound version 5.03
1343
moscil
moscil Sends a stream of the MIDI notes.
Description
Sends a stream of the MIDI notes.
Syntax
moscil kchn, knum, kvel, kdur, kpause
Performance
kchn -- MIDI channel number (1-16) knum -- note number (0-127) kvel -- velocity (0-127) kdur -- note duration in seconds kpause -- pause duration after each noteoff and before new note in seconds moscil and midion are the most powerful MIDI OUT opcodes. moscil (MIDI oscil) plays a stream of notes of kdur duration. Channel, pitch, velocity, duration and pause can be controlled at k-rate, allowing very complex algorithmically generated melodic lines. When current instrument is deactivated, the note played by current instance of moscil is forcedly truncated. Any number of moscil opcodes can appear in the same Csound instrument, allowing a counterpoint-style polyphony within a single instrument.
Examples
Here is an example of the moscil opcode. It uses the file moscil.csd [examples/moscil.csd].
1344
sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; Example by Giorgio Zucco 2007 instr 1 ;Triggered by MIDI notes on channel 1
inote notnum ivel veloc kpitch = 40 kfreq = 2 kdur = kpause = k1 .04 .1 lfo kpitch, kfreq,5
;plays a stream of notes of kdur duration on MIDI channel 1 moscil 1, inote + k1, ivel, kdur, kpause endin </CsInstruments> <CsScore> ; Dummy ftable f0 60 </CsScore> </CsoundSynthesizer>
See Also
midion, midion2, noteon, noteoff, noteondur, noteondur2
Credits
Author: Gabriel Maldonado Italy May 1997 New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1345
mp3in
mp3in Reads stereo audio data from an external MP3 file.
Description
Reads stereo audio data from an external MP3 file.
Syntax
ar1, ar2 mp3in ifilcod, iskptim, iformat, iskipinit, ibufsize
Initialization
ifilcod -- integer or character-string denoting the source soundfile name. An integer denotes the file soundin.filcod ; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is sought first in the current directory, then in that given by the environment variable SSDIR (if defined) then by SFDIR. iskptim (optional) -- time in seconds of input sound to be skipped. The default value is 0. iformat (optional) -- specifies the audio data file format: currently not implemented and always defaults to stereo. iskipinit (optional) -- switches off all initialisation if non zero (default =0). ibuffersize (optional) -- sets the internal buffer size for reading. If the value is zero or negative it defaults to 4096 bytes.
Performance
Reads stereo audio data from an external MP3 file.
See Also
diskin, ins, in, inh, inh, ino, inq, soundin
Credits
Author: John ffitch Codemist Ltd 2009 New in version 5.11
1346
mpulse
mpulse Generates a set of impulses.
Description
Generates a set of impulses of amplitude kamp separated by kintvl seconds (or samples if kintvl is negative). The first impulse is generated after a delay of ioffset seconds.
Syntax
ares mpulse kamp, kintvl [, ioffset]
Initialization
ioffset (optional, default=0) -- the delay before the first impulse. If it is negative, the value is taken as the number of samples, otherwise it is in seconds. Default is zero.
Performance
kamp -- amplitude of the impulses generated kintvl -- Interval of time in seconds (or samples if kintvl is negative) to the next pulse. After the initial delay, an impulse of kamp amplitude is generated as a single sample. Immediately after generating the impulse, the time of the next one is determined from the value of kintvl at that precise moment. This means that any changes in kintvl between impulses are discarded. If kintvl is zero, there is an infinite wait to the next impulse. If kintvl is negative, the interval is counted in number of samples rather than seconds.
Examples
Here is an example of the mpulse opcode. It uses the file mpulse.csd [examples/mpulse.csd].
1347
nchnls = 1 gkfreq init 0.1 instr 1 kamp = 10000 a1 mpulse kamp, gkfreq out a1 endin instr 2 ; Assign the value of p4 to gkfreq gkfreq init p4 endin </CsInstruments> <CsScore> ; i i i i ; i i e </CsScore> </CsoundSynthesizer> Play Instrument #1 for one second. 1 0 11 2 2 1 0.05 2 4 1 0.01 2 6 1 0.005 only last notes are audible 2 8 1 0.003 2 10 1 0.002
Credits
Written by John ffitch. New in version 4.08 Example written by Kevin Conder.
1348
mrtmsg
mrtmsg Send system real-time messages to the MIDI OUT port.
Description
Send system real-time messages to the MIDI OUT port.
Syntax
mrtmsg imsgtype
Initialization
imsgtype -- type of real-time message: 1 sends a START message (0xFA); 2 sends a CONTINUE message (0xFB); 0 sends a STOP message (0xFC); -1 sends a SYSTEM RESET message (0xFF); -2 sends an ACTIVE SENSING message (0xFE)
Performance
Sends a real-time message once, in init stage of current instrument. imsgtype parameter is a flag to indicate the message type.
See Also
mclock
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47
1349
multitap
multitap Multitap delay line implementation.
Description
Multitap delay line implementation.
Syntax
ares multitap asig [, itime1] [, igain1] [, itime2] [, igain2] [...]
Initialization
The arguments itime and igain set the position and gain of each tap. The delay line is fed by asig.
Examples
a1 a2 oscil multitap out 1000, 100, 1 a1, 1.2, .5, 1.4, .2 a2
This results in two delays, one with length of 1.2 and gain of .5, and one with length of 1.4 and gain of .2.
Credits
Author: Paris Smaragdis MIT, Cambridge 1996
1350
mute
mute Mutes/unmutes new instances of a given instrument.
Description
Mutes/unmutes new instances of a given instrument.
Syntax
mute insnum [, iswitch] mute "insname" [, iswitch]
Initialization
insnum -- instrument number. Equivalent to p1 in a score i statement. insname -- A string (in double-quotes) representing a named instrument. iswitch (optional, default=0) -- represents a switch to mute/unmute an instrument. A value of 0 will mute new instances of an instrument, other values will unmute them. The default value is 0.
Performance
All new instances of instrument inst will me muted (iswitch = 0) or unmuted (iswitch not equal to 0). There is no difficulty with muting muted instruments or unmuting unmuted instruments. The mechanism is the same as used by the score q statement. For example, it is possible to mute in the score and unmute in some instrument. Muting/Unmuting is indicated by a message (depending on message level).
Examples
Here is an example of the mute opcode. It uses the file mute.csd [examples/mute.csd].
1351
ksmps = 10 nchnls = 1 0dbfs = 1 ; Mute Instrument #2. mute 2 ; Mute Instrument three. mute "three" ; Instrument #1. instr 1 a1 oscils 0.2, 440, 0 out a1 endin ; Instrument #2. instr 2 a1 oscils 0.2, 880, 0 out a1 endin ; Instrument #3. instr three a1 oscils 0.2, 1000, 0 out a1 endin </CsInstruments> <CsScore> ; i ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1 Play Instrument three for one second. "three" 0 1
</CsScore> </CsoundSynthesizer>
Credits
Example written by Kevin Conder. New in version 4.22
1352
mxadsr
mxadsr Calculates the classical ADSR envelope using the expsegr mechanism.
Description
Calculates the classical ADSR envelope using the expsegr mechanism.
Syntax
ares mxadsr iatt, idec, islev, irel [, idel] [, ireltim] kres mxadsr iatt, idec, islev, irel [, idel] [, ireltim]
Initialization
iatt -- duration of attack phase idec -- duration of decay islev -- level for sustain phase irel -- duration of release phase idel (optional, default=0) -- period of zero before the envelope starts ireltim (optional, default=-1) -- Control release time after receiving a MIDI noteoff event. If less than zero, the longest release time given in the current instrument is used. If zero or more, the given value will be used for release time. Its default value is -1. (New in Csound 3.59 - not yet properly tested)
Performance
The envelope is in the range 0 to 1 and may need to be scaled further. The envelope may be described as:
1353
Picture of an ADSR envelope. The length of the sustain is calculated from the length of the note. This means adsr is not suitable for use with MIDI events. The opcode madsr uses the linsegr mechanism, and so can be used in MIDI applications. The opcode mxadsr is identical to madsr except it uses exponential, rather than linear, line segments. You can use other pre-made envelopes which start a release segment upon recieving a note off message, like linsegr and expsegr, or you can construct more complex envelopes using xtratim and release. Note that you don't need to use xtratim if you are using mxadsr, since the time is extended automatically. mxadsr is new in Csound version 3.51.
See Also
linsegr, expsegr, envlpxr, mxadsr, madsr, adsr, expon, expseg, expsega line, linseg, xtratim
Credits
Author: John ffitch November 2002. Thanks to Rasmus Ekman, added documentation for the ireltim parameter. November 2003. Thanks to Kanata Motohashi, fixed the link to the linsegr opcode.
1354
nchnls
nchnls Sets the number of channels of audio output.
Description
These statements are global value assignments, made at the beginning of an orchestra, before any instrument block is defined. Their function is to set certain reserved symbol variables that are required for performance. Once set, these reserved symbols can be used in expressions anywhere in the orchestra.
Syntax
nchnls = iarg
Initialization
nchnls = (optional) -- set number of channels of audio output to iarg. (1 = mono, 2 = stereo, 4 = quadraphonic.) The default value is 1 (mono). In addition, any global variable [53] can be initialized by an init-time assignment anywhere before the first instr statement. All of the above assignments are run as instrument 0 (i-pass only) at the start of real performance.
See Also
kr, ksmps, sr
1355
nchns_i
nchns_i Sets the number of channels of audio input.
Description
These statements are global value assignments, made at the beginning of an orchestra, before any instrument block is defined. Their function is to set certain reserved symbol variables that are required for performance. Once set, these reserved symbols can be used in expressions anywhere in the orchestra.
Syntax
nchns_i = iarg
Initialization
nchns_i = (optional) -- set number of channels of audio input to iarg. (1 = mono, 2 = stereo, 4 = quadraphonic.) The default value is the valus of nchnls. In addition, any global variable [53] can be initialized by an init-time assignment anywhere before the first instr statement. All of the above assignments are run as instrument 0 (i-pass only) at the start of real performance.
See Also
kr, ksmps, nchnls, sr
1356
nestedap
nestedap Three different nested all-pass filters.
Description
Three different nested all-pass filters, useful for implementing reverbs.
Syntax
ares nestedap asig, imode, imaxdel, idel1, igain1 [, idel2] [, igain2] \ [, idel3] [, igain3] [, istor]
Initialization
imode -- operating mode of the filter: 1 = simple all-pass filter 2 = single nested all-pass filter 3 = double nested all-pass filter idel1, idel2, idel3 -- delay times of the filter stages. Delay times are in seconds and must be greater than zero. idel1 must be greater than the sum of idel2 and idel3. igain1, igain2, igain3 -- gain of the filter stages. imaxdel -- will be necessary if k-rate delays are implemented. Not currently used. istor -- Skip initialization if non-zero (default: 0).
Performance
asig -- input signal If imode = 1, the filter takes the form:
1357
Examples
Here is an example of the nestedap opcode. It uses the file nestedap.csd [examples/nestedap.csd], and beats.wav [examples/beats.wav].
1358
insnd gasig endin instr 10 imax idel1 igain1 idel2 igain2 idel3 igain3 idel4 igain4 idel5 igain5 idel6 igain6 afdbk aout1 aout2 aout afdbk
= diskin2
p4 insnd, 1
= = = = = = = = = = = = = init 0
nestedap gasig+afdbk*.4, 3, imax, idel1, igain1, idel2, igain2, idel3, igain3 nestedap aout1, 2, imax, idel4, igain4, idel5, igain5 nestedap aout2, 1, imax, idel6, igain6 butterlp aout, 1000 outs gasig+(aout+aout1)/2, gasig-(aout+aout1)/2
gasig endin
</CsInstruments> <CsScore> f1 0 8192 10 1 ; Diskin ; Sta Dur i5 0 3 ; Reverb ; St Dur i10 0 4 e Soundin "beats.wav" Del1 Gn1 97 .11 Del2 Gn2 23 .07 Del3 Gn3 43 .09 Del4 72 Gn4 .2 Del5 53 Gn5 .2 Del6 119 Gn6 .3
</CsScore> </CsoundSynthesizer>
Credits
Author: Hans Mikelson February 1999 New in Csound version 3.53 The example was updated May 2002, thanks to Hans Mikelson
1359
nlfilt
nlfilt A filter with a non-linear effect.
Description
Implements the filter: Y{n} =a Y{n-1} + b Y{n-2} + d Y^2{n-L} + X{n} - C described in Dobson and Fitch (ICMC'96)
Syntax
ares nlfilt ain, ka, kb, kd, kC, kL
Performance
1. Non-linear effect. The range of parameters are: a=b=0 d = 0.8, 0.9, 0.7 C = 0.4, 0.5, 0.6 L = 20 This affects the lower register most but there are audible effects over the whole range. We suggest that it may be useful for coloring drums, and for adding arbitrary highlights to notes. 2. Low Pass with non-linear. The range of parameters are: a = 0.4 b = 0.2 d = 0.7 C = 0.11 L = 20, ... 200 There are instability problems with this variant but the effect is more pronounced of the lower register, but is otherwise much like the pure comb. Short values of L can add attack to a sound. 3. High Pass with non-linear. The range of parameters are: a = 0.35 b = -0.3 d = 0.95 C = 0,2, ... 0.4 1360
L = 200
4. High Pass with non-linear. The range of parameters are: a = 0.7 b = -0.2, ... 0.5 d = 0.9 C = 0.12, ... 0.24 L = 500, 10 The high pass version is less likely to oscillate. It adds scintillation to medium-high registers. With a large delay L it is a little like a reverberation, while with small values there appear to be formant-like regions. There are arbitrary color changes and resonances as the pitch changes. Works well with individual notes.
Warning
The "useful" ranges of parameters are not yet mapped.
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK 1997 New in version 3.44
1361
noise
noise A white noise generator with an IIR lowpass filter.
Description
A white noise generator with an IIR lowpass filter.
Syntax
ares noise xamp, kbeta
Performance
xamp -- amplitude of final output kbeta -- beta of the lowpass filter. Should be in the range of -1 to 1. The filter equation is:
where xn is the original white noise and yn is lowpass filtered noise. The higher # is, the lower the filter's cut-off frequency. The cutoff frequency is roughly sr * ((1-kbeta)/2).
Examples
Here is an example of the noise opcode. It uses the file noise.csd [examples/noise.csd].
1362
instr 1 kamp = 30000 ; Change the beta value linearly from 0 to 1. kbeta line 0, p3, 1 a1 noise kamp, kbeta out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the noise opcode controlling the kbeta parameter with a GUI interface. It uses the file noise-2.csd [examples/noise-2.csd].
a1 noise iamp, gkbeta printk2 gkbeta outs a1,a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one minute. i 1 0 60 e </CsScore> </CsoundSynthesizer>
Credits
1363
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK December 2000 Example written by Kevin Conder. New in Csound version 4.10
1364
noteoff
noteoff Send a noteoff message to the MIDI OUT port.
Description
Send a noteoff message to the MIDI OUT port.
Syntax
noteoff ichn, inum, ivel
Initialization
ichn -- MIDI channel number (1-16) inum -- note number (0-127) ivel -- velocity (0-127)
Performance
noteon (i-rate note on) and noteoff (i-rate note off) are the simplest MIDI OUT opcodes. noteon sends a MIDI noteon message to MIDI OUT port, and noteoff sends a noteoff message. A noteon opcode must always be followed by an noteoff with the same channel and number inside the same instrument, otherwise the note will play endlessly. These noteon and noteoff opcodes are useful only when introducing a timout statement to play a nonzero duration MIDI note. For most purposes, it is better to use noteondur and noteondur2.
See Also
noteon, noteondur, noteondur2
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1365
noteon
noteon Send a noteon message to the MIDI OUT port.
Description
Send a noteon message to the MIDI OUT port.
Syntax
noteon ichn, inum, ivel
Initialization
ichn -- MIDI channel number (1-16) inum -- note number (0-127) ivel -- velocity (0-127)
Performance
noteon (i-rate note on) and noteoff (i-rate note off) are the simplest MIDI OUT opcodes. noteon sends a MIDI noteon message to MIDI OUT port, and noteoff sends a noteoff message. A noteon opcode must always be followed by an noteoff with the same channel and number inside the same instrument, otherwise the note will play endlessly. These noteon and noteoff opcodes are useful only when introducing a timout statement to play a nonzero duration MIDI note. For most purposes, it is better to use noteondur and noteondur2.
See Also
noteoff, noteondur, noteondur2
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1366
noteondur
noteondur Sends a noteon and a noteoff MIDI message both with the same channel, number and velocity.
Description
Sends a noteon and a noteoff MIDI message both with the same channel, number and velocity.
Syntax
noteondur ichn, inum, ivel, idur
Initialization
ichn -- MIDI channel number (1-16) inum -- note number (0-127) ivel -- velocity (0-127) idur -- how long, in seconds, this note should last.
Performance
noteondur (i-rate note on with duration) sends a noteon and a noteoff MIDI message both with the same channel, number and velocity. Noteoff message is sent after idur seconds are elapsed by the time noteondur was active. noteondur differs from noteondur2 in that noteondur truncates note duration when current instrument is deactivated by score or by real-time playing, while noteondur2 will extend performance time of current instrument until idur seconds have elapsed. In real-time playing, it is suggested to use noteondur also for undefined durations, giving a large idur value. Any number of noteondur opcodes can appear in the same Csound instrument, allowing chords to be played by a single instrument.
Examples
Here is an example of the noteondur opcode. It uses the file noteondur.csd [examples/noteondur.csd].
1367
; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d -M0 -Q1;;;RT audio I/O with MIDI in </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; Example by Giorgio Zucco 2007 instr 1 ;Turned on by MIDI notes on channel 1
ifund notnum ivel veloc idur = 1 ;chord with single key noteondur 1, ifund, noteondur 1, ifund+3, noteondur 1, ifund+7, noteondur 1, ifund+9, endin </CsInstruments> <CsScore> ; Play Instrument #1 for 60 seconds. i1 0 60 </CsScore> </CsoundSynthesizer> ivel, ivel, ivel, ivel, idur idur idur idur
See Also
noteoff, noteon, noteondur2, midion, midion2
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1368
noteondur2
noteondur2 Sends a noteon and a noteoff MIDI message both with the same channel, number and velocity.
Description
Sends a noteon and a noteoff MIDI message both with the same channel, number and velocity.
Syntax
noteondur2 ichn, inum, ivel, idur
Initialization
ichn -- MIDI channel number (1-16) inum -- note number (0-127) ivel -- velocity (0-127) idur -- how long, in seconds, this note should last.
Performance
noteondur2 (i-rate note on with duration) sends a noteon and a noteoff MIDI message both with the same channel, number and velocity. Noteoff message is sent after idur seconds are elapsed by the time noteondur2 was active. noteondur differs from noteondur2 in that noteondur truncates note duration when current instrument is deactivated by score or by real-time playing, while noteondur2 will extend performance time of current instrument until idur seconds have elapsed. In real-time playing, it is suggested to use noteondur also for undefined durations, giving a large idur value. Any number of noteondur2 opcodes can appear in the same Csound instrument, allowing chords to be played by a single instrument.
Examples
Here is an example of [examples/noteondur2.csd]. the noteondur2 opcode. It uses the file noteondur2.csd
1369
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d -M0 -Q1;;;RT audio I/O with MIDI in </CsOptions> <CsInstruments> sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 ; Example by Giorgio Zucco 2007 instr 1 ifund notnum ivel veloc idur = 1 ;chord with single key noteondur2 1, ifund, ivel, idur noteondur2 1, ifund+3, ivel, idur noteondur2 1, ifund+7, ivel, idur noteondur2 1, ifund+9, ivel, idur endin
See Also
noteoff, noteon, noteondur, midion, midion2
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1370
notnum
notnum Get a note number from a MIDI event.
Description
Get a note number from a MIDI event.
Syntax
ival notnum
Performance
Get the MIDI byte value (0 - 127) denoting the note number of the current event.
Examples
Here is an example of the notnum opcode. It uses the file notnum.csd [examples/notnum.csd].
1371
Here is an example of the notnum opcode used to produce audio output. It uses the file notnum_complex.csd [examples/notnum_complex.csd]
; Returns MIDI note number - an integer in range (0-127) iNum notnum ; Convert MIDI note number to Hz iHz = (440.0*exp(log(2.0)*((iNum)-69.0)/12.0)) ; Generate audio by indexing a table; fixed amplitude. aosc oscil 10000, iHz, 1 ; Since there is no enveloping, there will be clicks. outs aosc, aosc endin </CsInstruments> <CsScore> ; Generate a Sine-wave to be indexed at audio rate ; by the oscil opcode. f1 0 16384 10 1 ; Keep the score "open" for 1 hour so that MIDI ; notes can allocate new note events, arbitrarily. f0 3600 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Examples written by Kevin Conder and David Akbari.
1372
nreverb
nreverb A reverberator consisting of 6 parallel comb-lowpass filters.
Description
This is a reverberator consisting of 6 parallel comb-lowpass filters being fed into a series of 5 allpass filters. nreverb replaces reverb2 (version 3.48) and so both opcodes are identical.
Syntax
ares nreverb asig, ktime, khdif [, iskip] [,inumCombs] [, ifnCombs] \ [, inumAlpas] [, ifnAlpas]
Initialization
iskip (optional, default=0) -- Skip initialization if present and non-zero. inumCombs (optional) -- number of filter constants in comb filter. If omitted, the values default to the nreverb constants. New in Csound version 4.09. ifnCombs - function table with inumCombs comb filter time values, followed the same number of gain values. The ftable should not be rescaled (use negative fgen number). Positive time values are in seconds. The time values are converted internally into number of samples, then set to the next greater prime number. If the time is negative, it is interpreted directly as time in sample frames, and no processing is done (except negation). New in Csound version 4.09. inumAlpas, ifnAlpas (optional) -- same as inumCombs/ifnCombs, for allpass filter. New in Csound 4.09.
Performance
The input signal asig is reverberated for ktime seconds. The parameter khdif controls the high frequency diffusion amount. The values of khdif should be from 0 to 1. If khdif is set to 0 the all the frequencies decay with the same speed. If khdif is 1, high frequencies decay faster than lower ones. If ktime is inadvertently set to a non-positive number, ktime will be reset automatically to 0.01. (New in Csound version 4.07.) As of Csound version 4.09, nreverb may read any number of comb and allpass filter from an ftable.
Examples
Here is a simple example of the nreverb opcode. It uses the file nreverb.csd [examples/nreverb.csd].
1373
; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o nreverb.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 gaout init 0
instr 1 a1 oscil 15000, 440, 1 out a1 gaout = gaout+a1 endin instr 99 a2 nreverb gaout, 2, .3 out a2*.15 gaout = 0 endin </CsInstruments> <CsScore> ; Table 1: an ordinary sine wave. f 1 0 32768 10 1 i i i i i i e 1 0 .5 1 1 .5 1 2 .5 1 3 .5 1 4 .5 99 0 9 ;volume of reverb
</CsScore> </CsoundSynthesizer>
Here is an example of the nreverb opcode using an ftable for filter constants. It uses the file nreverb_ftable.csd [examples/nreverb_ftable.csd], and beats.wav [examples/beats.wav].
Example 392. An example of the nreverb opcode using an ftable for filter constants.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o nreverb_ftable.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 a1 soundin "beats.wav" a2 nreverb a1, 1.5, .75, 0, 8, 71, 4, 72
1374
out a1 + a2 * .4 endin </CsInstruments> <CsScore> ; freeverb time constants, as direct (negative) sample, with arbitrary gains f71 0 16 -2 -1116 -1188 -1277 -1356 -1422 -1491 -1557 -1617 0.8 0.79 0.78 f72 0 16 i1 0 3 e </CsScore> </CsoundSynthesizer> -2 -556 -441 -341 -225 0.7 0.72 0.74 0.76 0.77 0.76 0.75
0.74
Credits
Authors: Paris Smaragdis (reverb2) MIT, Cambridge 1995 Author: Richard Karpen (nreverb) Seattle, Wash 1998
1375
nrpn
nrpn Sends a Non-Registered Parameter Number to the MIDI OUT port.
Description
Sends a NPRN (Non-Registered Parameter Number) message to the MIDI OUT port each time one of the input arguments changes.
Syntax
nrpn kchan, kparmnum, kparmvalue
Performance
kchan -- MIDI channel (1-16) kparmnum -- number of NRPN parameter kparmvalue -- value of NRPN parameter This opcode sends new message when the MIDI translated value of one of the input arguments changes. It operates at k-rate. Useful with the MIDI instruments that recognize NRPNs (for example with the newest sound-cards with internal MIDI synthesizer such as SB AWE32, AWE64, GUS etc. in which each patch parameter can be changed during the performance via NRPN)
Credits
Author: Gabriel Maldonado Italy 1998 New in Csound version 3.492 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1376
nsamp
nsamp Returns the number of samples loaded into a stored function table number.
Description
Returns the number of samples loaded into a stored function table number.
Syntax
nsamp(x) (init-rate args only)
Performance
Returns the number of samples loaded into stored function table number x by GEN01. This is useful when a sample is shorter than the power-of-two function table that holds it. New in Csound version 3.49. As of Csound version 5.02, nsamp works with deferred-length function tables (see GEN01). nsamp differs from ftlen in that nsamp gives the number of sample frames loaded, while ftlen gives the total number of samples. For example, with a stereo sound file of 10000 samples, ftlen() would return 19999 (i.e. a total of 20000 mono samples, not including a guard point), but nsamp() returns 10000.
Examples
Here is an example of the nsamp opcode. It uses the file nsamp.csd [examples/nsamp.csd], and mary.wav [examples/mary.wav].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Print out the size (in samples) of Table #1. isz = nsamp(1) print isz endin
1377
</CsInstruments> <CsScore> ; Table #1: Use an audio file. f 1 0 262144 1 "mary.wav" 0 0 0 ; Play Instrument #1 for 1 second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Since the audio file mary.wav has 154390 samples, its output should include a line like this:
instr 1: isz = 154390.000
See Also
ftchnls, ftlen, ftlptim, ftsr
Credits
Author: Gabriel Maldonado Italy October 1998 Example written by Kevin Conder.
1378
nstrnum
nstrnum Returns the number of a named instrument.
Description
Returns the number of a named instrument.
Syntax
insno nstrnum "name"
Initialization
insno -- the instrument number of the named instrument.
Performance
"name" -- the named instrument's name. If an instrument with the specified name does not exist, an init error occurs, and -1 is returned.
Credits
Author: Istvan Varga New in version 4.23 Written in the year 2002.
1379
ntrpol
ntrpol Calculates the weighted mean value of two input signals.
Description
Calculates the weighted mean value (i.e. linear interpolation) of two input signals
Syntax
ares ntrpol asig1, asig2, kpoint [, imin] [, imax] ires ntrpol isig1, isig2, ipoint [, imin] [, imax] kres ntrpol ksig1, ksig2, kpoint [, imin] [, imax]
Initialization
imin -- minimum xpoint value (optional, default 0) imax -- maximum xpoint value (optional, default 1)
Performance
xsig1, xsig2 -- input signals xpoint -- interpolation point between the two values ntrpol opcode outputs the linear interpolation between two input values. xpoint is the distance of evaluation point from the first value. With the default values of imin and imax, (0 and 1) a zero value indicates no distance from the first value and the maximum distance from the second one. With a 0.5 value, ntrpol will output the mean value of the two inputs, indicating the exact half point between xsig1 and xsig2. A 1 value indicates the maximum distance from the first value and no distance from the second one. The range of xpoint can be also defined with imin and imax to make its management easier. These opcodes are useful for crossfading two signals.
Credits
Author: Gabriel Maldonado Italy October 1998 New in Csound version 3.49
1380
octave
octave Calculates a factor to raise/lower a frequency by a given amount of octaves.
Description
Calculates a factor to raise/lower a frequency by a given amount of octaves.
Syntax
octave(x)
Initialization
x -- a value expressed in octaves.
Performance
The value returned by the octave function is a factor. You can multiply a frequency by this factor to raise/lower it by the given amount of octaves.
Examples
Here is an example of the octave opcode. It uses the file octave.csd [examples/octave.csd].
1381
ifactor = octave(ioctaves) inew = iroot * ifactor ; Print out of all of the values. print iroot print ifactor print inew endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
cent, db, semitone
Credits
Example written by Kevin Conder. New in version 4.16
1382
octcps
octcps Converts a cycles-per-second value to octave-point-decimal.
Description
Converts a cycles-per-second value to octave-point-decimal.
Syntax
octcps (cps) (init- or control-rate args only)
Performance
octcps and its related opcodes are really value converters with a special function of manipulating pitch data. Data concerning pitch and frequency can exist in any of the following forms:
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equaltempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
1383
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the octcps opcode. It uses the file octcps.csd [examples/octcps.csd].
See Also
cpsoct, cpspch, octpch, pchoct, cpsmidinn, octmidinn, pchmidinn
1384
Credits
Example written by Kevin Conder.
1385
octmidi
octmidi Get the note number, in octave-point-decimal units, of the current MIDI event.
Description
Get the note number, in octave-point-decimal units, of the current MIDI event.
Syntax
ioct octmidi
Performance
Get the note number of the current MIDI event, expressed in octave-point-decimal units, for local processing.
Examples
Here is an example of the octmidi opcode. It uses the file octmidi.csd [examples/octmidi.csd].
1386
instr 1 ; This example expects MIDI note inputs on channel 1 i1 octmidi print i1 endin </CsInstruments> <CsScore> ;Dummy f-table to give time for real-time MIDI events f 0 8000 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidib, pchbend, pchmidi, pchmidib, veloc, cpsmidinn, octmidinn, pchmidinn
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Example written by Kevin Conder.
1387
octmidib
octmidib Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in octave-point-decimal.
Description
Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in octave-point-decimal.
Syntax
ioct octmidib [irange] koct octmidib [irange]
Initialization
irange (optional) -- the pitch bend range in semitones
Performance
Get the note number of the current MIDI event, modify it by the current pitch-bend value, and express the result in octave-point-decimal units. Available as an i-time value or as a continuous k-rate value.
Examples
Here is an example of the octmidib opcode. It uses the file octmidib.csd [examples/octmidib.csd].
1388
print i1 endin </CsInstruments> <CsScore> ;Dummy f-table to give time for real-time MIDI events f 0 8000 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidi, pchbend, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Example written by Kevin Conder.
1389
octmidinn
octmidinn Converts a Midi note number value to octave-point-decimal.
Description
Converts a Midi note number value to octave-point-decimal.
Syntax
octmidinn (MidiNoteNumber) (init- or control-rate args only)
Performance
octmidinn is a function that takes an i-rate or k-rate value representing a Midi note number and returns the equivalent pitch value in Csound's octave-point-decimal format. This conversion assumes that Middle C (8.000 in oct) is Midi note number 60. Midi note number values are typically integers in the range from 0 to 127 but fractional values or values outside of this range will be interpreted consistently.
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equal1390
tempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the octmidinn opcode. It uses the file cpsmidinn.csd [examples/cpsmidinn.csd].
imidiNN = imidiNN + 1 if (imidiNN < 128) igoto loop1 endin instr 2 ; test k-rate converters kMiddleC = 60 kcps = cpsmidinn(kMiddleC)
1391
koct kpch
= octmidinn(kMiddleC) = pchmidinn(kMiddleC)
printks "%d %f %f %f\n", 1.0, kMiddleC, kcps, koct, kpch endin </CsInstruments> <CsScore> i1 0 0 i2 0 0.1 e </CsScore> </CsoundSynthesizer>
See Also
cpsmidinn, pchmidinn, octmidi, notnum, cpspch, cpsoct, octcps, octpch, pchoct
Credits
Derived from original value converters by Barry Vercoe. New in version 5.07
1392
octpch
octpch Converts a pitch-class value to octave-point-decimal.
Description
Converts a pitch-class value to octave-point-decimal.
Syntax
octpch (pch) (init- or control-rate args only)
Performance
octpch and its related opcodes are really value converters with a special function of manipulating pitch data. Data concerning pitch and frequency can exist in any of the following forms:
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equaltempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
1393
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the octpch opcode. It uses the file octpch.csd [examples/octpch.csd].
See Also
cpsoct, cpspch, octcps, pchoct, cpsmidinn, octmidinn, pchmidinn
1394
Credits
Example written by Kevin Conder.
1395
opcode
opcode Defines the start of user-defined opcode block.
Defining opcodes
The opcode and endop statements allow defining a new opcode that can be used the same way as any of the built-in Csound opcodes. These opcode blocks are very similar to instruments (and are, in fact, implemented as special instruments), but cannot be called as a normal instrument e.g. with the i statements. A user-defined opcode block must precede the instrument (or other opcode) from which it is used. But it is possible to call the opcode from itself. This allows recursion of any depth that is limited only by available memory. Additionally, there is an experimental feature that allows running the opcode definition at a higher control rate than the kr value specified in the orchestra header. Similarly to instruments, the variables and labels of a user-defined opcode block are local and cannot be accessed from the caller instrument (and the opcode cannot access variables of the caller, either). Some parameters are automatically copied at initialization, however: all p-fields (including p1) extra time (see also xtratim, linsegr, and related opcodes). This may affect the operation of linsegr/expsegr/linenr/envlpxr in the user-defined opcode block. MIDI parameters, if there are any. Also, the release flag (see the release opcode) is copied at performance time. Modifying the note duration in the opcode definition by assigning to p3, or using ihold, turnoff, xtratim, linsegr, or similar opcodes will also affect the caller instrument. Changes to MIDI controllers (for example with ctrlinit) will also apply to the instrument from which the opcode was called. Use the setksmps opcode to set the local ksmps value. The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument. The types of input and output variables are defined by the parameters intypes and outtypes.
Tip
You can create UDOs which take no inputs or outputs by using 0 instead of a string.
Notes
xin and xout should be called only once, and xin should precede xout, otherwise an init error and deactivation of the current instrument may occur. These opcodes actually run only at i-time. Performance time copying is done by the user 1396
opcode call. This means that skipping xin or xout with kgoto has no effect, while skipping with igoto affects both init and performance time operation.
Syntax
opcode name, outtypes, intypes
Initialization
name -- name of the opcode. It may consist of any combination of letters, digits, and underscore but should not begin with a digit. If an opcode with the specified name already exists, it is redefined (a warning is printed in such cases). Some reserved words (like instr and endin) cannot be redefined. intypes -- list of input types, any combination of the characters: a, k, K, i, o, p, and j. A single 0 character can be used if there are no input arguments. Double quotes and delimiter characters (e.g. comma) are not needed. The meaning of the various intypes is shown in the following table: Type a i j k K o p S Description a-rate variable i-rate variable Variable lowed a-rate i-rate Types Al- Updated At a-rate i-time i-time k-rate i-time and k-rate i-time i-time i-time
optional i-time, defaults i-rate, constant to -1 k-rate variable k- and i-rate, constant k-rate with initialization k- and i-rate, constant optional i-time, defaults i-rate, constant to 0 optional i-time, defaults i-rate, constant to 1 string variable i-rate string
The maximum allowed number of input arguments is 256. outtypes -- list of output types. The format is the same as in the case of intypes. Here are the available outtypes: Type a i k K Description a-rate variable i-rate variable k-rate variable Variable lowed a-rate i-rate k-rate Types Al- Updated At a-rate i-time k-rate i-time and k-rate
iksmps (optional, default=0) -- sets the local ksmps value. Must be a positive integer, and also the ksmps of the calling instrument or opcode must be an integer multiple of this value. For example, if ksmps is 10 in the instrument from which the opcode was called, the allowed values for iksmps are 1, 2, 5, and 10. If iksmps is set to zero, the ksmps of the caller instrument or opcode is used (this is the default behavior).
Note
The local ksmps is implemented by splitting up a control period into smaller sub-kperiods and temporarily modifying internal Csound global variables. This also requires converting the rate of k-rate input and output arguments (input variables receive the same value in all sub-kperiods, while outputs are written only in the last one).
Performance
The syntax of a user-defined opcode block is as follows:
opcode name, outtypes, intypes xinarg1 [, xinarg2] [, xinarg3] ... [xinargN] xin [setksmps iksmps] ... the rest of the instrument's code. xout xoutarg1 [, xoutarg2] [, xoutarg3] ... [xoutargN]
1398
endop
The new opcode can then be used with the usual syntax:
[xoutarg1] [, xoutarg2] ... [xoutargN] name [xinarg1] [, xinarg2] ... [xinargN] [, iksmps]
Note
The opcode call is always executed both at initialization and performance time, even if there are no a- or k-rate arguments. If there are many user opcode calls that are known to have no effect at performance time in an instrument, then it may save some CPU time to jump over groups of such opcodes with kgoto.
Examples
Here is an example of [examples/opcode_example.csd]. a user-defined opcode. It uses the file opcode.csd
according to platform audio I/O only the line below: for file output any platform
/* example opcode 1: simple oscillator */ opcode Oscillator, a, kk kamp, kcps xin a1 vco2 kamp, kcps xout a1 endop /* example opcode 2: lowpass filter with local ksmps */ opcode Lowpass, a, akk setksmps 1 ain, ka1, ka2 xin aout init 0 aout = ain*ka1 + aout*ka2 xout aout endop /* example opcode 3: recursive call */ opcode RecursiveLowpass, a, akkpp ain, ka1, ka2, idep, icnt xin if (icnt >= idep) goto skip1 ; read input parameters ; check if max depth reached ; ; ; ; ; need sr=kr read input parameters initialize output simple tone-like filter write output ; read input parameters ; sawtooth oscillator ; write output
1399
RecursiveLowpass ain, ka1, ka2, idep, icnt + 1 Lowpass ain, ka1, ka2 xout aout endop ; call filter ; write output
/* example opcode 4: de-click envelope */ opcode DeClick, a, a ain aenv xin linseg 0, 0.02, 1, p3 - 0.05, 1, 0.02, 0, 0.01, 0 xout ain * aenv ; apply envelope and write output endop /* instr 1 uses the example opcodes */ instr 1 kamp kcps a1 kflt a1 a1 = 20000 ; amplitude expon 50, p3, 500 ; pitch Oscillator kamp, kcps ; call oscillator linseg 0.4, 1.5, 0.4, 1, 0.8, 1.5, 0.8 ; filter envelope RecursiveLowpass a1, kflt, 1 - kflt, 10 ; 10th order lowpass DeClick a1 out a1 endin </CsInstruments> <CsScore> i 1 0 4 e </CsScore> </CsoundSynthesizer>
See Also
endop, setksmps, xin, xout
Credits
Author: Istvan Varga, 2002; based on code by Matt J. Ingalls New in version 4.22
1400
OSCsend
OSCsend Sends data to other processes using the OSC protocol
Description
Uses the OSC protocol to send message to other OSC listening processes.
Syntax
OSCsend kwhen, ihost, iport, idestination, itype [, kdata1, kdata2, ...]
Initialization
ihost -- a string that is the intended host computer domain name. An empty string is interpreted as the current computer. iport -- the number of the port that is used for the communication. idest -- a string that is the destination address. This takes the form of a file name with directories. Csound just passes this string to the raw sending code and makes no interpretation. itype -- a string that indicates the types of the optional arguments that are read at k-rate. The string can contain the characters "bcdfilmst" which stand for Boolean, character, double, float, 32-bit integer, 64-bit integer, MIDI, string and timestamp.
Performance
kwhen -- a message is sent whenever this value changes. A message will always be sent on the first call. The data is taken from the k-values that follow the format string. In a similar way to a printf format, the characters in order determine how the argument is interpreted. Note that a time stamp takes two arguments.
Example
The example shows a simple instrument, which when called, sends a group of 3 messages to a computer called "xenakis", on port 7770, to be read by a process that recognises /foo/bar as its address.
See the entry for OSClisten, for an example of send/recieve usage using OSC.
See Also
OSClisten, OSCinit
1401
Credits
Author: John ffitch 2005
1402
OSCinit
OSCinit Start a listening process for OSC messages to a particular port.
Description
Starts a listening process, which can be used by OSClisten.
Syntax
ihandle OSCinit iport
Initialization
ihandle -- handle returned that can be passed to any number of OSClisten opcodes to receive messages on this port. iport -- the port on which to listen.
Performance
The listener runs in the background. See OSClisten for details.
Example
The example shows a pair of floating point numbers being received on port 7770.
sr = 44100 ksmps = 100 nchnls = 2 gihandle OSCinit 7770 instr 1 kf1 init 0 kf2 init 0 nxtmsg: kk OSClisten gihandle, "/foo/bar", "ff", kf1, kf2 if (kk == 0) goto ex printk 0,kf1 printk 0,kf2 kgoto nxtmsg ex: endin
Credits
Author: John ffitch 2005
1403
OSClisten
OSClisten Listen for OSC messages to a particular path.
Description
On each k-cycle looks to see if an OSC message has been send to a given path of a given type.
Syntax
kans OSClisten ihandle, idest, itype [, xdata1, xdata2, ...]
Initialization
ihandle -- a handle returned by an earlier call to OSCinit, to associate OSClisten with a particular port number. idest -- a string that is the destination address. This takes the form of a file name with directories. Csound uses this address to decide if messages are meant for csound. itype -- a string that indicates the types of the optional arguments that are to be read. The string can contain the characters "cdfhis" which stand for character, double, float, 64-bit integer, 32-bit integer, and string. All types other than 's' require a k-rate variable, while 's' requires a string variable. A handler is inserted into the listener (see OSCinit) to intercept messages of this pattern.
Performance
kans -- set to 1 if a new message was received, or zero if not. If multiple messages are received in a single control period, the messages are buffered, and OSClisten can be called again until zero is returned. If there was a message the xdata variables are set to the incoming values, as interpretted by the itype parameter. Note that although the xdata variables are on the right of an operation they are actually outputs, and so must be variables of type k, gk, S, or gS, and may need to be declared with init, or = in the case of string variables, before calling OSClisten.
Example
The example shows a pair of floating point numbers being received on port 7770.
sr = 44100 ksmps = 100 nchnls = 2 gihandle OSCinit 7770 instr 1 kf1 init 0 kf2 init 0 nxtmsg: kk OSClisten gihandle, "/foo/bar", "ff", kf1, kf2 if (kk == 0) goto ex printk 0,kf1 printk 0,kf2
1404
Below are two .csd files which demonstrate the usage of the OSC opcodes. They use the files OSCmidisend.csd [examples/OSCmidisend.csd] and OSCmidircv.csd [examples/OSCmidircv.csd].
; Example by David Akbari 2007 ; Modified by Jonathan Murphy ; Use this file to generate OSC events for OSCmidircv.csd #define IPADDRESS # "localhost" # #define PORT # 47120 # turnon 1000 instr 1000 kst, kch, kd1, kd2 OSCsend endin </CsInstruments> <CsScore> f 0 3600 ;Dummy f-table e </CsScore> </CsoundSynthesizer> midiin
1405
; Example by Jonathan Murphy and Andres Cabrera 2007 ; Use file OSCmidisend.csd to generate OSC events for this file 0dbfs gilisten gisin givel gicc = 1 47120 1, 0, 16384, 10, 1 2, 0, 128, -2, 0 3, 0, 128, -7, 100, 128, 100
202, 0, 32, -2, 12, 2, 256, 60, 1, 16/15, 9/8, 6/5, 5/4, 4/3, 7/5, \ 3/2, 8/5, 5/3, 9/5, 15/8, 2
#define DEST #"/midi"# ; Use controller number 7 for volume #define VOL #7# turnon 1000 instr kst kch kd1 kd2 next: kk OSClisten gilisten, $DEST, "iiii", kst, kch, kd1, kd2 1000 init init init init 0 0 0 0
if (kk == 0) goto done printks "kst = %i, kch = %i, kd1 = %i, kd2 = %i\\n", \ 0, kst, kch, kd1, kd2 if (kst == 176) then ;Store controller information in a table tablew kd2, kd1, gicc endif if (kst == 144) then ;Process noteon and noteoff messages. kkey = kd1 kvel = kd2 kcps cpstun kvel, kkey, giji_12 kamp = kvel/127 if (kvel == 0) then turnoff2 1001, 4, 1 elseif (kvel > 0) then event "i", 1001, 0, -1, kcps, kamp endif endif kgoto next done: endin ;Process all events in queue
0, .003, p5, 0.03, p5 * 0.5, 0.3, 0 aenv, icps, gisin aosc * kvol
1406
Credits
Author: John ffitch 2005 Examples by: David Akbari, Andrs Cabrera and Jonathan Murphy 2007
1407
oscbnk
oscbnk Mixes the output of any number of oscillators.
Description
This unit generator mixes the output of any number of oscillators. The frequency, phase, and amplitude of each oscillator can be modulated by two LFOs (all oscillators have a separate set of LFOs, with different phase and frequency); additionally, the output of each oscillator can be filtered through an optional parametric equalizer (also controlled by the LFOs). This opcode is most useful for rendering ensemble (strings, choir, etc.) instruments. Although the LFOs run at k-rate, amplitude, phase and filter modulation are interpolated internally, so it is possible (and recommended in most cases) to use this unit at low (1000 Hz) control rates without audible quality degradation. The start phase and frequency of all oscillators and LFOs can be set by a built-in seedable 31-bit random number generator, or specified manually in a function table (GEN2).
Syntax
ares oscbnk kcps, kamd, kfmd, kpmd, iovrlap, iseed, kl1minf, kl1maxf, \ kl2minf, kl2maxf, ilfomode, keqminf, keqmaxf, keqminl, keqmaxl, \ keqminq, keqmaxq, ieqmode, kfn [, il1fn] [, il2fn] [, ieqffn] \ [, ieqlfn] [, ieqqfn] [, itabl] [, ioutfn]
Initialization
iovrlap -- Number of oscillator units. iseed -- Seed value for random number generator (positive integer in the range 1 to 2147483646 (2 ^ 31 - 2)). iseed <= 0 seeds from the current time. ieqmode -- Parametric equalizer mode -1: disable EQ (faster) 0: peak 1: low shelf 2: high shelf 3: peak (filter interpolation disabled) 4: low shelf (interpolation disabled) 5: high shelf (interpolation disabled) The non-interpolated modes are faster, and in some cases (e.g. high shelf filter at low cutoff frequencies) also more stable; however, interpolation is useful for avoiding zipper noise at low control rates. ilfomode -- LFO modulation mode, sum of:
1408
128: LFO1 to frequency 64: LFO1 to amplitude 32: LFO1 to phase 16: LFO1 to EQ 8: LFO2 to frequency 4: LFO2 to amplitude 2: LFO2 to phase 1: LFO2 to EQ If an LFO does not modulate anything, it is not calculated, and the ftable number (il1fn or il2fn) can be omitted. il1fn (optional: default=0) -- LFO1 function table number. The waveform in this table has to be normalized (absolute value <= 1), and is read with linear interpolation. il2fn (optional: default=0) -- LFO2 function table number. The waveform in this table has to be normalized, and is read with linear interpolation. ieqffn, ieqlfn, ieqqfn (optional: default=0) -- Lookup tables for EQ frequency, level, and Q (optional if EQ is disabled). Table read position is 0 if the modulator signal is less than, or equal to -1, (table length / 2) if the modulator signal is zero, and the guard point if the modulator signal is greater than, or equal to 1. These tables have to be normalized to the range 0 - 1, and have an extended guard point (table length = power of two + 1). All tables are read with linear interpolation. itabl (optional: default=0) -- Function table storing phase and frequency values for all oscillators (optional). The values in this table are in the following order (5 for each oscillator unit): oscillator phase, lfo1 phase, lfo1 frequency, lfo2 phase, lfo2 frequency, ... All values are in the range 0 to 1; if the specified number is greater than 1, it is wrapped (phase) or limited (frequency) to the allowed range. A negative value (or end of table) will use the output of the random number generator. The random seed is always updated (even if no random number was used), so switching one value between random and fixed will not change others. ioutfn (optional: default=0) -- Function table to write phase and frequency values (optional). The format is the same as in the case of itabl. This table is useful when experimenting with random numbers to record the best values. The two optional tables (itabl and ioutfn) are accessed only at i-time. This is useful to know, as the tables can be safely overwritten after opcode initialization, which allows precalculating parameters at itime and storing in a temporary table before oscbnk initialization.
Performance
ares -- Output signal. kcps -- Oscillator frequency in Hz. kamd -- AM depth (0 - 1). 1409
(AM output) = (AM input) * ((1 - (AM depth)) + (AM depth) * (modulator)) If ilfomode isn't set to modulate the amplitude, then (AM output) = (AM input) regardless of the value of kamd. That means that kamd will have no effect. Note: Amplitude modulation is applied before the parametric equalizer. kfmd -- FM depth (in Hz). kpmd -- Phase modulation depth. kl1minf, kl1maxf -- LFO1 minimum and maximum frequency in Hz. kl2minf, kl2maxf -- LFO2 minimum and maximum frequency in Hz. (Note: oscillator and LFO frequencies are allowed to be zero or negative.) keqminf, keqmaxf -- Parametric equalizer minimum and maximum frequency in Hz. keqminl, keqmaxl -- Parametric equalizer minimum and maximum level. keqminq, keqmaxq -- Parametric equalizer minimum and maximum Q. kfn -- Oscillator waveform table. Table number can be changed at k-rate (this is useful to select from a set of band-limited tables generated by GEN30, to avoid aliasing). The table is read with linear interpolation.
Note
oscbnk uses the same random number generator as rnd31. So reading its documentation is also recommended.
Examples
Here is an example of oscbnk opcode. It uses the file oscbnk.csd [examples/oscbnk.csd].
1410
ga02 init 0 /* i_ /* i_ /* i_ /* i_ /* i_ /* i_ sawtooth wave */ ftgen 1, 0, 16384, 7, 1, 16384, -1 FM waveform */ ftgen 3, 0, 4096, 7, 0, 512, 0.25, 512, 1, 512, 0.25, 512, \ 0, 512, -0.25, 512, -1, 512, -0.25, 512, 0 AM waveform */ ftgen 4, 0, 4096, 5, 1, 4096, 0.01 FM to EQ */ ftgen 5, 0, 1024, 5, 1, 512, 32, 512, 1 sine wave */ ftgen 6, 0, 1024, 10, 1 room parameters */ ftgen 7, 0, 64, -2, 4, 50, -1, -1, -1, 11, \ 1, 26.833, 0.05, 0.85, 10000, 0.8, 0.5, 2, \ 1, 1.753, 0.05, 0.85, 5000, 0.8, 0.5, 2, \ 1, 39.451, 0.05, 0.85, 7000, 0.8, 0.5, 2, \ 1, 33.503, 0.05, 0.85, 7000, 0.8, 0.5, 2, \ 1, 36.151, 0.05, 0.85, 7000, 0.8, 0.5, 2, \ 1, 29.633, 0.05, 0.85, 7000, 0.8, 0.5, 2
/* generate bandlimited sawtooth waves */ i0 = 0 loop1: imaxh = sr / (2 * 440.0 * exp (log(2.0) * (i0 - 69) / 12)) i_ ftgen i0 + 256, 0, 4096, -30, 1, 1, imaxh i0 = i0 + 1 if (i0 < 127.5) igoto loop1 instr 1 p3 = p3 + 0.4
; note frequency kcps = 440.0 * exp (log(2.0) * (p4 - 69) / 12) ; lowpass max. frequency klpmaxf limit 64 * kcps, 1000.0, 12000.0 ; FM depth in Hz kfmd1 = 0.02 * kcps ; AM frequency kamfr = kcps * 0.02 kamfr2 = kcps * 0.1 ; table number kfnum = (256 + 69 + 0.5 + 12 * log(kcps / 440.0) / log(2.0)) ; amp. envelope aenv linseg 0, 0.1, 1.0, p3 - 0.5, 1.0, 0.1, 0.5, 0.2, 0, 1.0, 0 /* oscillator / left */ a1 oscbnk kcps, 0.0, kfmd1, 0.0, 40, 200, 0.1, 0.2, 0, 0, 144, \ 0.0, klpmaxf, 0.0, 0.0, 1.5, 1.5, 2, kfnum, 3, 0, 5, 5, 5 a2 oscbnk kcps, 1.0, kfmd1, 0.0, 40, 201, 0.1, 0.2, kamfr, kamfr2, 148, 0, 0, 0, 0, 0, 0, -1, kfnum, 3, 4 a2 pareq a2, kcps * 8, 0.0, 0.7071, 2 a0 = a1 + a2 * 0.12 /* delay */ adel = 0.001 a01 vdelayx a0, adel, 0.01, 16 a_ oscili 1.0, 0.25, 6, 0.0 adel = adel + 1.0 / (exp(log(2.0) * a_) * 8000) a02 vdelayx a0, adel, 0.01, 16 a0 = a01 + a02 ga01 = ga01 + a0 * aenv * 2500 \ \ \
/* oscillator / right */ ; lowpass max. frequency a1 oscbnk kcps, 0.0, kfmd1, 0.0, 40, 202, 0.1, 0.2, 0, 0, 144, \ 0.0, klpmaxf, 0.0, 0.0, 1.0, 1.0, 2, kfnum, 3, 0, 5, 5, 5 a2 oscbnk kcps, 1.0, kfmd1, 0.0, 40, 203, 0.1, 0.2, kamfr, kamfr2, 148, 0, 0, 0, 0, 0, 0, -1, kfnum, 3, 4 a2 pareq a2, kcps * 8, 0.0, 0.7071, 2 a0 = a1 + a2 * 0.12 \ \ \
1411
/* delay */ adel = 0.001 a01 vdelayx a0, adel, 0.01, 16 a_ oscili 1.0, 0.25, 6, 0.25 adel = adel + 1.0 / (exp(log(2.0) * a_) * 8000) a02 vdelayx a0, adel, 0.01, 16 a0 = a01 + a02 ga02 = ga02 + a0 * aenv * 2500 endin /* output / left */ instr 81 i1 = 0.000001 aLl, aLh, aRl, aRh spat3di ga01 + i1*i1*i1*i1, -8.0, 4.0, 0.0, 0.3, 7, 4 ga01 = 0 aLl butterlp aLl, 800.0 aRl butterlp aRl, 800.0 outs aLl + aLh, aRl + aRh endin /* output / right */ instr 82 i1 = 0.000001 aLl, aLh, aRl, aRh spat3di ga02 + i1*i1*i1*i1, 8.0, 4.0, 0.0, 0.3, 7, 4 ga02 = 0 aLl butterlp aLl, 800.0 aRl butterlp aRl, 800.0 outs aLl + aLh, aRl + aRh endin </CsInstruments> <CsScore> /* Written by Istvan Varga */ t 0 60 i i i i 1 1 1 1 0 0 0 0 4 4 4 4 41 60 65 69
Credits
Author: Istvan Varga 2001 New in version 4.15 Updated April 2002 by Istvan Varga
1412
oscil
oscil A simple oscillator.
Description
oscil reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp.
Syntax
ares oscil xamp, xcps, ifn [, iphs] kres oscil kamp, kcps, ifn [, iphs]
Initialization
ifn -- function table number. Requires a wrap-around guard point. iphs (optional, default=0) -- initial phase of sampling, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.
Performance
kamp, xamp -- amplitude kcps, xcps -- frequency in cycles per second. The oscil opcode generates periodic control (or audio) signals consisting of the value of kamp (xamp) times the value returned from control rate (audio rate) sampling of a stored function table. The internal phase is simultaneously advanced in accordance with the kcps or xcps input value. Table ifn is incrementally sampled modulo the table length and the value obtained is multiplied by amp. If you need to change the oscillator table with a k-rate signal, you can use oscilikt.
Examples
Here is an example of the oscil opcode. It uses the file oscil.csd [examples/oscil.csd].
1413
<CsInstruments> ; Initialize the global variables. sr = 44100 ksmps = 10 nchnls = 2 ; Instrument #1 - a basic oscillator. instr 1 kamp = 10000 kcps = 440 ifn = p4 asig oscil kamp, kcps, ifn outs asig,asig endin </CsInstruments> <CsScore> ; f ; f Table #1, 1 0 16384 Table #2, 2 0 256 7 a sine wave. 10 1 a sawtooth wave -1 256 1
i 1 0 2 1 i 1 + 2 2 e </CsScore> </CsoundSynthesizer>
See Also
oscili, oscilikt, oscil3, poscil, poscil3
1414
oscil1
oscil1 Accesses table values by incremental sampling.
Description
Accesses table values by incremental sampling.
Syntax
kres oscil1 idel, kamp, idur, ifn
Initialization
idel -- delay in seconds before oscil1 incremental sampling begins. idur -- duration in seconds to sample through the oscil1 table just once. A zero or negative value will cause all initialization to be skipped. ifn -- function table number. tablei, oscil1i require the extended guard point.
Performance
kamp -- amplitude factor. oscil1 accesses values by sampling once through the function table at a rate determined by idur. For the first idel seconds, the point of scan will reside at the first location of the table; it will then begin moving through the table at a constant rate, reaching the end in another idur seconds; from that time on (i.e. after idel + idur seconds) it will remain pointing at the last location. Each value obtained from sampling is then multiplied by an amplitude factor kamp before being written into the result.
See Also
table, tablei, table3, oscil1i, osciln
1415
oscil1i
oscil1i Accesses table values by incremental sampling with linear interpolation.
Description
Accesses table values by incremental sampling with linear interpolation.
Syntax
kres oscil1i idel, kamp, idur, ifn
Initialization
idel -- delay in seconds before oscil1i incremental sampling begins. idur -- duration in seconds to sample through the oscil1i table just once. A zero or negative value will cause all initialization to be skipped. ifn -- function table number. oscil1i requires the extended guard point.
Performance
kamp -- amplitude factor oscil1i is an interpolating unit in which the fractional part of index is used to interpolate between adjacent table entries. The smoothness gained by interpolation is at some small cost in execution time (see also oscili, etc.), but the interpolating and non-interpolating units are otherwise interchangeable.
See Also
table, tablei, table3, oscil1, osciln
1416
oscil3
oscil3 A simple oscillator with cubic interpolation.
Description
oscil3 reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp. Cubic interpolation is applied for table look up from internal phase values.
Syntax
ares oscil3 xamp, xcps, ifn [, iphs] kres oscil3 kamp, kcps, ifn [, iphs]
Initialization
ifn -- function table number. Requires a wrap-around guard point. iphs (optional) -- initial phase of sampling, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.
Performance
kamp, xamp -- amplitude kcps, xcps -- frequency in cycles per second. oscil3 is identical to oscili, except that it uses cubic interpolation. Table ifn is incrementally sampled modulo the table length and the value obtained is multiplied by amp. If you need to change the oscillator table with a k-rate signal, you can use oscilikt.
Examples
Here is an example of the oscil3 opcode. It uses the file oscil3.csd [examples/oscil3.csd].
1417
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a basic oscillator. instr 1 kamp = 10000 kcps = 220 ifn = 1 a1 oscil kamp, kcps, ifn out a1 endin ; Instrument #2 - the basic oscillator with cubic interpolation. instr 2 kamp = 10000 kcps = 220 ifn = 1 a1 oscil3 kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave table with a small amount of data. f 1 0 32 10 0 1 ; Play Instrument #1, the basic oscillator, for ; two seconds. This should sound relatively rough. i 1 0 2 ; Play Instrument #2, the cubic interpolated oscillator, for ; two seconds. This should sound relatively smooth. i 2 2 2 e </CsScore> </CsoundSynthesizer>
See Also
oscil, oscili, oscilikt
Credits
Author: John ffitch Example written by Kevin Conder. New in Csound version 3.50
1418
oscili
oscili A simple oscillator with linear interpolation.
Description
oscili reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp. Linear interpolation is applied for table look up from internal phase values.
Syntax
ares oscili xamp, xcps, ifn [, iphs] kres oscili kamp, kcps, ifn [, iphs]
Initialization
ifn -- function table number. Requires a wrap-around guard point. iphs (optional) -- initial phase of sampling, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.
Performance
kamp, xamp -- amplitude kcps, xcps -- frequency in cycles per second. oscili differs from oscil in that the standard procedure of using a truncated phase as a sampling index is here replaced by a process that interpolates between two successive lookups. Interpolating generators will produce a noticeably cleaner output signal, but they may take as much as twice as long to run. Adequate accuracy can also be gained without the time cost of interpolation by using large stored function tables of 2K, 4K or 8K points if the space is available. Table ifn is incrementally sampled modulo the table length and the value obtained is multiplied by amp. If you need to change the oscillator table with a k-rate signal, you can use oscilikt.
Examples
Here is an example of the oscili opcode. It uses the file oscili.csd [examples/oscili.csd].
1419
-odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o oscili.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a basic oscillator. instr 1 kamp = 10000 kcps = 220 ifn = 1 a1 oscil kamp, kcps, ifn out a1 endin ; Instrument #2 - the basic oscillator with extra interpolation. instr 2 kamp = 10000 kcps = 220 ifn = 1 a1 oscili kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave table with a small amount of data. f 1 0 32 10 0 1 ; Play Instrument #1, the basic oscillator, for ; two seconds. This should sound relatively rough. i 1 0 2 ; Play Instrument #2, the interpolated oscillator, for ; two seconds. This should sound relatively smooth. i 2 2 2 e </CsScore> </CsoundSynthesizer>
See Also
oscil, oscil3
Credits
Example written by Kevin Conder.
1420
oscilikt
oscilikt A linearly interpolated oscillator that allows changing the table number at k-rate.
Description
oscilikt is very similar to oscili, but allows changing the table number at k-rate. It is slightly slower than oscili (especially with high control rate), although also more accurate as it uses a 31-bit phase accumulator, as opposed to the 24-bit one used by oscili.
Syntax
ares oscilikt xamp, xcps, kfn [, iphs] [, istor] kres oscilikt kamp, kcps, kfn [, iphs] [, istor]
Initialization
iphs (optional, defaults to 0) -- initial phase in the range 0 to 1. Other values are wrapped to the allowed range. istor (optional, defaults to 0) -- skip initialization.
Performance
kamp, xamp -- amplitude. kcps, xcps -- frequency in Hz. Zero and negative values are allowed. However, the absolute value must be less than sr (and recommended to be less than sr/2). kfn -- function table number. Can be varied at control rate (useful to morph waveforms, or select from a set of band-limited tables generated by GEN30).
Examples
Here is an example of the oscilikt opcode. It uses the file oscilikt.csd [examples/oscilikt.csd].
1421
sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Generate a uni-polar (0-1) square wave. kamp1 init 1 kcps1 init 2 itype = 3 ksquare lfo kamp1, kcps1, itype ; Use kamp2 kcps2 kfn = the square wave to switch between Tables #1 and #2. init 20000 init 220 ksquare + 1
a1 oscilikt kamp2, kcps2, kfn out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1, a sine waveform. 1 0 4096 10 0 1 Table #2: a sawtooth wave 2 0 3 -2 1 0 -1
See Also
osciliktp and oscilikts.
Credits
Author: Istvan Varga Example written by Kevin Conder. New in version 4.22
1422
osciliktp
osciliktp A linearly interpolated oscillator that allows allows phase modulation.
Description
osciliktp allows phase modulation (which is actually implemented as k-rate frequency modulation, by differentiating phase input). The disadvantage is that there is no amplitude control, and frequency can be varied only at the control-rate. This opcode can be faster or slower than oscilikt, depending on the control-rate.
Syntax
ares osciliktp kcps, kfn, kphs [, istor]
Initialization
istor (optional, defaults to 0) -- Skips initialization.
Performance
ares -- audio-rate ouptut signal. kcps -- frequency in Hz. Zero and negative values are allowed. However, the absolute value must be less than sr (and recommended to be less than sr/2). kfn -- function table number. Can be varied at control rate (useful to morph waveforms, or select from a set of band-limited tables generated by GEN30). kphs -- phase (k-rate), the expected range is 0 to 1. The absolute value of the difference of the current and previous value of kphs must be less than ksmps.
Examples
Here is an example of the osciliktp opcode. It uses the file osciliktp.csd [examples/osciliktp.csd].
1423
kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1: osciliktp example instr 1 kphs line 0, p3, 4 a1x osciliktp 220.5, 1, 0 a1y osciliktp 220.5, 1, -kphs a1 = a1x - a1y out a1 * 14000 endin </CsInstruments> <CsScore> ; Table #1: Sawtooth wave f 1 0 3 -2 1 0 -1 ; Play Instrument #1 for four seconds. i 1 0 4 e </CsScore> </CsoundSynthesizer>
See Also
oscilikt and oscilikts.
Credits
Author: Istvan Varga New in version 4.22
1424
oscilikts
oscilikts A linearly interpolated oscillator with sync status that allows changing the table number at k-rate.
Description
oscilikts is the same as oscilikt. Except it has a sync input that can be used to re-initialize the oscillator to a k-rate phase value. It is slower than oscilikt and osciliktp.
Syntax
ares oscilikts xamp, xcps, kfn, async, kphs [, istor]
Initialization
istor (optional, defaults to 0) -- skip initialization.
Performance
xamp -- amplitude. xcps -- frequency in Hz. Zero and negative values are allowed. However, the absolute value must be less than sr (and recommended to be less than sr/2). kfn -- function table number. Can be varied at control rate (useful to morph waveforms, or select from a set of band-limited tables generated by GEN30). async -- any positive value resets the phase of oscilikts to kphs. Zero or negative values have no effect. kphs -- sets the phase, initially and when it is re-initialized with async.
Examples
Here is an example of the oscilikts opcode. It uses the file oscilikts.csd [examples/oscilikts.csd].
1425
kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1: oscilikts example. instr 1 ; Frequency envelope. kfrq expon 400, p3, 1200 ; Phase. kphs line 0.1, p3, 0.9 ; Sync 1 atmp1 phasor 100 ; Sync 2 atmp2 phasor 150 async diff 1 - (atmp1 + atmp2) a1 oscilikts 14000, kfrq, 1, async, 0 a2 oscilikts 14000, kfrq, 1, async, -kphs out a1 - a2 endin </CsInstruments> <CsScore> ; Table #1: Sawtooth wave f 1 0 3 -2 1 0 -1 ; Play Instrument #1 for four seconds. i 1 0 4 e </CsScore> </CsoundSynthesizer>
See Also
oscilikt and osciliktp.
Credits
Author: Istvan Varga New in version 4.22
1426
osciln
osciln Accesses table values at a user-defined frequency.
Description
Accesses table values at a user-defined frequency. This opcode can also be written as oscilx.
Syntax
ares osciln kamp, ifrq, ifn, itimes
Initialization
ifrq, itimes -- rate and number of times through the stored table. ifn -- function table number.
Performance
kamp -- amplitude factor osciln will sample several times through the stored table at a rate of ifrq times per second, after which it will output zeros. Generates audio signals only, with output values scaled by kamp.
See Also
table, tablei, table3, oscil1, oscil1i
1427
oscils
oscils A simple, fast sine oscillator
Description
Simple, fast sine oscillator, that uses only one multiply, and two add operations to generate one sample of output, and does not require a function table.
Syntax
ares oscils iamp, icps, iphs [, iflg]
Initialization
iamp -- output amplitude. icps -- frequency in Hz (may be zero or negative, however the absolute value must be less than sr/2). iphs -- start phase between 0 and 1. iflg -- sum of the following values: 2: use double precision even if Csound was compiled to use floats. This improves quality (especially in the case of long performance time), but may be up to twice as slow. 1: skip initialization.
Performance
ares -- audio output
Examples
Here is an example of the oscils opcode. It uses the file oscils.csd [examples/oscils.csd].
1428
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a fast sine oscillator. instr 1 iamp = 10000 icps = 440 iphs = 0 a1 oscils iamp, icps, iphs out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Author: Istvan Varga January 2002 Example written by Kevin Conder. New in version 4.18
1429
oscilx
oscilx Same as the osciln opcode.
Description
Same as the osciln opcode.
1430
out
out Writes mono audio data to an external device or stream.
Description
Writes mono audio data to an external device or stream.
Syntax
out asig
Performance
Sends mono audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with nchnls statement.
See Also
outh, outo, outq, outq1, outq2, outq3, outq4, outs, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997 Original in Csound v1
1431
out32
out32 Writes 32-channel audio data to an external device or stream.
Description
Writes 32-channel audio data to an external device or stream.
Syntax
out32 asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, asig10, \ asig11, asig12, asig13, asig14, asig15, asig16, asig17, asig18, \ asig19, asig20, asig21, asig22, asig23, asig24, asig25, asig26, \ asig27, asig28, asig29, asig30, asig31, asig32
Performance
out32 outputs 32 channels of audio.
See Also
outc, outch, outx, outz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1432
outc
outc Writes audio data with an arbitrary number of channels to an external device or stream.
Description
Writes audio data with an arbitrary number of channels to an external device or stream.
Syntax
outc asig1 [, asig2] [...]
Performance
outc outputs as many channels as provided. Any channels greater than nchnls are ignored. Zeros are added as necessary
See Also
out32, outch, outx, outz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1433
outch
outch Writes multi-channel audio data, with user-controllable channels, to an external device or stream.
Description
Writes multi-channel audio data, with user-controllable channels, to an external device or stream.
Syntax
outch kchan1, asig1 [, kchan2] [, asig2] [...]
Performance
outch outputs asig1 on the channel determined by kchan1, asig2 on the channel determined by kchan2, etc.
Note
The highest number for kchanX available for use with outch depends on nchnls. If kchanX is greater than nchnls, asigX will be silent. Note that outch will give a warning but not an error in this case.
See Also
out32, outc, outx, outz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1434
outh
outh Writes 6-channel audio data to an external device or stream.
Description
Writes 6-channel audio data to an external device or stream.
Syntax
outh asig1, asig2, asig3, asig4, asig5, asig6
Performance
Sends 6-channel audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with nchnls statement.
See Also
out, outo, outq, outq1, outq2, outq3, outq4, outs, outs1, outs2, soundout
Credits
Author: John ffitch Introduced before Version 3
1435
outiat
outiat Sends MIDI aftertouch messages at i-rate.
Description
Sends MIDI aftertouch messages at i-rate.
Syntax
outiat ichn, ivalue, imin, imax
Initialization
ichn -- MIDI channel number (1-16) ivalue -- floating point value imin -- minimum floating point value (converted in MIDI integer value 0) imax -- maximum floating point value (converted in MIDI integer value 127 (7 bit))
Performance
outiat (i-rate aftertouch output) sends aftertouch messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale an i-value floating-point argument according to the imin and imax values. For example, set imin = 1.0 and imax = 2.0. When the ivalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the ivalue argument receives a 1.0 value, it will send a 0 value. irate opcodes send their message once during instrument initialization.
See Also
outic14, outic, outipat, outipb, outipc, outkat, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1436
outic
outic Sends MIDI controller output at i-rate.
Description
Sends MIDI controller output at i-rate.
Syntax
outic ichn, inum, ivalue, imin, imax
Initialization
ichn -- MIDI channel number (1-16) inum -- controller number (0-127 for example 1 = ModWheel; 2 = BreathControl etc.) ivalue -- floating point value imin -- minimum floating point value (converted in MIDI integer value 0) imax -- maximum floating point value (converted in MIDI integer value 127 (7 bit))
Performance
outic (i-rate MIDI controller output) sends controller messages to the MIDI OUT device. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale an i-value floating-point argument according to the imin and imax values. For example, set imin = 1.0 and imax = 2.0. When the ivalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the ivalue argument receives a 1.0 value, it will send a 0 value. irate opcodes send their message once during instrument initialization.
See Also
outiat, outic14, outipat, outipb, outipc, outkat, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1437
outic14
outic14 Sends 14-bit MIDI controller output at i-rate.
Description
Sends 14-bit MIDI controller output at i-rate.
Syntax
outic14 ichn, imsb, ilsb, ivalue, imin, imax
Initialization
ichn -- MIDI channel number (1-16) imsb -- most significant byte controller number when using 14-bit parameters (0-127) ilsb -- least significant byte controller number when using 14-bit parameters (0-127) ivalue -- floating point value imin -- minimum floating point value (converted in MIDI integer value 0) imax -- maximum floating point value (converted in MIDI integer value 16383 (14-bit))
Performance
outic14 (i-rate MIDI 14-bit controller output) sends a pair of controller messages. This opcode can drive 14-bit parameters on MIDI instruments that recognize them. The first control message contains the most significant byte of ivalue argument while the second message contains the less significant byte. imsb and ilsb are the number of the most and less significant controller. This opcode can drive a different value of a parameter for each note currently active. It can scale an i-value floating-point argument according to the imin and imax values. For example, set imin = 1.0 and imax = 2.0. When the ivalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the ivalue argument receives a 1.0 value, it will send a 0 value. irate opcodes send their message once during instrument initialization.
See Also
outiat, outic, outipat, outipb, outipc, outkat, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47
1438
Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1439
outipat
outipat Sends polyphonic MIDI aftertouch messages at i-rate.
Description
Sends polyphonic MIDI aftertouch messages at i-rate.
Syntax
outipat ichn, inotenum, ivalue, imin, imax
Initialization
ichn -- MIDI channel number (1-16) inotenum -- MIDI note number (used in polyphonic aftertouch messages) ivalue -- floating point value imin -- minimum floating point value (converted in MIDI integer value 0) imax -- maximum floating point value (converted in MIDI integer value 127 (7 bit))
Performance
outipat (i-rate polyphonic aftertouch output) sends polyphonic aftertouch messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale an i-value floating-point argument according to the imin and imax values. For example, set imin = 1.0 and imax = 2.0. When the ivalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the ivalue argument receives a 1.0 value, it will send a 0 value. irate opcodes send their message once during instrument initialization.
See Also
outiat, outic14, outic, outipb, outipc, outkat, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1440
outipb
outipb Sends MIDI pitch-bend messages at i-rate.
Description
Sends MIDI pitch-bend messages at i-rate.
Syntax
outipb ichn, ivalue, imin, imax
Initialization
ichn -- MIDI channel number (1-16) ivalue -- floating point value imin -- minimum floating point value (converted in MIDI integer value 0) imax -- maximum floating point value (converted in MIDI integer value 127 (7 bit))
Performance
outipb (i-rate pitch bend output) sends pitch bend messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale an i-value floating-point argument according to the imin and imax values. For example, set imin = 1.0 and imax = 2.0. When the ivalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the ivalue argument receives a 1.0 value, it will send a 0 value. irate opcodes send their message once during instrument initialization.
See Also
outiat, outic14, outic, outipat, outipc, outkat, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1441
outipc
outipc Sends MIDI program change messages at i-rate
Description
Sends MIDI program change messages at i-rate
Syntax
outipc ichn, iprog, imin, imax
Initialization
ichn -- MIDI channel number (1-16) iprog -- program change number in floating point imin -- minimum floating point value (converted in MIDI integer value 0) imax -- maximum floating point value (converted in MIDI integer value 127 (7 bit))
Performance
outipc (i-rate program change output) sends program change messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale an i-value floating-point argument according to the imin and imax values. For example, set imin = 1.0 and imax = 2.0. When the ivalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the ivalue argument receives a 1.0 value, it will send a 0 value. irate opcodes send their message once during instrument initialization.
See Also
outiat, outic14, outic, outipat, outipb, outkat, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1442
outkat
outkat Sends MIDI aftertouch messages at k-rate.
Description
Sends MIDI aftertouch messages at k-rate.
Syntax
outkat kchn, kvalue, kmin, kmax
Performance
kchn -- MIDI channel number (1-16) kvalue -- floating point value kmin -- minimum floating point value (converted in MIDI integer value 0) kmax -- maximum floating point value (converted in MIDI integer value 127) outkat (k-rate aftertouch output) sends aftertouch messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale the k-value floating-point argument according to the kmin and kmax values. For example: set kmin = 1.0 and kmax = 2.0. When the kvalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the kvalue argument receives a 1.0 value, it will send a 0 value. krate opcodes send a message each time the MIDI converted value of argument kvalue changes.
See Also
outiat, outic14, outic, outipat, outipb, outipc, outkc14, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1443
outkc
outkc Sends MIDI controller messages at k-rate.
Description
Sends MIDI controller messages at k-rate.
Syntax
outkc kchn, knum, kvalue, kmin, kmax
Performance
kchn -- MIDI channel number (1-16) knum -- controller number (0-127 for example 1 = ModWheel; 2 = BreathControl etc.) kvalue -- floating point value kmin -- minimum floating point value (converted in MIDI integer value 0) kmax -- maximum floating point value (converted in MIDI integer value 127 (7 bit)) outkc (k-rate MIDI controller output) sends controller messages to MIDI OUT device. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale the k-value floating-point argument according to the kmin and kmax values. For example: set kmin = 1.0 and kmax = 2.0. When the kvalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the kvalue argument receives a 1.0 value, it will send a 0 value. krate opcodes send a message each time the MIDI converted value of argument kvalue changes.
See Also
outiat, outic14, outic, outipat, outipb, outipc, outkat, outkc14, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1444
outkc14
outkc14 Sends 14-bit MIDI controller output at k-rate.
Description
Sends 14-bit MIDI controller output at k-rate.
Syntax
outkc14 kchn, kmsb, klsb, kvalue, kmin, kmax
Performance
kchn -- MIDI channel number (1-16) kmsb -- most significant byte controller number when using 14-bit parameters (0-127) klsb -- least significant byte controller number when using 14-bit parameters (0-127) kvalue -- floating point value kmin -- minimum floating point value (converted in MIDI integer value 0) kmax -- maximum floating point value (converted in MIDI integer value 16383 (14-bit)) outkc14 (k-rate MIDI 14-bit controller output) sends a pair of controller messages. It works only with MIDI instruments which recognize them. These opcodes can drive 14-bit parameters on MIDI instruments that recognize them. The first control message contains the most significant byte of kvalue argument while the second message contains the less significant byte. kmsb and klsb are the number of the most and less significant controller. It can drive a different value of a parameter for each note currently active. It can scale the k-value floating-point argument according to the kmin and kmax values. For example: set kmin = 1.0 and kmax = 2.0. When the kvalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the kvalue argument receives a 1.0 value, it will send a 0 value. krate opcodes send a message each time the MIDI converted value of argument kvalue changes.
See Also
outiat, outic14, outic, outipat, outipb, outipc, outkat, outkc, outkpat, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges. 1445
outkpat
outkpat Sends polyphonic MIDI aftertouch messages at k-rate.
Description
Sends polyphonic MIDI aftertouch messages at k-rate.
Syntax
outkpat kchn, knotenum, kvalue, kmin, kmax
Performance
kchn -- MIDI channel number (1-16) knotenum -- MIDI note number (used in polyphonic aftertouch messages) kvalue -- floating point value kmin -- minimum floating point value (converted in MIDI integer value 0) kmax -- maximum floating point value (converted in MIDI integer value 127 (7 bit)) outkpat (k-rate polyphonic aftertouch output) sends polyphonic aftertouch messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale the k-value floating-point argument according to the kmin and kmax values. For example: set kmin = 1.0 and kmax = 2.0. When the kvalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the kvalue argument receives a 1.0 value, it will send a 0 value. krate opcodes send a message each time the MIDI converted value of argument kvalue changes.
See Also
outiat, outic14, outic, outipat, outipb, outipc, outkat, outkc14, outkc, outkpb, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1446
outkpb
outkpb Sends MIDI pitch-bend messages at k-rate.
Description
Sends MIDI pitch-bend messages at k-rate.
Syntax
outkpb kchn, kvalue, kmin, kmax
Performance
kchn -- MIDI channel number (1-16) kvalue -- floating point value kmin -- minimum floating point value (converted in MIDI integer value 0) kmax -- maximum floating point value (converted in MIDI integer value 127 (7 bit)) outkpb (k-rate pitch-bend output) sends pitch-bend messages. It works only with MIDI instruments which recognize them. It can drive a different value of a parameter for each note currently active. It can scale the k-value floating-point argument according to the kmin and kmax values. For example: set kmin = 1.0 and kmax = 2.0. When the kvalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the kvalue argument receives a 1.0 value, it will send a 0 value. krate opcodes send a message each time the MIDI converted value of argument kvalue changes.
See Also
outiat, outic14, outic, outipat, outipb, outipc, outkat, outkc14, outkc, outkpat, outkpc
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1447
outkpc
outkpc Sends MIDI program change messages at k-rate.
Description
Sends MIDI program change messages at k-rate.
Syntax
outkpc kchn, kprog, kmin, kmax
Performance
kchn -- MIDI channel number (1-16) kprog -- program change number in floating point kmin -- minimum floating point value (converted in MIDI integer value 0) kmax -- maximum floating point value (converted in MIDI integer value 127 (7 bit)) outkpc (k-rate program change output) sends program change messages. It works only with MIDI instruments which recognize them. These opcodes can drive a different value of a parameter for each note currently active. It can scale the k-value floating-point argument according to the kmin and kmax values. For example: set kmin = 1.0 and kmax = 2.0. When the kvalue argument receives a 2.0 value, the opcode will send a 127 value to the MIDI OUT device. When the kvalue argument receives a 1.0 value, it will send a 0 value. krate opcodes send a message each time the MIDI converted value of argument kvalue changes.
Examples
Here is an example of the outkpc opcode. It uses the file outkpc.csd [examples/outkpc.csd].
1448
kr = 4410 ksmps = 10 nchnls = 2 ; Example by Giorgio Zucco 2007 kprogram init 0 instr 1 ;Triggered by MIDI notes on channel 1 ifund notnum ivel veloc idur = 1 ; Sends a MIDI program change message according to ; the triggering note's velocity outkpc 1 ,ivel ,0 ,127 noteondur endin </CsInstruments> <CsScore> ; Dummy ftable f 0 60 </CsScore> </CsoundSynthesizer> 1 ,ifund ,ivel ,idur
of
the
outkpc
opcode.
It
uses
the
file
outkpc_flkt.csd
1449
See Also
outiat, outic14, outic, outipat, outipb, outipc, outkat, outkc14, outkc, outkpat, outkpb
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1450
outleta
outleta Sends an arate signal out from an instrument to a named port.
Description
Sends an arate signal out from an instrument to a named port.
Syntax
outleta Sname, asignal
Initialization
Sname -- String name of the outlet port. The name of the outlet is implicitly qualified by the instrument name or number, so it is valid to use the same outlet name in more than one instrument (but not to use the same outlet name twice in one instrument).
Performance
asignal -- audio output signal During performance, the audio output signal is sent to each instance of an instrument containing an inlet port to which this outlet has been connected using the connect opcode. The signals of all the outlets connected to an inlet are summed in the inlet.
See Also
outletk outletf inleta inletk inletf connect alwayson ftgenonce
Credits
By: Michael Gogins 2009
1451
outletk
outletk Sends a krate signal out from an instrument to a named port.
Description
Sends a krate signal out from an instrument to a named port.
Syntax
outletk Sname, ksignal
Initialization
Sname -- String name of the outlet port. The name of the outlet is implicitly qualified by the instrument name or number, so it is valid to use the same outlet name in more than one instrument (but not to use the same outlet name twice in one instrument).
Performance
ksignal -- krate output signal During performance, the krate output signal is sent to each instance of an instrument containing an inlet port to which this outlet has been connected using the connect opcode. The signals of all the outlets connected to an inlet are summed in the inlet.
See Also
outleta outletf inleta inletk inletf connect alwayson ftgenonce
Credits
By: Michael Gogins 2009
1452
outletf
outletf Sends a frate signal (fsig) out from an instrument to a named port.
Description
Sends a frate signal (fsig) out from an instrument to a named port.
Syntax
outletf Sname, fsignal
Initialization
Sname -- String name of the outlet port. The name of the outlet is implicitly qualified by the instrument name or number, so it is valid to use the same outlet name in more than one instrument (but not to use the same outlet name twice in one instrument).
Performance
fsignal -- frate output signal (fsig) During performance, the output signal is sent to each instance of an instrument containing an inlet port to which this outlet has been connected using the connect opcode. The signals of all the outlets connected to an inlet are combined in the inlet.
See Also
outleta outletk inleta inletk inletf connect alwayson ftgenonce
Credits
By: Michael Gogins 2009
1453
outo
outo Writes 8-channel audio data to an external device or stream.
Description
Writes 8-channel audio data to an external device or stream.
Syntax
outo asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8
Performance
Sends 8-channel audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with nchnls statement.
See Also
out, outh, outq, outq1, outq2, outq3, outq4, outs, outs1, outs2, soundout
Credits
Author: John ffitch New after 3.30
1454
outq
outq Writes 4-channel audio data to an external device or stream.
Description
Writes 4-channel audio data to an external device or stream.
Syntax
outq asig1, asig2, asig3, asig4
Performance
Sends 4-channel audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq1, outq2, outq3, outq4, outs, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1455
outq1
outq1 Writes samples to quad channel 1 of an external device or stream.
Description
Writes samples to quad channel 1 of an external device or stream.
Syntax
outq1 asig
Performance
Sends audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq2, outq3, outq4, outs, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1456
outq2
outq2 Writes samples to quad channel 2 of an external device or stream.
Description
Writes samples to quad channel 2 of an external device or stream.
Syntax
outq2 asig
Performance
Sends audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq1, outq3, outq4, outs, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1457
outq3
outq3 Writes samples to quad channel 3 of an external device or stream.
Description
Writes samples to quad channel 3 of an external device or stream.
Syntax
outq3 asig
Performance
Sends audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq1, outq2, outq4, outs, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1458
outq4
outq4 Writes samples to quad channel 4 of an external device or stream.
Description
Writes samples to quad channel 4 of an external device or stream.
Syntax
outq4 asig
Performance
Sends audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq1, outq2, outq3, outs, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1459
outrg
outrg Allow output to a range of adjacent audio channels on the audio output device
Description
outrg outputs audio to a range of adjacent audio channels on the audio output device.
Syntax
outrg kstart, aout1 [,aout2, aout3, ..., aoutN]
Performance
kstart - the number of the first channel of the output device to be accessed (channel numbers starts with 1, which is the first channel) aout1, aout2, ... aoutN - the arguments containing the audio to be output to the corresponding output channels. outrg allows to output a range of adjacent channels to the output device. kstart indicates the first channel to be accessed (channel 1 is the first channel). The user must be sure that the number obtained by summing kstart plus the number of accessed channels -1 is <= nchnls.
Credits
Author: Gabriel Maldonado New in version 5.06
1460
outs
outs Writes stereo audio data to an external device or stream.
Description
Writes stereo audio data to an external device or stream.
Syntax
outs asig1, asig2
Performance
Sends stereo audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq1, outq2, outq3, outq4, outs1, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1461
outs1
outs1 Writes samples to stereo channel 1 of an external device or stream.
Description
Writes samples to stereo channel 1 of an external device or stream.
Syntax
outs1 asig
Performance
Sends audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq1, outq2, outq3, outq4, outs, outs2, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1462
outs2
outs2 Writes samples to stereo channel 2 of an external device or stream.
Description
Writes samples to stereo channel 2 of an external device or stream.
Syntax
outs2 asig
Performance
Sends audio samples to an accumulating output buffer (created at the beginning of performance) which serves to collect the output of all active instruments before the sound is written to disk. There can be any number of these output units in an instrument. The type (mono, stereo, quad, hex, or oct) should agree with nchnls. But as of version 3.50, Csound will attempt to change an incorrect opcode to agree with the nchnls statement. Opcodes can be chosen to direct sound to any particular channel: outs1 sends to stereo channel 1, outq3 to quad channel 3, etc.
See Also
out, outh, outo, outq, outq1, outq2, outq3, outq4, outs, outs1, soundout
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1463
outvalue
outvalue Sends a k-rate signal or string to a user-defined channel.
Description
Sends a k-rate signal or string to a user-defined channel.
Syntax
outvalue "channel name", kvalue outvalue "channel name", "string"
Performance
"channel name" -- An integer or string (in double-quotes) representing channel. kvalue -- The k-rate value that is sent to the channel. string -- The string or string variable that is sent to the channel.
See Also
invalue
Credits
Author: Matt Ingalls
1464
outx
outx Writes 16-channel audio data to an external device or stream.
Description
Writes 16-channel audio data to an external device or stream.
Syntax
outx asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, \ asig9, asig10, asig11, asig12, asig13, asig14, asig15, asig16
Performance
outx outputs 16 channels of audio.
See Also
out32, outc, outch, outz
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
1465
outz
outz Writes multi-channel audio data from a ZAK array to an external device or stream.
Description
Writes multi-channel audio data from a ZAK array to an external device or stream.
Syntax
outz ksig1
Performance
outz outputs from a ZAK array for nchnls of audio.
See Also
out32, outc, outch, outx
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.06
1466
p
p Show the value in a given p-field.
Description
Show the value in a given p-field.
Syntax
p(x)
Initialization
x -- the number of the p-field.
Performance
The value returned by the p function is the value in a p-field.
Examples
Here is an example of the p opcode. It uses the file p.csd [examples/p.csd].
1467
<CsScore> ; p4 = value to be printed. ; Play Instrument #1 for one second, p4 = 50.375. i 1 0 1 50.375 e </CsScore> </CsoundSynthesizer>
Credits
Example written by Kevin Conder.
1468
p5gconnect
p5gconnect Reads data from a P5 Glove controller.
Description
Opens and at control-rate polls a P5 Glove controller.
Syntax
p5gconnect
Initialization
The opcode locates a P5 Glove attached to the computer by USB, and starts a listener thread to poll the device.
Performance
Every control cycle the glove is polled for its position, and finger and button states. These values are read by the p5gdata opcode.
Example
Here is an example of the p5g opcodes. It uses the file p5g.csd [examples/p5g.csd].
1469
init 0 init 0
instr 1 p5gconnect ka p5gdata $P5G_JUSTPU_A. kc p5gdata $P5G_BUTTON_C. ; If the A button is just pressed then activate a note if (ka==0) goto ee event "i", 2, 0, 2 ee: gka p5gdata $P5G_DELTA_X. gkp p5gdata $P5G_DELTA_Y. printk2 gka printk2 gkp if (kc==0) goto ff printks "turning off (%d)\n", 0, kc turnoff ff: endin instr 2 a1 oscil ampdbfs(gkp), 440+100*gka, 1 ;; a1 oscil 10000, 440, 1 out a1 endin </CsInstruments> <CsScore> f1 0 4096 10 1 i1 0 300 </CsScore> </CsoundSynthesizer>
See Also
p5gdata,
Credits
Author: John ffitch Codemist Ltd 2009 New in version 5.12
1470
p5gdata
p5gdata Reads data fields from an external P5 Glove.
Description
Reads data fields from a P5 Glove controller.
Syntax
kres p5gdata kcontrol
Initialization
This opcode must be used in conjuction with a running p5gconnect opcode.
Performance
kcontrol -- the code for which control to read On each access a particular data item of the P5 glove is read. The currently implemented controls are given below, together with the macro name defined in the file p5g_mac: 0 (P5G_BUTTONS): returns a bit pattern for all buttons that were pressed. 1 (P5G_BUTTON_A): returns 1 if the button has just been pressed, or 0 otherwise. 2 (P5G_BUTTON_B): as above. 4 (P5G_BUTTON_C): as above. 8 (P5G_JUSTPUSH): returns a bit pattern for all buttons that have just been pressed. 9 (P5G_JUSTPU_A): returns 1 if the A button has just been pressed. 10 (P5G_JUSTPU_B): as above. 12 (P5G_JUSTPU_C): as above. 16 (P5G_RELEASED): returns a bit pattern for all buttons that have just been released. 17 (P5G_RELSED_A): returns 1 if the A button has just been released. 18 (P5G_RELSED_B): as above. 20 (P5G_RELSED_C): as above. 32 (P5G_FINGER_INDEX): returns the clench value of the index finger. 33 (P5G_FINGER_MIDDLE): as above. 34 (P5G_FINGER_RING): as above. 35 (P5G_FINGER_PINKY): as above with little finger. 1471
36 (P5G_FINGER_THUMB): as above. 37 (P5G_DELTA_X): The X position of the glove. 38 (P5G_DELTA_Y): The Y position of the glove. 39 (P5G_DELTA_Z): The Z position of the glove. 40 (P5G_DELTA_XR): The X axis change (angle). 41 (P5G_DELTA_YR): as above. 42 (P5G_DELTA_ZR): as above. 43 (P5G_ANGLES): The general angle
Examples
See the example for p5gconnect.
See Also
p5gconnect,
Credits
Author: John ffitch Codemist Ltd 2009 New in version 5.12
1472
pan
pan Distribute an audio signal amongst four channels.
Description
Distribute an audio signal amongst four channels with localization control.
Syntax
a1, a2, a3, a4 pan asig, kx, ky, ifn [, imode] [, ioffset]
Initialization
ifn -- function table number of a stored pattern describing the amplitude growth in a speaker channel as sound moves towards it from an adjacent speaker. Requires extended guard-point. imode (optional) -- mode of the kx, ky position values. 0 signifies raw index mode, 1 means the inputs are normalized (0 - 1). The default value is 0. ioffset (optional) -- offset indicator for kx, ky. 0 infers the origin to be at channel 3 (left rear); 1 requests an axis shift to the quadraphonic center. The default value is 0.
Performance
pan takes an input signal asig and distributes it amongst four outputs (essentially quad speakers) according to the controls kx and ky. For normalized input (mode=1) and no offset, the four output locations are in order: left-front at (0,1), right-front at (1,1), left-rear at the origin (0,0), and right-rear at (1,0). In the notation (kx, ky), the coordinates kx and ky, each ranging 0 - 1, thus control the 'rightness' and 'forwardness' of a sound location. Movement between speakers is by amplitude variation, controlled by the stored function table ifn. As kx goes from 0 to 1, the strength of the right-hand signals will grow from the left-most table value to the right-most, while that of the left-hand signals will progress from the right-most table value to the leftmost. For a simple linear pan, the table might contain the linear function 0 - 1. A more correct pan that maintains constant power would be obtained by storing the first quadrant of a sinusoid. Since pan will scale and truncate kx and ky in simple table lookup, a medium-large table (say 8193) should be used. kx, ky values are not restricted to 0 - 1. A circular motion passing through all four speakers (inscribed) would have a diameter of root 2, and might be defined by a circle of radius R = root 1/2 with center at (.5,.5). kx, ky would then come from Rcos(angle), Rsin(angle), with an implicit origin at (.5,.5) (i.e. ioffset = 1). Unscaled raw values operate similarly. Sounds can thus be located anywhere in the polar or Cartesian plane; points lying outside the speaker square are projected correctly onto the square's perimeter as for a listener at the center.
Examples
instr k1 k2 k3 1 phasor tablei tablei 1/p3 k1, 1, 1 k1, 1, 1, .25, 1 ; fraction of circle ; sin of angle (sinusoid in f1) ; cos of angle (sin offset 1/4 circle)
1473
a1 a1,a2,a3,a4 endin
oscili pan
1474
pan2
pan2 Distribute an audio signal across two channels.
Description
Distribute an audio signal across two channels with a choice of methods.
Syntax
a1, a2 pan2 asig, xp [, imode]
Initialization
imode (optional) -- mode of the stereo positioning algorithm. 0 signifies equal power (harmonic) panning, 1 means the square root method, 2 means simple linear and 3 means an alternative equal-power pan (based on an UDO). The default value is 0.
Performance
pan2 takes an input signal asig and distributes it across two outputs (essentially stereo speakers) according to the control xp which can be k- or a-rate. A zero value for xp indicates hard left, and a 1 is hard right.
Examples
instr kline ain a1,a2 endin 1 line oscili pan2 outs
Credits
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK September 2007 New in version 5.07
1475
pareq
pareq Implementation of Zoelzer's parametric equalizer filters.
Description
Implementation of Zoelzer's parametric equalizer filters, with some modifications by the author. The formula for the low shelf filter is: omega = 2*pi*f/sr K = tan(omega/2) b0 b1 b2 a0 a1 a2 = 1 + sqrt(2*V)*K + V*K^2 = 2*(V*K^2 - 1) = 1 - sqrt(2*V)*K + V*K^2 = 1 + K/Q + K^2 = 2*(K^2 - 1) = 1 - K/Q + K^2
The formula for the high shelf filter is: omega = 2*pi*f/sr K = tan((pi-omega)/2) b0 b1 b1 a0 a1 a2 = 1 + sqrt(2*V)*K + V*K^2 = -2*(V*K^2 - 1) = 1 - sqrt(2*V)*K + V*K^2 = 1 + K/Q + K^2 = -2*(K^2 - 1) = 1 - K/Q + K^2
The formula for the peaking filter is: omega = 2*pi*f/sr K = tan(omega/2) b0 = 1 + V*K/2 + K^2 b1 = 2*(K^2 - 1) b2 = 1 - V*K/2 + K^2 a0 = 1 + K/Q + K^2 a1 = 2*(K^2 - 1) a2 = 1 - K/Q + K^2
1476
Syntax
ares pareq asig, kc, kv, kq [, imode] [, iskip]
Initialization
imode (optional, default: 0) -- operating mode 0 = Peaking 1 = Low Shelving 2 = High Shelving iskip (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
kc -- center frequency in peaking mode, corner frequency in shelving mode. kv -- amount of boost or cut. A value less than 1 is a cut. A value greater than 1 is a boost. A value of 1 is a flat response. kq -- Q of the filter (sqrt(.5) is no resonance) asig -- the incoming signal
Examples
Here is an example of the pareq opcode. It uses the file pareq.csd [examples/pareq.csd].
1477
ifc*2, p3, ifc/2 5000 ; Random number source for testing asig, kfc, kv, kq, imode ; Parmetric equalization aout, aout ; Output the results
</CsInstruments> <CsScore> ; SCORE: ; Sta i15 0 i15 + i15 . i15 . e Dur 1 . . . Fcenter 10000 5000 1000 5000 Q .2 .2 .707 .1 Boost/Cut(dB) 12 12 -12 -12 Mode 1 1 2 0
</CsScore> </CsoundSynthesizer>
Credits
Hans Mikelson December 1998 New in Csound version 3.50
1478
partials
partials Partial track spectral analysis.
Description
The partials opcode takes two input PV streaming signals containg AMP_FREQ and AMP_PHASE signals (as generated for instance by pvsifd or in the first case, by pvsanal) and performs partial track analysis, as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial Tracking", Proc.of ICMC05, Barcelona. It generates a TRACKS PV streaming signal, containing amplitude, frequency, phase and track ID for each output track. This type of signal will contain a variable number of output tracks, up to the total number of analysis bins contained in the inputs (fftsize/2 + 1 bins). The second input (AMP_PHASE) is optional, as it can take the same signal as the first input. In this case, however, all phase information will be NULL and resynthesis using phase information cannot be performed.
Syntax
ftrks partials ffr, fphs, kthresh, kminpts, kmaxgap, imaxtracks
Performance
ftrks -- output pv stream in TRACKS format ffr -- input pv stream in AMP_FREQ format fphs -- input pv stream in AMP_PHASE format kthresh -- analysis threshold. Tracks below ktresh*max_magnitude will be discarded (1 > ktresh >= 0). kminpoints -- minimum number of time points for a detected peak to make a track (1 is the minimum). Since this opcode works with streaming signals, larger numbers will increase the delay between input and output, as we have to wait for the required minimum number of points. kmaxgap -- maximum gap between time-points for track continuation (> 0). Tracks that have no continuation after kmaxgap will be discarded. imaxtracks -- maximum number of analysis tracks (number of bins >= imaxtracks)
Examples
Example 415. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking aout resyn fst, 1, 1.5, 500, 1 ; resynthesis (up a 5th) out aout
1479
The example above shows partial tracking of an ifd-analysis signal and cubic-phase additive resynthesis with pitch shifting.
Credits
Author: Victor Lazzarini June 2005 New plugin in version 5 November 2004.
1480
partikkel
partikkel Granular synthesizer with "per grain" control over many of its parameters. Has a sync input to sychronize its internal grain scheduler clock to an external clock source.
Description
partikkel was conceived after reading Curtis Roads' book "Microsound", and the goal was to create an opcode that was capable of all time-domain varieties of granular synthesis described in this book. The idea being that most of the techniques only differ in parameter values, and by having a single opcode that can do all varieties of granular synthesis makes it possible to interpolate between techniques. Granular synthesis is sometimes dubbed particle synthesis, and it was thought apt to name the opcode partikkel to distinguish it from other granular opcodes. Some of the input parameters to partikkel is table numbers, pointing to tables where values for the "per grain" parameter changes are stored. partikkel can use single-cycle or complex (e.g. sampled sound) waveforms as source waveforms for grains. Each grain consists of a mix of 4 source waveforms. Individual tuning of the base frequency can be done for each of the 4 source waveforms. Frequency modulation inside each grain is enabled via an auxillary audio input (awavfm). Trainlet synthesis is available, and trainlets can be mixed with wavetable based grains. Up to 8 separate audio outputs can be used.
Syntax
a1 [, a2, a3, a4, a5, a6, a7, a8] partikkel agrainfreq, \ kdistribution, idisttab, async, kenv2amt, ienv2tab, ienv_attack, \ ienv_decay, ksustain_amount, ka_d_ratio, kduration, kamp, igainmasks, \ kwavfreq, ksweepshape, iwavfreqstarttab, iwavfreqendtab, awavfm, \ ifmamptab, kfmenv, icosine, ktraincps, knumpartials, kchroma, \ ichannelmasks, krandommask, kwaveform1, kwaveform2, kwaveform3, \ kwaveform4, iwaveamptab, asamplepos1, asamplepos2, asamplepos3, \ asamplepos4, kwavekey1, kwavekey2, kwavekey3, kwavekey4, imax_grains \ [, iopcode_id]
Initialization
idisttab -- function table number, distribution for random grain displacements over time. The table values are interpreted as "displacement amount" scaled by 1/grainrate. This means that a value of 0.5 in the table will displace a grain by half the grainrate period. The table values are read randomly, and scaled by kdistribution. For realistic stochastic results, it is advisable not to use a too small table size, as this limits the amount of possible displacement values. This can also be utilized for other purposes, e.g. using quantized displacement values to work with controlled time displacement from the periodic grain rate. If kdistribution is negative, the table values will be read sequentially. A default table might be selected by using -1 as the ftable number, for idisttab the default uses a zero distribution (no displacement). ienv_attack -- function table number, attack shape of grain. Needs extended guard point. A default table might be selected by using -1 as the ftable number, for ienv_attack the default uses a square window (no enveloping). ienv_decay -- function table number, decay shape of grain. Needs extended guard point. A default table might be selected by using -1 as the ftable number, for ienv_decay the default uses a square window (no enveloping). ienv2tab -- function table number, additional envelope applied to grain, done after attack and decay envelopes. Can be used e.g. for fof formant synthesis. Needs extended guard point. A default table might be selected by using -1 as the ftable number, for ienv2tab the default uses a square window (no envelop1481
ing). icosine -- function table number, must contain a cosine, used for trainlets. Table size should be at least 2048 for good quality trainlets. igainmasks -- function table number, gain per grain. The sequence of values in the table is as follows: index 0 is used as a loop start point in reading the values, index 1 is used as a loop end point. Remaining indices contain gain values (normally in range 0 - 1, but other values are allowed, negative values will invert phase of waveform inside grain) for a sequence of grains, these are read at grain rate enabling exact patterns of "gain per grain". The loop start and end points are zero based with an origin at index 2, e.g. a loop start value of 0 and loop end value of 3 will read indices 2,3,4,5 in a loop at grain rate. A default table might be selected by using -1 as the ftable number, for igainmasks the default disables gain masking (all grains are given a gain masking value of 1). ichannelmasks -- function table number, see igainmasks for a description of how the values in the table are read. Range is 0 to N, where N is the number of output channels minus 1. A value of zero will send the grain to audio output 1 from the opcode. Fractional values are allowed, e.g. a value of 3.5 will mix the grain equally to outputs 4 and 5. The user is responsible for keeping the values in range, no range checking is done. The opcode will crash with out of range values. A default table might be selected by using -1 as the ftable number, for ichannelmasks the default disables channel masking (all grains are given a channel masking value of 0 and are sent to partikkel audio out 1). iwavfreqstarttab -- function table number, see igainmasks for a description of how the values in the table are read. Start frequency multiplicator for each grain. Pitch will glide from start frequency to end frequency following a line or curve as set by ksweepshape. A default table might be selected by using -1 as the ftable number, for iwavfreqstarttab the default uses a multiplicator of 1, disabling any start frequency modification. iwavfreqendtab -- function table number, see iwavfreqstarttab. End frequency multiplicator for each grain. A default table might be selected by using -1 as the ftable number, for iwavfreqendtab the default uses a multiplicator of 1, disabling any end frequency modification. ifmamptab -- function table number, see igainmasks for a description of how the values in the table are read. Frequency modulation index per grain. The signal awavfm will be multiplied by values read from this table. A default table might be selected by using -1 as the ftable number, for ifmamptab the default uses 1 as the index multiplicator, enabling fm for all grains. iwaveamptab -- function table number, the indices are read in a similar way to what is used for igainmasks. Index 0 is used as a loop start point, and index 1 is used as a loop end point. The rest of the indices are read in groups of 5, where each value represent a gain value for each of the 4 source waveforms, and the 5th value represent trainlet amplitude. A default table might be selected by using -1 as the ftable number, for iwaveamptab the default uses an equal mix of all 4 source waveforms (each with an amplitude of 0.5) and setting trainlet amp to zero. Computation of trainlets can be CPU intensive, and setting ktrainamp to zero will skip most of the trainlet computations. Trainlets will be normalized to peak (ktrainamp), compensating for amplitude variations caused by variations in kpartials and kchroma. imax_grains -- maximum number of grains per k-period. Estimating a large value should not affect performance, exceeding this value will lead to "oldest grains" being deleted. iopcode_id -- the opcode id, linking an instance of partikkel to an instance of partikkelsync, the linked partikkelsync will output trigger pulses synchronized to partikkel's grain maker scheduler. The default value is zero, which means no connection to any partikkelsync instances.
Performance
xgrainfreq -- number of grains per second. A value of zero is allowed, and this will defer all grain scheduling to the sync input. 1482
async -- sync input. Input values are added to the phase value of the internal grain maker clock, enabling tempo synchronization with an external clock source. As this is an a-rate signal, inputs are usually pulses of length 1/sr. Using such pulses, the internal phase value can be "nudged" up or down, enabling soft or hard synchronization. Negative input values decrements the internal phase, while positive values in the range 0 to 1 increments the internal phase. An input value of 1 will always make partikkel generate a grain. If the value remains at 1, the internal grain scheduler clock will pause but any currently playing grains will still play to end. kdistribution -- periodic or stochastic distribution of grains, 0 = periodic. Stochastic grain displacement is in the range of kdistribution/grainrate seconds. The stochastic distribution profile (random distribution) can be set in the idisttab table. If kdistribution is negative, the result is deterministic time displacement as described by idisttab (sequential read of displacement values). Maximum grain displacement in all cases is limited to 10 seconds, and a grain will keep the values (duration, pitch etc) it was given when it was first generated (before time displacement). Since grain displacement is relative to the grain rate, displacement amount is undefined at 0Hz grain rate and kdistribution is completely disabled in this case. kenv2amt -- amount of enveloping for the secondary envelope for each grain. Range 0 to 1, where 0 is no secondary enveloping (square window), a value of 0.5 will use an interpolation between a square window and the shape set by ienv2tab. ksustain_amount -- sustain time as fraction of grain duration. I.e. balance between enveloped time(attack+decay) and sustain level time. The sustain level is taken from the last value of the ienv_attack ftable. ka_d_ratio -- balance between attack time and decay time. For example, with ksustain_amount set to 0.5 and ka_d_ratio set to 0.5, the attack envelope of each grain will take 25% of the grain duration, full amplitude (sustain) will be held for 50% of the grain duration, and the decay envelope will take the remaining 25% of the grain duration. kduration -- grain duration in milliseconds. kamp -- amplitude scaling of the opcode's output. Multiplied by per grain amplitude read from igainmasks. Source waveform playback inside grains can consume a significant amount of CPU cycles, especially if grain duration is long so that we have a lot of overlapping grains. Setting kamp to zero will skip waveform playback inside grains (and not generate any sound, obviously). This can be used as a "soft" bypass method if we want to keep the opcode active but silent for some periods of time. kwavfreq -- transposition scaling. Multiplied with start and end transposition values read from iwavfreqstarttab and iwavfreqendtab. ksweepshape -- transposition sweep shape, controls the curvature of the transposition sweep. Range 0 to 1. Low values will hold the transposition at the start value longer and then drop to the end value quickly, high values will drop to the end value quickly. A value of 0.5 will give a linear sweep. A value of exactly 0 will bypass sweep and only use the start frequency, while a value of exactly 1 will bypass sweep and only use the end frequency. The sweep generator might be slightly inaccurate in hitting the end frequency when using a steep curve and very long grains. awavfm -- audio input for frequency modulation inside grain. kfmenv -- function table number, envelope for FM modulator signal enabling the modulation index to change over the duration of a grain. ktraincps -- trainlet fundamental frequency. knumpartials -- number of partials in trainlets. kchroma -- chroma of trainlets. A value of 1 give equal amplitude to each partial, higher values will reduce the amplitude of lower partials while strengthening the amplitude of the higher partials. 1483
krandommask -- random masking (muting) of individual grains. Range 0 to 1, where a value of 0 will give no masking (all grains are played), and a value of 1 will mute all grains. kwaveform1 -- table number for source waveform 1. kwaveform2 -- table number for source waveform 2. kwaveform3 -- table number for source waveform 3. kwaveform4 -- table number for source waveform 4. asamplepos1 -- start position for reading source waveform 1. asamplepos2 -- start position for reading source waveform 2. asamplepos3 -- start position for reading source waveform 3. asamplepos4 -- start position for reading source waveform 4. kwavekey1 -- original key of source waveform 1. Can be used to transpose each source waveform independently. kwavekey2 -- as kwavekey1, but for source waveform 2. kwavekey3 -- as kwavekey1, but for source waveform 3. kwavekey4 -- as kwavekey1, but for source waveform 4.
Examples
Here is an example of the partikkel opcode. It uses the file PartikkelExample1.csd [examples/ PartikkelExample1.csd].
1484
; uses the file "fox.wav" ; ************************************************* instr 1 /*score parameters*/ ispeed = p4 igrainrate = p5 igrainsize = p6 icent = p7 iposrand = p8 icentrand = p9 ipan = p10 idist = p11 ; 1 = original speed ; grain rate ; grain size in ms ; transposition in cent ; time position randomness (offset) of the pointer in ms ; transposition randomness in cents ; panning narrow (0) to wide (1) ; grain distribution (0=periodic, 1=scattered)
/*get length of source wave file, needed for both transposition and time pointer*/ ifilen tableng giFile ifildur = ifilen / sr /*sync input (disabled)*/ async = 0
/*grain envelope*/ kenv2amt = 1 ; use only secondary envelope ienv2tab = giWin ; grain (secondary) envelope ienv_attack = -1 ; default attack envelope (flat) ienv_decay = -1 ; default decay envelope (flat) ksustain_amount = 0.5 ; no meaning in this case (use only secondary envelope, ienv2tab) ka_d_ratio = 0.5 ; no meaning in this case (use only secondary envelope, ienv2t /*amplitude*/ kamp igainmasks = 0.4*0dbfs ; grain amplitude = -1 ; (default) no gain masking
/*transposition*/ kcentrand rand icentrand ; random transposition iorig = 1 / ifildur ; original pitch kwavfreq = iorig * cent(icent + kcentrand) /*other pitch related (disabled)*/ ksweepshape = 0 ; no frequency sweep iwavfreqstarttab = -1 ; default frequency sweep start iwavfreqendtab = -1 ; default frequency sweep end awavfm = 0 ; no FM input ifmamptab = -1 ; default FM scaling (=1) kfmenv = -1 ; default FM envelope (flat)
/*trainlet related (disabled)*/ icosine = giCosine ; cosine ftable kTrainCps = igrainrate ; set trainlet cps equal to grain rate for single-cycle trainlet in each knumpartials = 1 ; number of partials in trainlet kchroma = 1 ; balance of partials in trainlet
/*panning, using channel masks*/ imid = .5; center ileftmost = imid - ipan/2 irightmost = imid + ipan/2 giPanthis ftgen 0, 0, 32768, -24, giPan, ileftmost, irightmost ; rescales giPan according to ip tableiw 0, 0, giPanthis ; change index 0 ... tableiw 32766, 1, giPanthis ; ... and 1 for ichannelmas ichannelmasks = giPanthis ; ftable for panning /*random gain masking (disabled)*/ krandommask = 0
/*source waveforms*/ kwaveform1 = giFile ; source waveform kwaveform2 = giFile ; all 4 sources are the same kwaveform3 = giFile kwaveform4 = giFile iwaveamptab = -1 ; (default) equal mix of source waveforms and no amplitude for trainle /*time pointer*/ afilposphas phasor ispeed / ifildur /*generate random deviation of the time pointer*/ iposrandsec = iposrand / 1000 ; ms -> sec iposrand = iposrandsec / ifildur ; phase values (0-1) krndpos linrand iposrand ; random offset in phase values /*add random deviation to the time pointer*/ asamplepos1 = afilposphas + krndpos; resulting phase values (0-1) asamplepos2 = asamplepos1 asamplepos3 = asamplepos1
1485
asamplepos4
= asamplepos1
/*original key for each source waveform*/ kwavekey1 = 1 kwavekey2 = kwavekey1 kwavekey3 = kwavekey1 kwavekey4 = kwavekey1 /* maximum number of grains per k-period*/ imax_grains = 100 aL, aR partikkel igrainrate, idist, giDisttab, async, kenv2amt, ienv2tab, \ ienv_attack, ienv_decay, ksustain_amount, ka_d_ratio, igrainsize, kamp, igainmasks, \ kwavfreq, ksweepshape, iwavfreqstarttab, iwavfreqendtab, awavfm, \ ifmamptab, kfmenv, icosine, kTrainCps, knumpartials, \ kchroma, ichannelmasks, krandommask, kwaveform1, kwaveform2, kwaveform3, kwaveform4, \ iwaveamptab, asamplepos1, asamplepos2, asamplepos3, asamplepos4, \ kwavekey1, kwavekey2, kwavekey3, kwavekey4, imax_grains outs endin </CsInstruments> <CsScore> ;i1 st dur speed grate gsize cent posrnd cntrnd pan dist i1 0 2.757 1 200 15 0 0 0 0 0 s i1 0 2.757 1 200 15 400 0 0 0 0 s i1 0 2.757 1 15 450 400 0 0 0 0 s i1 0 2.757 1 15 450 400 0 0 0 0.4 s i1 0 2.757 1 200 15 0 400 0 0 1 s i1 0 5.514 .5 200 20 0 0 600 .5 1 s i1 0 11.028 .25 200 15 0 1000 400 1 1 </CsScore> </CsoundSynthesizer> aL, aR
Here is another example of the partikkel opcode. It uses the file partikkel_softsync.csd [examples/ partikkel_softsync.csd].
1486
; grain rate ; grain size in ms ; fundamental frequency of source waveform ; partikkel instance 2 grain rate deviation factor ; max soft sync amount (increasing to this value during length of note)
/*overall envelope*/ iattack = 0.001 idecay = 0.2 isustain = 0.7 irelease = 0.2 amp linsegr 0, iattack, 1, idecay, isustain, 1, isustain, irelease, 0 kgrainfreq = igrainrate kdistribution = 0 idisttab = -1 async = 0 kenv2amt = 0 ienv2tab = -1 ienv_attack = giSigmoRise ienv_decay = giSigmoFall ksustain_amount = 0.3 ka_d_ratio = 0.2 kduration = igrainsize kamp = 0.2*0dbfs igainmasks = -1 kwavfreq = igrainFreq ksweepshape = 0 iwavfreqstarttab = -1 iwavfreqendtab = -1 awavfm = 0 ifmamptab = -1 kfmenv = -1 icosine = giCosine kTrainCps = kgrainfreq knumpartials = 3 kchroma = 1 ichannelmasks = -1 krandommask = 0 kwaveform1 = giSine kwaveform2 = giSine kwaveform3 = giSine kwaveform4 = giSine iwaveamptab = -1 asamplepos1 = 0 asamplepos2 = 0 asamplepos3 = 0 asamplepos4 = 0 kwavekey1 = 1 kwavekey2 = 1 kwavekey3 = 1 kwavekey4 = 1 imax_grains = 100 iopcode_id = 1 a1 ; grains per second ; periodic grain distribution ; (default) flat distribution used ; for grain distribution ; no sync input ; no secondary enveloping ; default secondary envelope (flat) ; default attack envelope (flat) ; default decay envelope (flat) ; time (in fraction of grain dur) at ; sustain level for each grain ; balance between attack and decay time ; set grain duration in ms ; amp ; (default) no gain masking ; fundamental frequency of source waveform ; shape of frequency sweep (0=no sweep) ; default frequency sweep start ; (value in table = 1, which give ; no frequency modification) ; default frequency sweep end ; (value in table = 1, which give ; no frequency modification) ; no FM input ; default FM scaling (=1) ; default FM envelope (flat) ; cosine ftable ; set trainlet cps equal to grain ; rate for single-cycle trainlet in ; each grain ; number of partials in trainlet ; balance of partials in trainlet ; (default) no channel masking, ; all grains to output 1 ; no random grain masking ; source waveforms ; ; ; ; mix of 4 source waveforms and ; trainlets (set to default) ; phase offset for reading source waveform ; ; ; ; original key for source waveform ; ; ; ; max grains per k period ; id of opcode, linking partikkel ; to partikkelsync
partikkel kgrainfreq, kdistribution, idisttab, async, kenv2amt, \ ienv2tab,ienv_attack, ienv_decay, ksustain_amount, ka_d_ratio, \ kduration, kamp, igainmasks, kwavfreq, ksweepshape, \ iwavfreqstarttab, iwavfreqendtab, awavfm, ifmamptab, kfmenv, \ icosine, kTrainCps, knumpartials, kchroma, ichannelmasks, \ krandommask, kwaveform1, kwaveform2, kwaveform3, kwaveform4, \ iwaveamptab, asamplepos1, asamplepos2, asamplepos3, asamplepos4, \ kwavekey1, kwavekey2, kwavekey3, kwavekey4, imax_grains, iopcode_id partikkelsync iopcode_id ; clock pulse output of the ; partikkel instance above
async1
1487
ksyncGravity line 0, p3, iMaxSync ; strength of synchronization aphase2 init 0 asyncPolarity limit (int(aphase2*2)*2)-1, -1, 1 ; use the phase of partikkelsync instance 2 to find sync ; polarity for partikkel instance 2. ; If the phase of instance 2 is less than 0.5, we want to ; nudge it down when synchronizing, ; and if the phase is > 0.5 we want to nudge it upwards. async1 = async1*ksyncGravity*asyncPolarity ; prepare sync signal ; with polarity and strength kgrainfreq2 = igrainrate * iosc2Dev ; grains per second for second partikkel instance iopcode_id2 = 2 a2 partikkel kgrainfreq2, kdistribution, idisttab, async1, kenv2amt, \ ienv2tab, ienv_attack, ienv_decay, ksustain_amount, ka_d_ratio, \ kduration, kamp, igainmasks, kwavfreq, ksweepshape, \ iwavfreqstarttab, iwavfreqendtab, awavfm, ifmamptab, kfmenv, \ icosine, kTrainCps, knumpartials, kchroma, ichannelmasks, \ krandommask, kwaveform1, kwaveform2, kwaveform3, kwaveform4, \ iwaveamptab, asamplepos1, asamplepos2, asamplepos3, \ asamplepos4, kwavekey1, kwavekey2, kwavekey3, kwavekey4, \ imax_grains, iopcode_id2 async2, aphase2 partikkelsync iopcode_id2 ; clock pulse and phase ; output of the partikkel instance above, ; we will only use the phase outs a1*amp, a2*amp endin </CsInstruments> <CsScore> /*score parameters igrainrate = p4 igrainsize = p5 igrainFreq = p6 iosc2Dev = p7 ; iMaxSync = p8 ; */ ; GrRate GrSize i1 s i1 s i1 s i1 s i1 s i1 s i1 s e e </CsScore> </CsoundSynthesizer> 0 0 0 0 0 0 0 ; grain rate ; grain size in ms ; frequency of source wave within grain partikkel instance 2 grain rate deviation factor max soft sync amount (increasing to this value during length of note) GrFund Osc2Dev MaxSync
10 2 20 880 1.3 0.3 10 5 20 440 0.8 0.3 6 55 15 660 1.8 0.45 6 110 10 440 0.6 0.6 6 220 3 660 2.6 0.45 6 220 3 660 2.1 0.45 6 440 3 660 0.8 0.22
See Also
fof, fof2, fog, grain, grain2, grain3, granule, sndwarp, sndwarpst, syncgrain, syncloop, partikkelsync
Credits
Author: Thom Johansen Author: Torgeir Strand Henriksen 1488
Author: yvind Brandtsegg April 2007 Examples written by Joachim Heintz and yvind Brandtsegg. New in version 5.06
1489
partikkelsync
partikkelsync Outputs partikkel's grain scheduler clock pulse and phase to synchronize several instances of the partikkel opcode to the same clock source.
Description
partikkelsync is an opcode for outputting partikkel's grain scheduler clock pulse and phase. partikkelsync's output can be used to synchronize other instances of the partikkel opcode to the same clock.
Syntax
async [,aphase] partikkelsync iopcode_id
Initialization
iopcode_id -- the opcode id, linking an instance of partikkel to an instance of partikkelsync.
Performance
async -- trigger pulse signal. Outputs trigger pulses synchronized to a partikkel opcode's grain scheduler clock. One trigger pulse is generated for each grain started in the partikkel opcode with the same opcode_id. The normal usage would be to send this signal to another partikkel opcode's async input to synchronize several instances of partikkel. aphase -- clock phase. Outputs a linear ramping phase signal. Can be used e.g. for softsynchronization, or just as a phase generator ala phasor.
See Also
partikkel
Credits
Author: Thom Johansen Author: Torgeir Strand Henriksen Author: yvind Brandtsegg April 2007 New in version 5.06
1490
passign
passign Assigns a range of p-fields to ivariables.
Description
Assigns a range of p-fields to ivariables.
Syntax
ivar1, ... passign [istart]
Initialisation
The optional argument istart gives the index of the first p-field to assign. The default value is 1, corresponding to the instrument number. One of the variables can be a string variable, in which case it is assigned the only string parameter, if there is one, or an error otherwise.
Performance
passign transfers the instrument p-fields to instrument variables, starting with the one identified by the istart argument. There should not be more variables than p-fields, but there may be fewer.
See Also
assign,
Example
Here is an example of the passign opcode. It uses the file passign.csd [examples/passign.csd].
1491
</CsInstruments> <CsScore> ;ins i8 i8 i8 i8 i8 strt 0 4 5.5 6.5 8 dur 2.28 1.6 2.28 2.28 2.28 amp .3 .3 .3 .4 .5 skip 0 1.6 0 0 0.1 atk .03 .1 .5 .01 .01 rel .1 .1 .1 .1 .1 rvbt 1.5 1.1 2.1 1.1 0.1 rvbgain .3 .4 .2 .1 .1
e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK December 2009 New in version 5.12
1492
pcauchy
pcauchy Cauchy distribution random number generator (positive values only).
Description
Cauchy distribution random number generator (positive values only). This is an x-class noise generator.
Syntax
ares pcauchy kalpha ires pcauchy kalpha kres pcauchy kalpha
Performance
pcauchy kalpha -- controls the spread from zero (big kalpha = big spread). Outputs positive numbers only. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the pcauchy opcode. It uses the file pcauchy.csd [examples/pcauchy.csd].
1493
; Instrument #1. instr 1 ; Generate a random number between 0 and 1. ; kalpha = 1 i1 pcauchy 1 print i1 endin ; Instrument #2. instr 2 ; Generate a random number between 0 and 1. ; kalpha = 1 seed 0 i1 pcauchy 1 print i1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 1 1
</CsScore> </CsoundSynthesizer>
See Also
seed, betarand, bexprnd, cauchy, exprand, gauss, linrand, poisson, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Example written by Kevin Conder.
1494
pchbend
pchbend Get the current pitch-bend value for this channel.
Description
Get the current pitch-bend value for this channel.
Syntax
ibend pchbend [imin] [, imax] kbend pchbend [imin] [, imax]
Initialization
imin, imax (optional) -- set minimum and maximum limits on values obtained
Performance
Get the current pitch-bend value for this channel. Note that this access to pitch-bend data is independent of the MIDI pitch, enabling the value here to be used for any arbitrary purpose.
Examples
Here is an example of the pchbend opcode. It uses the file pchbend.csd [examples/pchbend.csd].
1495
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchmidi, pchmidib, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Example written by Kevin Conder.
1496
pchmidi
pchmidi Get the note number of the current MIDI event, expressed in pitch-class units.
Description
Get the note number of the current MIDI event, expressed in pitch-class units.
Syntax
ipch pchmidi
Performance
Get the note number of the current MIDI event, expressed in pitch-class units for local processing.
Examples
Here is an example of the pchmidi opcode. It uses the file pchmidi.csd [examples/pchmidi.csd].
1497
; This example expects MIDI note inputs on channel 1 i1 pchmidi print i1 endin </CsInstruments> <CsScore> ;Dummy f-table to give time for real-time MIDI events f 0 8000 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidib, veloc, cpsmidinn, octmidinn, pchmidinn
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Example written by Kevin Conder.
1498
pchmidib
pchmidib Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in pitch-class units.
Description
Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in pitch-class units.
Syntax
ipch pchmidib [irange] kpch pchmidib [irange]
Initialization
irange (optional) -- the pitch bend range in semitones
Performance
Get the note number of the current MIDI event, modify it by the current pitch-bend value, and express the result in pitch-class units. Available as an i-time value or as a continuous k-rate value.
Examples
Here is an example of the pchmidib pchmidib. It uses the file pchmidib.csd [examples/pchmidib.csd].
1499
print i1 endin </CsInstruments> <CsScore> ;Dummy f-table to give time for real-time MIDI events f 0 8000 e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, veloc
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Example written by Kevin Conder.
1500
pchmidinn
pchmidinn Converts a Midi note number value to octave point pitch-class units.
Description
Converts a Midi note number value to octave point pitch-class units.
Syntax
pchmidinn (MidiNoteNumber) (init- or control-rate args only)
Performance
pchmidinn is a function that takes an i-rate or k-rate value representing a Midi note number and returns the equivalent pitch value in Csound's octave point pitch-class format. This conversion assumes that Middle C (8.00 in pch) is Midi note number 60. Midi note number values are typically integers in the range from 0 to 127 but fractional values or values outside of this range will be interpreted consistently.
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equal1501
tempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the pchmidinn opcode. It uses the file cpsmidinn.csd [examples/cpsmidinn.csd].
imidiNN = imidiNN + 1 if (imidiNN < 128) igoto loop1 endin instr 2 ; test k-rate converters kMiddleC = 60 kcps = cpsmidinn(kMiddleC)
1502
koct kpch
= octmidinn(kMiddleC) = pchmidinn(kMiddleC)
printks "%d %f %f %f\n", 1.0, kMiddleC, kcps, koct, kpch endin </CsInstruments> <CsScore> i1 0 0 i2 0 0.1 e </CsScore> </CsoundSynthesizer>
See Also
cpsmidinn, octmidinn, pchmidi, notnum, cpspch, cpsoct, octcps, octpch, pchoct
Credits
Derived from original value converters by Barry Vercoe. New in version 5.07
1503
pchoct
pchoct Converts an octave-point-decimal value to pitch-class.
Description
Converts an octave-point-decimal value to pitch-class.
Syntax
pchoct (oct) (init- or control-rate args only)
Performance
pchoct and its related opcodes are really value converters with a special function of manipulating pitch data. Data concerning pitch and frequency can exist in any of the following forms:
The first two forms consist of a whole number, representing octave registration, followed by a specially interpreted fractional part. For pch, the fraction is read as two decimal digits representing the 12 equaltempered pitch classes from .00 for C to .11 for B. For oct, the fraction is interpreted as a true decimal fractional part of an octave. The two fractional forms are thus related by the factor 100/12. In both forms, the fraction is preceded by a whole number octave index such that 8.00 represents Middle C, 9.00 the C above, etc. Midi note number values range between 0 and 127 (inclusively) with 60 representing Middle C, and are usually whole numbers. Thus A440 can be represented alternatively by 440 (cps), 69 (midinn), 8.09 (pch), or 8.75 (oct). Microtonal divisions of the pch semitone can be encoded by using more than two decimal places. The mnemonics of the pitch conversion units are derived from morphemes of the forms involved, the second morpheme describing the source and the first morpheme the object (result). Thus cpspch(8.09) will convert the pitch argument 8.09 to its cps (or Hertz) equivalent, giving the value of 440. Since the argument is constant over the duration of the note, this conversion will take place at i-time, before any samples for the current note are produced. By contrast, the conversion cpsoct(8.75 + k1) which gives the value of A440 transposed by the octave interval k1. The calculation will be repeated every k-period since that is the rate at which k1 varies.
Note
1504
The conversion from pch, oct, or midinn into cps is not a linear operation but involves an exponential process that could be time-consuming when executed repeatedly. Csound now uses a built-in table lookup to do this efficiently, even at audio rates. Because the table index is truncated without interpolation, pitch resolution when using one of these opcodes is limited to 8192 discrete and equal divisions of the octave, and some pitches of the standard 12-tone equally-tempered scale are very slightly mistuned (by at most 0.15 cents).
Examples
Here is an example of the pchoct opcode. It uses the file pchoct.csd [examples/pchoct.csd].
See Also
cpsoct, cpspch, octcps, octpch, cpsmidinn, octmidinn, pchmidinn
1505
Credits
Example written by Kevin Conder.
1506
pconvolve
convolve Convolution based on a uniformly partitioned overlap-save algorithm
Description
Convolution based on a uniformly partitioned overlap-save algorithm. Compared to the convolve opcode, pconvolve has these benefits: small delay possible to run in real-time for shorter impulse files no pre-process analysis pass can often render faster than convolve
Syntax
ar1 [, ar2] [, ar3] [, ar4] pconvolve ain, ifilcod [, ipartitionsize, ichannel]
Initialization
ifilcod -- integer or character-string denoting an impulse response soundfile. Multichannel files are supported, the file must have the same sample-rate as the orc. [Note: cvanal files cannot be used!] Keep in mind that longer files require more calculation time [and probably larger partition sizes and more latency]. At current processor speeds, files longer than a few seconds may not render in real-time. ipartitionsize (optional, defaults to the output buffersize [-b]) -- the size in samples of each partition of the impulse file. This is the parameter that needs tweaking for best performance depending on the impulse file size. Generally, a small size means smaller latency but more computation time. If you specify a value that is not a power-of-2 the opcode will find the next power-of-2 greater and use that as the actual partition size. ichannel (optional) -- which channel to use from the impulse response data file.
Performance
ain -- input audio signal. The overall latency of the opcode can be calculated as such [assuming ipartitionsize is a power of 2]
ilatency = (ksmps < ipartitionsize ? ipartitionsize + ksmps : ipartitionsize)/sr
Examples
Instrument 1 shows an example of real-time convolution. Instrument 2 shows how to do file-based convolution with a 'look ahead' method to remove all delay. 1507
NOTE
You will need to download the impulse response files from noisevault.com or replace the filenames with your own impulse files
sr = 44100 ksmps = 100 nchnls = 2 instr 1 kmix = .5 ; Wet/dry mix. Vary as desired. kvol = .5*kmix ; Overall volume level of reverb. May need to adjust ; when wet/dry mix is changed, to avoid clipping. ; do some safety checking to make sure we the parameters a good kmix = (kmix < 0 || kmix > 1 ? .5 : kmix) kvol = (kvol < 0 ? 0 : .5*kvol*kmix) ; size of each convolution partion -- for best performance, this parameter needs to be tweaked ipartitionsize = p4 ; calculate latency of pconvolve opcode idel = (ksmps < ipartitionsize ? ipartitionsize + ksmps : ipartitionsize)/sr prints "Convolving with a latency of %f seconds%n", idel ; actual processing al, ar ins awetl, awetr pconvolve kvol*(al+ar), "Mercedes-van.wav", ipartitionsize
; Delay dry signal, to align it with the convoled sig adryl delay (1-kmix)*al, idel adryr delay (1-kmix)*ar, idel outs endin adryl+awetl, adryr+awetr
2 ; Wet/dry mix. Vary as desired. ; Overall volume level of reverb. May need to adjust ; when wet/dry mix is changed, to avoid clipping.
ipartitionsize = 32768 ; size of each convolution partion idel = (ksmps < ipartitionsize ? ipartitionsize + ksmps : ipartitionsize)/sr kcount init idel*kr ; since we are using a soundin [instead of ins] we can ; do a kind of "look ahead" by looping during one k-pass ; without output, creating zero-latency loop: al, ar soundin "John_Cage_1.aif", 0
; latency of pconvol
awetl, awetr pconvolve ivol*(al+ar),"FactoryHall.aif", ipartitionsize adryl adryr delay delay (1-imix)*al,idel (1-imix)*ar,idel ; Delay dry signal, to align it with
kcount = kcount - 1 if kcount > 0 kgoto loop outs endin awetl+adryl, awetr+adryr
1508
See also
convolve, dconv.
Credits
Author: Matt Ingalls 2004
1509
pcount
pcount Returns the number of pfields belonging to a note event.
Description
pcount returns the number of pfields belonging to a note event.
Syntax
icount pcount
Initialization
icount - stores the number of pfields for the current note event.
Note
Note that the reported number of pfields is not necessarily what's explicitly written in the score, but the pfields available to the instrument through mechanisms like pfield carry.
Examples
Here is an example of the pcount opcode. It uses the file pcount.csd [examples/pcount.csd].
1510
5 0.0 5 0.0 7
The warnings occur because pfields are not used explicitly by the instrument.
See Also
pindex
Credits
Example by: Anthony Kozar Dec. 2006
1511
pdclip
pdclip Performs linear clipping on an audio signal or a phasor.
Description
The pdclip opcode allows a percentage of the input range of a signal to be clipped to fullscale. It is similar to simply multiplying the signal and limiting the range of the result, but pdclip allows you to think about how much of the signal range is being distorted instead of the scalar factor and has a offset parameter for assymetric clipping of the signal range. pdclip is also useful for remapping phasors for phase distortion synthesis.
Syntax
aout pdclip ain, kWidth, kCenter [, ibipolar [, ifullscale]]
Initialization
ibipolar -- an optional parameter specifying either unipolar (0) or bipolar (1) mode. Defaults to unipolar mode. ifullscale -- an optional parameter specifying the range of input and output values. The maximum will be ifullscale. The minimum depends on the mode of operation: zero for unipolar or -ifullscale for bipolar. Defaults to 1.0 -- you should set this parameter to the maximum expected input value.
Performance
ain -- the input signal to be clipped. aout -- the output signal. kWidth -- the percentage of the signal range that is clipped (must be between 0 and 1). kCenter -- an offset for shifting the unclipped window of the signal higher or lower in the range (essentially a DC offset). Values should be in the range [-1, 1] with a value of zero representing no shift (regardless of whether bipolar or unipolar mode is used). The pdclip opcode performs linear clipping on the input signal ain. kWidth specifies the percentage of the signal range that is clipped. The rest of the input range is mapped linearly from zero to ifullscale in unipolar mode and from -ifullscale to ifullscale in bipolar mode. When kCenter is zero, equal amounts of the top and bottom of the signal range are clipped. A negative value shifts the unclipped range more towards the bottom of the input range and a positive value shifts it more towards the top. ibipolar should be 1 for bipolar operation and 0 for unipolar mode. The default is unipolar mode (ibipolar = 0). ifullscale sets the maximum amplitude of the input and output signals (defaults to 1.0). This amounts to waveshaping the input with the following transfer function (normalized to ifullscale=1.0 in bipolar mode):
1| _______ x-axis is input range, y-axis is output | / |/ width of clipped region is 2*kWidth 1512
-1 |/ 1 width of unclipped region is 2*(1 - kWidth) -------------------kCenter shifts the unclipped region /| left or right (up to kWidth) /| / | ------ |-1
Bipolar mode can be used for direct, linear distortion of an audio signal. Alternatively, unipolar mode is useful for modifying the output of a phasor before it is used to index a function table, effectively making this a phase distortion technique.
See Also
pdhalf, pdhalfy, limit, clip, distort1
Examples
Here is an example of the pdclip opcode. It uses the file pdclip.csd [examples/pdclip.csd].
1513
Credits
Author: Anthony Kozar January 2008 New in Csound version 5.08
1514
pdhalf
pdhalf Distorts a phasor for reading the two halves of a table at different rates.
Description
The pdhalf opcode is designed to emulate the "classic" phase distortion synthesis method of the Casio CZ-series of synthesizers from the mid-1980's. This technique reads the first and second halves of a function table at different rates in order to warp the waveform. For example, pdhalf can smoothly transform a sine wave into something approximating the shape of a saw wave.
Syntax
aout pdhalf ain, kShapeAmount [, ibipolar [, ifullscale]]
Initialization
ibipolar -- an optional parameter specifying either unipolar (0) or bipolar (1) mode. Defaults to unipolar mode. ifullscale -- an optional parameter specifying the range of input and output values. The maximum will be ifullscale. The minimum depends on the mode of operation: zero for unipolar or -ifullscale for bipolar. Defaults to 1.0 -- you should set this parameter to the maximum expected input value.
Performance
ain -- the input signal to be distorted. aout -- the output signal. kShapeAmount -- the amount of distortion applied to the input. Must be between negative one and one (-1 to 1). An amount of zero means no distortion.
Transfer function created by pdhalf and a negative kShapeAmount. The pdhalf opcode calculates a transfer function that is composed of two linear segments (see the graph). These segments meet at a "pivot point" which always lies on the same horizontal axis. (In unipolar mode, the axis is y = 0.5, and for bipolar mode it is the x axis). The kShapeAmount parameter spe1515
cifies where on the horizontal axis this point falls. When kShapeAmount is zero, the pivot point is in the middle of the input range, forming a straight line for the transfer function and thus causing no change in the input signal. As kShapeAmount changes from zero (0) to negative one (-1), the pivot point moves towards the left side of the graph, producing a phase distortion pattern like the Casio CZ's "sawtooth waveform". As it changes from zero (0) to positive one (1), the pivot point moves toward the right, producing an inverted pattern. If the input to pdhalf is a phasor and the output is used to index a table, values for kShapeAmount that are less than zero will cause the first half of the table to be read more quickly than the second half. The reverse is true for values of kShapeAmount greater than zero. The rates at which the halves are read are calculated so that the frequency of the phasor is unchanged. Thus, this method of phase distortion can only produce higher partials in a harmonic series. It cannot produce inharmonic sidebands in the way that frequency modulation does. pdhalf can work in either unipolar or bipolar modes. Unipolar mode is appropriate for signals like phasors that range between zero and some maximum value (selectable with ifullscale). Bipolar mode is appropriate for signals that range above and below zero by roughly equal amounts such as most audio signals. Applying pdhalf directly to an audio signal in this way results in a crude but adjustable sort of waveshaping/distortion. A typical example of the use of pdhalf is
More information about Phase distortion synthesis can be found on Wikipedia at http://en.wikipedia.org/wiki/Phase_distortion_synthesis [http://en.wikipedia.org/wiki/Phase_distortion_synthesis]
See Also
pdhalfy, pdclip
Examples
Here is an example of the pdhalf opcode. It uses the file pdhalf.csd [examples/pdhalf.csd].
1516
= p5 = p6 linseg phasor linseg pdhalf tablei out 0, .001, 1.0, idur - .051, 1.0, .05, 0 ifreq 0.0, 0.02, -0.99, 0.05, -0.9, idur-0.06, 0.0 aosc, kamount apd, itable, 1 aenv*aout*iamp
</CsInstruments> <CsScore> f1 0 16385 10 1 f2 0 16385 10 1 .5 .3333 .25 .5 f3 0 16385 9 1 1 270 ; inverted cosine ; descending "just blues" scale ; pdhalf with cosine table ; (imitates the CZ-101 "sawtooth waveform") t 0 100 i4 0 .333 10000 512 3 i. + . . 448 i. + . . 384 i. + . . 358.4 i. + . . 341.33 i. + . . 298.67 i. + 2 . 256 e </CsScore> </CsoundSynthesizer>
Credits
Author: Anthony Kozar January 2008 New in Csound version 5.08
1517
pdhalfy
pdhalfy Distorts a phasor for reading two unequal portions of a table in equal periods.
Description
The pdhalfy opcode is a variation on the phase distortion synthesis method of the pdhalf opcode. It is useful for distorting a phasor in order to read two unequal portions of a table in the same number of samples.
Syntax
aout pdhalfy ain, kShapeAmount [, ibipolar [, ifullscale]]
Initialization
ibipolar -- an optional parameter specifying either unipolar (0) or bipolar (1) mode. Defaults to unipolar mode. ifullscale -- an optional parameter specifying the range of input and output values. The maximum will be ifullscale. The minimum depends on the mode of operation: zero for unipolar or -ifullscale for bipolar. Defaults to 1.0 -- you should set this parameter to the maximum expected input value.
Performance
ain -- the input signal to be distorted. aout -- the output signal. kShapeAmount -- the amount of distortion applied to the input. Must be between negative one and one (-1 to 1). An amount of zero means no distortion.
Transfer function created by pdhalfy and a negative kShapeAmount. The pdhalfy opcode calculates a transfer function that is composed of two linear segments (see the graph). These segments meet at a "pivot point" which always lies on the same vertical axis. (In unipolar mode, the axis is x = 0.5, and for bipolar mode it is the y axis). So, pdhalfy is a variation of the pdhalf 1518
opcode that places the pivot point of the phase distortion pattern on a vertical axis instead of a horizontal axis. The kShapeAmount parameter specifies where on the vertical axis this point falls. When kShapeAmount is zero, the pivot point is in the middle of the output range, forming a straight line for the transfer function and thus causing no change in the input signal. As kShapeAmount changes from zero (0) to negative one (-1), the pivot point downward towards the bottom of the graph. As it changes from zero (0) to positive one (1), the pivot point moves upward, producing an inverted pattern. If the input to pdhalfy is a phasor and the output is used to index a table, the use of pdhalfy will divide the table into two segments of different sizes with each segment being mapped to half of the oscillator period. Values for kShapeAmount that are less than zero will cause less than half of the table to be read in the first half of the period of oscillation. The rest of the table will be read in the second half of the period. The reverse is true for values of kShapeAmount greater than zero. Note that the frequency of the phasor is always unchanged. Thus, this method of phase distortion can only produce higher partials in a harmonic series. It cannot produce inharmonic sidebands in the way that frequency modulation does. pdhalfy tends to have a milder quality to its distortion than pdhalf. pdhalfy can work in either unipolar or bipolar modes. Unipolar mode is appropriate for signals like phasors that range between zero and some maximum value (selectable with ifullscale). Bipolar mode is appropriate for signals that range above and below zero by roughly equal amounts such as most audio signals. Applying pdhalfy directly to an audio signal in this way results in a crude but adjustable sort of waveshaping/distortion. A typical example of the use of pdhalfy is
More information about Phase distortion synthesis can be found on Wikipedia at http://en.wikipedia.org/wiki/Phase_distortion_synthesis [http://en.wikipedia.org/wiki/Phase_distortion_synthesis]
See Also
pdhalf, pdclip
Examples
Here is an example of the pdhalfy opcode. It uses the file pdhalfy.csd [examples/pdhalfy.csd].
1519
; test instrument for pdhalfy opcode instr 5 idur iamp ifreq iamtinit iatt isuslvl idistdec itable idec irel isus aenv kamount aosc apd aout endin </CsInstruments> <CsScore> f1 0 16385 10 1 f3 0 16385 9 1 1 270 ; descending "just blues" scale ; pdhalfy t 0 100 i5 0 .333 i. + . i. + . i. + . i. + . i. + . i. + 2 s with cosine table 10000 . . . . . . 512 448 384 358.4 341.33 298.67 256 1.0 < < < < < 0.5 .02 0.5 .12 3 = = = = = = = = = = = p3 p4 p5 p6 p7 p8 p9 p10
; ; ; ;
initial amount of phase distortion attack time sustain amplitude time for distortion amount to reach zero
idistdec - iatt .05 idur - (idistdec + irel) 0, iatt, 1.0, idec, isuslvl, isus, isuslvl, irel, 0, 0, 0 -iamtinit, idistdec, 0.0, idur-idistdec, 0.0 ifreq aosc, kamount apd, itable, 1 aenv*aout*iamp
; pdhalfy with sine table t 0 100 i5 0 .333 10000 512 1.0 i. + . . 448 < i. + . . 384 < i. + . . 358.4 < i. + . . 341.33 < i. + . . 298.67 < i. + 2 . 256 0.5 e </CsScore> </CsoundSynthesizer>
.001 0.1
.07
Credits
Author: Anthony Kozar January 2008 New in Csound version 5.08
1520
peak
peak Maintains the output equal to the highest absolute value received.
Description
These opcodes maintain the output k-rate variable as the peak absolute level so far received.
Syntax
kres peak asig kres peak ksig
Performance
kres -- Output equal to the highest absolute value received so far. This is effectively an input to the opcode as well, since it reads kres in order to decide whether to write something higher into it. ksig -- k-rate input signal. asig -- a-rate input signal.
Examples
Here is an example of the peak opcode. It uses the file peak.csd [examples/peak.csd], and beats.wav [examples/beats.wav].
1521
out asig endin </CsInstruments> <CsScore> ; Play Instrument #1, the audio file, for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder.
1522
peakk
peakk Deprecated.
Description
Deprecated as of version 3.63. Use the peak opcode instead.
1523
pgmassign
pgmassign Assigns an instrument number to a specified MIDI program.
Description
Assigns an instrument number to a specified (or all) MIDI program(s). By default, the instrument is the same as the program number. If the selected instrument is zero or negative or does not exist, the program change is ignored. This opcode is normally used in the orchestra header. Although, like massign, it also works in instruments.
Syntax
pgmassign ipgm, inst[, ichn] pgmassign ipgm, "insname"[, ichn]
Initialization
ipgm -- MIDI program number (1 to 128). A value of zero selects all programs. inst -- instrument number. If set to zero, or negative, MIDI program changes to ipgm are ignored. Currently, assignment to an instrument that does not exist has the same effect. This may be changed in a later release to print an error message. insname -- A string (in double-quotes) representing a named instrument. ichn (optional, defaults to zero) -- channel number. If zero, program changes are assigned on all channels. You can disable the turning on of any instruments by using the following in the header:
massign 0, 0 pgmassign 0, 0
Examples
Here is an example of the pgmassign opcode. It uses the file pgmassign.csd [examples/pgmassign.csd].
1524
; -o pgmassign.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Program 55 (synth vox) uses Instrument #10. pgmassign 55, 10 ; Instrument #10. instr 10 ; Just an example, no working code in here! endin </CsInstruments> <CsScore> ; Play Instrument #10 for one second. i 10 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the pgmassign opcode that will ignore program change events. It uses the file pgmassign_ignore.csd [examples/pgmassign_ignore.csd].
Example 431. Example of the pgmassign opcode that will ignore program change events.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages MIDI in -odac -iadc -d -M0 ;;;RT audio I/O with MIDI in ; For Non-realtime ouput leave only the line below: ; -o pgmassign_ignore.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Ignore all program change events. pgmassign 0, -1 ; Instrument #1. instr 1 ; Just an example, no working code in here! endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
1525
Here is an advanced example of the pgmassign opcode. It uses the file pgmassign_advanced.csd [examples/pgmassign_advanced.csd]. Don't forget that you must include the -F flag when using an external MIDI file like pgmassign_advanced.mid.
pgmassign.mid has 4 notes with these parameters: Start time Channel Program note note note note 1 2 3 4 0.5 1.5 2.5 3.5 1 2 3 4 10 11 12 13 ; disable program changes ; program 11 uses instr 3 ; program 12 uses instr 2
; waveforms for instruments itmp ftgen 1, 0, 1024, 10, 1 itmp ftgen 2, 0, 1024, 10, 1, 0.5, 0.3333, 0.25, 0.2, 0.1667, 0.1429, 0.125 itmp ftgen 3, 0, 1024, 10, 1, 0, 0.3333, 0, 0.2, 0, 0.1429, 0, 0.10101 instr 1 /* sine */
kcps cpsmidib 2 ; note frequency asnd oscili 30000, kcps, 1 out asnd endin instr 2 /* band-limited sawtooth */
kcps cpsmidib 2 ; note frequency asnd oscili 30000, kcps, 2 out asnd endin instr 3 /* band-limited square */
kcps cpsmidib 2 ; note frequency asnd oscili 30000, kcps, 3 out asnd endin </CsInstruments> <CsScore>
1526
See Also
midichn and massign
Credits
Author: Istvan Varga May 2002 New in version 4.20
1527
phaser1
phaser1 First-order allpass filters arranged in a series.
Description
An implementation of iord number of first-order allpass filters in series.
Syntax
ares phaser1 asig, kfreq, kord, kfeedback [, iskip]
Initialization
iskip (optional, default=0) -- used to control initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kfreq -- frequency (in Hz) of the filter(s). This is the frequency at which each filter in the series shifts its input by 90 degrees. kord -- the number of allpass stages in series. These are first-order filters and can range from 1 to 4999.
Note
Although kord is listed as k-rate, it is in fact accessed only at init-time. So if you are using a k-rate argument, it must be assigned with init. kfeedback -- amount of the output which is fed back into the input of the allpass chain. With larger amounts of feedback, more prominent notches appear in the spectrum of the output. kfeedback must be between -1 and +1. for stability. phaser1 implements iord number of first-order allpass sections, serially connected, all sharing the same coefficient. Each allpass section can be represented by the following difference equation: y(n) = C * x(n) + x(n-1) - C * y(n-1) where x(n) is the input, x(n-1) is the previous input, y(n) is the output, y(n-1) is the previous output, and C is a coefficient which is calculated from the value of kfreq, using the bilinear z-transform. By slowly varying kfreq, and mixing the output of the allpass chain with the input, the classic "phase shifter" effect is created, with notches moving up and down in frequency. This works best with iord between 4 and 16. When the input to the allpass chain is mixed with the output, 1 notch is generated for every 2 allpass stages, so that with iord = 6, there will be 3 notches in the output. With higher values for iord, modulating kfreq will result in a form of nonlinear pitch modulation.
1528
Examples
Here is an example of the phaser1 opcode. It uses the file phaser1.csd [examples/phaser1.csd].
iharms = (sr*.4) / 100 asig kfreq kmod aphs out endin gbuzz 1, 100, iharms, 1, .95, 2 oscili 5500, ifreq, 1 = kfreq + 5600
</CsInstruments> <CsScore> ; inverted half-sine, used for modulating phaser1 frequency f1 0 16384 9 .5 -1 0 ; cosine wave for gbuzz f2 0 8192 9 1 1 .25 ; phaser1 i1 0 5 7000 i1 6 5 7000 i1 12 5 7000 i1 18 5 7000 i1 24 5 7000 i1 30 5 7000 e 4 6 8 16 32 64 .2 .2 .2 .2 .2 .2 .9 .9 .9 .9 .9 .9
</CsScore> </CsoundSynthesizer>
1529
Technical History
A general description of the differences between flanging and phasing can be found in Hartmann [1]. An early implementation of first-order allpass filters connected in series can be found in Beigel [2], where the bilinear z-transform is used for determining the phase shift frequency of each stage. Cronin [3] presents a similar implementation for a four-stage phase shifting network. Chamberlin [4] and Smith [5] both discuss using second-order allpass sections for greater control over notch depth, width, and frequency.
References
1. Hartmann, W.M. "Flanging and Phasers." Journal of the Audio Engineering Society, Vol. 26, No. 6, pp. 439-443, June 1978. 2. Beigel, Michael I. "A Digital 'Phase Shifter' for Musical Applications, Using the Bell Labs (Alles-Fischer) Digital Filter Module." Journal of the Audio Engineering Society, Vol. 27, No. 9, pp. 673-676,September 1979. 3. Cronin, Dennis. "Examining Audio DSP Algorithms." Dr. Dobb's Journal, July 1994, p. 78-83. 4. Chamberlin, Hal. Musical Applications of Microprocessors. Second edition. Indianapolis, Indiana: Hayden Books, 1985. 5. Smith, Julius O. "An Allpass Approach to Digital Phasing and Flanging." Proceedings of the 1984 ICMC, p. 103-108.
See Also
phaser2
Credits
Author: Sean Costello Seattle, Washington 1999 November 2002. Added a note about the kord parameter, thanks to Rasmus Ekman. New in Csound version 4.0
1530
phaser2
phaser2 Second-order allpass filters arranged in a series.
Description
An implementation of iord number of second-order allpass filters in series.
Syntax
ares phaser2 asig, kfreq, kq, kord, kmode, ksep, kfeedback
Initialization
iskip (optional, default=0) -- used to control initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kfreq -- frequency (in Hz) of the filter(s). This is the center frequency of the notch of the first allpass filter in the series. This frequency is used as the base frequency from which the frequencies of the other notches are derived. kq -- Q of each notch. Higher Q values result in narrow notches. A Q between 0.5 and 1 results in the strongest "phasing" effect, but higher Q values can be used for special effects. kord -- the number of allpass stages in series. These are second-order filters, and iord can range from 1 to 2499. With higher orders, the computation time increases. kfeedback -- amount of the output which is fed back into the input of the allpass chain. With larger amounts of feedback, more prominent notches appear in the spectrum of the output. kfeedback must be between -1 and +1. for stability. kmode -- used in calculation of notch frequencies.
Note
Although kord and kmode are listed as k-rate, they are in fact accessed only at init-time. So if you are using k-rate arguments, they must be assigned with init. ksep -- scaling factor used, in conjunction with imode, to determine the frequencies of the additional notches in the output spectrum. phaser2 implements iord number of second-order allpass sections, connected in series. The use of second-order allpass sections allows for the precise placement of the frequency, width, and depth of notches in the frequency spectrum. iord is used to directly determine the number of notches in the spectrum; e.g. for iord = 6, there will be 6 notches in the output spectrum. There are two possible modes for determining the notch frequencies. When imode = 1, the notch frequencies are determined by the following function: 1531
frequency of notch N = kbf + (ksep * kbf * N-1) For example, with imode = 1 and ksep = 1, the notches will be in harmonic relationship with the notch frequency determined by kfreq (i.e. if there are 8 notches, with the first at 100 Hz, the next notches will be at 200, 300, 400, 500, 600, 700, and 800 Hz). This is useful for generating a "comb filtering" effect, with the number of notches determined by iord. Different values of ksep allow for inharmonic notch frequencies and other special effects. ksep can be swept to create an expansion or contraction of the notch frequencies. A useful visual analogy for the effect of sweeping ksep would be the bellows of an accordion as it is being played - the notches will be seperated, then compressed together, as ksep changes. When imode = 2, the subsequent notches are powers of the input parameter ksep times the initial notch frequency specified by kfreq. This can be used to set the notch frequencies to octaves and other musical intervals. For example, the following lines will generate 8 notches in the output spectrum, with the notches spaced at octaves of kfreq: aphs phaser2 ain, kfreq, 0.5, 8, 2, 2, 0 aout = ain + aphs
When imode = 2, the value of ksep must be greater than 0. ksep can be swept to create a compression and expansion of notch frequencies (with more dramatic effects than when imode = 1).
Examples
Here is an example of the phaser2 opcode. It uses the file phaser2.csd [examples/phaser2.csd].
1532
; "Sawtooth" waveform exponentially decaying function, to control notch frequencies asig gbuzz 1, 100, iharms, 1, .95, 2 kline expseg 1, idur, .005 aphs phaser2 asig, kline * 2000, .5, iorder, imode, isep, ifeed out (asig + aphs) * iamp endin </CsInstruments> <CsScore> ; cosine wave for gbuzz f2 0 8192 9 1 1 .25 ; phaser2, imode=1 i2 00 10 7000 8 .2 .9 1 .33 i2 11 10 7000 8 .2 .9 1 2 ; phaser2, imode=2 i2 22 10 7000 8 .2 .9 2 .33 i2 33 10 7000 8 .2 .9 2 2 e </CsScore> </CsoundSynthesizer>
Technical History
A general description of the differences between flanging and phasing can be found in Hartmann [1]. An early implementation of first-order allpass filters connected in series can be found in Beigel [2], where the bilinear z-transform is used for determining the phase shift frequency of each stage. Cronin [3] presents a similar implementation for a four-stage phase shifting network. Chamberlin [4] and Smith [5] both discuss using second-order allpass sections for greater control over notch depth, width, and frequency.
References
1. Hartmann, W.M. "Flanging and Phasers." Journal of the Audio Engineering Society, Vol. 26, No. 6, pp. 439-443, June 1978. 2. Beigel, Michael I. "A Digital 'Phase Shifter' for Musical Applications, Using the Bell Labs (Alles-Fischer) Digital Filter Module." Journal of the Audio Engineering Society, Vol. 27, No. 9, pp. 673-676,September 1979. 3. Cronin, Dennis. "Examining Audio DSP Algorithms." Dr. Dobb's Journal, July 1994, p. 78-83. 4. Chamberlin, Hal. Musical Applications of Microprocessors. Second edition. Indianapolis, Indiana: Hayden Books, 1985. 5. Smith, Julius O. "An Allpass Approach to Digital Phasing and Flanging." Proceedings of the 1984 ICMC, p. 103-108.
See Also
phaser1
Credits
1533
Author: Sean Costello Seattle, Washington 1999 November 2002. Added a note about the kord and kmode parameters, thanks to Rasmus Ekman. New in Csound version 4.0
1534
phasor
phasor Produce a normalized moving phase value.
Description
Produce a normalized moving phase value.
Syntax
ares phasor xcps [, iphs] kres phasor kcps [, iphs]
Initialization
iphs (optional) -- initial phase, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is zero.
Performance
An internal phase is successively accumulated in accordance with the kcps or xcps frequency to produce a moving phase value, normalized to lie in the range 0 <= phs < 1. When used as the index to a table unit, this phase (multiplied by the desired function table length) will cause it to behave like an oscillator. Note that phasor is a special kind of integrator, accumulating phase increments that represent frequency settings.
Examples
Here is an example of the phasor opcode. It uses the file phasor.csd [examples/phasor.csd].
1535
; Instrument #1. instr 1 ; Create an index that repeats once per second. kcps init 1 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kfreq table kndx, ifn, ixmode ; Generate a sine waveform, use our table values ; to vary its frequency. a1 oscil 20000, kfreq, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1, a line from 200 to 2,000. 1 0 1025 -7 200 1024 2000 Table #2, a sine wave. 2 0 16384 10 1
See also
The Table Access opcodes like: table, tablei, table3 and tab. Also: phasorbnk.
Credits
Example written by Kevin Conder.
1536
phasorbnk
phasorbnk Produce an arbitrary number of normalized moving phase values.
Description
Produce an arbitrary number of normalized moving phase values, accessable by an index.
Syntax
ares phasorbnk xcps, kndx, icnt [, iphs] kres phasorbnk kcps, kndx, icnt [, iphs]
Initialization
icnt -- maximum number of phasors to be used. iphs -- initial phase, expressed as a fraction of a cycle (0 to 1). If -1 initialization is skipped. If iphas>1 each phasor will be initialized with a random value.
Performance
kndx -- index value to access individual phasors For each independent phasor, an internal phase is successively accumulated in accordance with the kcps or xcps frequency to produce a moving phase value, normalized to lie in the range 0 <= phs < 1. Each individual phasor is accessed by index kndx. This phasor bank can be used inside a k-rate loop to generate multiple independent voices, or together with the adsynt opcode to change parameters in the tables used by adsynt.
Examples
Here is an example of the phasorbnk opcode. It uses the file phasorbnk.csd [examples/phasorbnk.csd].
1537
kr = 4410 ksmps = 10 nchnls = 1 ; Generate a sinewave table. giwave ftgen 1, 0, 1024, 10, 1 ; Instrument #1 instr 1 ; Generate 10 voices. icnt = 10 ; Empty the output buffer. asum = 0 ; Reset the loop index. kindex = 0 ; This loop is executed every k-cycle. loop: ; Generate non-harmonic partials. kcps = (kindex+1)*100+30 ; Get the phase for each voice. aphas phasorbnk kcps, kindex, icnt ; Read the wave from the table. asig table aphas, giwave, 1 ; Accumulate the audio output. asum = asum + asig ; Increment the index. kindex = kindex + 1 ; Perform the loop until the index (kindex) reaches ; the counter value (icnt). if (kindex < icnt) kgoto loop out asum*3000 endin </CsInstruments> <CsScore> ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Generate multiple voices with independent partials. This example is better with adsynt. See also the example under adsynt, for k-rate use of phasorbnk.
Credits
Author: Peter Neubcker Munich, Germany August 1999 New in Csound version 3.58
1538
pindex
pindex Returns the value of a specified pfield.
Description
pindex returns the value of a specified pfield.
Syntax
ivalue pindex ipfieldIndex
Initialization
ipfieldIndex - pfield number to query. ivalue - value of the pfield.
Examples
Here is an example of the pindex opcode. It uses the file pindex.csd [examples/pindex.csd].
1539
0.0 5
0.0 7
The warnings can be ignored, because the pfields are used indirectly through pindex instead of explicitly through p4, p5, etc.
See Also
pcount
Credits
Example by: Anthony Kozar Dec. 2006
1540
pinkish
pinkish Generates approximate pink noise.
Description
Generates approximate pink noise (-3dB/oct response) by one of two different methods: a multirate noise generator after Moore, coded by Martin Gardner a filter bank designed by Paul Kellet
Syntax
ares pinkish xin [, imethod] [, inumbands] [, iseed] [, iskip]
Initialization
imethod (optional, default=0) -- selects filter method: 0 = Gardner method (default). 1 = Kellet filter bank. 2 = A somewhat faster filter bank by Kellet, with less accurate response. inumbands (optional) -- only effective with Gardner method. The number of noise bands to generate. Maximum is 32, minimum is 4. Higher levels give smoother spectrum, but above 20 bands there will be almost DC-like slow fluctuations. Default value is 20. iseed (optional, default=0) -- only effective with Gardner method. If non-zero, seeds the random generator. If zero, the generator will be seeded from current time. Default is 0. iskip (optional, default=0) -- if non-zero, skip (re)initialization of internal state (useful for tied notes). Default is 0.
Performance
xin -- for Gardner method: k- or a-rate amplitude. For Kellet filters: normally a-rate uniform random noise from rand (31-bit) or unirand, but can be any a-rate signal. The output peak value varies widely (15%) even over long runs, and will usually be well below the input amplitude. Peak values may also occasionally overshoot input amplitude or noise. pinkish attempts to generate pink noise (i.e., noise with equal energy in each octave), by one of two different methods. The first method, by Moore & Gardner, adds several (up to 32) signals of white noise, generated at octave rates (sr, sr/2, sr/4 etc). It obtains pseudo-random values from an internal 32-bit generator. This random generator is local to each opcode instance and seedable (similar to rand). 1541
The second method is a lowpass filter with a response approximating -3dB/oct. If the input is uniform white noise, it outputs pink noise. Any signal may be used as input for this method. The high quality filter is slower, but has less ripple and a slightly wider operating frequency range than less computationally intense versions. With the Kellet filters, seeding is not used. The Gardner method output has some frequency response anomalies in the low-mid and high-mid frequency ranges. More low-frequency energy can be generated by increasing the number of bands. It is also a bit faster. The refined Kellet filter has very smooth spectrum, but a more limited effective range. The level increases slightly at the high end of the spectrum.
Examples
Here is an example of the pinkish opcode. It uses the file pinkish.csd [examples/pinkish.csd].
out apink * 30000 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Authors: Phil Burk and John ffitch 1542
University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07 Adapted for Csound by Rasmus Ekman The noise bands method is due to F. R. Moore (or R. F. Voss), and was presented by Martin Gardner in an oft-cited article in Scientific American. The present version was coded by Phil Burk as the result of discussion on the music-dsp mailing list, with significant optimizations suggested by James McCartney. The filter bank was designed by Paul Kellet, posted to the music-dsp mailing list. The whole pink noise discussion was collected on a HTML page by Robin Whittle, which is currently available at http://www.firstpr.com.au/dsp/pink-noise/. Added notes by Rasmus Ekman on September 2002.
1543
pitch
pitch Tracks the pitch of a signal.
Description
Using the same techniques as spectrum and specptrk, pitch tracks the pitch of the signal in octave point decimal form, and amplitude in dB.
Syntax
koct, kamp pitch asig, iupdte, ilo, ihi, idbthresh [, ifrqs] [, iconf] \ [, istrt] [, iocts] [, iq] [, inptls] [, irolloff] [, iskip]
Initialization
iupdte -- length of period, in seconds, that outputs are updated ilo, ihi -- range in which pitch is detected, expressed in octave point decimal idbthresh -- amplitude, expressed in decibels, necessary for the pitch to be detected. Once started it continues until it is 6 dB down. ifrqs (optional) -- number of divisons of an octave. Default is 12 and is limited to 120. iconf (optional) -- the number of conformations needed for an octave jump. Default is 10. istrt (optional) -- starting pitch for tracker. Default value is (ilo + ihi)/2. iocts (optional) -- number of octave decimations in spectrum. Default is 6. iq (optional) -- Q of analysis filters. Default is 10. inptls (optional) -- number of harmonics, used in matching. Computation time increases with the number of harmonics. Default is 4. irolloff (optional) -- amplitude rolloff for the set of filters expressed as fraction per octave. Values must be positive. Default is 0.6. iskip (optional) -- if non-zero, skips initialization. Default is 0.
Performance
koct -- The pitch output, given in the octave point decimal format. kamp -- The amplitude output. pitch analyzes the input signal, asig, to give a pitch/amplitude pair of outputs, for the strongest frequency in the signal. The value is updated every iupdte seconds. The number of partials and rolloff fraction can effect the pitch tracking, so some experimentation may be necessary. Suggested values are 4 or 5 harmonics, with rolloff 0.6, up to 10 or 12 harmonics with rolloff 0.75 for complex timbres, with a weak fundamental. 1544
Examples
Here is an example of the pitch opcode. It uses the file pitch.csd [examples/pitch.csd] and mary.wav [examples/mary.wav].
</CsScore> </CsoundSynthesizer>
1545
Credits
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK April 1999 Example written by Kevin Conder. New in Csound version 3.54
1546
pitchamdf
pitchamdf Follows the pitch of a signal based on the AMDF method.
Description
Follows the pitch of a signal based on the AMDF method (Average Magnitude Difference Function). Outputs pitch and amplitude tracking signals. The method is quite fast and should run in realtime. This technique usually works best for monophonic signals.
Syntax
kcps, krms pitchamdf asig, imincps, imaxcps [, icps] [, imedi] \ [, idowns] [, iexcps] [, irmsmedi]
Initialization
imincps -- estimated minimum frequency (expressed in Hz) present in the signal imaxcps -- estimated maximum frequency present in the signal icps (optional, default=0) -- estimated initial frequency of the signal. If 0, icps = (imincps+imaxcps) / 2. The default is 0. imedi (optional, default=1) -- size of median filter applied to the output kcps. The size of the filter will be imedi*2+1. If 0, no median filtering will be applied. The default is 1. idowns (optional, default=1) -- downsampling factor for asig. Must be an integer. A factor of idowns > 1 results in faster performance, but may result in worse pitch detection. Useful range is 1 - 4. The default is 1. iexcps (optional, default=0) -- how frequently pitch analysis is executed, expressed in Hz. If 0, iexcps is set to imincps. This is usually reasonable, but experimentation with other values may lead to better results. Default is 0. irmsmedi (optional, default=0) -- size of median filter applied to the output krms. The size of the filter will be irmsmedi*2+1. If 0, no median filtering will be applied. The default is 0.
Performance
kcps -- pitch tracking output krms -- amplitude tracking output pitchamdf usually works best for monophonic signals, and is quite reliable if appropriate initial values are chosen. Setting imincps and imaxcps as narrow as possible to the range of the signal's pitch, results in better detection and performance. Because this process can only detect pitch after an initial delay, setting icps close to the signal's real initial pitch prevents spurious data at the beginning. The median filter prevents kcps from jumping. Experiment to determine the optimum value for imedi for a given signal. 1547
Other initial values can usually be left at the default settings. Lowpass filtering of asig before passing it to pitchamdf, can improve performance, especially with complex waveforms.
Examples
Here is an example of the pitchamdf opcode. It uses the file pitchamdf.csd [examples/pitchamdf.csd] and mary.wav [examples/mary.wav].
</CsScore> </CsoundSynthesizer>
1548
Credits
Author: Peter Neubcker Munich, Germany August 1999 New in Csound version 3.59
1549
planet
planet Simulates a planet orbiting in a binary star system.
Description
planet simulates a planet orbiting in a binary star system. The outputs are the x, y and z coordinates of the orbiting planet. It is possible for the planet to achieve escape velocity by a close encounter with a star. This makes this system somewhat unstable.
Syntax
ax, ay, az planet kmass1, kmass2, ksep, ix, iy, iz, ivx, ivy, ivz, idelta \ [, ifriction] [, iskip]
Initialization
ix, iy, iz -- the initial x, y and z coordinates of the planet ivx, ivy, ivz -- the initial velocity vector components for the planet. idelta -- the step size used to approximate the differential equation. ifriction (optional, default=0) -- a value for friction, which can be used to keep the system from blowing up iskip (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
ax, ay, az -- the output x, y, and z coodinates of the planet kmass1 -- the mass of the first star kmass2 -- the mass of the second star
Examples
Here is an example of the planet opcode. It uses the file planet.csd [examples/planet.csd].
1550
; -o planet.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 44100 ksmps = 1 nchnls = 2 ; Instrument #1 - a planet oribiting in 3D space. instr 1 ; Create a basic tone. kamp init 5000 kcps init 440 ifn = 1 asnd oscil kamp, kcps, ifn ; Figure out its X, Y, Z coordinates. km1 init 0.5 km2 init 0.35 ksep init 2.2 ix = 0 iy = 0.1 iz = 0 ivx = 0.5 ivy = 0 ivz = 0 ih = 0.0003 ifric = -0.1 ax1, ay1, az1 planet km1, km2, ksep, ix, iy, iz, \ ivx, ivy, ivz, ih, ifric ; Place the basic tone within 3D space. kx downsamp ax1 ky downsamp ay1 kz downsamp az1 idist = 1 ift = 0 imode = 1 imdel = 1.018853416 iovr = 2 aw2, ax2, ay2, az2 spat3d asnd, kx, ky, kz, idist, \ ift, imode, imdel, iovr ; Convert the 3D sound to stereo. aleft = aw2 + ay2 aright = aw2 - ay2 outs aleft, aright endin </CsInstruments> <CsScore> ; Table #1 a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for 10 seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
Credits
Author: Hans Mikelson December 1998 New in Csound version 3.50
1551
pluck
pluck Produces a naturally decaying plucked string or drum sound.
Description
Audio output is a naturally decaying plucked string or drum sound based on the Karplus-Strong algorithms.
Syntax
ares pluck kamp, kcps, icps, ifn, imeth [, iparm1] [, iparm2]
Initialization
icps -- intended pitch value in Hz, used to set up a buffer of 1 cycle of audio samples which will be smoothed over time by a chosen decay method. icps normally anticipates the value of kcps, but may be set artificially high or low to influence the size of the sample buffer. ifn -- table number of a stored function used to initialize the cyclic decay buffer. If ifn = 0, a random sequence will be used instead. imeth -- method of natural decay. There are six, some of which use parameters values that follow. 1. simple averaging. A simple smoothing process, uninfluenced by parameter values. 2. stretched averaging. As above, with smoothing time stretched by a factor of iparm1 (>=1). 3. simple drum. The range from pitch to noise is controlled by a 'roughness factor' in iparm1 (0 to 1). Zero gives the plucked string effect, while 1 reverses the polarity of every sample (octave down, odd harmonics). The setting .5 gives an optimum snare drum. 4. stretched drum. Combines both roughness and stretch factors. iparm1 is roughness (0 to 1), and iparm2 the stretch factor (>=1). 5. weighted averaging. As method 1, with iparm1 weighting the current sample (the status quo) and iparm2 weighting the previous adjacent one. iparm1 + iparm2 must be <= 1. 6. 1st order recursive filter, with coefs .5. Unaffected by parameter values. iparm1, iparm2 (optional) -- parameter values for use by the smoothing algorithms (above). The default values are both 0.
Performance
kamp -- the output amplitude. kcps -- the resampling frequency in cycles-per-second. An internal audio buffer, filled at i-time according to ifn, is continually resampled with periodicity kcps and the resulting output is multiplied by kamp. Parallel with the sampling, the buffer is smoothed to sim1552
ulate the effect of natural decay. Plucked strings (1, 2, 5, 6) are best realized by starting with a random noise source, which is rich in initial harmonics. Drum sounds (methods 3, 4) work best with a flat source (wide pulse), which produces a deep noise attack and sharp decay. The original Karplus-Strong algorithm used a fixed number of samples per cycle, which caused serious quantization of the pitches available and their intonation. This implementation resamples a buffer at the exact pitch given by kcps, which can be varied for vibrato and glissando effects. For low values of the orch sampling rate (e.g. sr = 10000), high frequencies will store only very few samples (sr / icps). Since this may cause noticeable noise in the resampling process, the internal buffer has a minimum size of 64 samples. This can be further enlarged by setting icps to some artificially lower pitch.
Examples
Here is an example of the pluck opcode. It uses the file pluck.csd [examples/pluck.csd].
Credits
Example written by Kevin Conder. 1553
poisson
poisson Poisson distribution random number generator (positive values only).
Description
Poisson distribution random number generator (positive values only). This is an x-class noise generator.
Syntax
ares poisson klambda ires poisson klambda kres poisson klambda
Performance
ares, kres, ires - number of events occuring (always an integer). klambda - the expected number of occurrences that occur during the rate interval.
where: # is a positive real number, equal to the expected number of occurrences that occur during the given interval. For instance, if the events occur on average every 4 minutes, and you are interested in the number of events occurring in a 10 minute interval, you would use as model a Poisson distribution with # = 10/4 = 2.5. This parameter is called klambda on the poisson opcodes. k refers to the number of i- , k- or a- periods elapsed. The Poisson distribution arises in connection with Poisson processes. It applies to various phenomena of discrete nature (that is, those that may happen 0, 1, 2, 3, ... times during a given period of time or in a given area) whenever the probability of the phenomenon happening is constant in time or space. Examples of events that can be modelled as Poisson distributions include: The number of cars that pass through a certain point on a road (sufficiently distant from traffic lights) during a given period of time. 1554
The number of spelling mistakes one makes while typing a single page. The number of phone calls at a call center per minute. The number of times a web server is accessed per minute. The number of roadkill (animals killed) found per unit length of road. The number of mutations in a given stretch of DNA after a certain amount of radiation. The number of unstable nuclei that decayed within a given period of time in a piece of radioactive substance. The radioactivity of the substance will weaken with time, so the total time interval used in the model should be significantly less than the mean lifetime of the substance. The number of pine trees per unit area of mixed forest. The number of stars in a given volume of space. The distribution of visual receptor cells in the retina of the human eye. The number of viruses that can infect a cell in cell culture.
A diagram showing the Poisson distribution. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
1555
Here is an example of the poisson opcode. It uses the file poisson.csd [examples/poisson.csd]. It is written for *NIX systems, and will generate errors on Windows.
</CsScore> </CsoundSynthesizer>
See Also
seed, betarand, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, trirand, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995
1556
1557
polyaft
polyaft Returns the polyphonic after-touch pressure of the selected note number.
Description
polyaft returns the polyphonic pressure of the selected note number, optionally mapped to an userspecified range.
Syntax
ires polyaft inote [, ilow] [, ihigh] kres polyaft inote [, ilow] [, ihigh]
Initialization
inote -- note number. Normally set to the value returned by notnum ilow (optional, default: 0) -- lowest output value ihigh (optional, default: 127) -- highest output value
Performance
kres -- polyphonic pressure (aftertouch).
Examples
Here is an example of the polyaft opcode. It uses the file polyaft.csd [examples/polyaft.csd]. Don't forget that you must include the -F flag when using an external MIDI file like polyaft.mid.
1558
; sine wave
kcps cpsmidib 2 ; note frequency inote notnum ; note number kaft polyaft inote, 0, 127 ; aftertouch ; interpolate aftertouch to eliminate clicks ktmp phasor 40 ktmp trigger 1 - ktmp, 0.5, 0 kaft tlineto kaft, 0.025, ktmp ; map to sine curve for crossfade kaft = sin(kaft * 3.14159 / 254) * 22000 asnd oscili kaft, kcps, 1 out asnd endin </CsInstruments> <CsScore> t 0 120 f 0 9 2 -2 0 e </CsScore> </CsoundSynthesizer>
Credits
Added thanks to an email from Istvan Varga New in version 4.12
1559
polynomial
polynomial Efficiently evaluates a polynomial of arbitrary order.
Description
The polynomial opcode calculates a polynomial with a single a-rate input variable. The polynomial is a sum of any number of terms in the form kn*x^n where kn is the nth coefficient of the expression. These coefficients are k-rate values.
Syntax
aout polynomial ain, k0 [, k1 [, k2 [...]]]
Performance
ain -- the input signal used as the independent variable of the polynomial ("x"). aout -- the output signal ("y"). k0, k1, k2, ... -- the coefficients for each term of the polynomial. If we consider the input parameter ain to be "x" and the output aout to be "y", then the polynomial opcode calculates the following equation: y = k0 + k1*x + k2*x^2 + k3*x^3 + ...
Examples
Here is an example of [examples/polynomial.csd]. the polynomial opcode. It uses the file polynomial.csd
1560
ay
polynomial
ax, 4, 3, 2, 1
; convert our a-rate signals to k-rate values so that we can print ky downsamp ay kx downsamp ax printf "%d: %d\n", kx, kx, ky ax endin </CsInstruments> <CsScore> i1 0 1 e </CsScore> </CsoundSynthesizer> = ax + 1
See Also
chebyshevpoly, mac maca
Credits
Author: Anthony Kozar January 2008 New in Csound version 5.08
1561
pop
pop Pops values from the global stack.
Description
Pops values from the global stack.
Syntax
xval1, [xval2, ... , xval31] pop ival1, [ival2, ... , ival31] pop
Initialization
ival1 ... ival31 - values to be popped from the stack.
Performance
xval1 ... xval31 - values to be popped from the stack. The given values are poped from the stack. The global stack works in LIFO order: after multiple push calls, pop should be used in reverse order. Each push or pop operation can work on a "bundle" of multiple variables. When using pop, the number, type, and order of items must match those used by the corresponding push. That is, after a 'push Sfoo, ibar', you must call something like 'Sbar, ifoo pop', and not e.g. two separate 'pop' statements. push and pop opcodes can take variables of any type (i-, k-, a- and strings). Use of any combination of i, k, a, and S types is allowed. Variables of type 'a' and 'k' are passed at performance time only, while 'i' and 'S' are passed at init time only. push/pop for a, k, i, and S types copy data by value. By contrast, push_f only pushes a "reference" to the f-signal, and then the corresponding pop_f will copy directly from the original variable to its output signal. For this reason, changing the source f-signal of push_f before pop_f is called is not recommended, and if the instrument instance owning the variable that was passed by push_f is deactivated before pop_f is called, undefined behavior may occur. Any stack errors (trying to push when there is no more space, or pop from an empty stack, inconsistent number or type of arguments, etc.) are fatal and terminate performance.
See also
stack, push, pop_f and push_f.
Credits
By: Istvan Varga. 2006 1562
pop_f
pop_f Pops an f-sig frame from the global stack.
Description
Pops an f-sig frame from the global stack.
Syntax
fsig pop_f
Performance
fsig - f-signal to be popped from the stack. The values are popped the stack. The global stack must be initialized before used, and its size must be set. The global stack works in LIFO order: after multiple push_f calls, pop_f should be used in reverse order. push/pop for a, k, i, and S types copy data by value. By contrast, push_f only pushes a "reference" to the f-signal, and then the corresponding pop_f will copy directly from the original variable to its output signal. For this reason, changing the source f-signal of push_f before pop_f is called is not recommended, and if the instrument instance owning the variable that was passed by push_f is deactivated before pop_f is called, undefined behavior may occur. push_f and pop_f can only take a single argument, and the data is passed both at init and performance time. Any stack errors (trying to push when there is no more space, or pop from an empty stack, inconsistent number or type of arguments, etc.) are fatal and terminate performance.
See also
stack, push, pop and push_f.
Credits
By: Istvan Varga. 2006
1563
port
port Applies portamento to a step-valued control signal.
Description
Applies portamento to a step-valued control signal.
Syntax
kres port ksig, ihtim [, isig]
Initialization
ihtim -- half-time of the function, in seconds. isig (optional, default=0) -- initial (i.e. previous) value for internal feedback. The default value is 0. Negative value will cause initialization to be skipped and last value from previous instance to be used as initial value for note.
Performance
kres -- the output signal at control-rate. ksig -- the input signal at control-rate. port applies portamento to a step-valued control signal. At each new step value, ksig is low-pass filtered to move towards that value at a rate determined by ihtim. ihtim is the half-time of the function (in seconds), during which the curve will traverse half the distance towards the new value, then half as much again, etc., theoretically never reaching its asymptote. With portk, the half-time can be varied at the control rate.
See Also
areson, aresonk, atone, atonek, portk, reson, resonk, tone, tonek
1564
portk
portk Applies portamento to a step-valued control signal.
Description
Applies portamento to a step-valued control signal.
Syntax
kres portk ksig, khtim [, isig]
Initialization
isig (optional, default=0) -- initial (i.e. previous) value for internal feedback. The default value is 0.
Performance
kres -- the output signal at control-rate. ksig -- the input signal at control-rate. khtim -- half-time of the function in seconds. portk is like port except the half-time can be varied at the control rate.
Examples
Here is an example of the portk opcode. It uses the file portk.csd [examples/portk.csd].
1565
FLrun FLsetVal_i 0.1, gislider3 ;set initial time to 0.1 instr 1 kval portk gkval2, gkhtim ; take the value of slider 2 and apply portamento FLsetVal 1, kval, gislider1 ;set the value of slider 1 to kval endin </CsInstruments> <CsScore> ; Play Instrument #1 for one minute. i 1 0 60 e </CsScore> </CsoundSynthesizer>
See Also
areson, aresonk, atone, atonek, port, reson, resonk, tone, tonek
Credits
Author: Robin Whittle Australia May 1997
1566
poscil
poscil High precision oscillator.
Description
High precision oscillator.
Syntax
ares poscil aamp, acps, ifn [, iphs] ares poscil aamp, kcps, ifn [, iphs] ares poscil kamp, acps, ifn [, iphs] ares poscil kamp, kcps, ifn [, iphs] ires poscil kamp, kcps, ifn [, iphs] kres poscil kamp, kcps, ifn [, iphs]
Initialization
ifn -- function table number iphs (optional, default=0) -- initial phase (normalized table index 0-1)
Performance
ares -- output signal kamp, aamp -- the amplitude of the output signal. kcps, acps -- the frequency of the output signal in cycles per second. poscil (precise oscillator) is the same as oscili, but allows much more precise frequency control, especially when using long tables and low frequency values. It uses floating-point table indexing, instead of integer math, like oscil and oscili. It is only a bit slower than oscili. Since Csound 4.22, poscil can accept also negative frequency values and use a-rate values both for amplitude and frequency. So both AM and FM are allowed using this opcode. The opcode poscil3 is the same as poscil, but uses cubic interpolation. Note that poscil can use deffered (non-power of two) length tables.
Examples
Here is an example of the poscil opcode. It uses the file poscil.csd [examples/poscil.csd].
1567
See Also
poscil3
Credits
Author: Gabriel Maldonado Italy 1998 Example written by Kevin Conder. November 2002. Added a note about the changes to Csound version 4.22, thanks to Rasmus Ekman. New in Csound version 3.52
1568
poscil3
poscil3 High precision oscillator with cubic interpolation.
Description
High precision oscillator with cubic interpolation.
Syntax
ares poscil3 kamp, kcps, ifn [, iphs] kres poscil3 kamp, kcps, ifn [, iphs]
Initialization
ifn -- function table number iphs (optional, default=0) -- initial phase (normalized table index 0-1)
Performance
ares -- output signal kamp -- the amplitude of the output signal. kcps -- the frequency of the output signal in cycles per second. poscil3 works like poscil, but uses cubic interpolation. Note that poscil3 can use deffered (non-power of two) length tables.
Examples
Here is an example of the poscil3 opcode. It uses the file poscil3.csd [examples/poscil3.csd].
1569
kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a basic oscillator. instr 1 kamp = 10000 kcps = 440 ifn = 1 a1 poscil3 kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here is another example of the poscil3 opcode, which uses a table filled from a sound file. It uses the file poscil3-file.csd [examples/poscil3-file.csd].
1570
See Also
poscil
Credits
Authors: John ffitch, Gabriel Maldonado Italy Example written by Kevin Conder. New in Csound version 3.52
1571
pow
pow Computes one argument to the power of another argument.
Description
Computes xarg to the power of kpow (or ipow) and scales the result by inorm.
Syntax
ares pow aarg, kpow [, inorm] ires pow iarg, ipow [, inorm] kres pow karg, kpow [, inorm]
Initialization
inorm (optional, default=1) -- The number to divide the result (default to 1). This is especially useful if you are doing powers of a- or k- signals where samples out of range are extremely common!
Performance
aarg, iarg, karg -- the base. ipow, kpow -- the exponent.
Note
Use ^ with caution in arithmetical statements, as the precedence may not be correct. New in Csound version 3.493.
Examples
Here is an example of the pow opcode. It uses the file pow.csd [examples/pow.csd].
1572
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; This could also be expressed as: i1 = 2 ^ 12 i1 pow 2, 12 print i1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Example written by Kevin Conder.
1573
powershape
powershape Waveshapes a signal by raising it to a variable exponent.
Description
The powershape opcode raises an input signal to a power with pre- and post-scaling of the signal so that the output will be in a predictable range. It also processes negative inputs in a symmetrical way to positive inputs, calculating a dynamic transfer function that is useful for waveshaping.
Syntax
aout powershape ain, kShapeAmount [, ifullscale]
Initialization
ifullscale -- optional parameter specifying the range of input values from -ifullscale to ifullscale. Defaults to 1.0 -- you should set this parameter to the maximum expected input value.
Performance
ain -- the input signal to be shaped. aout -- the output signal. kShapeAmount -- the amount of the shaping effect applied to the input; equal to the power that the input signal is raised. The powershape opcode is very similar to the pow unit generators for calculating the mathematical "power of" operation. However, it introduces a couple of twists that can make it much more useful for waveshaping audio-rate signals. The kShapeAmount parameter is the exponent to which the input signal is raised. To avoid discontinuities, the powershape opcode treats all input values as positive (by taking their absolute value) but preserves their original sign in the output signal. This allows for smooth shaping of any input signal while varying the exponent over any range. (powershape also (hopefully) deals intelligently with discontinuities that could arise when the exponent and input are both zero. Note though that negative exponents will usually cause the signal to exceed the maximum amplitude specified by the ifullscale parameter and should normally be avoided). The other adaptation involves the ifullscale parameter. The input signal is divided by ifullscale before being raised to kShapeAmount and then multiplied by ifullscale before being output. This normalizes the input signal to the interval [-1,1], guaranteeing that the output (before final scaling) will also be within this range for positive shaping amounts and providing a smoothly evolving transfer function while varying the amount of shaping. Values of kShapeAmount between (0,1) will make the signal more "convex" while values greater than 1 will make it more "concave". A value of exactly 1.0 will produce no change in the input signal.
See Also
pow, powoftwo
1574
Examples
Here is an example of the powershape opcode. It uses the file powershape.csd [examples/powershape.csd].
Credits
Author: Anthony Kozar January 2008 New in Csound version 5.08
1575
powoftwo
powoftwo Performs a power-of-two calculation.
Description
Performs a power-of-two calculation.
Syntax
powoftwo(x) (init-rate or control-rate args only)
Performance
powoftwo() function returns 2x and allows positive and negatives numbers as argument. The range of values admitted in powoftwo() is -5 to +5 allowing a precision more fine than one cent in a range of ten octaves. If a greater range of values is required, use the slower opcode pow. These functions are fast, because they read values stored in tables. Also they are very useful when working with tuning ratios. They work at i- and k-rate.
Examples
Here is an example of the powoftwo opcode. It uses the file powoftwo.csd [examples/powoftwo.csd].
1576
e </CsScore> </CsoundSynthesizer>
See Also
logbtwo, pow
Credits
Author: Gabriel Maldonado Italy June 1998 Author: John ffitch University of Bath, Codemist, Ltd. Bath, UK July 1999 Example written by Kevin Conder. New in Csound version 3.57
1577
prealloc
prealloc Creates space for instruments but does not run them.
Description
Creates space for instruments but does not run them.
Syntax
prealloc insnum, icount prealloc "insname", icount
Initialization
insnum -- instrument number icount -- number of instrument allocations insname -- A string (in double-quotes) representing a named instrument.
Performance
All instances of prealloc must be defined in the header section, not in the instrument body.
Examples
Here is an example of the prealloc opcode. It uses the file prealloc.csd [examples/prealloc.csd].
1578
instr 1 ; Generate a waveform, get the cycles per second from the 4th p-field. a1 oscil 6500, p4, 1 out a1 endin </CsInstruments> <CsScore> ; Just generate a nice, ordinary sine wave. f 1 0 32768 10 1 ; ; i i i i i e Play five instances of Instrument #1 for one second. Note that 4th p-field contains cycles per second. 1 0 1 220 1 0 1 440 1 0 1 880 1 0 1 1320 1 0 1 1760
</CsScore> </CsoundSynthesizer>
See Also
cpuprc, maxalloc
Credits
Author: Gabriel Maldonado Italy July 1999 Example written by Kevin Conder. New in Csound version 3.57
1579
prepiano
prepiano Creates a tone similar to a piano string prepared in a Cageian fashion.
Description
Audio output is a tone similar to a piano string, prepared with a number of rubbers and rattles. The method uses a physical model developed from solving the partial differential equation.
Syntax
ares prepiano ifreq, iNS, iD, iK, \ iT30,iB, kbcl, kbcr, imass, ifreq, iinit, ipos, ivel, isfreq, \ isspread[, irattles, irubbers] al,ar prepiano ifreq, iNS, iD, iK, \ iT30,iB, kbcl, kbcr, imass, ifreq, iinit, ipos, ivel, isfreq, \ isspread[, irattles, irubbers]
Initialization
ifreq -- The base frequency of the string. iNS -- the number of strings involved. In a real piano 1, 2 or 3 strings are found in different frequency regions. iD -- the amount each string other that the first is detuned from the main frequency, measured in cents. iK -- dimensionless stiffness parameter. iT30 -- 30 db decay time in seconds. ib -- high-frequency loss parameter (keep this small). imass -- the mass of the piano hammer. ifreq -- the frequency of the natural vibrations of the hammer. iinit -- the initial position of the hammer. ipos -- position along the string that the strike occurs. ivel -- normalized strike velocity. isfreq -- scanning frequency of the reading place. isspread -- scanning frequency spread. irattles -- table number giving locations of any rattle(s). irubbers -- table number giving locations of any rubbers(s). The rattles and rubbers tables are collections of four values, preceeded by a count. In the case of a rattle the four are position, mass density ratio of rattle/string, frequency of rattle and vertical length of the rattle. For the rubber the fours are position, mass density ratio of rubber/string, frequency of rubber and 1580
Performance
A note is played on a piano string, with the arguments as below. kbcL -- Boundary condition at left end of string (1 is clamped, 2 pivoting and 3 free). kbcR -- Boundary condition at right end of string (1 is clamped, 2 pivoting and 3 free). Note that changing the boundary conditions during playing may lead to glitches and is made available as an experiment.
Examples
Here is an example of the prepiano opcode. It uses the file prepiano.csd [examples/prepiano.csd].
Credits
Author: Stefan Bilbao University of Edinburgh, UK 1581
Author: John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 5.05
1582
print
print Displays the values init (i-rate) variables.
Description
These units will print orchestra init-values.
Syntax
print iarg [, iarg1] [, iarg2] [...]
Initialization
iarg, iarg2, ... -- i-rate arguments.
Performance
print -- print the current value of the i-time arguments (or expressions) iarg at every i-pass through the instrument.
Note
The print opcode will truncate decimal places and may not show the complete value. Csound's precision depends on whether it is the floats (32-bit) or double (64-bit) version, since most internal calculations use one of these formats. If you need more resolution in the console output, you can try printf.
Examples
Here is an example of the print opcode. It uses the file print.csd [examples/print.csd].
according to platform audio I/O only the line below: output any platform
1583
; Instrument #1. instr 1 ; Print the fourth p-field. print p4 endin </CsInstruments> <CsScore> ; ; i ; i ; i e p4 = value to be printed. Play Instrument #1 for one second, p4 = 50.375. 1 0 1 50.375 Play Instrument #1 for one second, p4 = 300. 1 1 1 300 Play Instrument #1 for one second, p4 = -999. 1 2 1 -999
</CsScore> </CsoundSynthesizer>
See Also
dispfft, display, printk, printk2, printks , printf and prints
Credits
Example written by Kevin Conder.
1584
printf
printf printf-style formatted output
Description
printf and printf_i write formatted output, similarly to the C function printf(). printf_i runs at i-time only, while printf runs both at initialization and performance time.
Syntax
printf_i Sfmt, itrig, [iarg1[, iarg2[, ... ]]] printf Sfmt, ktrig, [xarg1[, xarg2[, ... ]]]
Initialization
Sfmt -- format string, has the same format as in printf() and other similar C functions, except length modifiers (l, ll, h, etc.) are not supported. The following conversion specifiers are allowed: d, i, o, u, x, X, e, E, f, F, g, G, c, s iarg1, iarg2, ... -- input arguments (max. 30) for format. Integer formats like %d round the input values to the nearest integer. itrig -- if greater than zero the opcode performs the printing; otherwise it is an null operation.
Performance
ktrig -- if greater than zero and different from the value on the previous control cycle the opcode performs the requested printing. Initially this previous value is taken as zero. xarg1, xarg2, ... -- input arguments (max. 30) for format. Integer formats like %d round the input values to the nearest integer. Note that only k-rate and i-rate arguments are valid (no a-rate printing)
Credits
Author: Istvan Varga 2005
1585
printk
printk Prints one k-rate value at specified intervals.
Description
Prints one k-rate value at specified intervals.
Syntax
printk itime, kval [, ispace]
Initialization
itime -- time in seconds between printings. ispace (optional, default=0) -- number of spaces to insert before printing. (default: 0, max: 130)
Performance
kval -- The k-rate values to be printed. printk prints one k-rate value on every k-cycle, every second or at intervals specified. First the instrument number is printed, then the absolute time in seconds, then a specified number of spaces, then the kval value. The variable number of spaces enables different values to be spaced out across the screen so they are easier to view. This opcode can be run on every k-cycle it is run in the instrument. To every accomplish this, set itime to 0. When itime is not 0, the opcode print on the first k-cycle it is called, and subsequently when every itime period has elapsed. The time cycles start from the time the opcode is initialized - typically the initialization of the instrument.
Examples
Here is an example of the printk opcode. It uses the file printk.csd [examples/printk.csd].
1586
; Initialize the global variables. sr = 44100 kr = 44100 ksmps = 1 nchnls = 1 ; Instrument #1. instr 1 ; Change a value linearly from 0 to 100, ; over the period defined by p3. kval line 0, p3, 100 ; Print the value of kval, once per second. printk 1, kval endin </CsInstruments> <CsScore> ; Play Instrument #1 for 5 seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
printk2 and printks
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder. Thanks goes to Luis Jure for pointing out a mistake with the itime parameter.
1587
printk2
printk2 Prints a new value every time a control variable changes.
Description
Prints a new value every time a control variable changes.
Syntax
printk2 kvar [, inumspaces]
Initialization
inumspaces (optional, default=0) -- number of space characters printed before the value of kvar
Performance
kvar -- signal to be printed Derived from Robin Whittle's printk, prints a new value of kvar each time kvar changes. Useful for monitoring MIDI control changes when using sliders.
Warning
WARNING! Don't use this opcode with normal, continuously variant k-signals, because it can hang the computer, as the rate of printing is too fast.
Examples
Here is an example of the printk2 opcode. It uses the file printk2.csd [examples/printk2.csd].
1588
; If kval1 is greater than or equal to 5, ; then kval=2, else kval=1. kval2 = (kval1 >= 5 ? 2 : 1) ; Print the value of kval2 when it changes. printk2 kval2 endin </CsInstruments> <CsScore> ; Play Instrument #1 for 5 seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
printk and printks
Credits
Author: Gabriel Maldonado Italy 1998 Example written by Kevin Conder. New in Csound version 3.48
1589
printks
printks Prints at k-rate using a printf() style syntax.
Description
Prints at k-rate using a printf() style syntax.
Syntax
printks "string", itime [, kval1] [, kval2] [...]
Initialization
"string" -- the text string to be printed. Can be up to 8192 characters and must be in double quotes. itime -- time in seconds between printings.
Performance
kval1, kval2, ... (optional) -- The k-rate values to be printed. These are specified in string with the standard C value specifier (%f, %d, etc.) in the order given. In Csound version 4.23, you can use as many kval variables as you like. In versions prior to 4.23, you must specify 4 and only 4 kvals (using 0 for unused kvals). printks prints numbers and text which can be i-time or k-rate values. printks is highly flexible, and if used together with cursor positioning codes, could be used to write specific values to locations in the screen as the Csound processing proceeds. A special mode of operation allows this printks to convert kval1 input parameter into a 0 to 255 value and to use it as the first character to be printed. This enables a Csound program to send arbitrary characters to the console. To achieve this, make the first character of the string a # and then, if desired continue with normal text and format specifiers. This opcode can be run on every k-cycle it is run in the instrument. To every accomplish this, set itime to 0. When itime is not 0, the opcode print on the first k-cycle it is called, and subsequently when every itime period has elapsed. The time cycles start from the time the opcode is initialized - typically the initialization of the instrument.
4. %c treats kval1 as an ascii character code. In addition to all the printf() codes, printks supports these useful character codes: printks Code \\r, \\R, %r, or %R \\n, \\N, %n, %N \\t, \\T, %t, or %T %! ^ ^^ Character Code return character (\r) newline character (\n) tab character (\t) semicolon character (;) This was needed because a ; is interpreted as an comment. escape character (0x1B) caret character (^) ESC[ (escape+[ is the escape sequence for ANSI consoles) tilde ()
For more information about printf() formatting, consult any C language documentation.
Note
Prior to version 4.23, only the %f format code was supported.
Examples
Here is an example of the printks opcode. It uses the file printks.csd [examples/printks.csd].
1591
; Print the value of kup and kdown, once per second. printks "kup = %f, kdown = %f\\n", 1, kup, kdown endin </CsInstruments> <CsScore> ; Play Instrument #1 for 5 seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
printk2 and printk
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder. Thanks goes to Luis Jure for pointing out a mistake with the itime parameter. Thanks to Matt Ingalls, updated the documentation for version 4.23.
1592
prints
prints Prints at init-time using a printf() style syntax.
Description
Prints at init-time using a printf() style syntax.
Syntax
prints "string" [, kval1] [, kval2] [...]
Initialization
"string" -- the text string to be printed. Can be up to 8192 characters and must be in double quotes.
Performance
kval1, kval2, ... (optional) -- The k-rate values to be printed. These are specified in string with the standard C value specifier (%f, %d, etc.) in the order given. Use 0 for those which are not used. prints is similar to the printks opcode except it operates at init-time instead of k-rate. For more information about output formatting, please look at printks's documentation.
Examples
Here is an example of the prints opcode. It uses the file prints.csd [examples/prints.csd].
1593
</CsInstruments> <CsScore> /* Written by Matt Ingalls, edited by Kevin Conder. */ ; Play instrument #1. i 1 0 0.004 </CsScore> </CsoundSynthesizer>
See Also
printks
Credits
Author: Matt Ingalls January 2003
1594
product
product Multiplies any number of a-rate signals.
Description
Multiplies any number of a-rate signals.
Syntax
ares product asig1, asig2 [, asig3] [...]
Performance
asig1, asig2, asig3, ... -- a-rate signals to be multiplied.
Credits
Author: Gabriel Maldonado Italy April 1999 New in Csound version 3.54
1595
pset
pset Defines and initializes numeric arrays at orchestra load time.
Description
Defines and initializes numeric arrays at orchestra load time.
Syntax
pset icon1 [, icon2] [...]
Initialization
icon1, icon2, ... -- preset values for a MIDI instrument pset (optional) defines and initializes numeric arrays at orchestra load time. It may be used as an orchestra header statement (i.e. instrument 0) or within an instrument. When defined within an instrument, it is not part of its i-time or performance operation, and only one statement is allowed per instrument. These values are available as i-time defaults. When an instrument is triggered from MIDI it only gets p1 and p2 from the event, and p3, p4, etc. will receive the actual preset values.
Examples
The example below illustrates pset as used within an instrument.
See Also
strset
1596
ptrack
ptrack Tracks the pitch of a signal.
Description
ptrack takes an input signal, splits it into ihopsize blocks and using a STFT method, extracts an estimated pitch for its fundamental frequency as well as estimating the total amplitude of the signal in dB, relative to full-scale (0dB). The method implies an analysis window size of 2*ihopsize samples (overlaping by 1/2 window), which has to be a power-of-two, between 128 and 8192 (hopsizes between 64 and 4096). Smaller windows will give better time precision, but worse frequency accuracy (esp. in low fundamentals).This opcode is based on an original algorithm by M. Puckette.
Syntax
kcps, kamp ptrack asig, ihopsize[,ipeaks]
Initialization
ihopsize -- size of the analysis 'hop', in samples, required to be power-of-two (min 64, max 4096). This is the period between measurements. ipeaks, ihi -- number of spectral peaks to use in the analysis, defaults to 20 (optional)
Performance
kcps -- estimated pitch in Hz. kamp -- estimated amplitude in dB relative to full-scale (0dB) (ie. always <= 0). ptrack analyzes the input signal, asig, to give a pitch/amplitude pair of outputs, for the fundamental of a monophonic signal. The output is updated every sr/ihopsize seconds.
Examples
Here is an example of the ptrack opcode. This example uses the files ptrack.csd [examples/ptrack.csd].
1597
;Example by Victor Lazzarini 2007 instr 1 a1 inch 1 kf,ka ptrack a1, 512 kcps port kf, 0.01 kamp port ka, 0.01 ; ; ; ; take an input signal pitch track with winsize=1024 smooth freq smooth amp
Credits
Author: Victor Lazzarini NUI, Maynooth. Maynooth, Ireland March, 2007 New in Csound version 5.05
1598
puts
puts Print a string constant or variable
Description
puts prints a string with an optional newline at the end whenever the trigger signal is positive and changes.
Syntax
puts Sstr, ktrig[, inonl]
Initialization
Sstr -- string to be printed inonl (optional, defaults to 0) -- if non-zero, disables the default printing of a newline character at the end of the string
Performance
ktrig -- trigger signal, should be valid at i-time. The string is printed at initialization time if ktrig is positive, and at performance time whenever ktrig is both positive and different from the previous value. Use a constant value of 1 to print once at note initialization.
Credits
Author: Istvan Varga 2005
1599
push
push Pushes a value into the global stack.
Description
Pushes a value into the global stack.
Syntax
push push xval1, [xval2, ... , xval31] ival1, [ival2, ... , ival31]
Initialization
ival1 ... ival31 - values to be pushed into the stack.
Performance
xval1 ... xval31 - values to be pushed into the stack. The given values are pushed into the global stack as a bundle. The global stack works in LIFO order: after multiple push calls, pop should be used in reverse order. Each push or pop operation can work on a "bundle" of multiple variables. When using pop, the number, type, and order of items must match those used by the corresponding push. That is, after a 'push Sfoo, ibar', you must call something like 'Sbar, ifoo pop', and not e.g. two separate 'pop' statements. push and pop opcodes can take variables of any type (i-, k-, a- and strings). Use of any combination of i, k, a, and S types is allowed. Variables of type 'a' and 'k' are passed at performance time only, while 'i' and 'S' are passed at init time only. push/pop for a, k, i, and S types copy data by value. By contrast, push_f only pushes a "reference" to the f-signal, and then the corresponding pop_f will copy directly from the original variable to its output signal. For this reason, changing the source f-signal of push_f before pop_f is called is not recommended, and if the instrument instance owning the variable that was passed by push_f is deactivated before pop_f is called, undefined behavior may occur. Any stack errors (trying to push when there is no more space, or pop from an empty stack, inconsistent number or type of arguments, etc.) are fatal and terminate performance.
See also
stack, pop, pop_f and push_f.
Credits
By: Istvan Varga. 2006 1600
push_f
push_f Pushes an f-sig frame into the global stack.
Description
Pushes an f-sig frame into the global stack.
Syntax
push_f fsig
Performance
fsig - f-signal to be pushed into the stack. The values are pushed into the global stack. The global stack works in LIFO order: after multiple push_f calls, pop_f should be used in reverse order. push/pop for a, k, i, and S types copy data by value. By contrast, push_f only pushes a "reference" to the f-signal, and then the corresponding pop_f will copy directly from the original variable to its output signal. For this reason, changing the source f-signal of push_f before pop_f is called is not recommended, and if the instrument instance owning the variable that was passed by push_f is deactivated before pop_f is called, undefined behavior may occur. pop_f and push_f can only take a single argument, and the data is passed both at init and performance time. Any stack errors (trying to push when there is no more space, or pop from an empty stack, inconsistent number or type of arguments, etc.) are fatal and terminate performance.
See also
stack, push, pop and pop_f.
Credits
By: Istvan Varga. 2006
1601
pvadd
pvadd Reads from a pvoc file and uses the data to perform additive synthesis.
Description
pvadd reads from a pvoc file and uses the data to perform additive synthesis using an internal array of interpolating oscillators. The user supplies the wave table (usually one period of a sine wave), and can choose which analysis bins will be used in the re-synthesis.
Syntax
ares pvadd ktimpnt, kfmod, ifilcod, ifn, ibins [, ibinoffset] \ [, ibinincr] [, iextractmode] [, ifreqlim] [, igatefn]
Initialization
ifilcod -- integer or character-string denoting a control-file derived from pvanal analysis of an audio signal. An integer denotes the suffix of a file pvoc.m; a character-string (in double quotes) gives a filename, optionally a full pathname. If not fullpath, the file is sought first in the current directory, then in the one given by the environment variable SADIR (if defined). pvoc control files contain data organized for fft resynthesis. Memory usage depends on the size of the files involved, which are read and held entirely in memory during computation but are shared by multiple calls (see also lpread). ifn -- table number of a stored function containing a sine wave. ibins -- number of bins that will be used in the resynthesis (each bin counts as one oscillator in the resynthesis) ibinoffset (optional) -- is the first bin used (it is optional and defaults to 0). ibinincr (optional) -- sets an increment by which pvadd counts up from ibinoffset for ibins components in the re-synthesis (see below for a further explanation). iextractmode (optional) -- determines if spectral extraction will be carried out and if so whether components that have changes in frequency below ifreqlim or above ifreqlim will be discarded. A value for iextractmode of 1 will cause pvadd to synthesize only those components where the frequency difference between analysis frames is greater than ifreqlim. A value of 2 for iextractmode will cause pvadd to synthesize only those components where the frequency difference between frames is less than ifreqlim. The default values for iextractmode and ifreqlim are 0, in which case a simple resynthesis will be done. See examples below. igatefn (optional) -- is the number of a stored function which will be applied to the amplitudes of the analysis bins before resynthesis takes place. If igatefn is greater than 0 the amplitudes of each bin will be scaled by igatefn through a simple mapping process. First, the amplitudes of all of the bins in all of the frames in the entire analysis file are compared to determine the maximum amplitude value. This value is then used create normalized amplitudes as indeces into the stored function igatefn. The maximum amplitude will map to the last point in the function. An amplitude of 0 will map to the first point in the function. Values between 0 and 1 will map accordingly to points along the function table.This will be made clearer in the examples below.
Performance
1602
Examples
ktime line 0, p3, p3 asig pvadd ktime, 1, oboe.pvoc, 1, 100, 2
In the above, ibins is 100 and ibinoffset is 2. Using these settings the resynthesis will contain 100 components beginning with bin #2 (bins are counted starting with 0). That is, resynthesis will be done using bins 2-101 inclusive. It is usually a good idea to begin with bin 1 or 2 since the 0th and often 1st bin have data that is neither necessary nor even helpful for creating good clean resynthesis.
The above is the same as the previous example with the addition of the value 2 used for the optional ibinincr argument. This result will still result in 100 components in the resynthesis, but pvadd will count through the bins by 2 instead of by 1. It will use bins 2, 4, 6, 8, 10, and so on. For ibins=10, ibinoffset=10, and ibinincr=10, pvadd would use bins 10, 20, 30, 40, up to and including 100. Below is an example using spectral extraction. In this example iextractmode is 1 and ifreqlim is 9. This will cause pvadd to synthesize only those bins where the frequency deviation, averaged over 6 frames, is greater than 9.
If iextractmode were 2 in the above, then only those bins with an average frequency deviation of less than 9 would be synthesized. If tuned correctly, this technique can be used to separate the pitched parts of the spectrum from the noisy parts. In practice this depends greatly on the type of sound, the quality of the recording and digitization, and also on the analysis window size and frame increment. Next is an example using amplitude gating. The last 2 in the argument list stands for f2 in the score.
asig
1603
Then those bins with amplitudes of 50% of the maximum or greater would be left unchanged, while those with amplitudes less than 50% of the maximum would be scaled down. In this case the lower the amplitude the more severe the scaling down would be. But suppose the score contains:
In this case lower amplitudes will be left unchanged and greater ones will be scaled down, turning the sound upside-down in terms of the amplitude spectrum! Functions can be arbitrarily complex. Just remember that the normalized amplitude values of the analysis are themselves the indeces into the function. Finally, both spectral extraction and amplitude gating can be used together. The example below will synthesize only those components that with a frequency deviation of less than 5Hz per frame and it will scale the amplitudes according to f2.
asig
USEFUL HINTS
By using several pvadd units together, one can gradually fade in different parts of the resynthesis, creating various filtering effects. The author uses pvadd to synthesis one bin at a time to have control over each separate component of the re-synthesis. If any combination of ibins, ibinoffset, and ibinincr, creates a situation where pvadd is asked to used a bin number greater than the number of bins in the analysis, it will just use all of the available bins, and give no complaint. So to use every bin just make ibins a big number (ie. 2000). Expect to have to scale up the amplitudes by factors of 10-100, by the way.
Credits
Author: Richard Karpen Seattle, WA USA 1998 New in Csound version 3.48, additional arguments version 3.56
1604
pvbufread
pvbufread Reads from a phase vocoder analysis file and makes the retrieved data available.
Description
pvbufread reads from a pvoc file and makes the retrieved data available to any following pvinterp and pvcross units that appear in an instrument before a subsequent pvbufread (just as lpread and lpreson work together). The data is passed internally and the unit has no output of its own.
Syntax
pvbufread ktimpnt, ifile
Initialization
ifile -- the pvoc number (n in pvoc.n) or the name in quotes of the analysis file made using pvanal. (See pvoc.)
Performance
ktimpnt -- the passage of time, in seconds, through this file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file.
Examples
The example below shows an example using pvbufread with pvinterp to interpolate between the sound of an oboe and the sound of a clarinet. The value of kinterp returned by a linseg is used to determine the timing of the transitions between the two sounds. The interpolation of frequencies and amplitudes are controlled by the same factor in this example, but for other effects it might be interesting to not have them synchronized in this way. In this example the sound will begin as a clarinet, transform into the oboe and then return again to the clarinet sound. The value of kfreqscale2 is 1.065 because the oboe in this case is a semitone higher in pitch than the clarinet and this brings them approximately to the same pitch. The value of kampscale2 is .75 because the analyzed clarinet was somewhat louder than the analyzed oboe. The setting of these two parameters make the transition quite smooth in this case, but such adjustments are by no means necessary or even advocated.
0, p3, 3.5 ; used as index in the "oboe.pvoc" file 0, p3, 4.5 ; used as index in the "clar.pvoc" file 1, p3*.15, 1, p3*.35, 0, p3*.25, 0, p3*.15, 1, p3*.1, 1 ktime1, "oboe.pvoc" ktime2,1,"clar.pvoc",1,1.065,1,.75,1-kinterp,1-kinterp
Below is an example using pvbufread with pvcross. In this example the amplitudes used in the resynthesis gradually change from those of the oboe to those of the clarinet. The frequencies, of course, remain those of the clarinet throughout the process since pvcross does not use the frequency data from the file read by pvbufread.
1605
line 0, p3, 3.5 ; used as index in the "oboe.pvoc" file line 0, p3, 4.5 ; used as index in the "clar.pvoc" file expon .001, p3, 1 pvbufread ktime1, "oboe.pvoc" pvcross ktime2, 1, "clar.pvoc", 1-kcross, kcross
See Also
pvcross, pvinterp, pvread, tableseg, tablexseg
Credits
Author: Richard Karpen Seattle, WA USA 1997
1606
pvcross
pvcross Applies the amplitudes from one phase vocoder analysis file to the data from a second file.
Description
pvcross applies the amplitudes from one phase vocoder analysis file to the data from a second file and then performs the resynthesis. The data is passed, as described above, from a previously called pvbufread unit. The two k-rate amplitude arguments are used to scale the amplitudes of each files separately before they are added together and used in the resynthesis (see below for further explanation). The frequencies of the first file are not used at all in this process. This unit simply allows for cross-synthesis through the application of the amplitudes of the spectra of one signal to the frequencies of a second signal. Unlike pvinterp, pvcross does allow for the use of the ispecwp as in pvoc and vpvoc.
Syntax
ares pvcross ktimpnt, kfmod, ifile, kampscale1, kampscale2 [, ispecwp]
Initialization
ifile -- the pvoc number (n in pvoc.n) or the name in quotes of the analysis file made using pvanal. (See pvoc.) ispecwp (optional, default=0) -- if non-zero, attempts to preserve the spectral envelope while its frequency content is varied by kfmod. The default value is zero.
Performance
ktimpnt -- the passage of time, in seconds, through this file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file. kfmod -- a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. kampscale1, kampscale2 -- used to scale the amplitudes stored in each frame of the phase vocoder analysis file. kampscale1 scale the amplitudes of the data from the file read by the previously called pvbufread. kampscale2 scale the amplitudes of the file named by ifile. By using these arguments, it is possible to adjust these values before applying the interpolation. For example, if file1 is much louder than file2, it might be desirable to scale down the amplitudes of file1 or scale up those of file2 before interpolating. Likewise one can adjust the frequencies of each to bring them more in accord with one another (or just the opposite, of course!) before the interpolation is performed.
Examples
Below is an example using pvbufread with pvcross. In this example the amplitudes used in the resynthesis gradually change from those of the oboe to those of the clarinet. The frequencies, of course, remain those of the clarinet throughout the process since pvcross does not use the frequency data from the file read by pvbufread.
1607
line 0, p3, 3.5 ; used as index in the "oboe.pvoc" file line 0, p3, 4.5 ; used as index in the "clar.pvoc" file expon .001, p3, 1 pvbufread ktime1, "oboe.pvoc" pvcross ktime2, 1, "clar.pvoc", 1-kcross, kcross
See Also
pvbufread, pvinterp, pvread, tableseg, tablexseg
Credits
Author: Richard Karpen Seattle, Wash 1997 New in version 3.44
1608
pvinterp
pvinterp Interpolates between the amplitudes and frequencies of two phase vocoder analysis files.
Description
pvinterp interpolates between the amplitudes and frequencies, on a bin by bin basis, of two phase vocoder analysis files (one from a previously called pvbufread unit and the other from within its own argument list), allowing for user defined transitions between analyzed sounds. It also allows for general scaling of the amplitudes and frequencies of each file separately before the interpolated values are calculated and sent to the resynthesis routines. The kfmod argument in pvinterp performs its frequency scaling on the frequency values after their derivation from the separate scaling and subsequent interpolation is performed so that this acts as an overall scaling value of the new frequency components.
Syntax
ares pvinterp ktimpnt, kfmod, ifile, kfreqscale1, kfreqscale2, \ kampscale1, kampscale2, kfreqinterp, kampinterp
Initialization
ifile -- the pvoc number (n in pvoc.n) or the name in quotes of the analysis file made using pvanal. (See pvoc.)
Performance
ktimpnt -- the passage of time, in seconds, through this file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file. kfmod -- a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. kfreqscale1, kfreqscale2, kampscale1, kampscale2 -- used in pvinterp to scale the frequencies and amplitudes stored in each frame of the phase vocoder analysis file. kfreqscale1 and kampscale1 scale the frequencies and amplitudes of the data from the file read by the previously called pvbufread (this data is passed internally to the pvinterp unit). kfreqscale2 and kampscale2 scale the frequencies and amplitudes of the file named by ifile in the pvinterp argument list and read within the pvinterp unit. By using these arguments, it is possible to adjust these values before applying the interpolation. For example, if file1 is much louder than file2, it might be desirable to scale down the amplitudes of file1 or scale up those of file2 before interpolating. Likewise one can adjust the frequencies of each to bring them more in accord with one another (or just the opposite, of course!) before the interpolation is performed. kfreqinterp, kampinterp -- used in pvinterp, determine the interpolation distance between the values of one phase vocoder file and the values of a second file. When the value of kfreqinterp is 1, the frequency values will be entirely those from the first file (read by the pvbufread), post scaling by the kfreqscale1 argument. When the value of kfreqinterp is 0 the frequency values will be those of the second file (read by the pvinterp unit itself), post scaling by kfreqscale2. When kfreqinterp is between 0 and 1 the frequency values will be calculated, on a bin, by bin basis, as the percentage between each pair of frequencies (in other words, kfreqinterp=.5 will cause the frequencies values to be half way between the values in the set of data from the first file and the set of data from the second file).
1609
kampinterp works in the same way upon the amplitudes of the two files. Since these are k-rate arguments, the percentages can change over time making it possible to create many kinds of transitions between sounds.
Examples
The example below shows an example using pvbufread with pvinterp to interpolate between the sound of an oboe and the sound of a clarinet. The value of kinterp returned by a linseg is used to determine the timing of the transitions between the two sounds. The interpolation of frequencies and amplitudes are controlled by the same factor in this example, but for other effects it might be interesting to not have them synchronized in this way. In this example the sound will begin as a clarinet, transform into the oboe and then return again to the clarinet sound. The value of kfreqscale2 is 1.065 because the oboe in this case is a semitone higher in pitch than the clarinet and this brings them approximately to the same pitch. The value of kampscale2 is .75 because the analyzed clarinet was somewhat louder than the analyzed oboe. The setting of these two parameters make the transition quite smooth in this case, but such adjustments are by no means necessary or even advocated.
0, p3, 3.5 ; used as index in the "oboe.pvoc" file 0, p3, 4.5 ; used as index in the "clar.pvoc" file 1, p3*.15, 1, p3*.35, 0, p3*.25, 0, p3*.15, 1, p3*.1, 1 ktime1, "oboe.pvoc" ktime2,1,"clar.pvoc",1,1.065,1,.75,1-kinterp,1-kinterp
See Also
pvbufread, pvcross, pvread, tableseg, tablexseg
Credits
Author: Richard Karpen Seattle, Wash 1997
1610
pvoc
pvoc Implements signal reconstruction using an fft-based phase vocoder.
Description
Implements signal reconstruction using an fft-based phase vocoder.
Syntax
ares pvoc ktimpnt, kfmod, ifilcod [, ispecwp] [, iextractmode] \ [, ifreqlim] [, igatefn]
Initialization
ifilcod -- integer or character-string denoting a control-file derived from analysis of an audio signal. An integer denotes the suffix of a file pvoc.m; a character-string (in double quotes) gives a filename, optionally a full pathname. If not fullpath, the file is sought first in the current directory, then in the one given by the environment variable SADIR (if defined). pvoc control contains breakpoint amplitude and frequency envelope values organized for fft resynthesis. Memory usage depends on the size of the files involved, which are read and held entirely in memory during computation but are shared by multiple calls (see also lpread). ispecwp (optional) -- if non-zero, attempts to preserve the spectral envelope while its frequency content is varied by kfmod. The default value is zero. iextractmode (optional) -- determines if spectral extraction will be carried out and if so whether components that have changes in frequency below ifreqlim or above ifreqlim will be discarded. A value for iextractmode of 1 will cause pvoc to synthesize only those components where the frequency difference between analysis frames is greater than ifreqlim. A value of 2 for iextractmode will cause pvoc to synthesize only those components where the frequency difference between frames is less than ifreqlim. The default values for iextractmode and ifreqlim are 0, in which case a simple resynthesis will be done. See examples under pvadd for how to use spectral extraction. igatefn (optional) -- the number of a stored function which will be applied to the amplitudes of the analysis bins before resynthesis takes place. If igatefn is greater than 0 the amplitudes of each bin will be scaled by igatefn through a simple mapping process. First, the amplitudes of all of the bins in all of the frames in the entire analysis file are compared to determine the maximum amplitude value. This value is then used create normalized amplitudes as indeces into the stored function igatefn. The maximum amplitude will map to the last point in the function. An amplitude of 0 will map to the first point in the function. Values between 0 and 1 will map accordingly to points along the function table. See examples under pvadd for how to use amplitude gating.
Performance
ktimpnt -- The passage of time, in seconds, through the analysis file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file. kfmod -- a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. pvoc implements signal reconstruction using an fft-based phase vocoder. The control data stems from a 1611
precomputed analysis file with a known frame rate. This implementation of pvoc was orignally written by Dan Ellis. It is based in part on the system of Mark Dolson, but the pre-analysis concept is new. The spectral extraction and amplitude gating (new in Csound version 3.56) were added by Richard Karpen based on functions in SoundHack by Tom Erbe.
See Also
vpvoc, PVANAL.
Credits
Authors: Dan Ellis and Richard Karpen Seattle, Wash 1997
1612
pvread
pvread Reads from a phase vocoder analysis file and returns the frequency and amplitude from a single analysis channel or bin.
Description
pvread reads from a pvoc file and returns the frequency and amplitude from a single analysis channel or bin. The returned values can be used anywhere else in the Csound instrument. For example, one can use them as arguments to an oscillator to synthesize a single component from an analyzed signal or a bank of pvreads can be used to resynthesize the analyzed sound using additive synthesis by passing the frequency and magnitude values to a bank of oscillators.
Syntax
kfreq, kamp pvread ktimpnt, ifile, ibin
Initialization
ifile -- the pvoc number (n in pvoc.n) or the name in quotes of the analysis file made using pvanal. (See pvoc.) ibin -- the number of the analysis channel from which to return frequency in Hz and magnitude.
Performance
kfreq, kamp -- outputs of the pvread unit. These values, retrieved from a phase vocoder analysis file, represent the values of frequency and amplitude from a single analysis channel specified in the ibin argument. Interpolation between analysis frames is performed at k-rate resolution and dependent of course upon the rate and direction of ktimpnt. ktimpnt -- the passage of time, in seconds, through this file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file.
Examples
The example below shows the use pvread to synthesize a single component from a phase vocoder analysis file. It should be noted that the kfreq and kamp outputs can be used for any kind of synthesis, filtering, processing, and so on.
0, p3, 3 ktime, "pvoc.file", 7 ; read ;data from 7th analysis bin. kamp, kfreq, 1 ; function 1 ;is a stored sine
See Also
1613
Credits
Author: Richard Karpen Seattle, Wash 1997 New in version 3.44
1614
pvsadsyn
pvsadsyn Resynthesize using a fast oscillator-bank.
Description
Resynthesize using a fast oscillator-bank.
Syntax
ares pvsadsyn fsrc, inoscs, kfmod [, ibinoffset] [, ibinincr] [, iinit]
Initialization
inoscs -- The number of analysis bins to synthesise. Cannot be larger than the size of fsrc (see pvsinfo), e.g. as created by pvsanal. Processing time is directly proportional to inoscs. ibinoffset (optional, default=0) -- The first (lowest) bin to resynthesise, counting from 0 (default = 0). ibinincr (optional) -- Starting from bin ibinoffset, resynthesize bins ibinincr apart. iinit (optional) -- Skip reinitialization. This is not currently implemented for any of these opcodes, and it remains to be seen if it is even practical.
Performance
kfmod -- Scale all frequencies by factor kfmod. 1.0 = no change, 2 = up one octave. pvsadsyn is experimental, and implements the oscillator bank using a fast direct calculation method, rather than a lookup table. This takes advantage of the fact, empirically arrived at, that for the analysis rates generally used, (and presuming analysis using pvsanal, where frequencies in a bin change only slightly between frames) it is not necessary to interpolate frequencies between frames, only amplitudes. Accurate resynthesis is often contingent on the use of pvsanal with iwinsize = ifftsize*2. This opcode is the most likely to change, or be much extended, according to feedback and advice from users. It is likely that a full interpolating table-based method will be added, via a further optional iarg. The parameter list to pvsadsyn mimics that for pvadd, but excludes spectral extraction.
Examples
Here is an example of the pvsadsyn opcode. It uses the file pvsadsyn.csd [examples/pvsadsyn.csd].
1615
-odac ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o pvsadsyn.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 16 nchnls = 1 0dbfs = 1 ;; example written by joachim heintz 2009 opcode FileToPvsBuf, iik, Siiii ;;writes an audio file at the first k-cycle to a fft-buffer (via pvsbuffer) Sfile, ifftsize, ioverlap, iwinsize, iwinshape xin ktimek timeinstk if ktimek == 1 then ilen filelen Sfile kcycles = ilen * kr; number of k-cycles to write the fft-buffer kcount init 0 loop: ain soundin Sfile fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape ibuf, ktim pvsbuffer fftin, ilen + (ifftsize / sr) loop_lt kcount, 1, kcycles, loop xout ibuf, ilen, ktim endif endop instr 1 istretch = p4; time stretching factor ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window ibuffer, ilen, k0 FileToPvsBuf "fox.wav", ifftsize, ioverlap, iwinsize, iwinshape p3 = istretch * ilen; set p3 to the correct value ktmpnt linseg 0, p3, ilen; time pointer fread pvsbufread ktmpnt, ibuffer; read the buffer aout pvsadsyn fread, 10, 1; resynthesis with the first 10 bins out aout endin </CsInstruments> <CsScore> i 1 0 1 20 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Richard Dobson August 2001 New in version 4.13
1616
pvsanal
pvsanal Generate an fsig from a mono audio source ain, using phase vocoder overlap-add analysis.
Description
Generate an fsig from a mono audio source ain, using phase vocoder overlap-add analysis.
Syntax
fsig pvsanal ain, ifftsize, ioverlap, iwinsize, iwintype [, iformat] [, iinit]
Initialization
ifftsize -- The FFT size in samples. Need not be a power of two (though these are especially efficient), but must be even. Odd numbers are rounded up internally. ifftsize determines the number of analysis bins in fsig, as ifftsize/2 + 1. For example, where ifftsize = 1024, fsig will contain 513 analysis bins, ordered linearly from the fundamental to Nyquist. The fundamental of analysis (which in principle gives the lowest resolvable frequency) is determined as sr/ifftsize. Thus, for the example just given and assuming sr = 44100, the fundamental of analysis is 43.07Hz. In practice, due to the phase-preserving nature of the phase vocoder, the frequency of any bin can deviate bilaterally, so that DC components are recorded. Given a strongly pitched signal, frequencies in adjacent bins can bunch very closely together, around partials in the source, and the lowest bins may even have negative frequencies. As a rule, the only reason to use a non power-of-two value for ifftsize would be to match the known fundamental frequency of a strongly pitched source. Values with many small factors can be almost as efficient as power-of-two sizes; for example: 384, for a source pitched at around low A=110Hz. ioverlap -- The distance in samples (hop size) between overlapping analysis frames. As a rule, this needs to be at least ifftsize/4, e.g. 256 for the example above. ioverlap determines the underlying analysis rate, as sr/ioverlap. ioverlap does not require to be a simple factor of ifftsize; for example a value of 160 would be legal. The choice of ioverlap may be dictated by the degree of pitch modification applied to the fsig, if any. As a rule of thumb, the more extreme the pitch shift, the higher the analysis rate needs to be, and hence the smaller the value for ioverlap. A higher analysis rate can also be advantageous with broadband transient sounds, such as drums (where a small analysis window gives less smearing, but more frequency-related errors). Note that it is possible, and reasonable, to have distinct fsigs in an orchestra (even in the same instrument), running at different analysis rates. Interactions between such fsigs is currently unsupported, and the fsig assignment opcode does not allow copying between fsigs with different properties, even if the only difference is in ioverlap. However, this is not a closed issue, as it is possible in theory to achieve crude rate conversion (especially with regard to in-memory analysis files) in ways analogous to timedomain techniques. iwinsize -- The size in samples of the analysis window filter (as set by iwintype). This must be at least ifftsize, and can usefully be larger. Though other proportions are permitted, it is recommended that iwinsize always be an integral multiple of ifftsize, e.g. 2048 for the example above. Internally, the analysis window (Hamming, von Hann) is multiplied by a sinc function, so that amplitudes are zero at the boundaries between frames. The larger analysis window size has been found to be especially important for oscillator bank resynthesis (e.g. using pvsadsyn), as it has the effect of increasing the frequency resolution of the analysis, and hence the accuracy of the resynthesis. As noted above, iwinsize determines the overall latency of the analysis/resynthesis system. In many cases, and especially in the absence of pitch modifications, it will be found that setting iwinsize=ifftsize works very well, and offers the lowest 1617
latency. iwintype -- The shape of the analysis window. Currently only two choices are implemented: 0 = Hamming window 1 = von Hann window Both are also supported by the PVOC-EX file format. The window type is stored as an internal attribute of the fsig, together with the other parameters (see pvsinfo). Other types may be implemented later on (e.g. the Kaiser window, also supported by PVOC-EX), though an obvious alternative is to enable windows to be defined via a function table. The main issue here is the constraint of f-tables to power-of-two sizes, so this method does not offer a complete solution. Most users will find the Hamming window meets all normal needs, and can be regarded as the default choice. iformat -- (optional) The analysis format. Currently only one format is implemented by this opcode: 0 = amplitude + frequency This is the classic phase vocoder format; easy to process, and a natural format for oscillator-bank resynthesis. It would be very easy (tempting, one might say) to treat an fsig frame not purely as a phase vocoder frame but as a generic additive synthesis frame. It is indeed possible to use an fsig this way, but it is important to bear in mind that the two are not, strictly speaking, directly equivalent. Other important formats (supported by PVOC-EX) are: 1 = amplitude + phase 2 = complex (real + imaginary) iformat is provided in case it proves useful later to add support for these other formats. Formats 0 and 1 are very closely related (as the phase is wrapped in both cases - it is a trivial matter to convert from one to the other), but the complex format might warrant a second explicit signal type (a csig) specifically for convolution-based processes, and other processes where the full complement of arithmetic operators may be useful. iinit -- (optional) Skip reinitialization. This is not currently implemented for any of these opcodes, and it remains to be seen if it is even practical.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
ain in ffin pvsanal ain,1024,256,2048,0 ffout pvsmaska ffin,1,0.75 aout pvsynth ffout ; ; ; ; live source analyze, using Hamming apply eq from f-table and resynthesize
1618
Credits
Author: Richard Dobson August 2001 New in version 4.13
1619
pvsarp
pvsarp Arpeggiate the spectral components of a streaming pv signal.
Description
This opcode arpeggiates spectral components, by amplifying one bin and attenuating all the others around it. Used with an LFO it will provide a spectral arpeggiator similar to Trevor Wishart's CDP program specarp.
Syntax
fsig pvsarp fsigin, kbin, kdepth, kgain
Performance
fsig -- output pv stream fsigin -- input pv stream kbin -- target bin, normalised 0 - 1 (0Hz - Nyquist). kdepth -- depth of attenuation of surrounding bins kgain -- gain boost applied to target bin
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Here is an example of the pvsarp opcode. It uses the file pvsarp.csd [examples/pvsarp.csd]
1620
ksmps = 100 nchnls = 1 0dbfs = 1 instr 1 asig in idepth = p4 fsig kbin ftps atps endin </CsInstruments> <CsScore> f 1 0 4096 10 1 ;sine wave i 1 0 10 0.9 i 1 + 10 0.5 e </CsScore> </CsoundSynthesizer> pvsanal oscili pvsarp pvsynth ; get the signal in asig, 1024, 256, 1024, 1 ; analyse it 0.1, 0.5, 1 ; ftable 1 in the 0-1 range fsig, kbin+0.01, idepth, 2 ; arpeggiate it (range 220.5 - 2425.5) ftps ; synthesise it
out atps
Here is another example of the pvsarp opcode. It uses the file pvsarp2.csd [examples/pvsarp2.csd]
1621
aout
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini April 2005 New plugin in version 5 April 2005.
1622
pvsbandp
pvsbandp A band pass filter working in the spectral domain.
Description
Filter the pvoc frames, passing bins whose frequency is within a band, and with linear interpolation for transitional bands.
Syntax
fsig pvsbandp fsigin, xlowcut, xlowfull, xhighfull, xhighcut[, ktype]
Performance
fsig -- output pv stream fsigin -- input pv stream. xlowcut, xlowfull, xhighfull, xhighcut -- define a trapezium shape for the band that is passed. The a-rate versions only apply to the sliding case. ktype -- specifies the shape of the transitional band. If at the default value of zero the shape is as below, with linear transition in amplitude. Other values yield and exponential shape: (1 - exp( r*type )) / (1 - exp(type)) This includes a linear dB shape when ktype is log(10) or about 2.30. The opcode performs a band-pass filter with a spectral envelope shaped like klowfull __________________________ khighfull / \ / \ / \ / \ / \ ________/ \______________ klowcut khighcut
Examples
Here is an example of the pvsbandp opcode. It uses the file pvsbandp.csd [examples/pvsbandp.csd].
1623
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o pvsbandp.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 16 nchnls = 1 0dbfs = 1 ;; example written by joachim heintz 2009 instr 1 Sfile = "fox.wav" klowcut = 100 klowfull = 200 khighfull = 1900 khighcut = 2000 ain soundin Sfile fftin pvsanal ain, 1024, 256, 1024, 1; fft-analysis of the audio-signal fftbp pvsbandp fftin, klowcut, klowfull, khighfull, khighcut ; band pass abp pvsynth fftbp; resynthesis out abp endin </CsInstruments> <CsScore> i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn, pvsadsyn
Credits
Author: John ffitch December 2007
1624
pvsbandr
pvsbandr A band reject filter working in the spectral domain.
Description
Filter the pvoc frames, rejecting bins whose frequency is within a band, and with linear interpolation for transitional bands.
Syntax
fsig pvsbandr fsigin, xlowcut, xlowfull, xhighfull, xhighcut[, ktype]
Performance
fsig -- output pv stream fsigin -- input pv stream. xlowcut, xlowfull, xhighfull, xhighcut -- define a trapezium shape for the band that is rejected. The a-rate versions only apply to the sliding case. ktype -- specifies the shape of the transitional band. If at the default value of zero the shape is as below, with linear transition in amplitude. Other values give an exponential curve (1 - exp( r*type )) / (1 - exp(type)) This includes a linear dB shape when ktype is log(10) or about 2.30. The opcode performs a band-reject filter with a spectral envelope shaped like klowcut khighcut ________ ______________ \ / \ / \ / \ / \ / klowfull\__________________________/ khighfull
Examples
Here is an example of the pvsbandr opcode. It uses the file pvsbandr.csd [examples/pvsbandr.csd].
1625
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o pvsbandr.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 16 nchnls = 1 0dbfs = 1 ;; example written by joachim heintz 2009 instr 1 Sfile = "fox.wav" klowcut = 100 klowfull = 200 khighfull = 1900 khighcut = 2000 ain soundin Sfile fftin pvsanal ain, 1024, 256, 1024, 1; fft-analysis of the audio-signal fftbp pvsbandr fftin, klowcut, klowfull, khighfull, khighcut ; band reject abp pvsynth fftbp; resynthesis out abp endin </CsInstruments> <CsScore> i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn, pvsadsyn
Credits
Author: John ffitch December 2007
1626
pvsbin
pvsbin Obtain the amp and freq values off a PVS signal bin.
Description
Obtain the amp and freq values off a PVS signal bin as k-rate variables.
Syntax
kamp, kfr pvsbin fsig, kbin
Performance
kamp -- bin amplitude kfr -- bin frequency fsig -- an input pv stream kbin -- bin number
Examples
Here is an example of the pvsbin opcode. It uses the file pvsbin.csd [examples/pvsbin.csd]. This example uses realtime input, but you can also use it for soundfile input.
1627
out endin
adm
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini August 2006
1628
pvsblur
pvsblur Average the amp/freq time functions of each analysis channel for a specified time.
Description
Average the amp/freq time functions of each analysis channel for a specified time (truncated to number of frames). As a side-effect the input pvoc stream will be delayed by that amount.
Syntax
fsig pvsblur fsigin, kblurtime, imaxdel
Performance
fsig -- output pv stream fsigin -- input pv stream. kblurtime -- time in secs during which windows will be averaged . imaxdel -- maximum delay time, used for allocating memory used in the averaging operation. This opcode will blur a pvstream by smoothing the amplitude and frequency time functions (a type of low-pass filtering); the amount of blur will depend on the length of the averaging period, larger blurtimes will result in a more pronounced effect.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Here is an example of the use of the pvsblur opcode. It uses the file pvsblur.csd [examples/pvsblur.csd].
1629
;; example written by joachim heintz 2009 instr 1 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile = "fox.wav" ain soundin Sfile fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of the audio-signal fftblur pvsblur fftin, p4, 1; blur aout pvsynth fftblur; resynthesis out aout endin </CsInstruments> <CsScore> i 1 0 3 0 i 1 3 3 .1 i 1 6 3 .5 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 November 2004.
1630
pvsbuffer
pvsbuffer This opcode creates and writes to a circular buffer for f-signals (streaming PV signals).
Description
This opcode sets up and writes to a circular buffer of length ilen (secs), giving a handle for the buffer and a time pointer, which holds the current write position (also in seconds). It can be used with one or more pvsbufread opcodes. Writing is circular, wrapping around at the end of the buffer.
Syntax
ihandle, ktime pvsbuffer fsig, ilen
Initialisation Initialisation
ihandle -- handle identifying this particular buffer, which should be passed to a reader opcode. ilen -- buffer length in seconds. fsig -- an input pv stream ktime -- the current time of writing in the buffer pvsbuffer stores fsig in a buffer which can be read by pvsbufread using the handle ihandle. Different buffers will have different handles so they can be read independently by different pvsbufread opcodes. pvsbuffer gives in its output the current time (ktime) inside the ring buffer which has just been written.
Examples
See pvsbufread for examples of the pvsbuffer opcode.
See also
pvsbufread
Credits
Author: Victor Lazzarini July 2007
1631
pvsbufread
pvsbufread This opcode reads a circular buffer of f-signals (streaming PV signals).
Description
This opcode sets up and writes to a circular buffer of length ilen (secs), giving a handle for the buffer and a time pointer, which holds the current write position (also in seconds). It can be used with one or more pvsbufread opcodes. Writing is circular, wrapping around at the end of the buffer.
Syntax
fsig pvsbufread ktime, khandle[, ilo, ihi]
Initialisation Initialisation
ilo, ihi -- set the lowest and highest freqs to be read from the buffer (defaults to 0, Nyquist). fsig -- output pv stream ktime -- time position of reading pointer (in secs). khandle -- handle identifying the buffer to be read. When using k-rate handles, it is important to initialise the k-rate variable to a given existing handle. When changing buffers, fsig buffers need to be compatible (same fsig format). pvsbufread reads f-signals from a buffer created by With this opcode and pvsbuffer, it is possible to, among other things:
Note
It is important that the handle value passed to pvsbufread is valid and was created by pvsbuffer. Csound will crash with invalid handles.
Examples
Here is an example of the pvsbufread opcode. It does 'brassage' by switching between two buffers.
1632
ibuf1,kt1 ibuf2,kt2
pvsbuffer pvsbuffer
fsig1, 10 fsig2, 7
khan init ibuf1 if ktrig > 0 then khan = ibuf2 else khan = ibuf1 endif fsb pvsbufread
kt1, khan
; read buffer
Here is an example of the pvsbufread opcode. It uses the file pvsbufread.csd [examples/pvsbufread.csd].
1633
See Also
pvsanal, pvsynth, pvsbuffer, pvsadsyn
Credits
Author: Victor Lazzarini July 2007
1634
pvscale
pvscale Scale the frequency components of a pv stream.
Description
Scale the frequency components of a pv stream, resulting in pitch shift. Output amplitudes can be optionally modified in order to attempt formant preservation.
Syntax
fsig pvscale fsigin, kscal[, kkeepform, kgain, kcoefs]
Performance
fsig -- output pv stream fsigin -- input pv stream kscal -- scaling ratio. kkeepform -- attempt to keep input signal formants; 0: do not keep formants; 1: keep formants using a liftered cepstrum method; 2: keep formants by using a true envelope method (defaults to 0). kgain -- amplitude scaling (defaults to 1). kcoefs -- number of cepstrum coefs used in formant preservation (defaults to 80). The quality of the pitch shift will be improved with the use of a Hanning window in the pvoc analysis. Formant preservation method 1 is less intensive than method 2, which might not be suited to realtime use.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 470. Example
asig fsig ftps atps adp adel in pvsanal pvscale pvsynth ; get the signal in asig, 1024, 256, 1024, 1 ; analyse it fsig, 1.5, 1, 1 ; transpose it keeping formants ftps ; synthesise it ; delay original signal ; by 1024 samples
1635
out atps+adel
The example above shows a vocal harmoniser. The delay is necessary to time-align the signals, as the analysis-synthesis process will imply a delay of 1024 samples between the analysis input and the synthesis output. Here is an example of the use of the pvscale opcode. It uses the file pvscale.csd [examples/pvscale.csd].
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 November 2004. 1636
pvscent
pvscent Calculate the spectral centroid of a signal.
Description
Calculate the spectral centroid of a signal from its discrete Fourier transform.
Syntax
kcent pvscent fsig
Performance
kcent -- the spectral centroid fsig -- an input pv stream
Examples
Here is an example of the use of the pvscent opcode. It uses the file pvscent.csd [examples/pvscent.csd].
instr 1 irefrtm = p4; time for generating new values for the spectral centroid ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window ;Sfile = "flute-C-octave0.wav" Sfile = "fox.wav" ain soundin Sfile fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of the audio-signal ktrig metro 1 / irefrtm if ktrig == 1 then kcenter pvscent fftin; spectral center endif aout oscil .2, kcenter, giSine out aout endin
1637
</CsInstruments> <CsScore> i 1 0 2.757 .3 i 1 3 2.757 .05 i 1 6 2.757 .005 i 1 9 2.757 .001 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn, pvspitch
Credits
Author: John ffitch; March 2005 New plugin in version 5 March 2005.
1638
pvscross
pvscross Performs cross-synthesis between two source fsigs.
Description
Performs cross-synthesis between two source fsigs.
Syntax
fsig pvscross fsrc, fdest, kamp1, kamp2
Performance
The operation of this opcode is identical to that of pvcross (q.v.), except in using fsigs rather than analysis files, and the absence of spectral envelope preservation. The amplitudes from fsrc and fdest (using scale factors kamp1 for fsrc and kamp2 for fdest) are applied to the frequencies of fsrc. kamp1 and kamp2 must not exceed the range 0 to 1. With this opcode, cross-synthesis can be performed on real-time audio input, by using pvsanal to generate fsrc and fdest. These must have the same format.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Here is an example of the use of the pvscross opcode. It uses the file pvscross.csd [examples/ pvscross.csd].
1639
ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile1 = "fox.wav" Sfile2 = "wave.wav" ain1 soundin Sfile1 ain2 soundin Sfile2 fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of file 1 fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of file 2 ktrans linseg 0, p3, 1; linear transition if ipermut == 1 then fcross pvscross fftin2, fftin1, ktrans, 1-ktrans else fcross pvscross fftin1, fftin2, ktrans, 1-ktrans endif aout pvsynth fcross out aout endin </CsInstruments> <CsScore> i 1 0 2.757 0; frequencies from fox. wav; amplitudes moving from wave to fox i 1 3 2.757 1; frequencies from wave.wav, amplitudes moving from fox to wave e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Richard Dobson August 2001 November 2003. Thanks to Kanata Motohashi, fixed the link to the pvcross opcode. New in version 4.13
1640
pvsdemix
pvsdemix Spectral azimuth-based de-mixing of stereo sources.
Description
Spectral azimuth-based de-mixing of stereo sources, with a reverse-panning result. This opcode implements the Azimuth Discrimination and Resynthesis (ADRess) algorithm, developed by Dan Barry (Barry et Al. "Sound Source Separation Azimuth Discrimination and Resynthesis". DAFx'04, Univ. of Napoli). The source separation, or de-mixing, is controlled by two parameters: an azimuth position (kpos) and a subspace width (kwidth). The first one is used to locate the spectral peaks of individual sources on a stereo mix, whereas the second widens the 'search space', including/exclufing the peaks around kpos. These two parameters can be used interactively to extract source sounds from a stereo mix. The algorithm is particularly successful with studio recordings where individual instruments occupy individual panning positions; it is, in fact, a reverse-panning algorithm.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Syntax
fsig pvsdemix fleft, fright, kpos, kwidth, ipoints
Performance
fsig -- output pv stream fleft -- left channel input pv stream. fright -- right channel pv stream. kpos -- the azimuth target centre position, which will be de-mixed, from left to right (-1 <= kpos <= 1). This is the reverse pan-pot control. kwidth -- the azimuth subspace width, which will determine the number of points around kpos which will be used in the de-mixing process. (1 <= kwidth <= ipoints) ipoints -- total number of discrete points, which will divide each pan side of the stereo image. This ultimately affects the resolution of the process.
Examples
The example below takes a stereo input and passes through a de-mixing process revealing a source located at ipos +/- iwidth points. These parameters can be controlled in realtime (e.g. using FLTK widgets or MIDI) for an interactive search of sound sources.
ifftsize = 1024 iwtype = 1 /* cleaner with hanning window */ ipos = -0.8 /* to the left of the stereo image */ iwidth = 20 /* use peaks of 20 points around it */ al,ar flc frc fdm adm soundin "sinput.wav" al, ifftsize, ifftsize/4, ifftsize, iwtype ar, ifftsize, ifftsize/4, ifftsize, iwtype flc, frc, kpos, kwidth, 100 fdm adm,adm
Credits
Author: Victor Lazzarini January 2005 New plugin in version 5 January 2005.
1642
pvsdiskin
pvsdiskin Read a selected channel from a PVOC-EX analysis file.
Description
Create an fsig stream by reading a selected channel from a PVOC-EX analysis file, with frame interpolation.
Syntax
fsig pvsdiskinSFname,ktscal,kgain[,ioffset, ichan]
Initialization
Sfname -- Name of the analysis file. This must have the .pvx file extension. A multi-channel PVOC-EX file can be generated using the extended pvanal utility. ichan -- (optional) The channel to read (counting from 1). Default is 1. ioff -- start offset from beginning of file (secs) (default: 0) .
Performance
ktscal -- time scale, ie. the read pointer speed (1 is normal speed, negative is backwards, 0 < ktscal < 1 is slower and ktscal > 1 is faster) kgain -- gain scaling.
Examples
fsigr pvsdiskin "test.pvx",1,1 ; read PVOCEX file with tscale and gain = 1 aout pvsynth fsigr ; resynthesise it
Credits
Author: Victor Lazzarini May 2007 New in Csound 5.06
1643
pvsdisp
pvsdisp Displays a PVS signal as an amplitude vs. freq graph.
Description
This opcode will display a PVS signal fsig. Uses X11 or FLTK windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.
Syntax
pvsdisp fsig[, ibins, iwtflg]
Initialization
iprd -- the period of pvsdisp in seconds. ibins (optional, default=all bins) -- optionally, display only ibins bins. iwtflg (optional, default=0) -- wait flag. If non-zero, each pvsdisp is held until released by the user. The default value is 0 (no wait).
Performance
pvsdisp -- displays the PVS signal frame-by-frame.
Examples
Here is an example of the pvsdisp opcode. It uses the file pvsdisp.csd [examples/pvsdisp.csd]. This example uses realtime input, but you can also use it for soundfile input.
1644
See Also
pvsanal, pvsynth, dispfft, print, pvsadsyn
Credits
Author: Victor Lazzarini, 2006
1645
pvsfilter
pvsfilter Multiply amplitudes of a pvoc stream by those of a second pvoc stream, with dynamic scaling.
Description
Multiply amplitudes of a pvoc stream by those of a second pvoc stream, with dynamic scaling.
Syntax
fsig pvsfilter fsigin, fsigfil, kdepth[, igain]
Performance
fsig -- output pv stream fsigin -- input pv stream. fsigfil -- filtering pvoc stream. kdepth -- controls the depth of filtering of fsigin by fsigfil . igain -- amplitude scaling (optional, defaults to 1). Here the input pvoc stream amplitudes are modified by the filtering stream, keeping its frequencies intact. As usual, both signals have to be in the same format.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 476. Example
kfreq expon 500, p3, 4000 kdepth linseg 1, p3/2, 0.5, p3/2, 1 asig afil fim fil fou aout in oscili 1, kfreq, 1 ; 3-octave sweep ; varying filter depth ; input ; filter t-domain signal ; pvoc analysis ; filter signal ; pvoc synthesis
pvsanal asig,1024,256,1024,0 pvsanal afil,1024,256,1024,0 pvsfilter fim, fil, kdepth pvsynth fou
1646
In the example above the filter curve will depend on the spectral envelope of afil; in the simple case of a sinusoid, it will be equivalent to a narrowband band-pass filter. Here is an example of the use of the pvsfilter opcode. It uses the file pvsfilter.csd [examples/pvsfilter.csd].
0, 0, 4096, 10, 1 0, 0, 4096, 9, .56, 1, 0, .57, .67, 0, .92, 1.8, 0, .93, 1.8, 0, 1.19, 2.6
instr 1 ipermut = p4; 1 = change order of soundfiles ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile1 = "fox.wav" ain1 soundin Sfile1 kfreq randomi 200, 300, 3 ain2 oscili .2, kfreq, giBell ;ain2 oscili .2, kfreq, giSine; try also this fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of file 1 fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of file 2 if ipermut == 1 then fcross pvsfilter fftin2, fftin1, 1 else fcross pvsfilter fftin1, fftin2, 1 endif aout pvsynth fcross out aout * 20 endin </CsInstruments> <CsScore> i 1 0 2.757 0; frequencies from fox.wav, amplitudes multiplied by amplitudes of giBell i 1 3 2.757 1; frequencies from giBell, amplitudes multiplied by amplitudes of fox.wav e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini 1647
1648
pvsfread
pvsfread Read a selected channel from a PVOC-EX analysis file.
Description
Create an fsig stream by reading a selected channel from a PVOC-EX analysis file loaded into memory, with frame interpolation. Only format 0 files (amplitude+frequency) are currently supported. The operation of this opcode mirrors that of pvoc, but outputs an fsig instead of a resynthesized signal.
Syntax
fsig pvsfread ktimpt, ifn [, ichan]
Initialization
ifn -- Name of the analysis file. This must have the .pvx file extension. A multi-channel PVOC-EX file can be generated using the extended pvanal utility. ichan -- (optional) The channel to read (counting from 0). Default is 0.
Performance
ktimpt -- Time pointer into analysis file, in seconds. See the description of the same parameter of pvoc for usage. Note that analysis files can be very large, especially if multi-channel. Reading such files into memory will very likely incur breaks in the audio during real-time performance. As the file is read only once, and is then available to all other interested opcodes, it can be expedient to arrange for a dedicated instrument to preload all such analysis files at startup.
Examples
idur filelen kpos line fsigr pvsfread "test.pvx" 0,p3,idur kpos,"test.pvx",1 ; find dur of (stereo) analysis file ; to ensure we process whole file ; create fsig from R channel
(NB: as this example shows, the filelen opcode has been extended to accept both old and new analysis file formats).
Credits
Author: Richard Dobson August 2001 New in version 4.13 1649
pvsfreeze
pvsfreeze Freeze the amplitude and frequency time functions of a pv stream according to a controlrate trigger.
Description
This opcodes 'freezes' the evolution of pvs stream by locking into steady amplitude and/or frequency values for each bin. The freezing is controlled, independently for amplitudes and frequencies, by a control-rate trigger, which switches the freezing 'on' if equal to or above 1 and 'off' if below 1.
Syntax
fsig pvsfreeze fsigin, kfreeza, kfreezf
Performance
fsig -- output pv stream fsigin -- input pv stream. kfreeza -- freezing switch for amplitudes. Freezing is on if above or equal to 1 and off if below 1. kfcf -- freezing switch for frequencies. Freezing is on if above or equal to 1 and off if below 1.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 478. Example
asig in ; input ktrig oscil 1.5, 0.25, 1 ; trigger fim pvsanal asig1,1024,256,1024,0 ; pvoc analysis fou pvsfreeze fim, abs(ktrig), abs(ktrig) ; regular 'freeze' of spectra aout pvsynth fou ; pvoc synthesis
In the example above the input signal will be regularly 'frozen' for a short while, as the trigger rises above 1 about every two seconds. Here is an example of the use of the pvsfreeze opcode. It uses the file pvsfreeze.csd [examples/pvsfreeze.csd]. 1650
instr 1 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile1 = "fox.wav" ain soundin Sfile1 kfreq randomh .7, 1.1, 3; probability of freezing freqs: 1/4 kamp randomh .7, 1.1, 3; idem for amplitudes fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of file freeze pvsfreeze fftin, kamp, kfreq; freeze amps or freqs independently aout pvsynth freeze; resynthesize out aout endin </CsInstruments> <CsScore> r 10 i 1 0 2.757 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini May 2006 New plugin in version 5 May 2006.
1651
pvsftr
pvsftr Reads amplitude and/or frequency data from function tables.
Description
Reads amplitude and/or frequency data from function tables.
Syntax
pvsftr fsrc, ifna [, ifnf]
Initialization
ifna -- A table, at least inbins in size, that stores amplitude data. Ignored if ifna = 0 ifnf (optional) -- A table, at least inbins in size, that stores frequency data. Ignored if ifnf = 0
Performance
fsrc -- a PVOC-EX formatted source. Enables the contents of fsrc to be exchanged with function tables for custom processing. Except when the frame overlap equals ksmps (which will generally not be the case), the frame data is not updated each control period. The data in ifna, ifnf should only be processed when kflag is set to 1. To process only frequency data, set ifna to zero. As the function tables are required only to store data from fsrc, there is no advantage in defining then in the score, and they should generally be created in the instrument, using ftgen. By exporting amplitude data, say, from one fsig and importing it into another, basic cross-synthesis (as in pvscross) can be performed, with the option to modify the data beforehand using the table manipulation opodes. Note that the format data in the source fsig is not written to the tables. This therefore offers a means of transferring amplitude and frequency data between non-identical fsigs. Used this way, these opcodes become potentially pathological, and can be relied upon to produce unexpected results. In such cases, resynthesis using pvsadsyn would almost certainly be required. To perform a straight copy from one fsig to another one of identical format, the conventional assignment syntax can be used: fsig1 = fsig2 It is not necessary to use function tables in this case.
Examples
1652
ifn ftgen 0,0,inbins,10,1 ; make ftable kflag pvsftw fsrc,ifn ; export amps to table, kamp init 0 if kflag==0 kgoto contin ; only proc when frame is ready ; kill lowest bins, for obvious effect tablew kamp,1,ifn tablew kamp,2,ifn tablew kamp,3,ifn tablew kamp,4,ifn ; read modified data back to fsrc pvsftr fsrc,ifn contin: ; and resynth aout pvsynth fsrc
See Also
pvsftw
Credits
Author: Richard Dobson August 2001 New in version 4.13
1653
pvsftw
pvsftw Writes amplitude and/or frequency data to function tables.
Description
Writes amplitude and/or frequency data to function tables.
Syntax
kflag pvsftw fsrc, ifna [, ifnf]
Initialization
ifna -- A table, at least inbins in size, that stores amplitude data. Ignored if ifna = 0 ifnf -- A table, at least inbins in size, that stores frequency data. Ignored if ifnf = 0
Performance
kflag -- A flag that has the value of 1 when new data is available, 0 otherwise. fsrc -- a PVOC-EX formatted source. Enables the contents of fsrc to be exchanged with function tables, for custom processing. Except when the frame overlap equals ksmps (which will generally not be the case), the frame data is not updated each control period. The data in ifna, ifnf should only be processed when kflag is set to 1. To process only frequency data, set ifna to zero. As the functions tables are required only to store data from fsrc, there is no advantage in defining then in the score. They should generally be created in the instrument using ftgen. By exporting amplitude data, say, from one fsig and importing it into another, basic cross-synthesis (as in pvscross) can be performed, with the option to modify the data beforehand using the table manipulation opodes. Note that the format data in the source fsig is not written to the tables. This therefore offers a means of transferring amplitude and frequency data between non-identical fsigs. Used this way, these opcodes become potentially pathological, and can be relied upon to produce unexpected results. In such cases, resynthesis using pvsadsyn would almost certainly be required. To perform a straight copy from one fsig to another one of identical format, the conventional assignment syntax can be used: fsig1 = fsig2 It is not necessary to use function tables in this case.
Examples
1654
ifn ftgen 0,0,inbins,10,1 ; make ftable kflag pvsftw fsrc,ifn ; export amps to table, kamp init 0 if kflag==0 kgoto contin ; only proc when frame is ready ; kill lowest bins, for obvious effect tablew kamp,1,ifn tablew kamp,2,ifn tablew kamp,3,ifn tablew kamp,4,ifn ; read modified data back to fsrc pvsftr fsrc,ifn contin: ; and resynth aout pvsynth fsrc
See Also
pvsftr
Credits
Author: Richard Dobson August 2001 New in version 4.13
1655
pvsfwrite
pvsfwrite Write a fsig to a PVOCEX file.
Description
This opcode writes a fsig to a PVOCEX file (which in turn can be read by pvsfread or other programs that support PVOCEX file input).
Syntax
pvsfwrite fsig, ifile
Initialisation
fsig -- fsig input data. ifile -- filename (a string in double-quotes) .
Examples
Here is an example of the pvsfwrite opcode. It uses the file pvsfwrite.csd [examples/pvsfwrite.csd]. This example uses realtime audio input.
1656
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 November 2004.
1657
pvshift
pvshift Shift the frequency components of a pv stream, stretching/compressing its spectrum.
Description
Shift the frequency components of a pv stream, stretching/compressing its spectrum.
Syntax
fsig pvshift fsigin, kshift, klowest[, kkeepform, igain, kcoefs]
Performance
fsig -- output pv stream fsigin -- input pv stream kshift -- shift amount (in Hz, positive or negative). klowest -- lowest frequency to be shifted. kkeepform -- attempt to keep input signal formants; 0: do not keep formants; 1: keep formants using a liftered cepstrum method; 2: keep formants by using a true envelope method (defaults to 0). kgain -- amplitude scaling (defaults to 1). kcoefs -- number of cepstrum coefs used in formant preservation (defaults to 80). This opcode will shift the components of a pv stream, from a certain frequency upwards, up or down a fixed amount (in Hz). It can be used to transform a harmonic spectrum into an inharmonic one. The ikeepform flag can be used to try and preserve formants for possibly interesting and unusual spectral modifications.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 481. Example
asig fsig ftps atps in pvsanal pvshift pvsynth ; get the signal in asig, 1024, 256, 1024, 1 ; analyse it fsig, 100, 0 ; add 100 Hz to each component ftps ; synthesise it
1658
Depending on the input, this will transform a pitched sound into an inharmonic, bell-like sound. Here is an example of the use of the pvshift opcode. It uses the file pvshift.csd [examples/pvshift.csd].
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 Nivember 2004. 1659
pvsifd
pvsifd Instantaneous Frequency Distribution, magnitude and phase analysis.
Description
The pvsifd opcode takes an input a-rate signal and performs an Instantaneous Frequency, magnitude and phase analysis, using the STFT and pvsifd (Instantaneous Frequency Distribution), as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial Tracking", Proc.of ICMC05, Barcelona. It generates two PV streaming signals, one containing the amplitudes and frequencies (a similar output to pvsanal) and another containing amplitudes and unwrapped phases.
Syntax
ffr,fphs pvsifd ain, ifftsize, ihopsize, iwintype[,iscal]
Performance
ffr -- output pv stream in AMP_FREQ format fphs -- output pv stream in AMP_PHASE format ifftsize -- FFT analysis size, must be power-of-two and integer multiple of the hopsize. ihopsize -- hopsize in samples iwintype -- window type (O: Hamming, 1: Hanning) iscal -- amplitude scaling (defaults to 1).
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 483. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; pvsifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking aout resyn fst, 1, 1.5, 500, 1 ; resynthesis (up a 5th) out aout
The example above shows the pvsifd analysis feeding into partial tracking and cubic-phase additive re1660
Credits
Author: Victor Lazzarini June 2005 New plugin in version 5 November 2004.
1661
pvsinfo
pvsinfo Get information from a PVOC-EX formatted source.
Description
Get format information about fsrc, whether created by an opcode such as pvsanal, or obtained from a PVOCEX file by pvsfread. This information is available at init time, and can be used to set parameters for other pvs opcodes, and in particular for creating function tables (e.g. for pvsftw), or setting the number of oscillators for pvsadsyn.
Syntax
ioverlap, inumbins, iwinsize, iformat pvsinfo fsrc
Initialization
ioverlap -- The stream overlap size. inumbins -- The number of analysis bins (amplitude+frequency) in fsrc. The underlying FFT size is calculated as (inumbins -1) * 2. iwinsize -- The analysis window size. May be larger than the FFT size. iformat -- The analysis frame format. If fsrc is created by an opcode, iformat will always be 0, signifying amplitude+frequency. If fsrc is defined from a PVOC-EX file, iformat may also have the value 1 or 2 (amplitude+phase, complex).
Examples
fim iovl,inb,iws,ifmt ifn pvsfread pvsinfo ftgen "test.pvx" fim 0,0,inb,10,1 ; import pvocex file ; get inumbins info ; and create f-table
Credits
Author: Richard Dobson August 2001 New in version 4.13
1662
pvsinit
pvsinit Initialise a spectral (f) variable to zero.
Description
Fermorms the equavent to an init operation on an f-variable.
Syntax
fsig pvsinit isize[,iolap,iwinsize,iwintype, iformat]
Performance
fsig -- output pv stream set to zero. isize -- size of the DFT frame. iolap -- size of the analysis overlap, defaults to isize/4. iwinsize -- size of the analysis window, defaults to isize. iwintype -- type of analysis window, defaults to 1, Hanning. iformat -- pvsdata format, defaults to 0:PVS_AMP_FREQ.
Examples
Example 484. Example
fsig pvsinit 1024
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 November 2004.
1663
pvsin
pvsin Retrieve an fsig from the input software bus; a pvs equivalent to chani.
Description
This opcode retrieves an f-sig from the pvs in software bus, which can be used to get data from an external source, using the Csound 5 API. A channel is created if not already existing. The fsig channel is in that case initialised with the given parameters. It is important to note that the pvs input and output (pvsout opcode) busses are independent and data is not shared between them.
Syntax
fsig pvsin kchan[,isize,iolap,iwinsize,iwintype,iformat]
Initialisation
isize -- initial DFT size,defaults to 1024. iolap -- size of overlap, defaults to isize/4. isize -- size of analysis window, defaults to isize. isize -- type of window, defaults to Hanning (1) (see pvsanal) isize -- data format, defaults 0 (PVS_AMP_FREQ). Other possible values are 1 (PVS_AMP_PHASE), 2 (PVS_COMPLEX) or 3 (PVS_TRACKS).
Performance
fsig -- output fsig. kchan -- channel number. If non-existent, a channel will be created.
Examples
Example 485. Example
fsig pvsin 0 ; get data from pvs in bus channel 0
Credits
Author: Victor Lazzarini Auust 2006
1664
pvslock
pvslock Frequency lock an input fsig
Description
This opcode searches for spectral peaks and then locks the frequencies around those peaks. This is similar to phase-locking in non-streaming PV processing. It can be used to improve timestretching and pitchshifting quality in PV processing.
Syntax
fsig pvslock fsigin, klock
Performance
fsig -- output pv stream fsigin -- input pv stream. klock -- frequency lock, 1 -> lock, 0 -> unlock (bypass).
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 486. Example
fsig1 pvstanal kspeed,1,1,1 fsigout pvslock fsig1, 1 aout pvsynth fsigout ; pvoc analysis from table 1 (kspeed is timescale factor) ; frequency lock ; pvoc synthesis
Depending on the input, this will transform a pitched sound into an inharmonic, bell-like sound.
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5
1665
Nivember 2004.
1666
pvsmaska
pvsmaska Modify amplitudes using a function table, with dynamic scaling.
Description
Modify amplitudes of fsrc using function table, with dynamic scaling.
Syntax
fsig pvsmaska fsrc, ifn, kdepth
Initialization
ifn -- The f-table to use. Given fsrc has N analysis bins, table ifn must be of size N or larger. The table need not be normalized, but values should lie within the range 0 to 1. It can be supplied from the score in the usual way, or from within the orchestra by using pvsinfo to find the size of fsrc, (returned by pvsinfo in inbins), which can then be passed to ftgen to create the f-table.
Performance
kdepth -- Controls the degree of modification applied to fsrc, using simple linear scaling. 0 leaves amplitudes unchanged, 1 applies the full profile of ifn. Note that power-of-two FFT sizes are particularly convenient when using table-based processing, as the number of analysis bins (inbins) is then a power-of-two plus one, for which an exactly matching f-table can be created. In this case it is important that the f-table be created with a size of inbins, rather than as a power of two, as the latter will copy the first table value to the guard point, which is inappropriate for this opcode.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Here is an example of the use of the pvsmaska opcode. It uses the file pvsmaska.csd [examples/pvsmaska.csd].
1667
<CsInstruments> sr = 44100 ksmps = 16 nchnls = 1 0dbfs = 1 ;; example written by joachim heintz 2009 ; function table for defining amplitude peaks (from the example of Richard Dobson) giTab ftgen 0, 0, 513, 8, 0, 2, 1, 3, 0, 4, 1, 6, 0, 10, 1, 12, 0, 16, 1, 32, 0, 1, 0, instr 1 imod = p4; degree of midification (0-1) ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile = "fox.wav" ain soundin Sfile fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of file fmask pvsmaska fftin, giTab, imod aout pvsynth fmask; resynthesize out aout endin </CsInstruments> <CsScore> i 1 0 2.757 0 i 1 3 2.757 1 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Richard Dobson August 2001 New in version 4.13
1668
pvsmix
pvsmix Mix 'seamlessly' two pv signals.
Description
Mix 'seamlessly' two pv signals. This opcode combines the most prominent components of two pvoc streams into a single mixed stream.
Syntax
fsig pvsmix fsigin1, fsigin2
Performance
fsig -- output pv stream fsigin1 -- input pv stream. fsigin2 -- input pv stream, which must have same format as fsigin1.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 488. Example
fsig1 pvsanal asig1,1024,256,1024,0 ; pvoc analysis fsig2 pvsanal asig2,1024,256,1024,0 fsigout pvsmix fsig1, fsig2 ; mix signals aout pvsynth fsigout ; pvoc synthesis
Depending on the input, this will transform a pitched sound into an inharmonic, bell-like sound.
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 Nivember 2004. 1669
pvsmorph
pvsmorph Performs morphing (or interpolation) between two source fsigs.
Description
Performs morphing (or interpolation) between two source fsigs.
Syntax
fsig pvsmorph fsig1, fsig2, kampint, kfrqint
Performance
The operation of this opcode is similar to that of pvinterp (q.v.), except in using fsigs rather than analysis files, and the absence of spectral envelope preservation. The amplitudes and frequencies of fsig1 are interpolated witht those of fsig2, depeding on the values of kampint and kfrqint, respectively. These range between 0 and 1, where 0 means fsig1 and 1, fsig2. Anything in between will interpolate amps and/or freqs of the two fsigs. With this opcode, morphing can be performed on real-time audio input, by using pvsanal to generate fsig1 and fsig2. These must have the same format.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Here is an example of the pvsmorph opcode. It uses the file pvsmorph.csd [examples/pvsmorph.csd].
1670
instr 1 iampint1 = p4 iampint2 = p5 ifrqint1 = p6 ifrqint2 = p7 kampint linseg iampint1, p3, iampint2 kfrqint linseg ifrqint1, p3, ifrqint2 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile1 = "fox.wav" ain1 soundin Sfile1 ain2 buzz .2, 50, 100, giSine fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape fmorph pvsmorph fftin1, fftin2, kampint, kfrqint aout pvsynth fmorph out aout * .5 endin </CsInstruments> <CsScore> i 1 0 3 0 0 1 1 i 1 3 3 1 0 1 0 i 1 6 3 0 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is another example of the pvsmorph opcode. It uses the file pvsmorph2.csd [examples/pvsmorph2.csd].
instr 1 iampint1 = p4; value for interpolating the amplitudes at the beginning ... iampint2 = p5; ... and at the end ifrqint1 = p6; value for unterpolating the frequencies at the beginning ... ifrqint2 = p7; ... and at the end kampint linseg iampint1, p3, iampint2 kfrqint linseg ifrqint1, p3, ifrqint2 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile1 = "flute-C-octave0.wav" Sfile2 = "saxophone-alto-C-octave0.wav" ain1 soundin Sfile1
1671
soundin Sfile2 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape pvsmorph fftin1, fftin2, kampint, kfrqint pvsynth fmorph out aout * .5
instr 2; moving randomly in certain borders between two spectra iampintmin = p4; minimum value for amplitudes iampintmax = p5; maximum value for amplitudes ifrqintmin = p6; minimum value for frequencies ifrqintmax = p7; maximum value for frequencies imovefreq = p8; frequency for generating new random values kampint randomi iampintmin, iampintmax, imovefreq kfrqint randomi ifrqintmin, ifrqintmax, imovefreq ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1; von-Hann window Sfile1 = "flute-C-octave0.wav" Sfile2 = "saxophone-alto-C-octave0.wav" ain1 soundin Sfile1 ain2 soundin Sfile2 fftin1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape fftin2 pvsanal ain2, ifftsize, ioverlap, iwinsize, iwinshape fmorph pvsmorph fftin1, fftin2, kampint, kfrqint aout pvsynth fmorph out aout * .5 endin </CsInstruments> <CsScore> i 1 0 3 0 0 1 1; amplitudes from flute, frequencies from saxophone i 1 3 3 1 1 0 0; amplitudes from saxophone, frequencies from flute i 1 6 3 0 1 0 1; amplitudes and frequencies moving from flute to saxophone i 1 9 3 1 0 1 0; amplitudes and frequencies moving from saxophone to flute i 2 12 3 .2 .8 .2 .8 5; amps and freqs moving randomly between the two spectra e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini April 2007 New in Csound 5.06
1672
pvsmooth
pvsmooth Smooth the amplitude and frequency time functions of a pv stream using parallel 1st order lowpass IIR filters with time-varying cutoff frequency.
Description
Smooth the amplitude and frequency time functions of a pv stream using a 1st order lowpass IIR with time-varying cutoff frequency. This opcode uses the same filter as the 'tone' opcode, but this time acting separately on the amplitude and frequency time functions that make up a pv stream. The cutoff frequency parameter runs at the control-rate, but unlike tone and tonek, it is not specified in Hz, but as fractions of 1/2 frame-rate (actually the pv stream sampling rate), which is easier to understand. This means that the highest cutoff frequency is 1 and the lowest 0; the lower the frequency the smoother the functions and more pronounced the effect will be. This opcode produces effects that are more or less similar to pvsblur, but with two important differences: 1.smoothing of amplitudes and frequencies use separate sets of filters; and 2. there is no increase in computational cost when higher amounts of 'blurring' (smoothing) are desired.
Syntax
fsig pvsmooth fsigin, kacf, kfcf
Performance
fsig -- output pv stream fsigin -- input pv stream. kacf -- amount of cutoff frequency for amplitude function filtering, between 0 and 1, in fractions of 1/2 frame-rate. kfcf -- amount of cutoff frequency for frequency function filtering, between 0 and 1, in fractions of 1/2 frame-rate.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 491. Example
asig1 in fim pvsanal asig1,1024,256,1024,0 fou pvsmooth fim, 0.01, 0.01 aout pvsynth fou
; ; ; ;
input pvoc analysis smooth with cf at 1% of 1/2 frame-rate (ca 8.6 Hz) pvoc synthesis
1673
In the example above the input signal will be smoothed/blurred by pvsmooth with a cutoff frequency of 1% of 1/2 frame-rate (which is about 172Hz, so the cf is about 8.6Hz) .
Credits
Author: Victor Lazzarini May 2006 New plugin in version 5 May 2006.
1674
pvsout
pvsout Write a fsig to the pvs output bus.
Description
This opcode writes a fsig to a channel of the pvs output bus. Note that the pvs out bus and the pvs in bus are separate and independent. A new channel is created if non-existent.
Syntax
pvsout fsig, kchan
Performance
fsig -- fsig input data. kchan -- pvs out bus channel number.
Examples
Example 492. Example
asig in ; input fsig pvsanal asig, 1024, 256, 1024, 1 ; analysis pvsout fsig,0 ; write signal to pvs out bus channel 0
Credits
Author: Victor Lazzarini August 2006
1675
pvsosc
pvsosc PVS-based oscillator simulator.
Description
Generates periodic signal spectra in AMP-FREQ format, with the option of four wave types: 1. sawtooth-like (harmonic weight 1/n, where n is partial number) 2. square-like (similar to 1., but only odd partials) 3. pulse (all harmonics with same weight) 4. cosine Complex waveforms (ie. all types except cosine) contain all harmonics up to the Nyquist. This makes pvsosc an option for generation of band-limited periodic waves. In addition, types can be changed using a k-rate variable.
Syntax
fsig pvsosc kamp, kfreq, ktype, isize [,ioverlap] [, iwinsize] [, iwintype] [, iformat]
Initialisation
fsig -- output pv stream set to zero. isize -- size of analysis frame and window. ioverlap -- (Optional) size of overlap, defaults to isize/4. iwinsize -- (Optional) window size, defaults to isize. iwintype -- (Optional) window type, defaults to Hanning. The choices are currently: 0 = Hamming window 1 = von Hann window iformat -- (Optional) data format, defaults to 0 which produces AMP:FREQ data. That is currently the only option.
Performance
kamp -- signal amplitude. Note that the actual signal amplitude can, depending on wave type and frequency, vary slightly above or below this value. Generally the amplitude will tend to exceed kamp on higher frequencies (> 1000 Hz) and be reduced on lower ones. Also due to the overlap-add process, when resynthesing with pvsynth, frequency glides will cause the output amplitude to fluctuate above and below kamp. 1676
kfreq -- fundamental frequency in Hz. ktype -- wave type: 1. sawtooh-like, 2.square-like, 3.pulse and any other value for cosine.
Examples
Here is an example of the pvsosc opcode. It uses the file pvsosc.csd [examples/pvsosc.csd].
1677
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini August 2006
1678
pvspitch
pvspitch Track the pitch and amplitude of a PVS signal.
Description
Track the pitch and amplitude of a PVS signal as k-rate variables.
Syntax
kfr, kamp pvspitch fsig, kthresh
Performance
kamp -- Amplitude of fundamental frequency kfr -- Fundamental frequency fsig -- an input pv stream kthresh -- analysis threshold (between 0 and 1). Higher values will eliminate low-amplitude components from the analysis.
Performance
The pitch detection algorithm implemented by pvspitch is based upon J. F. Schouten's hypothesis of the neural processes of the brain used to determine the pitch of a sound after the frequency analysis of the basilar membrane. Except for some further considerations, pvspitch essentially seeks out the highest common factor of an incoming sound's spectral peaks to find the pitch that may be attributed to it. In general, input sounds that exhibit pitch will also exhibit peaks in their spectrum according to where their harmonics lie. There are some the exceptions, however. Some sounds whose spectral representation is continuous can impart a sensation of pitch. Such sounds are explained by the centroid or center of gravity of the spectrum and are beyond the scope of the method of pitch detection implemented by pvspitch (Using opcodes like pvscent might be more appriopriate in these cases). pvspitch is able (using a previous analysis fsig generated by pvsanal) to locate the spectral peaks of a signal. The threshold parameter (kthresh) is of utmost importance, as adjusting it can introduce weak yet significant harmonics into the calculation of the fundamental. However, bringing kthresh too low would allow harmonically unrelated partials into the analysis algorithm and this will compromise the method's accuracy. These initial steps emulate the response of the basilar membrane by identifying physical characteristics of the input sound. The choice of kthresh depends on the actual level of the input signal, since its range (from 0 to 1) spans the whole dynamic range of an analysis bin (from -inf to 0dBFS). It is important to remember that the input to the pvspitch opcode is assumed to be characterised by strong partials within its spectrum. If this is not the case, the results outputted by the opcode may not bear any relation to the pitch of the input signal. If a spectral frame with many unrelated partials was analysed, the greatest common factor of these frequency values that allows for adjacent harmonics would be chosen. Thus, noisy frames can be characterised by low frequency outputs of pvspitch. This fact allows for a primitive type of instrumental transient detection, as the attack portion of some instrumental tones contain inharmonic components. Should the lowest frequency of the analysed melody be known, then all frequencies detected below this threshold are inaccurate readings, due to the presence of unrelated partials. 1679
In order to facilitate efficient testing of the pvspitch algorithm, an amplitude value proportional to the one in the observed in the signal frame is also outputted (kamp). The results of pvspitch can then be employed to drive an oscillator whose pitch can be audibly compared with that of the original signal (In the example below, an oscillator generates a signal which appears a fifth above the detected pitch).
Examples
Here is an example of the pvspitch opcode. It uses the file pvspitch.csd [examples/pvspitch.csd]. This example uses realtime audio input but can be used for audiofile input as well.
See Also
pvsanal, pvsynth, pvsadsyn, pvscent
Credits
1680
Author: Alan OCinneide August 2005, added by Victor Lazzarini, August 2006 Part of the text has been adapted from the Csound Journal winter 2006 issue's article "Introducing PVSPITCH: A pitch tracking opcode for Csound" by Alan OCinneide. The article is available at: www.csounds.com/journal/2006winter/pvspitch.html [http://www.csounds.com/journal/2006winter/pvspitch.html]
1681
pvstanal
pvstanal Phase vocoder analysis processing with onset detection/processing.
Description
pvstanal implements phase vocoder analysis by reading function tables containing sampled-sound sources, with GEN01, and pvstanal will accept deferred allocation tables. This opcode allows for time and frequency-independent scaling. Time is advanced internally, but controlled by a tempo scaling parameter; when an onset is detected, timescaling is momentarily stopped to avoid smearing of attacks. The quality of the effect is generally improved with phase locking switched on. pvstanal will also scale pitch, independently of frequency, using a transposition factor (k-rate).
Syntax
asig pvstanal ktimescal,kamp,kpitch,ktab,[kdetect, kwrap, ioffset,ifftsize, ihop, ithresh]
Initialization
ifftsize -- FFT size (power-of-two), defaults to 2048. ihop -- hopsize, defaults to 512 ioffset -- startup read offset into table, in secs. idbthresh -- threshold based on dB power spectrum ratio between two successive windows. A detected ratio above it will cancel timescaling momentarily, to avoid smearing (defaults to 1)
Performance
ktimescal -- timescaling ratio, < 1 stretch, > 1 contract. kamp -- amplitude scaling kpitch -- grain pitch scaling (1=normal pitch, < 1 lower, > 1 higher; negative, backwards) kdetect -- 0 or 1, to switch onset detection/processing ktab -- source signal function table. Deferred-allocation tables (see GEN01) are accepted, but the opcode expects a mono source. Tables can be switched at k-rate. kwrap -- 0 or 1, to switch on/off table wrap-around read (default to 1)
Examples
Example 495. Example
1682
idur = p3 ilock = p4 itab = 1 ipitch = 1 iamp = 0.8 ktime linseg 0.3, p3/2, 0.8, p3/2, 0.3 fs1 pvstanal ktime,iamp,ipitch,itab a1 pvsynth fs1 out a1
Credits
Author: Victor Lazzarini February 2010 New plugin in version 5.13 February 2005.
1683
pvstencil
pvstencil Transforms a pvoc stream according to a masking function table.
Description
Transforms a pvoc stream according to a masking function table; if the pvoc stream amplitude falls below the value of the function for a specific pvoc channel, it applies a gain to that channel. The pvoc stream amplitudes are compared to a masking table, if the fall below the table values, they are scaled by kgain. Prior to the operation, table values are scaled by klevel, which can be used as masking depth control. Tables have to be at least fftsize/2 in size; for most GENS it is important to use an extended-guard point (size power-of-two plus one), however this is not necessary with GEN43. One of the typical uses of pvstencil would be in noise reduction. A noise print can be analysed with pvanal into a PVOCEX file and loaded in a table with GEN43. This then can be used as the masking table for pvstencil and the amount of reduction would be controlled by kgain. Skipping post-normalisation will keep the original noise print average amplitudes. This would provide a good starting point for a successful noise reduction (so that klevel can be generally set to close to 1). Other possible transformation effects are possible, such as filtering and `inverse-masking'.
Syntax
fsig pvstencil fsigin, kgain, klevel, iftable
Performance
fsig -- output pv stream fsigin -- input pv stream. kgain -- `stencil' gain. klevel -- masking function level (scales the ftable prior to `stenciling') . iftable -- masking function table.
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 496. Example
1684
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 Nivember 2004.
1685
pvsvoc
pvsvoc Combine the spectral envelope of one fsig with the excitation (frequencies) of another.
Description
This opcode provides support for cross-synthesis of amplitudes and frequencies. It takes the amplitudes of one input fsig and combines with frequencies from another. It is a spectral version of the well-known channel vocoder.
Syntax
fsig pvsvoc famp, fexc, kdepth, kgain [,kcoefs]
Performance
fsig -- output pv stream famp -- input pv stream from which the amplitudes will be extracted fexc -- input pv stream from which the frequencies will be taken kdepth -- depth of effect, affecting how much of the frequencies will be taken from the second fsig: 0, the output is the famp signal, 1 the output is the famp amplitudes and fexc frequencies. kgain -- gain boost/attenuation applied to the output. kcoefs -- number of cepstrum coefs used in spectral envelope estimation (defaults to 80).
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 497. Example
asig asyn famp fexc ftps atps in oscili 16000, 150, 1 pvsanal pvsanal pvsvoc pvsynth out atps ; get the signal in ; excitation signal
asig, 1024, 256, 1024, 1 ; analyse in signal asyn, 1024, 256, 1024, 1 ; analyse excitation signal famp, fexc, 1, 1 ; cross it ftps ; synthesise it
1686
The example above shows a typical cross-synthesis operation. The input signal (say a vocal sound) is used for its amplitude spectrum. An oscillator with an arbitrary complex waveform produces the excitation signal, giving the vocal sound its pitch.
Credits
Author: Victor Lazzarini April 2005 New plugin in version 5 April 2005.
1687
pvsynth
pvsynth Resynthesise using a FFT overlap-add.
Description
Resynthesise phase vocoder data (f-signal) using a FFT overlap-add.
Syntax
ares pvsynth fsrc, [iinit]
Performance
ares -- output audio signal fsrc -- input signal iinit -- not yet implemented.
Examples
Example 498. Example (using score-supplied f-table, assuming fsig fftsize = 1024)
; score f-table using cubic spline to define shaped peaks f1 0 513 8 0 2 1 3 0 4 1 6 0 10 1 12 0 16 1 32 0 1 0 436 0 asig fsig kmod buzz pvsanal linseg 20000,199,50,1 asig,1024,256,1024,0 0,p3/2,1,p3/2,0 ; pulsewave source ; create fsig ; simple control sig ; apply weird eq to fsig ; resynthesize, ; and view the effect
Here is an example of the pvsynth opcode. It uses the file pvsynth.csd [examples/pvsynth.csd].
1688
<CsInstruments> sr = 44100 ksmps = 16 nchnls = 1 0dbfs = 1 ;; example written by joachim heintz 2009 instr 1 ifftsize = 1024 ioverlap = ifftsize / 4 iwinsize = ifftsize iwinshape = 1 ; von-Hann window Sfile = "fox.wav" ain soundin Sfile fftin pvsanal ain, ifftsize, ioverlap, iwinsize, iwinshape; fft-analysis of the audio-signal aout pvsynth fftin; resynthesis out aout endin </CsInstruments> <CsScore> i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
pvsanal, pvsadsyn
Credits
Author: Richard Dobson August 2001 New in version 4.13 February 2004. Thanks to a note from Francisco Vila, updated the example.
1689
pvswarp
pvswarp Warp the spectral envelope of a PVS signal
Description
Warp the spectral envelope of a PVS signal by means of shifting and scaling.
Syntax
fsig pvswarp fsigin, kscal, kshift[, klowest, kmeth, kgain, kcoefs]
Performance
fsig -- output pv stream fsigin -- input pv stream kscal -- spectral envelope scaling ratio. Values > 1 stretch the envelope and < 1 compress it. kshift -- spectral envelope shift, values > 0 shift the envelope linearly upwards and values < 1 shift it downwards. klowest -- lowest frequency shifted (affects only kshift, defaults to 0). kmethod -- spectral envelope extraction method 1: liftered cepstrum method; 2: true envelope method (defaults to 1). kgain -- amplitude scaling (defaults to 1). kcoefs -- number of cepstrum coefs used in formant preservation (defaults to 80).
Warning
It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
Examples
Example 500. Example
asig fsig ftps atps in pvsanal pvswarp pvsynth out atps ; get the signal in asig, 1024, 256, 1024, 1 ; analyse it fsig, 1.5, 0 ; warp it ftps ; synthesise it
1690
The example above shows a spectral envelope warper, scaling the freq envelope by 1.5. Used with vocal sounds, it will shift the formants and result in a changed vowel timbre, similar to the effect of a singer inhaling helium (the 'donald duck' effect). Here is an example of the use of the pvswarp opcode. It uses the file pvswarp.csd [examples/ pvswarp.csd].
See Also
pvsanal, pvsynth, pvsadsyn
Credits
Author: Victor Lazzarini November 2004 New plugin in version 5 November 2004.
1691
pyassign Opcodes
pyassign Assign the value of the given Csound variable to a Python variable possibly destroying its previous content.
Syntax
pyassign "variable", kvalue pyassigni "variable", ivalue pylassign "variable", kvalue pylassigni "variable", ivalue pyassignt ktrigger, "variable", kvalue pylassignt ktrigger, "variable", kvalue
Description
Assign the value of the given Csound variable to a Python variable possibly destroying its previous content. The resulting Python object will be a float.
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins. This document has been updated Sunday 25 July 2004 and 1 February 2005 by Michael Gogins.
1692
pycall Opcodes
pycall Invoke the specified Python callable at k-time and i-time (i suffix), passing the given arguments. The call is perfomed in the global environment, and the result (the returning value) is copied into the Csound output variables specified.
Syntax
pycall kresult kresult1, kresult2 kr1, kr2, kr3 kr1, kr2, kr3, kr4 kr1, kr2, kr3, kr4, kr5 kr1, kr2, kr3, kr4, kr5, kr6 kr1, kr2, kr3, kr4, kr5, kr6, kr7 kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 pycall1 pycall2 pycall3 pycall4 pycall5 pycall6 pycall7 pycall8 pycallt kresult kresult1, kresult2 kr1, kr2, kr3 kr1, kr2, kr3, kr4 kr1, kr2, kr3, kr4, kr5 kr1, kr2, kr3, kr4, kr5, kr6 kr1, kr2, kr3, kr4, kr5, kr6, kr7 kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 pycall1t pycall2t pycall3t pycall4t pycall5t pycall6t pycall7t pycall8t pycalli iresult iresult1, iresult2 ir1, ir2, ir3 pycall1i pycall2i pycall3i "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... "callable", karg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ...
1693
ir1, ir2, ir3, ir4 ir1, ir2, ir3, ir4, ir5 ir1, ir2, ir3, ir4, ir5, ir6 ir1, ir2, ir3, ir4, ir5, ir6, ir7 ir1, ir2, ir3, ir4, ir5, ir6, ir7, ir8 pycalln pycallni
"callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ...
"callable", nresults, kresult1, ..., kresultn, karg1, ... "callable", nresults, iresult1, ..., iresultn, iarg1, pylcall ...
"callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... ktrigger, "callable", karg1, ... "callable", karg1, ... "callable", iarg1, ...
kresult kresult1, kresult2 kr1, kr2, kr3 kr1, kr2, kr3, kr4 kr1, kr2, kr3, kr4, kr5 kr1, kr2, kr3, kr4, kr5, kr6 kr1, kr2, kr3, kr4, kr5, kr6, kr7 kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8
kresult kresult1, kresult2 kr1, kr2, kr3 kr1, kr2, kr3, kr4 kr1, kr2, kr3, kr4, kr5 kr1, kr2, kr3, kr4, kr5, kr6 kr1, kr2, kr3, kr4, kr5, kr6, kr7 kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8
iresult
pylcall1i
1694
iresult1, iresult2 ir1, ir2, ir3 ir1, ir2, ir3, ir4 ir1, ir2, ir3, ir4, ir5 ir1, ir2, ir3, ir4, ir5, ir6 ir1, ir2, ir3, ir4, ir5, ir6, ir7 ir1, ir2, ir3, ir4, ir5, ir6, ir7, ir8 pylcalln pylcallni
"callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ... "callable", iarg1, ...
"callable", nresults, kresult1, ..., kresultn, karg1, ... "callable", nresults, iresult1, ..., iresultn, iarg1, ...
Description
This family of opcodes call the specified Python callable at k-time and i-time (i suffix), passing the given arguments. The call is perfomed in the global environment and the result (the returning value) is copied into the Csound output variables specified. They pass any number of parameters which are cast to float inside the Python interpreter. The pycall/pycalli, pycall1/pycall1i ... pycall8/pycall8i opcodes can accomodate for a number of results ranging from 0 to 8 according to their numerical prefix (0 is omitted). The pycalln/pycallni opcodes can accomodate for any number of results: the callable name is followed by the number of output arguments, then come the list of Csound output variable and the list of parameters to be passed. The returning value of the callable must be None for pycall or pycalli, a float for pycall1i or pycall1i and a tuple (with proper size) of floats for the pycall2/pycall2i ... pycall8/pycall8i and pycalln/pycallni opcodes.
Examples
Example 501. Calling a C or Python function
Supposing we have previously defined or imported a function named get_number_from_pool as:
from random import random, choice # a pool of 100 numbers pool = [i ** 1.3 for i in range(100)] def get_number_from_pool(n, p): # substitute an old number with the new number? if random() < p: i = choice(range(len(pool))) pool[i] = n # return a random number from the pool return choice(pool)
1695
would set k2 randomly from a pool of numbers changing in time. You can pass new pools elements and control the change rate from the orchestra.
would set k2 and k4 randomly from a pool of numbers changing in time. You can pass new pools elements (here k1 and k3) and control the change rate (here p6 and p7) from the orchestra. As you can see in the first snippet, you can customize the initialization of the pool as well as create several pools.
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins. This document has been updated Sunday 25 July 2004 and 1 February 2005 by Michael Gogins.
1696
pyeval Opcodes
pyeval Evaluate a generic Python expression and store the result in a Csound variable at k-time or itime (i suffix).
Syntax
kresult pyeval "expression" iresult pyevali "expression" kresult pyleval "expression" iresult pylevali "expression" kresult pyevalt ktrigger, "expression" kresult pylevalt ktrigger, "expression"
Description
These opcodes evaluate a generic Python expression and store the result in a Csound variable at k-time or i-time (i suffix). The expression must evaluate in a float or an object that can be cast to a float. They can be used effectively to trasfer data from a Python object into a Csound variable.
will copy the content of the Python variable v1 into the Csound variable k1 at each k-time.
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins. This document has been updated Sunday 25 July 2004 and 1 February 2005 by Michael Gogins.
1697
pyexec Opcodes
pyexec Execute a script from a file at k-time or i-time (i suffix).
Syntax
pyexec "filename" pyexeci "filename" pylexec "filename" pylexeci "filename" pyexect ktrigger, "filename" plyexect ktrigger, "filename"
Description
Execute a script from a file at k-time or i-time (i suffix). This is not the same as calling the script with the bedded interpreter.
system()
The code contained in the specified file is executed in the global environment for opcodes pyexec and pyexeci and in the private environment for the opcodes pylexec and pylexeci. These opcodes perform no message passing. However, since the statement has access to the main namespace and the private namespace, it can interact with objects previously created in that environment. The "local" version of the pyexec opcodes are useful when the code ran by different instances of an instrument should not interact.
1698
1699
orchname: pyexec.orc scorename: pyexec.sco sorting score ... ... done orch compiler: 11 lines read instr 1 Csound Version 4.19 (Mar 23 2002) displays suppressed Welcome to Csound! What sound do you want to hear today, maurizio?
then I answer
a sound
In the same instrument a message is created in the private namespace and printed, appearing different for each instance.
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins. This document has been updated Sunday 25 July 2004 and 1 February 2005 by Michael Gogins.
1700
pyinit Opcodes
pyinit Initialize the Python interpreter.
Syntax
pyinit
Description
In the command-line version of Csound, you must first invoke the pyinit opcode in the orchestra header to initialize the Python interpreter, before using any of the other Python opcodes. But if you use the Python opcodes in the CsoundAC version of Csound, you need not invoke pyinit, because CsoundAC automatically initializes the Python interpreter for you. In addition, CsoundAC automatically creates a Python interface to the Csound API, in the form a global instance of the CsoundAC.CppSound class named csound. Therefore, Python code written in the Csound orchestra has access to the global csound object.
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins. This document has been updated Sunday 25 July 2004 and 1 February 2005 by Michael Gogins.
1701
pyrun Opcodes
pyrun Run a Python statement or block of statements.
Syntax
pyrun "statement" pyruni "statement" pylrun "statement" pylruni "statement" pyrunt ktrigger, "statement" pylrunt ktrigger, "statement"
Description
Execute the specified Python statement at k-time (pyrun and pylrun) or i-time (pyruni and pylruni). The statement is executed in the global environment for pyrun and pyruni or the local environment for pylrun and pylruni. These opcodes perform no message passing. However, since the statement have access to the main namespace and the private namespace, it can interact with objects previously created in that environment. The "local" version of the pyrun opcodes are useful when the code ran by different instances of an instrument should not interact.
1702
pylruni "message = 'a private random number: %f' % random.random()" pylrun "print message" endin
Running this score you should get intermixed pairs of messages from the two instances of instrument 1. The first message of each pair is stored into the main namespace and so the second instance overwrites the message of the first instance. The result is that first message will be the same for both instances. The second message is different for the two instances, being stored in the private namespace.
Credits
Copyright (c) 2002 by Maurizio Umberto Puxeddu. All rights reserved. Portions copyright (c) 2004 and 2005 by Michael Gogins. This document has been updated Sunday 25 July 2004 and 1 February 2005 by Michael Gogins.
1703
rand
rand Generates a controlled random number series.
Description
Output is a controlled random number series between -amp and +amp
Syntax
ares rand xamp [, iseed] [, isel] [, ioffset] kres rand xamp [, iseed] [, isel] [, ioffset]
Initialization
iseed (optional, default=0.5) -- a seed value for the recursive pseudo-random formula. A value between 0 and 1 will produce an initial output of kamp * iseed. A value greater than 1 will be seeded from the system clock. A negative value will cause seed re-initialization to be skipped. The default seed value is .5. isel (optional, default=0) -- if zero, a 16-bit number is generated. If non-zero, a 31-bit random number is generated. Default is 0. ioffset (optional, default=0) -- a base value added to the random result. New in Csound version 4.03.
Performance
kamp, xamp -- range over which random numbers are distributed. ares, kres -- Random number produced. The internal pseudo-random formula produces values which are uniformly distributed over the range kamp to -kamp. rand will thus generate uniform white noise with an R.M.S value of kamp / root 2. The value ares or kres is within is a half-closed interval which contains -xamp, but never contains +xamp.
Examples
Here is an example of the rand opcode. It uses the file rand.csd [examples/rand.csd].
1704
-odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o rand.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Choose a random frequency between 4,100 and 44,100. kfreq rand 20000 kcps = kfreq + 24100 a1 oscil 30000, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
randh, randi
Credits
Example written by Kevin Conder. Thanks to a note from John ffitch, I changed the names of the parameters.
1705
randh
randh Generates random numbers and holds them for a period of time.
Description
Generates random numbers and holds them for a period of time.
Syntax
ares randh xamp, xcps [, iseed] [, isize] [, ioffset] kres randh kamp, kcps [, iseed] [, isize] [, ioffset]
Initialization
iseed (optional, default=0.5) -- seed value for the recursive pseudo-random formula. A value between 0 and +1 will produce an initial output of kamp * iseed. A negative value will cause seed re-initialization to be skipped. A value greater than 1 will seed from system time, this is the best option to generate a different random sequence for each run. isize (optional, default=0) -- if zero, a 16 bit number is generated. If non-zero, a 31-bit random number is generated. Default is 0. ioffset (optional, default=0) -- a base value added to the random result. New in Csound version 4.03.
Performance
kamp, xamp -- range over which random numbers are distributed. kcps, xcps -- the frequency which new random numbers are generated. The internal pseudo-random formula produces values which are uniformly distributed over the range -kamp to +kamp. rand will thus generate uniform white noise with an R.M.S value of kamp / root 2. The remaining units produce band-limited noise: the kcps and xcps parameters permit the user to specify that new random numbers are to be generated at a rate less than the sampling or control frequencies. randh will hold each new number for the period of the specified cycle.
Examples
Here is an example of the randh opcode. It uses the file randh.csd [examples/randh.csd].
1706
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o randh.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Choose a random frequency between 200 and 1000. ; Generate new random numbers at 4 Hz. ; kamp = 400 ; kcps = 4 ; iseed = 0.5 ; isize = 0 ; ioffset = 600 kcps randh 400, 4, 0.5, 0, 600 printk2 kcps a1 oscil 30000, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 5 e </CsScore> </CsoundSynthesizer>
See Also
rand, randi
Credits
Example written by Kevin Conder.
1707
randi
rand Generates a controlled random number series with interpolation between each new number.
Description
Generates a controlled random number series with interpolation between each new number.
Syntax
ares randi xamp, xcps [, iseed] [, isize] [, ioffset] kres randi kamp, kcps [, iseed] [, isize] [, ioffset]
Initialization
iseed (optional, default=0.5) -- seed value for the recursive pseudo-random formula. A value between 0 and +1 will produce an initial output of kamp * iseed. A negative value will cause seed re-initialization to be skipped. A value greater than 1 will seed from system time, this is the best option to generate a different random sequence for each run. isize (optional, default=0) -- if zero, a 16 bit number is generated. If non-zero, a 31-bit random number is generated. Default is 0. ioffset (optional, default=0) -- a base value added to the random result. New in Csound version 4.03.
Performance
kamp, xamp -- range over which random numbers are distributed. kcps, xcps -- the frequency which new random numbers are generated. The internal pseudo-random formula produces values which are uniformly distributed over the range kamp to -kamp. rand will thus generate uniform white noise with an R.M.S value of kamp / root 2. The remaining units produce band-limited noise: the kcps and xcps parameters permit the user to specify that new random numbers are to be generated at a rate less than the sampling or control frequencies. randi will produce straight-line interpolation between each new number and the next.
Examples
Here is an example of the randi opcode. It uses the file randi.csd [examples/randi.csd].
1708
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o randi.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Choose a random frequency between 4,100 and 44,100. ; Generate new random numbers at 10 Hz. ; kamp = 40000 ; kcps = 10 ; iseed = 0.5 ; isize = 0 ; ioffset = 4100 kcps randi 40000, 10, 0.5, 0, 4100 a1 oscil 30000, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
rand, randh
Credits
Example written by Kevin Conder.
1709
random
random Generates a controlled pseudo-random number series between min and max values.
Description
Generates is a controlled pseudo-random number series between min and max values.
Syntax
ares random kmin, kmax ires random imin, imax kres random kmin, kmax
Initialization
imin -- minimum range limit imax -- maximum range limit
Performance
kmin -- minimum range limit kmax -- maximum range limit The random opcode is similar to linrand and trirand but sometimes I [Gabriel Maldonado] find it more convenient because allows the user to set arbitrary minimum and maximum values.
Examples
Here is an example of the random opcode. It uses the file random.csd [examples/random.csd].
1710
ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Generate a random number between 220 and 440. kmin init 220 kmax init 440 k1 random kmin, kmax printks "k1 = %f\\n", 0.1, k1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
linrand, randomh, randomi, trirand
Credits
Author: Gabriel Maldonado Example written by Kevin Conder.
1711
randomh
randomh Generates random numbers with a user-defined limit and holds them for a period of time.
Description
Generates random numbers with a user-defined limit and holds them for a period of time.
Syntax
ares randomh kmin, kmax, acps kres randomh kmin, kmax, kcps
Performance
kmin -- minimum range limit kmax -- maximum range limit kcps, acps -- rate of random break-point generation The randomh opcode is similar to randh but allows the user to set arbitrary minimum and maximum values.
Examples
Here is an example of the randomh opcode. It uses the file randomh.csd [examples/randomh.csd].
1712
k1 randomh kmin, kmax, kcps printks "k1 = %f\\n", 0.1, k1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
randh, random, randomi
Credits
Author: Gabriel Maldonado Example written by Kevin Conder.
1713
randomi
randomi Generates a user-controlled random number series with interpolation between each new number.
Description
Generates a user-controlled random number series with interpolation between each new number.
Syntax
ares randomi kmin, kmax, acps kres randomi kmin, kmax, kcps
Performance
kmin -- minimum range limit kmax -- maximum range limit kcps, acps -- rate of random break-point generation The randomi opcode is similar to randi but allows the user to set arbitrary minimum and maximum values.
Examples
Here is an example of the randomi opcode. It uses the file randomi.csd [examples/randomi.csd].
1714
kmax init 440 kcps init 10 k1 randomi kmin, kmax, kcps printks "k1 = %f\\n", 0.1, k1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
randi, random, randomh
Credits
Author: Gabriel Maldonado Example written by Kevin Conder.
1715
rbjeq
rbjeq Parametric equalizer and filter opcode with 7 filter types, based on algorithm by Robert Bristow-Johnson.
Description
Parametric equalizer and filter opcode with 7 filter types, based on algorithm by Robert Bristow-Johnson.
Syntax
ar rbjeq asig, kfco, klvl, kQ, kS[, imode]
Initialization
imode ( optional, defaults to zero) - sum of: 1: skip initialization (should be used in tied, or re-initialized notes only) and exactly one of the following values to select filter type: 0: resonant lowpass filter. kQ controls the resonance: at the cutoff frequency (kfco), the amplitude gain is kQ (e.g. 20 dB for kQ = 10), and higher kQ values result in a narrower resonance peak. If kQ is set to sqrt(0.5) (about 0.7071), there is no resonance, and the filter has a response that is very similar to that of butterlp. If kQ is less than sqrt(0.5), there is no resonance, and the filter has a -6 dB / octave response from about kfco * kQ to kfco. Above kfco, there is always a -12 dB / octave cutoff.
NOTE
The rbjeq lowpass filter is basically the same as ar pareq asig, kfco, 0, kQ, 2 but is faster to calculate. 2: resonant highpass filter. The parameters are the same as for the lowpass filter, but the equivalent filter is butterhp if kQ is 0.7071, and "ar pareq asig, kfco, 0, kQ, 1" in other cases. 4: bandpass filter. kQ controls the bandwidth, which is kfco / kQ, and must be always less than sr / 2. The bandwidth is measured between -3 dB points (i.e. amplitude gain = 0.7071), beyond which there is a +/- 6 dB / octave slope. This filter type is very similar to ar butterbp asig, kfco, kfco / kQ. 6: band-reject filter, with the same parameters as the bandpass filter, and a response similar to that of butterbr. 8: peaking EQ. It has an amplitude gain of 1 (0 dB) at 0 Hz and sr / 2, and klvl at the center frequency (kfco). Thus, klvl controls the amount of boost (if it is greater than 1), or cut (if it is less than 1). Setting klvl to 1 results in a flat response. Similarly to the bandpass and band-reject filters, the bandwidth is determined by kfco / kQ (which must be less than sr / 2 again); however, this time it is between sqrt(klvl) points (or, in other words, half the boost or cut in decibels). NOTE: excessively low or high values of klvl should be avoided (especially with 32-bit floats), though the opcode was tested with klvl = 0.01 and klvl = 100. klvl = 0 is always an error, unlike in the case of pareq, which does allow a zero level. 1716
10: low shelf EQ, controlled by klvl and kS (kQ is ignored by this filter type). There is an amplitude gain of klvl at zero frequency, while the level of high frequencies (around sr / 2) is not changed. At the corner frequency (kfco), the gain is sqrt(klvl) (half the boost or cut in decibels). The kS parameter controls the steepness of the slope of the frequency response (see below). 12: high shelf EQ. Very similar to the low shelf EQ, but affects the high frequency range. The default value for imode is zero (lowpass filter, initialization not skipped).
Performance
ar -- the output signal. asig -- the input signal
NOTE
If the input contains silent sections, on Intel CPUs a significant slowdown can occur due to denormals. In such cases, it is recommended to process the input signal with "denorm" opcode before filtering it with rbjeq (and actually many other filters). kfco -- cutoff, corner, or center frequency, depending on filter type, in Hz. It must be greater than zero, and less than sr / 2 (the range of about sr * 0.0002 to sr * 0.49 should be safe). klvl -- level (amount of boost or cut), as amplitude gain (e.g. 1: flat response, 4: 12 dB boost, 0.1: 20 dB cut); zero or negative values are not allowed. It is recognized by the peaking and shelving EQ types (8, 10, 12) only, and is ignored by other filters. kQ -- resonance (also kfco / bandwidth in many filter types). Not used by the shelving EQs (imode = 10 and 12). The exact meaning of this parameter depends on the filter type (see above), but it should be always greater than zero, and usually (kfco / kQ) less than sr / 2. kS -- shelf slope parameter for shelving filters. Must be greater than zero; a higher value means a steeper slope, with resonance if kS > 1 (however, a too high kS value may make the filter unstable). If kS is set to exactly 1, the shelf slope is as steep as possible without a resonance. Note that the effect of kS - especially if it is greater than 1 - also depends on klvl, and it does not have any well defined unit.
Examples
Here is an example of the rbjeq opcode. It uses the file rbjeq.csd [examples/rbjeq.csd].
1717
ksmps nchnls
= =
10 1
instr 1 a1 kfco a1 vco2 expon rbjeq out a1 endin </CsInstruments> <CsScore> i 1 0 5 e </CsScore> </CsoundSynthesizer> 10000, 155.6 ; sawtooth wave 8000, p3, 200 ; filter frequency a1, kfco, 1, kfco * 0.005, 1, 0 ; resonant lowpass
Credits
Original algorithm by Robert Bristow-Johnson Csound orchestra version by Josep M Comajuncosas, Aug 1999 Converted to C (with optimizations and bug fixes) by Istvan Varga, Dec 2002
1718
readclock
readclock Reads the value of an internal clock.
Description
Reads the value of an internal clock.
Syntax
ir readclock inum
Initialization
inum -- the number of a clock. There are 32 clocks numbered 0 through 31. All other values are mapped to clock number 32. ir -- value at i-time, of the clock specified by inum
Performance
Between a clockon and a clockoff opcode, the CPU time used is accumulated in the clock. The precision is machine dependent but is the millisecond range on UNIX and Windows systems. The readclock opcde reads the current value of a clock at initialization time.
Examples
Here is an example of the readclock opcode. It uses the file readclock.csd [examples/readclock.csd].
1719
out a1 ; Stop clock #1. clockoff 1 ; Print the time accumulated in clock #1. i1 readclock 1 print i1 endin </CsInstruments> <CsScore> ; Initialize the function tables. ; Table 1: an ordinary sine wave. f 1 0 32768 10 1 ; i ; i ; i e Play Instrument #1 for one second starting at 0:00. 1 0 1 Play Instrument #1 for one second starting at 0:01. 1 1 1 Play Instrument #1 for one second starting at 0:02. 1 2 1
</CsScore> </CsoundSynthesizer>
See Also
clockoff, clockon
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK July, 1999 Example written by Kevin Conder. New in Csound version 3.56
1720
readk
readk Periodically reads an orchestra control-signal value from an external file.
Description
Periodically reads an orchestra control-signal value from a named external file in a specific format.
Syntax
kres readk ifilname, iformat, iprd
Initialization
ifilname -- an integer N denoting a file named "readk.N" or a character string (in double quotes, spaces permitted) denoting the external file name. For a string, it may either be a full path name with directory specified or a simple filename. In the later case, the file is sought first in the current directory, then in SSDIR, and finally in SFDIR. iformat -- specifies the input data format: 1 = 8-bit signed integers (char) 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers (plain text) 8 = ASCII floats (plain text) Note that A-law and U-law formats are not available, and that all formats except the last two are binary. The input file should be a "raw", headerless data file. iprd -- the rate (period) in seconds, rounded to the nearest orchestra control period, at which the signal is read from the input file. A value of 0 implies one control period (the enforced minimum), which will read new values at the orchestra control rate. Longer periods will cause the same values to repeat for more than one control period.
Performance
kres -- output of the signal read from ifilname. This opcode allows a generated control signal value to be read from a named external file. The file should contain no header information but it should contain a regularly sampled time series of control values. For ASCII text formats, the values are assumed to be separated by at least one whitespace character. There may be any number of readk opcodes in an instrument or orchestra and they may read from the same or different files.
1721
Examples
Here is an example of the readk opcode. It uses the file dumpk.csd [examples/readk.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 0dbfs = 1 ; By Andres Cabrera 2008 instr 1 ; Read a number from the file every 0.5 seconds kfibo readk "fibonacci.txt", 7, 0.5 kpitchclass = 8 + ((kfibo % 12)/100) printk2 kpitchclass kcps = cpspch( kpitchclass ) printk2 kcps a1 oscil 0.5, kcps, 1 out a1 endin </CsInstruments> <CsScore> f 1 0 1024 10 1 i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
dumpk, dumpk2, dumpk3, dumpk4, readk2, readk3, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
1722
readk2
readk2 Periodically reads two orchestra control-signal values from an external file.
Description
Periodically reads two orchestra control-signal values from an external file.
Syntax
kr1, kr2 readk2 ifilname, iformat, iprd
Initialization
ifilname -- an integer N denoting a file named "readk.N" or a character string (in double quotes, spaces permitted) denoting the external file name. For a string, it may either be a full path name with directory specified or a simple filename. In the later case, the file is sought first in the current directory, then in SSDIR, and finally in SFDIR. iformat -- specifies the input data format: 1 = 8-bit signed integers (char) 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers (plain text) 8 = ASCII floats (plain text) Note that A-law and U-law formats are not available, and that all formats except the last two are binary. The input file should be a "raw", headerless data file. iprd -- the rate (period) in seconds, rounded to the nearest orchestra control period, at which the signals are read from the input file. A value of 0 implies one control period (the enforced minimum), which will read new values at the orchestra control rate. Longer periods will cause the same values to repeat for more than one control period.
Performance
kr1, kr2 -- output of the signals read from ifilname. This opcode allows two generated control signal values to be read from a named external file. The file should contain no header information but it should contain a regularly sampled time series of control values. For binary formats, the individual samples of each signal are interleaved. For ASCII text formats, the values are assumed to be separated by at least one whitespace character. The two "channels" in a sample frame may be on the same line or separated by newline characters, it does not matter. There may be any number of readk2 opcodes in an instrument or orchestra and they may read from the same or 1723
different files.
Examples
See the example for readk. The only difference between readk and readk2 is that readk2 can read two values at a time from the file.
See Also
dumpk, dumpk2, dumpk3, dumpk4, readk, readk3, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
1724
readk3
readk3 Periodically reads three orchestra control-signal values from an external file.
Description
Periodically reads three orchestra control-signal values from an external file.
Syntax
kr1, kr2, kr3 readk3 ifilname, iformat, iprd
Initialization
ifilname -- an integer N denoting a file named "readk.N" or a character string (in double quotes, spaces permitted) denoting the external file name. For a string, it may either be a full path name with directory specified or a simple filename. In the later case, the file is sought first in the current directory, then in SSDIR, and finally in SFDIR. iformat -- specifies the input data format: 1 = 8-bit signed integers (char) 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers (plain text) 8 = ASCII floats (plain text) Note that A-law and U-law formats are not available, and that all formats except the last two are binary. The input file should be a "raw", headerless data file. iprd -- the rate (period) in seconds, rounded to the nearest orchestra control period, at which the signals are read from the input file. A value of 0 implies one control period (the enforced minimum), which will read new values at the orchestra control rate. Longer periods will cause the same values to repeat for more than one control period.
Performance
kr1, kr2, kr3 -- output of the signals read from ifilname. This opcode allows three generated control signal values to be read from a named external file. The file should contain no header information but it should contain a regularly sampled time series of control values. For binary formats, the individual samples of each signal are interleaved. For ASCII text formats, the values are assumed to be separated by at least one whitespace character. The three "channels" in a sample frame may be on the same line or separated by newline characters, it does not matter. There may be any number of readk3 opcodes in an instrument or orchestra and they may read from the 1725
Examples
See the example for readk. The only difference between readk and readk3 is that readk3 can read three values at a time from the file.
See Also
dumpk, dumpk2, dumpk3, dumpk4, readk, readk2, readk4
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
1726
readk4
readk4 Periodically reads four orchestra control-signal values from an external file.
Description
Periodically reads four orchestra control-signal values from an external file.
Syntax
kr1, kr2, kr3, kr4 readk4 ifilname, iformat, iprd
Initialization
ifilname -- an integer N denoting a file named "readk.N" or a character string (in double quotes, spaces permitted) denoting the external file name. For a string, it may either be a full path name with directory specified or a simple filename. In the later case, the file is sought first in the current directory, then in SSDIR, and finally in SFDIR. iformat -- specifies the input data format: 1 = 8-bit signed integers (char) 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = ASCII long integers (plain text) 8 = ASCII floats (plain text) Note that A-law and U-law formats are not available, and that all formats except the last two are binary. The input file should be a "raw", headerless data file. iprd -- the rate (period) in seconds, rounded to the nearest orchestra control period, at which the signals are read from the input file. A value of 0 implies one control period (the enforced minimum), which will read new values at the orchestra control rate. Longer periods will cause the same values to repeat for more than one control period.
Performance
kr1, kr2, kr3, kr4 -- output of the signals read from ifilname. This opcode allows four generated control signal values to be read from a named external file. The file should contain no header information but it should contain a regularly sampled time series of control values. For binary formats, the individual samples of each signal are interleaved. For ASCII text formats, the values are assumed to be separated by at least one whitespace character. The four "channels" in a sample frame may be on the same line or separated by newline characters, it does not matter. There may be any number of readk4 opcodes in an instrument or orchestra and they may read from the 1727
Examples
See the example for readk. The only difference between readk and readk4 is that readk4 can read four values at a time from the file.
See Also
dumpk, dumpk2, dumpk3, dumpk4, readk, readk2, readk3
Credits
By: John ffitch and Barry Vercoe 1999 or earlier
1728
reinit
reinit Suspends a performance while a special initialization pass is executed.
Description
Suspends a performance while a special initialization pass is executed. Whenever this statement is encountered during a p-time pass, performance is temporarily suspended while a special Initialization pass, beginning at label and continuing to rireturn or endin, is executed. Performance will then be resumed from where it left off.
Syntax
reinit label
Examples
The following statements will generate an exponential control signal whose value moves from 440 to 880 exactly ten times over the duration p3. They use the file reinit.csd [examples/reinit.csd].
1729
i1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
rigoto, rireturn
1730
release
release Indicates whether a note is in its release stage.
Description
Provides a way of knowing when a note off message for the current note is received. Only a noteoff message with the same MIDI note number as the one which triggered the note will be reported by release.
Syntax
kflag release
Performance
kflag -- indicates whether the note is in its release stage. (1 if a note off is received, otherwise 0) release outputs current note state. If current note is in the release stage (i.e. if its duration has been extended with xtratim opcode and if it has only just deactivated), then the kflag output argument is set to 1. Otherwise (in sustain stage of current note), kflag is set to 0. This opcode is useful for implementing complex release-oriented envelopes. When used in conjunction with xtratim it can provide an alternative to the hard-coded behaviour of the "r" opcodes (linsegr, expsegr et al), where release time is set to the longest time specified in the active instrument.
Examples
See the examples for xtratim.
See Also
xtratim
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.47
1731
remoteport
remoteport Defines the port for use with the remote system.
Description
Defines the port for use with the insremot, midremot, insglobal and midglobal opcodes.
Syntax
remoteport iportnum
Initialization
iportnum -- number of the port to be used. If zero or negative the default port 40002 is selected.
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK November, 2006 New in Csound version 5.05
1732
remove
remove Removes the definition of an instrument.
Description
Removes the definition of an instrument as long as it is not in use.
Syntax
remove insnum
Initialization
insnum -- number or name of the instrument to be deleted
Performance
As long as the indicated instrument is not active, remove deletes the instrument and memory associated with it. It should be treated with care as it is possible that in some cases its use may lead to a crash.
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK June, 2006 New in Csound version 5.04
1733
repluck
repluck Physical model of the plucked string.
Description
repluck is an implementation of the physical model of the plucked string. A user can control the pluck point, the pickup point, the filter, and an additional audio signal, axcite. axcite is used to excite the 'string'. Based on the Karplus-Strong algorithm.
Syntax
ares repluck iplk, kamp, icps, kpick, krefl, axcite
Initialization
iplk -- The point of pluck is iplk, which is a fraction of the way up the string (0 to 1). A pluck point of zero means no initial pluck. icps -- The string plays at icps pitch.
Performance
kamp -- Amplitude of note. kpick -- Proportion of the way along the string to sample the output. krefl -- the coefficient of reflection, indicating the lossiness and the rate of decay. It must be strictly between 0 and 1 (it will complain about both 0 and 1).
Performance
axcite -- A signal which excites the string.
Examples
Here is an example of the repluck opcode. It uses the file repluck.csd [examples/repluck.csd].
1734
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 iplk = 0.75 kamp = 30000 icps = 220 kpick = 0.75 krefl = 0.5 axcite oscil 1, 1, 1 apluck repluck iplk, kamp, icps, kpick, krefl, axcite out apluck endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
wgpluck2
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK 1997 New in version 3.47
1735
reson
reson A second-order resonant filter.
Description
A second-order resonant filter.
Syntax
ares reson asig, kcf, kbw [, iscl] [, iskip]
Initialization
iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
ares -- the output signal at audio rate. asig -- the input signal at audio rate. kcf -- the center frequency of the filter, or frequency position of the peak response. kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points). reson is a second-order filter in which kcf controls the center frequency, or frequency position of the peak response, and kbw controls its bandwidth (the frequency difference between the upper and lower half-power points).
Examples
Here is an example of the reson opcode. It uses the file reson.csd [examples/reson.csd].
1736
; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o reson.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Generate a sine waveform. asine buzz 15000, 440, 3, 1 ; Vary the cut-off frequency from 220 to 1280. kcf line 220, p3, 1320 kbw init 20 ; Run the sine through a resonant filter. ares reson asine, kcf, kbw ; Give the filtered signal the same amplitude ; as the original signal. a1 balance ares, asine out a1 endin </CsInstruments> <CsScore> ; Table #1, an ordinary sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for 4 seconds. i 1 0 4 e </CsScore> </CsoundSynthesizer>
See Also
areson, aresonk, atone, atonek, port, portk, resonk, tone, tonek
Credits
Example written by Kevin Conder.
1737
resonk
resonk A second-order resonant filter.
Description
A second-order resonant filter.
Syntax
kres resonk ksig, kcf, kbw [, iscl] [, iskip]
Initialization
iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kres -- the output signal at control-rate. ksig -- the input signal at control-rate. kcf -- the center frequency of the filter, or frequency position of the peak response. kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points). resonk is like reson except its output is at control-rate rather than audio rate.
See Also
areson, aresonk, atone, atonek, port, portk, reson, tone, tonek
Credits
Author: Robin Whittle Australia May 1997
1738
resonr
resonr A bandpass filter with variable frequency response.
Description
Implementations of a second-order, two-pole two-zero bandpass filter with variable frequency response.
Syntax
ares resonr asig, kcf, kbw [, iscl] [, iskip]
Initialization
The optional initialization variables for resonr are identical to the i-time variables for reson. iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise. A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal to be filtered kcf -- cutoff or resonant frequency of the filter, measured in Hz kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points) resonr and resonz are variations of the classic two-pole bandpass resonator (reson). Both filters have two zeroes in their transfer functions, in addition to the two poles. resonz has its zeroes located at z = 1 and z = -1. resonr has its zeroes located at +sqrt(R) and -sqrt(R), where R is the radius of the poles in the complex z-plane. The addition of zeroes to resonr and resonz results in the improved selectivity of the magnitude response of these filters at cutoff frequencies close to 0, at the expense of less selectivity of frequencies above the cutoff peak. resonr and resonz are very close to constant-gain as the center frequency is swept, resulting in a more efficient control of the magnitude response than with traditional two-pole resonators such as reson. resonr and resonz produce a sound that is considerably different from reson, especially for lower center frequencies; trial and error is the best way of determining which resonator is best suited for a particular application.
Examples
Here is an example of the resonr and resonz opcodes. It uses the file resonr.csd [examples/resonr.csd]. 1739
; Frequency envelope for reson cutoff kfreq linseg ibegfreq, idur * .5, iendfreq, idur * .5, ibegfreq ; Amplitude envelope to prevent clicking kenv linseg 0, .1, iamp, idur - .2, iamp, .1, 0 ; Number of harmonics for gbuzz scaled to avoid aliasing iharms = (sr*.4)/ifreq asig ain ares aresr aresz gbuzz 1, ifreq, iharms, 1, .9, 1 = kenv * asig reson ain, kfreq, ibw, 1 resonr ain, kfreq, ibw, 1 resonz ain, kfreq, ibw, 1 ; "Sawtooth" waveform ; output scaled by amp envelope
out ares * ires + aresr * iresr + aresz * iresz endin </CsInstruments> <CsScore> /* Written by Sean Costello */ f1 0 8192 9 1 1 .25 i1 i1 i1 i1 i1 i1 e 0 10 20 30 40 50 10 10 10 10 10 10 1 1 1 1 1 1 3000 200 100 4000 1 0 0 3000 200 100 4000 0 1 0 3000 200 100 4000 0 0 1 3000 50 200 8000 1 0 0 3000 50 200 8000 0 1 0 3000 50 200 8000 0 0 1 ; cosine table for gbuzz generator ; ; ; ; ; ; reson resonr resonz reson resonr resonz output output output output output output with with with with with with bw bw bw bw bw bw = = = = = = 200 200 200 50 50 50
</CsScore> </CsoundSynthesizer>
1740
Technical History
resonr and resonz were originally described in an article by Julius O. Smith and James B. Angell.1 Smith and Angell recommended the resonz form (zeros at +1 and -1) when computational efficiency was the main concern, as it has one less multiply per sample, while resonr (zeroes at + and - the square root of the pole radius R) was recommended for situations when a perfectly constant-gain center peak was required. Ken Steiglitz, in a later article 2, demonstrated that resonz had constant gain at the true peak of the filter, as opposed to resonr, which displayed constant gain at the pole angle. Steiglitz also recommended resonz for its sharper notches in the gain curve at zero and Nyquist frequency. Steiglitz's recent book 3 features a thorough technical discussion of reson and resonz, while Dodge and Jerse's textbook 4 illustrates the differences in the response curves of reson and resonz.
References
1. Smith, Julius O. and Angell, James B., "A Constant-Gain Resonator Tuned by a Single Coefficient," Computer Music Journal, vol. 6, no. 4, pp. 36-39, Winter 1982. 2. Steiglitz, Ken, "A Note on Constant-Gain Digital Resonators," Computer Music Journal, vol. 18, no. 4, pp. 8-10, Winter 1994. 3. Ken Steiglitz, A Digital Signal Processing Primer, with Applications to Digital Audio and Computer Music. Addison-Wesley Publishing Company, Menlo Park, CA, 1996. 4. Dodge, Charles and Jerse, Thomas A., Computer Music: Synthesis, Composition, and Performance. New York: Schirmer Books, 1997, 2nd edition, pp. 211-214.
See Also
resonz
Credits
Author: Sean Costello Seattle, Washington 1999 New in Csound version 3.55
1741
resonx
resonx Emulates a stack of filters using the reson opcode.
Description
resonx is equivalent to a filters consisting of more layers of reson with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and kcycle are needed at time and the audio loop falls entirely inside the cache memory of processor.
Syntax
ares resonx asig, kcf, kbw [, inumlayer] [, iscl] [, iskip]
Initialization
inumlayer (optional) -- number of elements in the filter stack. Default value is 4. iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal kcf -- the center frequency of the filter, or frequency position of the peak response. kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points)
See Also
atonex, tonex
Credits
Author: Gabriel Maldonado (adapted by John ffitch) Italy New in Csound version 3.49
1742
resonxk
resonxk Control signal resonant filter stack.
Description
resonxk is equivalent to a group of resonk filters, with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff.
Syntax
kres resonxk ksig, kcf, kbw[, inumlayer, iscl, istor]
Initialization
inumlayer - number of elements of filter stack. Default value is 4. Maximum value is 10 iscl (optional, default=0) - coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0. istor (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kres - output signal ksig - input signal kcf - the center frequency of the filter, or frequency position of the peak response. kbw - bandwidth of the filter (the Hz difference between the upper and lower half-power points) resonxk is a lot faster than using individual instances in Csound orchestra of the old opcodes, because only one initialization and 'k' cycle are needed at a time, and the audio loop falls enterely inside the cache memory of processor.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
1743
resony
resony A bank of second-order bandpass filters, connected in parallel.
Description
A bank of second-order bandpass filters, connected in parallel.
Syntax
ares resony asig, kbf, kbw, inum, ksep [, isepmode] [, iscl] [, iskip]
Initialization
inum -- number of filters isepmode (optional, default=0) -- if isepmode = 0, the separation of center frequencies of each filter is generated logarithmically (using octave as unit of measure). If isepmode not equal to 0, the separation of center frequencies of each filter is generated linearly (using Hertz). Default value is 0. iscl (optional, default=0) -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. (This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise.) A zero value signifies no scaling of the signal, leaving that to some later adjustment (e.g. balance). The default value is 0. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- audio input signal kbf -- base frequency, i.e. center frequency of lowest filter in Hz kbw -- bandwidth in Hz ksep -- separation of the center frequency of filters in octaves resony is a bank of second-order bandpass filters, with k-rate variant frequency separation, base frequency and bandwidth, connected in parallel (i.e. the resulting signal is a mix of the output of each filter). The center frequency of each filter depends of kbf and ksep variables. The maximum number of filters is set to 100.
Examples
Here is an example of the resony opcode. It uses the file resony.csd [examples/resony.csd], and beats.wav [examples/beats.wav].
1744
Credits
Author: Gabriel Maldonado Italy 1999 Example written by Kevin Conder. New in Csound version 3.56
1745
resonz
resonz A bandpass filter with variable frequency response.
Description
Implementations of a second-order, two-pole two-zero bandpass filter with variable frequency response.
Syntax
ares resonz asig, kcf, kbw [, iscl] [, iskip]
Initialization
The optional initialization variables for resonr and resonz are identical to the i-time variables for reson. iskip -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a nonzero value will allow previous information to remain. The default value is 0. iscl -- coded scaling factor for resonators. A value of 1 signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A value of 2 raises the response factor so that its overall RMS value equals 1. This intended equalization of input and output power assumes all frequencies are physically present; hence it is most applicable to white noise. A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0.
Performance
resonr and resonz are variations of the classic two-pole bandpass resonator (reson). Both filters have two zeroes in their transfer functions, in addition to the two poles. resonz has its zeroes located at z = 1 and z = -1. resonr has its zeroes located at +sqrt(R) and -sqrt(R), where R is the radius of the poles in the complex z-plane. The addition of zeroes to resonr and resonz results in the improved selectivity of the magnitude response of these filters at cutoff frequencies close to 0, at the expense of less selectivity of frequencies above the cutoff peak. resonr and resonz are very close to constant-gain as the center frequency is swept, resulting in a more efficient control of the magnitude response than with traditional two-pole resonators such as reson. resonr and resonz produce a sound that is considerably different from reson, especially for lower center frequencies; trial and error is the best way of determining which resonator is best suited for a particular application. asig -- input signal to be filtered kcf -- cutoff or resonant frequency of the filter, measured in Hz kbw -- bandwidth of the filter (the Hz difference between the upper and lower half-power points)
Technical History
resonr and resonz were originally described in an article by Julius O. Smith and James B. Angell.1 1746
Smith and Angell recommended the resonz form (zeros at +1 and -1) when computational efficiency was the main concern, as it has one less multiply per sample, while resonr (zeroes at + and - the square root of the pole radius R) was recommended for situations when a perfectly constant-gain center peak was required. Ken Steiglitz, in a later article 2, demonstrated that resonz had constant gain at the true peak of the filter, as opposed to resonr, which displayed constant gain at the pole angle. Steiglitz also recommended resonz for its sharper notches in the gain curve at zero and Nyquist frequency. Steiglitz's recent book 3 features a thorough technical discussion of reson and resonz, while Dodge and Jerse's textbook 4 illustrates the differences in the response curves of reson and resonz.
References
1. Smith, Julius O. and Angell, James B., "A Constant-Gain Resonator Tuned by a Single Coefficient," Computer Music Journal, vol. 6, no. 4, pp. 36-39, Winter 1982. 2. Steiglitz, Ken, "A Note on Constant-Gain Digital Resonators," Computer Music Journal, vol. 18, no. 4, pp. 8-10, Winter 1994. 3. Ken Steiglitz, A Digital Signal Processing Primer, with Applications to Digital Audio and Computer Music. Addison-Wesley Publishing Company, Menlo Park, CA, 1996. 4. Dodge, Charles and Jerse, Thomas A., Computer Music: Synthesis, Composition, and Performance. New York: Schirmer Books, 1997, 2nd edition, pp. 211-214.
See Also
resonr
Credits
Author: Sean Costello Seattle, Washington 1999 New in Csound version 3.55
1747
resyn
resyn Streaming partial track additive synthesis with cubic phase interpolation with pitch control and support for timescale-modified input
Description
The resyn opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials). It resynthesises the signal using linear amplitude and cubic phase interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls. Resyn is a modified version of sinsyn, allowing for the resynthesis of data with pitch and timescale changes.
Syntax
asig resyn fin, kscal, kpitch, kmaxtracks, ifn
Performance
asig -- output audio rate signal fin -- input pv stream in TRACKS format kscal -- amplitude scaling kpitch -- pitch scaling kmaxtracks -- max number of tracks in resynthesis. Limiting this will cause a non-linear filtering effect, by discarding newer and higher-frequency tracks (tracks are ordered by start time and ascending frequency, respectively) ifn -- function table containing one cycle of a sinusoid (sine or cosine)
Examples
Example 525. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking aout resyn fst, 1, 1.5, 500, 1 ; resynthesis (up a 5th) out aout
The example above shows partial tracking of an ifd-analysis signal and cubic-phase additive resynthesis with pitch shifting.
Credits
1748
Author: Victor Lazzarini June 2005 New plugin in version 5 November 2004.
1749
reverb
reverb Reverberates an input signal with a natural room frequency response.
Description
Reverberates an input signal with a natural room frequency response.
Syntax
ares reverb asig, krvt [, iskip]
Initialization
iskip (optional, default=0) -- initial disposition of delay-loop data space (cf. reson). The default value is 0.
Performance
krvt -- the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). A standard reverb unit is composed of four comb filters in parallel followed by two alpass units in series. Loop times are set for optimal natural room response. Core storage requirements for this unit are proportional only to the sampling rate, each unit requiring approximately 3K words for every 10KC. The comb, alpass, delay, tone and other Csound units provide the means for experimenting with alternate reverberator designs. Since output from the standard reverb will begin to appear only after 1/20 second or so of delay, and often with less than three-fourths of the original power, it is normal to output both the source and the reverberated signal. If krvt is inadvertently set to a non-positive number, krvt will be reset automatically to 0.01. (New in Csound version 4.07.) Also, since the reverberated sound will persist long after the cessation of source events, it is normal to put reverb in a separate instrument to which sound is passed via a global variable, and to leave that instrument running throughout the performance.
Examples
Here is an example of the reverb opcode. It uses the file reverb.csd [examples/reverb.csd].
1750
<CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; init an audio receiver/mixer ga1 init 0 ; Instrument #1. (there may be many copies) instr 1 ; generate a source signal a1 oscili 7000, cpspch(p4), 1 ; output the direct sound out a1 ; and add to audio receiver ga1 = ga1 + a1 endin ; (highest instr number executed last) instr 99 ; reverberate whatever is in ga1 a3 reverb ga1, 1.5 ; and output the result out a3 ; empty the receiver for the next pass ga1 = 0 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 128 10 1 ; ; i ; i ; i ; i p4 = frequency (in Play Instrument #1 1 0 0.1 8.00 Play Instrument #1 1 1 0.1 8.02 Play Instrument #1 1 2 0.1 8.04 Play Instrument #1 1 3 0.1 8.06 a pitch-class) for a tenth of a second, p4=8.00 for a tenth of a second, p4=8.02 for a tenth of a second, p4=8.04 for a tenth of a second, p4=8.06
See Also
alpass, comb, valpass, vcomb
Credits
Author: William Pete Moss University of Texas at Austin Austin, Texas USA January 2002
1751
reverb2
reverb2 Same as the nreverb opcode.
Description
Same as the nreverb opcode.
Syntax
ares reverb2 asig, ktime, khdif [, iskip] [,inumCombs] \ [, ifnCombs] [, inumAlpas] [, ifnAlpas]
1752
reverbsc
reverbsc 8 delay line stereo FDN reverb, based on work by Sean Costello
Description
8 delay line stereo FDN reverb, with feedback matrix based upon physical modeling scattering junction of 8 lossless waveguides of equal characteristic impedance. Based on Csound orchestra version by Sean Costello.
Syntax
aoutL, aoutR reverbsc ainL, ainR, kfblvl, kfco[, israte[, ipitchm[, iskip]]]
Initialization
israte (optional, defaults to the orchestra sample rate) -- assume a sample rate of israte. This is normally set to sr, but a different setting can be useful for special effects. ipitchm (optional, defaults to 1) -- depth of random variation added to delay times, in the range 0 to 10. The default is 1, but this may be too high and may need to be reduced for held pitches such as piano tones. iskip (optional, defaults to zero) -- if non-zero, initialization of the opcode is skipped, whenever possible.
Performance
aoutL, aoutR -- output signals for left and right channel ainL, ainR -- left and right channel input. Note that having an input signal on either the left or right channel only will still result in having reverb output on both channels, making this unit more suitable for reverberating stereo input than the freeverb opcode. kfblvl -- feedback level, in the range 0 to 1. 0.6 gives a good small "live" room sound, 0.8 a small hall, and 0.9 a large hall. A setting of exactly 1 means infinite length, while higher values will make the opcode unstable. kfco -- cutoff frequency of simple first order lowpass filters in the feedback loop of delay lines, in Hz. Should be in the range 0 to israte/2 (not sr/2). A lower value means faster decay in the high frequency range.
Examples
Here is an example of the reverbsc opcode. It uses the file reverbsc.csd [examples/reverbsc.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o reverbsc.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 48000 ksmps = 32 nchnls = 2 0dbfs = 1 a1 kfrq a1 a2 a1 a2 a1 aL, aR instr 1 vco2 0.85, 440, 10 port 100, 0.004, 20000 butterlp a1, kfrq linseg 0, 0.003, 1, 0.01, 0.7, 0.005, 0, 1, 0 = a1 * a2 = a1 * p5 = a1 * p4 denorm a1, a2 reverbsc a1, a2, 0.85, 12000, sr, 0.5, 1 outs a1 + aL, a2 + aR endin
</CsInstruments> <CsScore> i 1 0 1 0.71 0.71 i 1 1 1 0 1 i 1 2 1 -0.71 0.71 i 1 3 1 1 0 i 1 4 4 0.71 0.71 e </CsScore> </CsoundSynthesizer>
Credits
Author: Istvan Varga 2005
1754
rewindscore
rewindscore Rewinds the playback position of the current score performance.
Description
Rewinds the playback position of the current score performance..
Syntax
rewindscore
Examples
Here is an example of the rewindscore opcode.
See Also
setscorepos
Credits
Author: Victor Lazzarini 2008 New in Csound version 5.09
1755
rezzy
rezzy A resonant low-pass filter.
Description
A resonant low-pass filter.
Syntax
ares rezzy asig, xfco, xres [, imode, iskip]
Initialization
imode (optional, default=0) -- high-pass or low-pass mode. If zero, rezzy is low-pass. If not zero, rezzy is high-pass. Default value is 0. (New in Csound version 3.50) iskip (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
asig -- input signal xfco -- filter cut-off frequency in Hz. As of version 3.50, may i-,k-, or a-rate. xres -- amount of resonance. Values of 1 to 100 are typical. Resonance should be one or greater. As of version 3.50, may a-rate, i-rate, or k-rate. rezzy is a resonant low-pass filter created empirically by Hans Mikelson.
Examples
Here is an example of the rezzy opcode. It uses the file rezzy.csd [examples/rezzy.csd].
1756
nchnls = 1 ; Instrument #1. instr 1 ; Use a nice sawtooth waveform. asig vco 32000, 220, 1 ; Vary the filter-cutoff frequency from .2 to 2 KHz. kfco line 200, p3, 2000 ; Set the resonance amount. kres init 25 a1 rezzy asig, kfco, kres out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave for the vco opcode. f 1 0 16384 10 1 ; Play Instrument #1 for three seconds. i 1 0 3 e </CsScore> </CsoundSynthesizer>
See Also
biquad, moogvcf
Credits
Author: Hans Mikelson October 1998 Example written by Kevin Conder. New in Csound version 3.49
1757
rigoto
rigoto Transfers control during a reinit pass.
Description
Similar to igoto, but effective only during a reinit pass (i.e., no-op at standard i-time). This statement is useful for bypassing units that are not to be reinitialized.
Syntax
rigoto label
See Also
cigoto, igoto, reinit, rireturn
1758
rireturn
rireturn Terminates a reinit pass.
Description
Terminates a reinit pass (i.e., no-op at standard i-time). This statement, or an endin, will cause normal performance to be resumed.
Syntax
rireturn
Examples
The following statements will generate an exponential control signal whose value moves from 440 to 880 exactly ten times over the duration p3. They use the file reinit.csd [examples/reinit.csd].
1759
</CsScore> </CsoundSynthesizer>
See Also
reinit, rigoto
1760
rms
rms Determines the root-mean-square amplitude of an audio signal.
Description
Determines the root-mean-square amplitude of an audio signal. It low-pass filters the actual value, to average in the manner of a VU meter.
Syntax
kres rms asig [, ihp] [, iskip]
Initialization
ihp (optional, default=10) -- half-power point (in Hz) of a special internal low-pass filter. The default value is 10. iskip (optional, default=0) -- initial disposition of internal data space (see reson). The default value is 0.
Performance
asig -- input audio signal kres -- low-pass filtered rms value of the input signal rms output values kres will trace the root-mean-square value of the audio input asig. This unit is not a signal modifier, but functions rather as a signal power-gauge. It uses an internal low-pass filter to make the response smoother. ihp can be used to control this smoothing. The higher the value, the "snappier" the measurement. This opcode can also be used as an evelope follower. The kres output from this opcode is given in amplitude and depends on 0dbfs. If you want the output in decibels, you can use dbamp
Examples
arms rms asig ; get rms value of signal asig
Here is an example of the rms opcode. It uses the file rms.csd [examples/rms.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d -m0 ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o rms.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 ksmps = 128 nchnls = 1 ;Example by Andres Cabrera 2007 0dbfs = 1 FLpanel "rms", 400, 100, 50, 50 gkrmstext, gihrmstext FLtext "Rms", -100, 0, 0.1, 3, 110, 30, 60, 50 gkihp, gihandle FLtext "ihp", 0, 10, 0.05, 1, 100, 30, 220, 50 gkrmsslider, gihrmsslider FLslider "", -60, -0.5, -1, 5, -1, 380, 20, 10, 10 FLpanelEnd FLrun FLsetVal_i 5, gihandle ; Instrument #1. instr 1 a1 inch 1 label: kval rms a1, i(gkihp) rireturn ;measures rms of input channel 1
kval = dbamp(kval) ; convert to db full scale printk 0.5, kval FLsetVal 1, kval, gihrmsslider ;update the slider and text values FLsetVal 1, kval, gihrmstext knewihp changed gkihp ; reinit when ihp text has changed if (knewihp == 1) then reinit label ;needed because ihp is an i-rate parameter endif endin
See Also
balance, gain
1762
rnd
rnd Returns a random number in a unipolar range at the rate given by the input argument.
Description
Returns a random number in a unipolar range at the rate given by the input argument.
Syntax
rnd(x) (init- or control-rate only)
Where the argument within the parentheses may be an expression. These value converters sample a global random sequence, but do not reference seed. The result can be a term in a further expression.
Performance
Returns a random number in the unipolar range 0 to x.
Examples
Here is an example of the rnd opcode. It uses the file rnd.csd [examples/rnd.csd].
1763
i 1 0 1 i 1 0 1 i 1 0 1 i 2 2 1 e
; Generate 1 number ; Generate another number ; yet another number ; 1 second prints 9 values (kr = 10)
</CsScore> </CsoundSynthesizer>
0.00000
See Also
birnd
Credits
Author: Barry L. Vercoe MIT Cambridge, Massachussetts 1997
1764
rnd31
rnd31 31-bit bipolar random opcodes with controllable distribution.
Description
31-bit bipolar random opcodes with controllable distribution. These units are portable, i.e. using the same seed value will generate the same random sequence on all systems. The distribution of generated random numbers can be varied at k-rate.
Syntax
ax rnd31 kscl, krpow [, iseed] ix rnd31 iscl, irpow [, iseed] kx rnd31 kscl, krpow [, iseed]
Initialization
ix -- i-rate output value. iscl -- output scale. The generated random numbers are in the range -iscl to iscl. irpow -- controls the distribution of random numbers. If irpow is positive, the random distribution (x is in the range -1 to 1) is abs(x) ^ ((1 / irpow) - 1); for negative irpow values, it is (1 - abs(x)) ^ ((-1 / irpow) - 1). Setting irpow to -1, 0, or 1 will result in uniform distribution (this is also faster to calculate).
1765
A graph of distributions for different values of irpow. iseed (optional, default=0) -- seed value for random number generator (positive integer in the range 1 to 2147483646 (2 ^ 31 - 2)). Zero or negative value seeds from current time (this is also the default). Seeding from current time is guaranteed to generate different random sequences, even if multiple random opcodes are called in a very short time. In the a- and k-rate version the seed is set at opcode initialization. With i-rate output, if iseed is zero or negative, it will seed from current time in the first call, and return the next value from the random sequence in successive calls; positive seed values are set at all i-rate calls. The seed is local for a- and krate, and global for i-rate units.
Notes
although seed values up to 2147483646 are allowed, it is recommended to use smaller numbers (< 1000000) for portability, as large integers may be rounded to a different value if 32-bit floats are used. i-rate rnd31 with a positive seed will always produce the same output value (this is not a bug). To get different values, set seed to 0 in successive calls, which will return the next value from the random sequence.
Performance
ax -- a-rate output value. kx -- k-rate output value. kscl -- output scale. The generated random numbers are in the range -kscl to kscl. It is the same as iscl, but can be varied at k-rate. krpow -- controls the distribution of random numbers. It is the same as irpow, but can be varied at k-rate.
Examples
Here is an example of the rnd31 opcode at a-rate. It uses the file rnd31.csd [examples/rnd31.csd].
according to platform audio I/O only the line below: output any platform
1766
kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create random numbers at a-rate in the range -2 to 2 with ; a triangular distribution, seed from the current time. a31 rnd31 2, -0.5 ; Use the random numbers to choose a frequency. afreq = a31 * 500 + 100 a1 oscil 30000, afreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the rnd31 opcode at k-rate. It uses the file rnd31_krate.csd [examples/ rnd31_krate.csd].
1767
Here is an example of the rnd31 opcode that uses the number 7 as a seed value. It uses the file rnd31_seed7.csd [examples/rnd31_seed7.csd].
Example 535. An example of the rnd31 opcode that uses the number 7 as a seed value.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o rnd31_seed7.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; i-rate random numbers with linear distribution, seed=7. ; (Note that the seed was used only in the first call.) i1 rnd31 1, 0.5, 7 i2 rnd31 1, 0.5 i3 rnd31 1, 0.5 print i1 print i2 print i3 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the rnd31 opcode that uses the current time as a seed value. It uses the file rnd31_time.csd [examples/rnd31_time.csd].
Example 536. An example of the rnd31 opcode that uses the current time as a seed
1768
value.
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o rnd31_time.wav -W ;;; for </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: file output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; i-rate random numbers with linear distribution, ; seeding from the current time. (Note that the seed ; was used only in the first call.) i1 rnd31 1, 0.5, 0 i2 rnd31 1, 0.5 i3 rnd31 1, 0.5 print i1 print i2 print i3 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: Istvan Varga New in version 4.16
1769
round
round Returns the integer value nearest to x ; if the fractional part of x is exactly 0.5, the direction of rounding is undefined.
Description
The integer value nearest to x ; if the fractional part of x is exactly 0.5, the direction of rounding is undefined.
Syntax
round(x) (init-, control-, or audio-rate arg allowed)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
See Also
abs, exp, int, log, log10, i, sqrt
Credits
Author: Istvan Varga New in Csound 5 2005
1770
rspline
rspline Generate random spline curves.
Description
Generate random spline curves.
Syntax
ares rspline xrangeMin, xrangeMax, kcpsMin, kcpsMax kres rspline krangeMin, krangeMax, kcpsMin, kcpsMax
Performance
kres, ares -- Output signal xrangeMin, xrangeMax -- Range of values of random-generated points kcpsMin, kcpsMax -- Range of point-generation rate. Min and max limits are expressed in cps. rspline (random-spline-curve generator) is similar to jspline but output range is defined by means of two limit values. Also in this case, real output range could be a bit greater of range values, because of interpolating curves beetween each pair of random-points. At present time generated curves are quite smooth when cpsMin is not too different from cpsMax. When cpsMin-cpsMax interval is big, some little discontinuity could occurr, but it should not be a problem, in most cases. Maybe the algorithm will be improved in next versions. These opcodes are often better than jitter when user wants to naturalize or analogize digital sounds. They could be used also in algorithmic composition, to generate smooth random melodic lines when used together with samphold opcode. Note that the result is quite different from the one obtained by filtering white noise, and they allow the user to obtain a much more precise control.
Credits
Author: Gabriel Maldonado New in version 4.15
1771
rtclock
rtclock Read the real time clock from the operating system.
Description
Read the real-time clock from the operating system.
Syntax
ires rtclock kres rtclock
Performance
Read the real-time clock from operating system. Under Windows, this changes only once per second. Under GNU/Linux, it ticks every microsecond. Performance under other systems varies.
Examples
Here is an example of the rtclock opcode. It uses the file rtclock.csd [examples/rtclock.csd].
1772
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch Example written by Kevin Conder. New in version 4.10
1773
s16b14
s16b14 Creates a bank of 16 different 14-bit MIDI control message numbers.
Description
Creates a bank of 16 different 14-bit MIDI control message numbers.
Syntax
i1,...,i16 s16b14 ichan, ictlno_msb1, ictlno_lsb1, imin1, imax1, \ initvalue1, ifn1,..., ictlno_msb16, ictlno_lsb16, imin16, imax16, initvalue16, ifn16 k1,...,k16 s16b14 ichan, ictlno_msb1, ictlno_lsb1, imin1, imax1, \ initvalue1, ifn1,..., ictlno_msb16, ictlno_lsb16, imin16, imax16, initvalue16, ifn16
Initialization
i1 ... i64 -- output values ichan -- MIDI channel (1-16) ictlno_msb1 .... ictlno_msb32 -- MIDI control number, most significant byte (0-127) ictlno_lsb1 .... ictlno_lsb32 -- MIDI control number, least significant byte (0-127) imin1 ... imin64 -- minimum values for each controller imax1 ... imax64 -- maximum values for each controller init1 ... init64 -- initial value for each controller ifn1 ... ifn64 -- function table for conversion for each controller
Performance
k1 ... k64 -- output values s16b14 is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. s16b14 allows a bank of 16 different MIDI control message numbers. It uses 14-bit values instead of MIDI's normal 7-bit values. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using 1774
the separate ones (ctrl7 and tonek) when more controllers are required. In the i-rate version of s16b14, there is not an initial value input argument. The output is taken directly from the current status of internal controller array of Csound.
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1775
s32b14
s32b14 Creates a bank of 32 different 14-bit MIDI control message numbers.
Description
Creates a bank of 32 different 14-bit MIDI control message numbers.
Syntax
i1,...,i32 s32b14 ichan, ictlno_msb1, ictlno_lsb1, imin1, imax1, \ initvalue1, ifn1,..., ictlno_msb32, ictlno_lsb32, imin32, imax32, initvalue32, ifn32 k1,...,k32 s32b14 ichan, ictlno_msb1, ictlno_lsb1, imin1, imax1, \ initvalue1, ifn1,..., ictlno_msb32, ictlno_lsb32, imin32, imax32, initvalue32, ifn32
Initialization
i1 ... i64 -- output values ichan -- MIDI channel (1-16) ictlno_msb1 .... ictlno_msb32 -- MIDI control number, most significant byte (0-127) ictlno_lsb1 .... ictlno_lsb32 -- MIDI control number, least significant byte (0-127) imin1 ... imin64 -- minimum values for each controller imax1 ... imax64 -- maximum values for each controller init1 ... init64 -- initial value for each controller ifn1 ... ifn64 -- function table for conversion for each controller
Performance
k1 ... k64 -- output values s32b14 is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. s32b14 allows a bank of 32 different MIDI control message numbers. It uses 14-bit values instead of MIDI's normal 7-bit values. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using 1776
the separate ones (ctrl7 and tonek) when more controllers are required. In the i-rate version of s32b14, there is not an initial value input argument. The output is taken directly from the current status of internal controller array of Csound.
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1777
scale
scale Arbitrary signal scaling.
Description
Scales incoming value to user-definable range. Similar to scale object found in popular dataflow languages.
Syntax
kscl scale kinput, kmax, kmin
Performance
kin -- Input value. Can originate from any k-rate source as long as that source's output is in range 0-1. kmin -- Minimum value of the resultant scale operation. kmax -- Maximum value of the resultant scale operation.
Examples
Here is an example of the scale opcode. It uses the file scale.csd [examples/scale.csd].
1778
See Also
gainslider, logcurve, expcurve
Credits
Author: David Akbari October 2006
1779
samphold
samphold Performs a sample-and-hold operation on its input.
Description
Performs a sample-and-hold operation on its input.
Syntax
ares samphold asig, agate [, ival] [, ivstor] kres samphold ksig, kgate [, ival] [, ivstor]
Initialization
ival, ivstor (optional) -- controls initial disposition of internal save space. If ivstor is zero the internal hold value is set to ival ; else it retains its previous value. Defaults are 0,0 (i.e. init to zero)
Performance
kgate, xgate -- controls whether to hold the signal. samphold performs a sample-and-hold operation on its input according to the value of gate. If gate != 0, the input samples are passed to the output; if gate = 0, the last output value is repeated. The controlling gate can be a constant, a control signal, or an audio signal.
Examples
asrc adif anew agate asamp aout buzz diff balance reson samphold tone 10000, 440, 20, 1 asrc adif, asrc asrc, 0, 440 anew, agate asamp, 100 ; ; ; ; ; ; band-limited pulse train emphasize the highs but retain the power use a lowpass of the original to gate the new audiosig smooth out the rough edges
See Also
diff, downsamp, integ, interp, upsamp
1780
sandpaper
sandpaper Semi-physical model of a sandpaper sound.
Description
sandpaper is a semi-physical model of a sandpaper sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares sandpaper iamp, idettack [, inum] [, idamp] [, imaxshake]
Initialization
iamp -- Amplitude of output. Note: As these instruments are stochastic, this is only a approximation. idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 128. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.998 + (idamp * 0.002) The default damping_amount is 0.999 which means that the default value of idamp is 0.5. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 1.0. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional) -- amount of energy to add back into the system. The value should be in range 0 to 1.
Examples
Here is an example of the sandpaper opcode. It uses the file sandpaper.csd [examples/sandpaper.csd].
1781
;orchestra --------------sr = kr = ksmps = nchnls = instr 01 a1 a2 a3 44100 4410 10 1 ;an example of sandpaper blocks line 2, p3, 2 ;preset amplitude increase sandpaper p4, 0.01 ;sandpaper needs a little amp help at these settings product a1, a2 ;increase amplitude out a3 endin
See Also
cabasa, crunch, sekere, stix
Credits
Author: Perry Cook, part of the PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
1782
scanhammer
scanhammer Copies from one table to another with a gain control.
Description
This is is a variant of tablecopy, copying from one table to another, starting at ipos, and with a gain control. The number of points copied is determined by the length of the source. Other points are not changed. This opcode can be used to hit a string in the scanned synthesis code.
Syntax
scanhammer isrc, idst, ipos, imult
Initialization
isrc -- source function table. idst -- destination function table. ipos -- starting position (in points). imult -- gain multiplier. A value of 0 will leave values unchanged.
See Also
scantable
Credits
Author: Matt Gilliard April 2002 New in version 4.20
1783
scans
scans Generate audio output using scanned synthesis.
Description
Generate audio output using scanned synthesis.
Syntax
ares scans kamp, kfreq, ifn, id [, iorder]
Initialization
ifn -- ftable containing the scanning trajectory. This is a series of numbers that contains addresses of masses. The order of these addresses is used as the scan path. It should not contain values greater than the number of masses, or negative numbers. See the introduction to the scanned synthesis section. id -- ID number of the scanu opcode's waveform to use iorder (optional, default=0) -- order of interpolation used internally. It can take any value in the range 1 to 4, and defaults to 4, which is quartic interpolation. The setting of 2 is quadratic and 1 is linear. The higher numbers are slower, but not necessarily better.
Performance
kamp -- output amplitude. Note that the resulting amplitude is also dependent on instantaneous value in the wavetable. This number is effectively the scaling factor of the wavetable. kfreq -- frequency of the scan rate
Examples
Here is an example of the scanned synthesis. It uses the file scans.csd [examples/scans.csd], and string128.matrix [examples/string-128.matrix].
1784
nchnls = a0 ;
instr 1 = 0 scanu init, irate, ifnvel, ifnmass, ifnstif, ifncentr, ifndamp, kmass, kstif, kcentr, kdamp, ileft, scanu 1, .01, 6, 2, 3, 4, 5, 2, .1, .1, -.01, .1, ;ar scans kamp, kfreq, ifntraj, id a1 scans ampdb(p4), cpspch(p5), 7, 2 out a1 endin </CsInstruments> <CsScore> ; Initial condition f1 0 128 7 0 64 1 64 0 ; Masses f2 0 128 -7 1 128 1 ; Spring matrices f3 0 16384 -23 "string-128.matrix" ; Centering force f4 0 128 -7 0 128 2 ; Damping f5 0 128 -7 1 128 1 ; Initial velocity f6 0 128 -7 0 128 0 ; Trajectories f7 0 128 -5 .001 128 128 ; Note list i1 0 10 86 6.00 i1 11 14 86 7.00 i1 15 20 86 5.00 e </CsScore> </CsoundSynthesizer>
The matrix file string-128.matrix, as well as several other matrices, is also available in a zipped file [http://www.csounds.com/scanned/zip/scanmatrices.zip] from the Scanned Synthesis page [http://www.csounds.com/scanned/] at cSounds.com.
Credits
Author: Paris Smaragdis MIT Media Lab Boston, Massachussetts USA New in Csound version 4.05
1785
scantable
scantable A simpler scanned synthesis implementation.
Description
A simpler scanned synthesis implementation. This is an implementation of a circular string scanned using external tables. This opcode will allow direct modification and reading of values with the table opcodes.
Syntax
aout scantable kamp, kpch, ipos, imass, istiff, idamp, ivel
Initialization
ipos -- table containing position array. imass -- table containing the mass of the string. istiff -- table containing the stiffness of the string. idamp -- table containing the damping factors of the string. ivel -- table containing the velocities.
Performance
kamp -- amplitude (gain) of the string. kpch -- the string's scanned frequency.
Examples
Here is an example of the scantable opcode. It uses the file scantable.csd [examples/scantable.csd].
1786
ksmps = 10 nchnls = 1 ; Table #1 git1 ftgen ; Table #2 git2 ftgen ; Table #3 git3 ftgen ; Table #4 git4 ftgen ; Table #5 git5 ftgen - initial position 1, 0, 128, 7, 0, 64, 1, 64, 0 - masses 2, 0, 128, -7, 1, 128, 1 - stiffness 3, 0, 128, -7, 0, 64, 100, 64, 0 - damping 4, 0, 128, -7, 1, 128, 1 - initial velocity 5, 0, 128, -7, 0, 128, 0
; Instrument #1. instr 1 kamp init 20000 kpch init 220 ipos = 1 imass = 2 istiff = 3 idamp = 4 ivel = 5 a1 scantable kamp, kpch, ipos, imass, istiff, idamp, ivel a2 dcblock a1 out a2 endin </CsInstruments> <CsScore> ; Play Instrument #1 for ten seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
scanhammer
Credits
Author: Matt Gilliard April 2002 Example written by Kevin Conder. New in version 4.20
1787
scanu
scanu Compute the waveform and the wavetable for use in scanned synthesis.
Description
Compute the waveform and the wavetable for use in scanned synthesis.
Syntax
scanu init, irate, ifnvel, ifnmass, ifnstif, ifncentr, ifndamp, kmass, \ kstif, kcentr, kdamp, ileft, iright, kpos, kstrngth, ain, idisp, id
Initialization
init -- the initial position of the masses. If this is a negative number, then the absolute of init signifies the table to use as a hammer shape. If init > 0, the length of it should be the same as the intended mass number, otherwise it can be anything. ifnvel -- the ftable that contains the initial velocity for each mass. It should have the same size as the intended mass number. ifnmass -- ftable that contains the mass of each mass. It should have the same size as the intended mass number. ifnstif -- ftable that contains the spring stiffness of each connection. It should have the same size as the square of the intended mass number. The data ordering is a row after row dump of the connection matrix of the system. ifncentr -- ftable that contains the centering force of each mass. It should have the same size as the intended mass number. ifndamp -- the ftable that contains the damping factor of each mass. It should have the same size as the intended mass number. ileft -- If init < 0, the position of the left hammer (ileft = 0 is hit at leftmost, ileft = 1 is hit at rightmost). iright -- If init < 0, the position of the right hammer (iright = 0 is hit at leftmost, iright = 1 is hit at rightmost). idisp -- If 0, no display of the masses is provided. id -- If positive, the ID of the opcode. This will be used to point the scanning opcode to the proper waveform maker. If this value is negative, the absolute of this value is the wavetable on which to write the waveshape. That wavetable can be used later from an other opcode to generate sound. The initial contents of this table will be destroyed.
Performance
kmass -- scales the masses kstif -- scales the spring stiffness kcentr -- scales the centering force 1788
kdamp -- scales the damping kpos -- position of an active hammer along the string (kpos = 0 is leftmost, kpos = 1 is rightmost). The shape of the hammer is determined by init and the power it pushes with is kstrngth. kstrngth -- power that the active hammer uses ain -- audio input that adds to the velocity of the masses. Amplitude should not be too great.
Examples
For an example, see the documentation on scans.
Credits
Author: Paris Smaragdis MIT Media Lab Boston, Massachussetts USA March 2000 New in Csound version 4.05
1789
scoreline
scoreline Issues one or more score line events from an instrument.
Description
Scoreline will issue one or more score events, if ktrig is 1 every k-period. It can handle strings in the same conditions as the standard score. Multi-line strings are accepted, using {{ }} to enclose the string.
Syntax
scoreline Sin, ktrig
Initialization
Sin -- a string (in double-quotes or enclosed by {{ }}) containing one or more score events.
Performance
ktrig -- event trigger, 1 issues the score event, 0 bypasses it.
Examples
Here is an example of the scoreline opcode.
instr 1 ktrig init 1 scoreline {{ i 2 0 3 i 2 1 3 }}, ktrig ktrig = 0 endin instr 2 aout soundin p4 out aout endin "flutec3.wav" "clarc3.wav"
You can use string opcodes like sprintfk to produce strings to be passed to scoreline like this:
Sfil = "/Volumes/Bla/file.aif" String sprintfk {{i 2 0 %f "%s" %f %f %f %f}}, idur, Sfil, p5, p6, knorm, iskip scoreline String, ktrig
See also
1790
Credits
Author: Victor Lazzarini, 2007
1791
scoreline_i
scoreline_i Issues one or more score line events from an instrument at i-time.
Description
scoreline_i will issue score events at i-time. It can handle strings in the same conditions as the standard score. Multi-line strings are accepted, using {{ }} to enclose the string.
Syntax
scoreline_i Sin
Initialization
Sin -- a string (in double-quotes or enclosed by {{ }}) containing one or more score events.
Examples
Here is an example of the scoreline_i opcode.
instr 1 scoreline_i {{ i 2 i 2 }} endin instr 2 aout soundin p4 out aout endin 0 1 3 3 "flutec3.wav" "clarc3.wav"
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
See also
event, event_i, schedule, schedwhen, schedkwhen, schedkwhennamed, scoreline
Credits
Author: Victor Lazzarini, 2007
1792
schedkwhen
schedkwhen Adds a new score event generated by a k-rate trigger.
Description
Adds a new score event generated by a k-rate trigger.
Syntax
schedkwhen ktrigger, kmintim, kmaxnum, kinsnum, kwhen, kdur \ [, ip4] [, ip5] [...] schedkwhen ktrigger, kmintim, kmaxnum, "insname", kwhen, kdur \ [, ip4] [, ip5] [...]
Initialization
insname -- A string (in double-quotes) representing a named instrument. ip4, ip5, ... -- Equivalent to p4, p5, etc., in a score i statement
Performance
ktrigger -- triggers a new score event. If ktrigger = 0, no new event is triggered. kmintim -- minimum time between generated events, in seconds. If kmintim <= 0, no time limit exists. If the kinsnum is negative (to turn off an instrument), this test is bypassed. kmaxnum -- maximum number of simultaneous instances of instrument kinsnum allowed. If the number of existant instances of kinsnum is >= kmaxnum, no new event is generated. If kmaxnum is <= 0, it is not used to limit event generation. If the kinsnum is negative (to turn off an instrument), this test is bypassed. kinsnum -- instrument number. Equivalent to p1 in a score i statement. kwhen -- start time of the new event. Equivalent to p2 in a score i statement. Measured from the time of the triggering event. kwhen must be >= 0. If kwhen > 0, the instrument will not be initialized until the actual time when it should start performing. kdur -- duration of event. Equivalent to p3 in a score i statement. If kdur = 0, the instrument will only do an initialization pass, with no performance. If kdur is negative, a held note is initiated. (See ihold and i statement.)
Note
While waiting for events to be triggered by schedkwhen, the performance must be kept going, or Csound may quit if no score events are expected. To guarantee continued performance, an f0 statement may be used in the score.
Note
1793
Note that the schedkwhen opcode can't accept string p-fields. If you need to pass strings when instantiating an instrument, use the scoreline or scoreline_i opcode.
Examples
Here is an example of the schedkwhen opcode. It uses the file schedkwhen.csd [examples/schedkwhen.csd].
according to platform audio I/O only the line below: file output any platform
; Initialize the global variables. sr = 44100 kr = 44100 ksmps = 1 nchnls = 1 ; Instrument #1 - oscillator with a high note. instr 1 ; Use the fourth p-field as the trigger. ktrigger = p4 kmintim = 0 kmaxnum = 2 kinsnum = 2 kwhen = 0 kdur = 0.5 ; Play Instrument #2 at the same time, if the trigger is set. schedkwhen ktrigger, kmintim, kmaxnum, kinsnum, kwhen, kdur ; Play a high note. a1 oscils 10000, 880, 1 out a1 endin ; Instrument #2 - oscillator with a low note. instr 2 ; Play a low note. a1 oscils 10000, 220, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; ; i ; i e p4 = trigger for Instrument #2 (when p4 > 0). Play Instrument #1 for half a second, no trigger. 1 0 0.5 0 Play Instrument #1 for half a second, trigger Instrument #2. 1 1 0.5 1
1794
</CsScore> </CsoundSynthesizer>
See also
event, event_i, schedule, schedwhen, schedkwhennamed, scoreline, scoreline_i
Credits
Author: Rasmus Ekman EMS, Stockholm, Sweden Example written by Kevin Conder. New in Csound version 3.59
1795
schedkwhennamed
schedkwhennamed Similar to schedkwhen but uses a named instrument at init-time.
Description
Similar to schedkwhen but uses a named instrument at init-time.
Syntax
schedkwhennamed ktrigger, kmintim, kmaxnum, "name", kwhen, kdur \ [, ip4] [, ip5] [...]
Initialization
ip4, ip5, ... -- Equivalent to p4, p5, etc., in a score i statement
Performance
ktrigger -- triggers a new score event. If ktrigger is 0, no new event is triggered. kmintim -- minimum time between generated events, in seconds. If kmintim is less than or equal to 0, no time limit exists. kmaxnum -- maximum number of simultaneous instances of named instrument allowed. If the number of existant instances of the named instrument is greater than or equal to kmaxnum, no new event is generated. If kmaxnum is less than or equal to 0, it is not used to limit event generation. "name" -- the named instrument's name. kwhen -- start time of the new event. Equivalent to p2 in a score i statement. Measured from the time of the triggering event. kwhen must be greater than or equal to 0. If kwhen greater than 0, the instrument will not be initialized until the actual time when it should start performing. kdur -- duration of event. Equivalent to p3 in a score i statement. If kdur is 0, the instrument will only do an initialization pass, with no performance. If kdur is negative, a held note is initiated. (See ihold and i statement.)
Note
While waiting for events to be triggered by schedkwhennamed, the performance must be kept going, or Csound may quit if no score events are expected. To guarantee continued performance, an f0 statement may be used in the score.
Note
Note that the schedkwhennamed opcode can't accept string p-fields. If you need to pass strings when instantiating an instrument, use the scoreline or scoreline_i opcode.
Examples
1796
Here is an example of the schedkwhennamed opcode. It uses the file schedkwhennamed.csd [examples/ schedkwhennamed.csd].
; Example by Jonathan Murphy 2007 gSinstr2 instr 1 ktrig metro 1 if (ktrig == 1) then ;Call instrument "printer" once per second schedkwhennamed ktrig, 0, 1, gSinstr2, 0, 1 endif endin instr printer ktime endin </CsInstruments> <CsScore> i1 0 10 e </CsScore> </CsoundSynthesizer> timeinsts printk2 ktime = "printer"
See also
event, event_i, schedule, schedwhen, schedkwhen, scoreline, scoreline_i
Credits
Author: Rasmus Ekman EMS, Stockholm, Sweden New in Csound version 4.23
1797
schedule
schedule Adds a new score event.
Description
Adds a new score event.
Syntax
schedule insnum, iwhen, idur [, ip4] [, ip5] [...] schedule "insname", iwhen, idur [, ip4] [, ip5] [...]
Initialization
insnum -- instrument number. Equivalent to p1 in a score i statement. insnum must be a number greater than the number of the calling instrument. insname -- A string (in double-quotes) representing a named instrument. iwhen -- start time of the new event. Equivalent to p2 in a score i statement. iwhen must be nonnegative. If iwhen is zero, insum must be greater than or equal to the p1 of the current instrument. idur -- duration of event. Equivalent to p3 in a score i statement. ip4, ip5, ... -- Equivalent to p4, p5, etc., in a score i statement.
Performance
ktrigger -- trigger value for new event schedule adds a new score event. The arguments, including options, are the same as in a score. The iwhen time (p2) is measured from the time of this event. If the duration is zero or negative the new event is of MIDI type, and inherits the release sub-event from the scheduling instruction.
Note
Note that the schedule opcode can't accept string p-fields. If you need to pass strings when instantiating an instrument, use the scoreline or scoreline_i opcode.
Examples
Here is an example of the schedule opcode. It uses the file schedule.csd [examples/schedule.csd].
1798
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o schedule.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - oscillator with a high note. instr 1 ; Play Instrument #2 at the same time. schedule 2, 0, p3 ; Play a high note. a1 oscils 10000, 880, 1 out a1 endin ; Instrument #2 - oscillator with a low note. instr 2 ; Play a low note. a1 oscils 10000, 220, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for half a second. 1 0 0.5 Play Instrument #1 for half a second. 1 1 0.5
</CsScore> </CsoundSynthesizer>
See Also
schedwhen
See also
event, event_i, schedwhen, schedkwhen, schedkwhennamed, scoreline, scoreline_i
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK November 1998 1799
Example written by Kevin Conder. New in Csound version 3.491 Based on work by Gabriel Maldonado Thanks goes to David Gladstein, for clarifying the iwhen parameter.
1800
schedwhen
schedwhen Adds a new score event.
Description
Adds a new score event.
Syntax
schedwhen ktrigger, kinsnum, kwhen, kdur [, ip4] [, ip5] [...] schedwhen ktrigger, "insname", kwhen, kdur [, ip4] [, ip5] [...]
Initialization
ip4, ip5, ... -- Equivalent to p4, p5, etc., in a score i statement.
Performance
kinsnum -- instrument number. Equivalent to p1 in a score i statement. insname -- A string (in double-quotes) representing a named instrument. ktrigger -- trigger value for new event kwhen -- start time of the new event. Equivalent to p2 in a score i statement. kdur -- duration of event. Equivalent to p3 in a score i statement. schedwhen adds a new score event. The event is only scheduled when the k-rate value ktrigger is first non-zero. The arguments, including options, are the same as in a score. The kwhen time (p2) is measured from the time of this event. If the duration is zero or negative the new event is of MIDI type, and inherits the release sub-event from the scheduling instruction.
Note
Note that the schedwhen opcode can't accept string p-fields. If you need to pass strings when instantiating an instrument, use the scoreline or scoreline_i opcode.
Examples
Here is an example of the schedwhen opcode. It uses the file schedwhen.csd [examples/schedwhen.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o schedwhen.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 44100 ksmps = 1 nchnls = 1 ; Instrument #1 - oscillator with a high note. instr 1 ; Use the fourth p-field as the trigger. ktrigger = p4 kinsnum = 2 kwhen = 0 kdur = p3 ; Play Instrument #2 at the same time, if the trigger is set. schedwhen ktrigger, kinsnum, kwhen, kdur ; Play a high note. a1 oscils 10000, 880, 1 out a1 endin ; Instrument #2 - oscillator with a low note. instr 2 ; Play a low note. a1 oscils 10000, 220, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; ; i ; i e p4 = trigger for Instrument #2 (when p4 > 0). Play Instrument #1 for half a second, trigger Instrument #2. 1 0 0.5 1 Play Instrument #1 for half a second, no trigger. 1 1 0.5 0
</CsScore> </CsoundSynthesizer>
See also
event, event_i, schedule, schedkwhen, schedkwhennamed, scoreline, scoreline_i
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK November 1998
1802
Example written by Kevin Conder. New in Csound version 3.491 Based on work by Gabriel Maldonado
1803
seed
seed Sets the global seed value.
Description
Sets the global seed value for all x-class noise generators, as well as other opcodes that use a random call, such as grain.
Please Note
rand, randh, randi, rnd(x) and birnd(x) are not affected by seed.
Syntax
seed ival
Performance
Use of seed will provide predictable results from an orchestra using with random generators, when required from multiple performances. When specifying a seed value, ival should be an integer between 0 and 232. If ival = 0, the value of ival will be derived from the system clock.
1804
sekere
sekere Semi-physical model of a sekere sound.
Description
sekere is a semi-physical model of a sekere sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares sekere iamp, idettack [, inum] [, idamp] [, imaxshake]
Initialization
iamp -- Amplitude of output. Note: As these instruments are stochastic, this is only a approximation. idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 64. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.998 + (idamp * 0.002) The default damping_amount is 0.999 which means that the default value of idamp is 0.5. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 1.0. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional) -- amount of energy to add back into the system. The value should be in range 0 to 1.
Examples
Here is an example of the sekere opcode. It uses the file sekere.csd [examples/sekere.csd].
1805
See Also
cabasa, crunch, sandpaper, stix
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
1806
semitone
semitone Calculates a factor to raise/lower a frequency by a given amount of semitones.
Description
Calculates a factor to raise/lower a frequency by a given amount of semitones.
Syntax
semitone(x)
Initialization
x -- a value expressed in semitones.
Performance
The value returned by the semitone function is a factor. You can multiply a frequency by this factor to raise/lower it by the given amount of semitones.
Examples
Here is an example of the semitone opcode. It uses the file semitone.csd [examples/semitone.csd].
1807
ifactor = semitone(isemitone) inew = iroot * ifactor ; Print out all of the values. print iroot print ifactor print inew endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
cent, db, octave
Credits
Example written by Kevin Conder. New in version 4.16
1808
sense
sense Same as the sensekey opcode.
Description
Same as the sensekey opcode.
1809
sensekey
sensekey Returns the ASCII code of a key that has been pressed.
Description
Returns the ASCII code of a key that has been pressed, or -1 if no key has been pressed.
Syntax
kres[, kkeydown] sensekey
Performance
kres - returns the ASCII value of a key which is pressed or released. kkeydown - returns 1 if the key was pressed, 0 if it was released or if there is no key event. kres can be used to read keyboard events from stdin and returns the ASCII value of any key that is pressed or released, or it returns -1 when there is no keyboard activity. The value of kkeydown is 1 when a key was pressed, or 0 otherwise. This behavior is emulated by default, so a key release is generated immediately after every key press. To have full functionality, FLTK can be used to capture keyboard events. FLpanel can be used to capture keyboard events and send them to the sensekey opcode, by adding an additional optional argument. See FLpanel for more information.
Note
This opcode can also be written as sense.
Examples
Here is an example of the sensekey opcode. It uses the file sensekey.csd [examples/sensekey.csd].
1810
; Instrument #1. instr 1 k1 sensekey printk2 k1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for thirty seconds. i 1 0 30 e </CsScore> </CsoundSynthesizer>
Here is what the output should look like when the "q" button is pressed...
q i1 113.00000
Here is an example of the sensekey opcode in conjucntion with FLpanel. It uses the file FLpanelsensekey.csd [examples/FLpanel-sensekey.csd].
Example 551. Example of the sensekey opcode using keyboard capture from an FLpanel.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o FLpanel-sensekey.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Example by Johnathan Murphy sr = ksmps nchnls 44100 = 128 = 2
ikey
FLpanel "sensekey", 740, 340, 100, 250, 2, ikey gkasc, giasc FLbutBank 2, 16, 8, 700, 300, 20, 20, -1 FLpanelEnd FLrun instr 1 kkey kprint endin </CsInstruments> <CsScore> i1 0 60 e </CsScore> </CsoundSynthesizer> sensekey changed FLsetVal kkey kprint, kkey, giasc
The lit button in the FLpanel window shows the last key pressed. 1811
Here is a more complex example of the sensekey opcode in conjucntion with FLpanel. It uses the file FLpanel-sensekey2.csd [examples/FLpanel-sensekey.csd].
Example 552. Example of the sensekey opcode using keyboard capture from an FLpanel.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac ; -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o FLpanel-sensekey2.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 48000 ksmps = 32 nchnls = 1 ; Example by Istvan Varga ; if the FLTK opcodes are commented out, sensekey will read keyboard ; events from stdin FLpanel "", 150, 50, 100, 100, 0, 1 FLlabel 18, 10, 1, 0, 0, 0 FLgroup "Keyboard Input", 150, 50, 0, 0, 0 FLgroupEnd FLpanelEnd FLrun instr 1 ktrig1 init 1 ktrig2 init 1 nxtKey1: k1, k2 sensekey if (k1 != -1 || k2 != 0) then printf "Key code = %02X, state = %d\n", ktrig1, k1, k2 ktrig1 = 3 - ktrig1 kgoto nxtKey1 endif nxtKey2: k3 sensekey if (k3 != -1) then printf "Character = '%c'\n", ktrig2, k3 ktrig2 = 3 - ktrig2 kgoto nxtKey2 endif endin </CsInstruments> <CsScore> i 1 0 3600 e </CsScore> </CsoundSynthesizer>
The console output will look something like: new alloc for instr 1: Key code = 65, state = 1 Character = 'e' Key code = 65, state = 0 Key code = 72, state = 1 Character = 'r' Key code = 72, state = 0 Key code = 61, state = 1 Character = 'a' 1812
See also
FLpanel, FLkeyIn
Credits
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK October 2000 Examples written by Kevin Conder, Johnathan Murphy and Istvan Varga. New in Csound version 4.09. Renamed in Csound version 4.10.
1813
seqtime
seqtime Generates a trigger signal according to the values stored in a table.
Description
Generates a trigger signal according to the values stored in a table.
Syntax
ktrig_out seqtime ktime_unit, kstart, kloop, kinitndx, kfn_times
Performance
ktrig_out -- output trigger signal ktime_unit -- unit of measure of time, related to seconds. kstart -- start index of looped section kloop -- end index of looped section kinitndx -- initial index
Note
Although kinitndx is listed as k-rate, it is in fact accessed only at init-time. So if you are using a k-rate argument, it must be assigned with init. kfn_times -- number of table containing a sequence of times This opcode handles timed-sequences of groups of values stored into a table. seqtime generates a trigger signal (a sequence of impulses, see also trigger opcode), according to the values stored in the kfn_times table. This table should contain a series of delta-times (i.e. times beetween to adjacent events). The time units stored into table are expressed in seconds, but can be rescaled by means of ktime_unit argument. The table can be filled with GEN02 or by means of an external text-file containing numbers, with GEN23.
Note
Note that the kloop index marks the loop boundary and is NOT included in the looped elements. If you want to loop the first four elements, you would set kstart to 0 and kloop to 4. It is possible to start the sequence from a value different than the first, by assigning to kinitndx an index different than zero (which corresponds to the first value of the table). Normally the sequence is looped, and the start and end of loop can be adjusted by modifying kstart and kloop arguments. User must be sure that values of these arguments (as well as kinitndx) correspond to valid table numbers, otherwise Csound will crash (because no range-checking is implementeted). It is possible to disable loop (one-shot mode) by assigning the same value both to kstart and kloop argu1814
ments. In this case, the last read element will be the one corresponding to the value of such arguments. Table can be read backward by assigning a negative kloop value. It is possible to trigger two events almost at the same time (actually separated by a k-cycle) by giving a zero value to the corresponding delta-time. First element contained in the table should be zero, if the user intends to send a trigger impulse, it should come immediately after the orchestra instrument containing seqtime opcode.
Examples
Here is an example of the seqtime opcode. It uses the file seqtime.csd [examples/seqtime.csd].
1815
kstart
kloop
See Also
GEN02, GEN23, trigseq seqtime2
Credits
Author: Gabriel Maldonado November 2002. Added a note about the kinitndx parameter, thanks to Rasmus Ekman. New in version 4.06 Example by: Tim Mortimer and Andres Cabrera 2007
1816
seqtime2
seqtime2 Generates a trigger signal according to the values stored in a table.
Description
Generates a trigger signal according to the values stored in a table.
Syntax
ktrig_out seqtime2 ktrig_in, ktime_unit, kstart, kloop, kinitndx, kfn_times
Performance
ktrig_out -- output trigger signal ktime_unit -- unit of measure of time, related to seconds. ktrig_in -- input trigger signal. kstart -- start index of looped section kloop -- end index of looped section kinitndx -- initial index
Note
Although kinitndx is listed as k-rate, it is in fact accessed only at init-time. So if you are using a k-rate argument, it must be assigned with init. kfn_times -- number of table containing a sequence of times This opcode handles timed-sequences of groups of values stored into a table. seqtime2 generates a trigger signal (a sequence of impulses, see also trigger opcode), according to the values stored in the kfn_times table. This table should contain a series of delta-times (i.e. times beetween to adjacent events). The time units stored into table are expressed in seconds, but can be rescaled by means of ktime_unit argument. The table can be filled with GEN02 or by means of an external text-file containing numbers, with GEN23. It is possible to start the sequence from a value different than the first, by assigning to initndx an index different than zero (which corresponds to the first value of the table). Normally the sequence is looped, and the start and end of loop can be adjusted by modifying kstart and kloop arguments. User must be sure that values of these arguments (as well as initndx) correspond to valid table numbers, otherwise Csound will crash (because no range-checking is implementeted). It is possible to disable loop (one-shot mode) by assigning the same value both to kstart and kloop arguments. In this case, the last read element will be the one corresponding to the value of such arguments. Table can be read backward by assigning a negative kloop value. It is possible to trigger two events almost at the same time (actually separated by a k-cycle) by giving a zero value to the corresponding delta-time. First element contained in the table should be zero, if the user intends to send a trigger impulse, it should come immediately after the orchestra instrument containing seqtime2 opcode. 1817
seqtime2 is similar to seqtime, the difference is that when ktrig_in contains a non-zero value, current index is reset to kinitndx value. kinitndx can be varied at performance time.
See Also
GEN02, GEN23, seqtime, trigseq, timedseq
Credits
Author: Gabriel Maldonado
1818
setctrl
setctrl Configurable slider controls for realtime user input.
Description
Configurable slider controls for realtime user input. Requires Winsound or TCL/TK. setctrl sets a slider to a specific value, or sets a minimum or maximum range.
Syntax
setctrl inum, ival, itype
Initialization
Note that this opcode is not available on Windows due to the implimentation of pipes on that system inum -- number of the slider to set ival -- value to be sent to the slider itype -- type of value sent to the slider as follows: 1 -- set the current value. Initial value is 0. 2 -- set the minimum value. Default is 0. 3 -- set the maximum value. Default is 127. 4 -- set the label. (New in Csound version 4.09)
Performance
Calling setctrl will create a new slider on the screen. There is no theoretical limit to the number of sliders. Windows and TCL/TK use only integers for slider values, so the values may need rescaling. GUIs usually pass values at a fairly slow rate, so it may be advisable to pass the output of control through port.
Examples
Here is an example of the setctrl opcode. It uses the file setctrl.csd [examples/setctrl.csd].
1819
; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o setctrl.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Display the label "Volume" on Slider #1. setctrl 1, "Volume", 4 ; Set Slider #1's initial value to 20. setctrl 1, 20, 1 ; Capture and display the values for Slider #1. k1 control 1 printk2 k1 ; Play a simple oscillator. ; Use the values from Slider #1 for amplitude. kamp = k1 * 128 a1 oscil kamp, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for thirty seconds. i 1 0 30 e </CsScore> </CsoundSynthesizer>
See Also
control
Credits
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK May 2000 Example written by Kevin Conder. New in Csound version 4.06 1820
setksmps
setksmps Sets the local ksmps value in a user-defined opcode block.
Description
Sets the local ksmps value in a user-defined opcode block.
Syntax
setksmps iksmps
Initialization
iksmps -- sets the local ksmps value. If iksmps is set to zero, the ksmps of the caller instrument or opcode is used (this is the default behavior).
Note
The local ksmps is implemented by splitting up a control period into smaller sub-kperiods and temporarily modifying internal Csound global variables. This also requires converting the rate of k-rate input and output arguments (input variables receive the same value in all sub-kperiods, while outputs are written only in the last one). It also means that you cannot use a local ksmps that is higher than the global ksmps.
Performance
The syntax of a user-defined opcode block is as follows:
opcode name, outtypes, intypes xinarg1 [, xinarg2] [, xinarg3] ... [xinargN] xin [setksmps iksmps] ... the rest of the instrument's code. xout xoutarg1 [, xoutarg2] [, xoutarg3] ... [xoutargN] endop
The new opcode can then be used with the usual syntax: [xinarg1] [, xinarg2] ... [xinargN] name [xoutarg1] [, xoutarg2] ... [xoutargN] [, iksmps]
Examples
See the example for the opcode opcode.
See Also
endop, opcode, xin, xout
Credits
Author: Istvan Varga, 2002; based on code by Matt J. Ingalls New in version 4.22
1822
setscorepos
setscorepos Sets the playback position of the current score performance to a given position.
Description
Sets the playback position of the current score performance to a given position.
Syntax
setscorepos ipos
Initialization
ipos -- playback position in seconds.
Examples
Here is an example of the setscorepos opcode.
See Also
rewindscore,
Credits
Author: Victor Lazzarini 2008 New in Csound version 5.09
1823
sfilist
sfilist Prints a list of all instruments of a previously loaded SoundFont2 (SF2) file.
Description
Prints a list of all instruments of a previously loaded SoundFont2 (SF2) sample file. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
sfilist ifilhandle
Initialization
ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time.
Performance
sfilist prints a list of all instruments of a previously loaded SF2 file to the console. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfinstr, sfinstrm, sfload, sfpassign, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1824
sfinstr
sfinstr Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound.
Description
Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ar1, ar2 sfinstr ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset]
Initialization
ivel -- velocity value inotenum -- MIDI note number value instrnum -- number of an instrument of a SF2 file. ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time. iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will probably crash. sfinstr plays an SF2 instrument instead of a preset (an SF2 instrument is the base of a preset layer). in1825
strnum specifies the instrument number, and the user must be sure that the specified number belongs to an existing instrument of a determinate soundfont bank. Notice that both xamp and xfreq can operate at k-rate as well as a-rate, but both arguments must work at the same rate. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstrm, sfload, sfpassign, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1826
sfinstr3
sfinstr3 Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound with cubic interpolation.
Description
Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ar1, ar2 sfinstr3 ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset]
Initialization
ivel -- velocity value inotenum -- MIDI note number value instrnum -- number of an instrument of a SF2 file. ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time. iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will probably crash.
1827
sfinstr3 is a cubic-interpolation version of sfinstr. Difference of sound-quality is noticeable specially in bass-frequency-transposed samples. In high-freq-transposed samples the difference is less noticeable, and I suggest to use linear-interpolation versions, because they are faster. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr3m, sfinstrm, sfinstr, sfload, sfpassign, sfplay3, sfplay3m, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1828
sfinstr3m
sfinstr3m Plays a SoundFont2 (SF2) sample instrument, generating a mono sound with cubic interpolation.
Description
Plays a SoundFont2 (SF2) sample instrument, generating a mono sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ares sfinstr3m ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset]
Initialization
ivel -- velocity value inotenum -- MIDI note number value instrnum -- number of an instrument of a SF2 file. ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time. iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will probably crash.
1829
sfinstr3m is a cubic-interpolation version of sfinstrm. Difference of sound-quality is noticeable specially in bass-frequency-transposed samples. In high-freq-transposed samples the difference is less noticeable, and I suggest to use linear-interpolation versions, because they are faster. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr3, sfinstr, sfinstrm, sfload, sfpassign, sfplay3, sfplay3m, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1830
sfinstrm
sfinstrm Plays a SoundFont2 (SF2) sample instrument, generating a mono sound.
Description
Plays a SoundFont2 (SF2) sample instrument, generating a mono sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ares sfinstrm ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset]
Initialization
ivel -- velocity value inotenum -- MIDI note number value instrnum -- number of an instrument of a SF2 file. ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time. iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will probably crash. sfinstrm is a mono version of sfinstr. This is the fastest opcode of the SF2 family. 1831
These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr, sfload, sfpassign, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1832
sfload
sfload Loads an entire SoundFont2 (SF2) sample file into memory.
Description
Loads an entire SoundFont2 (SF2) sample file into memory. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix. sfload should be placed in the header section of a Csound orchestra.
Syntax
ir sfload "filename"
Initialization
ir -- output to be used by other SF2 opcodes. For sfload, ir is ifilhandle. filename -- name of the SF2 file, with its complete path. It must be a string typed within doublequotes with / to separate directories (this applies to DOS and Windows as well, where using a backslash will generate an error), or an integer that has been the subject of a strset operation
Performance
sfload loads an entire SF2 file into memory. It returns a file handle to be used by other opcodes. Several instances of sfload can placed in the header section of an orchestra, allowing use of more than one SF2 file in a single orchestra. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard. It should be noted that before version 5.12 a maximum of 10 sound fonts could be loaded, a restriction since relaxed.
See Also
sfilist, sfinstr, sfinstrm, sfpassign, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1833
sflooper
sflooper Plays a SoundFont2 (SF2) sample preset, generating a stereo sound, with user-defined timevarying crossfade looping.
Description
Plays a SoundFont2 (SF2) sample preset, generating a stereo sound, similarly to sfplay. Unlike that opcode, though, it ignores the looping points set in the SF2 file and substitutes them for a user-defined crossfade loop. It is a cross between sfplay and flooper2.
Syntax
ar1, ar2 sflooper ivel, inotenum, kamp, kpitch, ipreindex, kloopstart, kloopend, kcrossfade, ifn \ [, istart, imode, ifenv, iskip]
Initialization
ivel -- velocity value inotenum -- MIDI note number value ipreindex -- preset index istart -- playback start pos in seconds imode -- loop modes: 0 forward, 1 backward, 2 back-and-forth [def: 0] ifenv -- if non-zero, crossfade envelope shape table number. The default, 0, sets the crossfade to linear. iskip -- if 1, the opcode initialisation is skipped, for tied notes, performance continues from the position in the loop where the previous note stopped. The default, 0, does not skip initialisation
Performance
kamp -- amplitude scaling kpitch -- pitch control (transposition ratio); negative values are not allowed. kloopstart -- loop start point (secs). Note that although k-rate, loop parameters such as this are only updated once per loop cycle. If loop start is set beyond the end of the sample, no looping will result. kloopend -- loop end point (secs), updated once per loop cycle. kcrossfade -- crossfade length (secs), updated once per loop cycle and limited to loop length. sflooper plays a preset, generating a stereo sound. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
1834
Credits
Author: Victor Lazzarini August 2007 New in Csound Version 5.07
1835
sfpassign
sfpassign Assigns all presets of a SoundFont2 (SF2) sample file to a sequence of progressive index numbers.
Description
Assigns all presets of a previously loaded SoundFont2 (SF2) sample file to a sequence of progressive index numbers. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix. sfpassign should be placed in the header section of a Csound orchestra.
Syntax
sfpassign istartindex, ifilhandle[, imsgs]
Initialization
istartindex -- starting index preset by the user in bulk preset assignments. ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time. imsgs -- if non-zero messages are suppressed.
Performance
sfpassign assigns all presets of a previously loaded SF2 file to a sequence of progressive index numbers, to be used later with the opcodes sfplay and sfplaym. istartindex specifies the starting index number. Any number of sfpassign instances can be placed in the header section of an orchestra, each one assigning presets belonging to different SF2 files. The user must take care that preset index numbers of different SF2 files do not overlap. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr, sfinstrm, sfload, sfplay, sfplaym, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07 1836
sfplay
sfplay Plays a SoundFont2 (SF2) sample preset, generating a stereo sound.
Description
Plays a SoundFont2 (SF2) sample preset, generating a stereo sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ar1, ar2 sfplay ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
Initialization
ivel -- velocity value inotenum -- MIDI note number value ipreindex -- preset index iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples. ienv (optional) -- enables and determines amplitude envelope. 0 = no envelope, 1 = linear attack and decay, 2 = linear attack, exponential decay (see below). Default = 0.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. Notice that both xamp and xfreq can use k-rate as well as a-rate signals. Both arguments must use variables of the same rate, or sfplay will not work correctly. ipreindex must contain the number of a previously assigned preset, or Csound will crash. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will prob1837
ably crash. The ienv parameter enables and determines the type of amplitude envelope used. The default value is 0, or no envelope. If ienv is set to 1, the attack and decay portions are linear. If set to 2, the attack is linear and the decay is exponential. The release portion of the envelope has not yet been implemented. sfplay plays a preset, generating a stereo sound. ivel does not directly affect the amplitude of the output, but informs sfplay about which sample should be chosen in multi-sample, velocity-split presets. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr, sfinstrm, sfload, sfpassign, sfplay3, sfplaym, sfplay3m, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07 New optional parameter ienv in version 5.09
1838
sfplay3
sfplay3 Plays a SoundFont2 (SF2) sample preset, generating a stereo sound with cubic interpolation.
Description
Plays a SoundFont2 (SF2) sample preset, generating a stereo sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ar1, ar2 sfplay3 ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
Initialization
ivel -- velocity value inotenum -- MIDI note number value ipreindex -- preset index iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples. ienv (optional) -- enables and determines amplitude envelope. 0 = no envelope, 1 = linear attack and decay, 2 = linear attack, exponential decay (see below). Default = 0.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. Notice that both xamp and xfreq can use k-rate as well as a-rate signals. Both arguments must use variables of the same rate, or sfplay3 will not work correctly. ipreindex must contain the number of a previously assigned preset, or Csound will crash. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will prob1839
ably crash. The ienv parameter enables and determines the type of amplitude envelope used. The default value is 0, or no envelope. If ienv is set to 1, the attack and decay portions are linear. If set to 2, the attack is linear and the decay is exponential. The release portion of the envelope has not yet been implemented. sfplay3 plays a preset, generating a stereo sound with cubic interpolation. ivel does not directly affect the amplitude of the output, but informs sfplay3 about which sample should be chosen in multi-sample, velocity-split presets. sfplay3 is a cubic-interpolation version of sfplay. Difference of sound-quality is noticeable specially in bass-frequency-transposed samples. In high-freq-transposed samples the difference is less noticeable, and I suggest to use linear-interpolation versions, because they are faster. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr3, sfinstr3m, sfinstr, sfinstrm, sfload, sfpassign, sfplay3m, sfplaym, sfplay, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07 New optional parameter ienv in version 5.09
1840
sfplay3m
sfplay3m Plays a SoundFont2 (SF2) sample preset, generating a mono sound with cubic interpolation.
Description
Plays a SoundFont2 (SF2) sample preset, generating a mono sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ares sfplay3m ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
Initialization
ivel -- velocity value inotenum -- MIDI note number value ipreindex -- preset index iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples. ienv (optional) -- enables and determines amplitude envelope. 0 = no envelope, 1 = linear attack and decay, 2 = linear attack, exponential decay (see below). Default = 0.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. Notice that both xamp and xfreq can use k-rate as well as a-rate signals. Both arguments must use variables of the same rate, or sfplay3m will not work correctly. ipreindex must contain the number of a previously assigned preset, or Csound will crash. The ioffset parameter allows the sound to start from a sample different than the first one. The user 1841
should make sure that its value is within the length of the specific sound. Otherwise, Csound will probably crash. The ienv parameter enables and determines the type of amplitude envelope used. The default value is 0, or no envelope. If ienv is set to 1, the attack and decay portions are linear. If set to 2, the attack is linear and the decay is exponential. The release portion of the envelope has not yet been implemented. sfplay3m is a mono version of sfplay3. It should be used with mono preset, or with the stereo presets in which stereo output is not required. It is faster than sfplay3. sfplay3m is also a cubic-interpolation version of sfplaym. Difference of sound-quality is noticeable specially in bass-frequency-transposed samples. In high-freq-transposed samples the difference is less noticeable, and I suggest to use linear-interpolation versions, because they are faster. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr3, sfinstr3m, sfinstr, sfinstrm, sfload, sfpassign, sfplay3, sfplaym, sfplay, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07 New optional parameter ienv in version 5.09
1842
sfplaym
sfplaym Plays a SoundFont2 (SF2) sample preset, generating a mono sound.
Description
Plays a SoundFont2 (SF2) sample preset, generating a mono sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
ares sfplaym ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
Initialization
ivel -- velocity value inotenum -- MIDI note number value ipreindex -- preset index iflag (optional) -- flag regarding the behavior of xfreq and inotenum ioffset (optional) -- start playing at offset, in samples. ienv (optional) -- enables and determines amplitude envelope. 0 = no envelope, 1 = linear attack and decay, 2 = linear attack, exponential decay (see below). Default = 0.
Performance
xamp -- amplitude correction factor xfreq -- frequency value or frequency multiplier, depending by iflag. When iflag = 0, xfreq is a multiplier of a the default frequency, assigned by SF2 preset to the inotenum value. When iflag = 1, xfreq is the absolute frequency of the output sound, in Hz. Default is 0. When iflag = 0, inotenum sets the frequency of the output according to the MIDI note number used, and xfreq is used as a multiplier. When iflag = 1, the frequency of the output, is set directly by xfreq. This allows the user to use any kind of micro-tuning based scales. However, this method is designed to work correctly only with presets tuned to the default equal temperament. Attempts to use this method with a preset already having non-standard tunings, or with drum-kit-based presets, could give unexpected results. Adjustment of the amplitude can be done by varying the xamp argument, which acts as a multiplier. Notice that both xamp and xfreq can use k-rate as well as a-rate signals. Both arguments must use variables of the same rate, or sfplay will not work correctly. ipreindex must contain the number of a previously assigned preset, or Csound will crash. The ioffset parameter allows the sound to start from a sample different than the first one. The user should make sure that its value is within the length of the specific sound. Otherwise, Csound will prob1843
ably crash. The ienv parameter enables and determines the type of amplitude envelope used. The default value is 0, or no envelope. If ienv is set to 1, the attack and decay portions are linear. If set to 2, the attack is linear and the decay is exponential. The release portion of the envelope has not yet been implemented. sfplaym is a mono version of sfplay. It should be used with mono preset, or with the stereo presets in which stereo output is not required. It is faster than sfplay. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr, sfinstrm, sfload, sfpassign, sfplay, sfplay3, sfplay3m, sfplist, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07 New optional parameter ienv in version 5.09
1844
sfplist
sfplist Prints a list of all presets of a SoundFont2 (SF2) sample file.
Description
Prints a list of all presets of a previously loaded SoundFont2 (SF2) sample file. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.
Syntax
sfplist ifilhandle
Initialization
ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time.
Performance
sfplist prints a list of all presets of a previously loaded SF2 file to the console. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr, sfinstrm, sfload, sfpassign, sfplay, sfplaym, sfpreset
Credits
Author: Gabriel Maldonado Italy May 2000 New in Csound Version 4.07
1845
sfpreset
sfpreset Assigns an existing preset of a SoundFont2 (SF2) sample file to an index number.
Description
Assigns an existing preset of a previously loaded SoundFont2 (SF2) sample file to an index number. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix. sfpreset should be placed in the header section of a Csound orchestra.
Syntax
ir sfpreset iprog, ibank, ifilhandle, ipreindex
Initialization
ir -- output to be used by other SF2 opcodes. For sfpreset, ir is ipreindex. iprog -- program number of a bank of presets in a SF2 file ibank -- number of a specific bank of a SF2 file ifilhandle -- unique number generated by sfload opcode to be used as an identifier for a SF2 file. Several SF2 files can be loaded and activated at the same time. ipreindex -- preset index
Performance
sfpreset assigns an existing preset of a previously loaded SF2 file to an index number, to be used later with the opcodes sfplay and sfplaym. The user must previously know the program and the bank numbers of the preset in order to fill the corresponding arguments. Any number of sfpreset instances can be placed in the header section of an orchestra, each one assigning a different preset belonging to the same (or different) SF2 file to different index numbers. These opcodes only support the sample structure of SF2 files. The modulator structure of the SoundFont2 format is not supported in Csound. Any modulation or processing to the sample data is left to the Csound user, bypassing all restrictions forced by the SF2 standard.
See Also
sfilist, sfinstr, sfinstrm, sfload, sfpassign, sfplay, sfplaym, sfplist
Credits
Author: Gabriel Maldonado Italy May 2000 1846
1847
shaker
shaker Sounds like the shaking of a maraca or similar gourd instrument.
Description
Audio output is a tone related to the shaking of a maraca or similar gourd instrument. The method is a physically inspired model developed from Perry Cook, but re-coded for Csound.
Syntax
ares shaker kamp, kfreq, kbeans, kdamp, ktimes [, idecay]
Initialization
idecay -- If present indicates for how long at the end of the note the shaker is to be damped. The default value is zero.
Performance
A note is played on a maraca-like instrument, with the arguments as below. kamp -- Amplitude of note. kfreq -- Frequency of note played. kbeans -- The number of beans in the gourd. A value of 8 seems suitable. kdamp -- The damping value of the shaker. Values of 0.98 to 1 seems suitable, with 0.99 a reasonable default. ktimes -- Number of times shaken.
Note
The argument knum was redundant, so it was removed in version 3.49.
Examples
Here is an example of the shaker opcode. It uses the file shaker.csd [examples/shaker.csd].
1848
-odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o shaker.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 instr 1 kfreq line p4, p3, 440 a1 shaker 10000, kfreq, 8, 0.999, 100, 0 out a1 endin </CsInstruments> <CsScore> i 1 0 1 440 i 1 + 1 4000 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47 Fixed the example thanks to a message from Istvan Varga.
1849
sin
sin Performs a sine function.
Description
Returns the sine of x (x in radians).
Syntax
sin(x) (no rate restriction)
Examples
Here is an example of the sin opcode. It uses the file sin.csd [examples/sin.csd].
1850
See Also
cos, cosh, cosinv, sinh, sininv, tan, tanh, taninv
Credits
Example written by Kevin Conder.
1851
sinh
sinh Performs a hyperbolic sine function.
Description
Returns the hyperbolic sine of x (x in radians).
Syntax
sinh(x) (no rate restriction)
Examples
Here is an example of the sinh opcode. It uses the file sinh.csd [examples/sinh.csd].
1852
See Also
cos, cosh, cosinv, sin, sininv, tan, tanh, taninv
Credits
Example written by Kevin Conder. New in version 3.47
1853
sininv
sininv Performs an arcsine function.
Description
Returns the arcsine of x (x in radians).
Syntax
sininv(x) (no rate restriction)
Examples
Here is an example of the sininv opcode. It uses the file sininv.csd [examples/sininv.csd].
1854
See Also
cos, cosh, cosinv, sin, sinh, tan, tanh, taninv
Credits
Author: John ffitch New in version 3.48 Example written by Kevin Conder.
1855
sinsyn
sinsyn Streaming partial track additive synthesis with cubic phase interpolation
Description
The sinsyn opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by the partials opcode). It sinsynthesises the signal using linear amplitude and cubic phase interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls. Sinsyn attempts to preserve the phase of the partials in the original signal and in so doing it does not allow for pitch or timescale modifications of the signal.
Syntax
asig sinsyn fin, kscal, kmaxtracks, ifn
Performance
asig -- output audio rate signal fin -- input pv stream in TRACKS format kscal -- amplitude scaling kmaxtracks -- max number of tracks in sinsynthesis. Limiting this will cause a non-linear filtering effect, by discarding newer and higher-frequency tracks (tracks are ordered by start time and ascending frequency, respectively) ifn -- function table containing one cycle of a sinusoid (sine or cosine)
Examples
Example 560. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking aout sinsyn fst, 1.5, 500, 1 ; resynthesis (up a 5th) out aout
The example above shows partial tracking of an ifd-analysis signal and cubic-phase additive resynthesis.
Credits
Author: Victor Lazzarini June 2005 1856
1857
sleighbells
sleighbells Semi-physical model of a sleighbell sound.
Description
sleighbells is a semi-physical model of a sleighbell sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares sleighbells kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \ [, ifreq1] [, ifreq2]
Initialization
idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 32. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.9994 + (idamp * 0.002) The default damping_amount is 0.9994 which means that the default value of idamp is 0. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 0.03. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional, default=0) -- amount of energy to add back into the system. The value should be in range 0 to 1. ifreq (optional) -- the main resonant frequency. The default value is 2500. ifreq1 (optional) -- the first resonant frequency. The default value is 5300. ifreq2 (optional) -- the second resonant frequency. The default value is 6500.
Performance
kamp -- Amplitude of output. Note: As these instruments are stochastic, this is only an approximation.
Examples
Here is an example of the sleighbells opcode. It uses the file sleighbells.csd [examples/sleighbells.csd].
line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o sleighbells.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 22050 kr = 2205 ksmps = 10 nchnls = 1 ; Instrument #1: An example of sleighbells. instr 1 a1 sleighbells 20000, 0.01 out a1 endin </CsInstruments> <CsScore> i i i i i i i i i i i e 1 1 1 1 1 1 1 1 1 1 1 0.00 0.30 0.60 0.90 1.20 1.50 1.80 2.10 2.40 2.70 3.00 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
</CsScore> </CsoundSynthesizer>
See Also
bamboo, dripwater, guiro, tambourine
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
1859
slider16
slider16 Creates a bank of 16 different MIDI control message numbers.
Description
Creates a bank of 16 different MIDI control message numbers.
Syntax
i1,...,i16 slider16 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum16, imin16, imax16, init16, ifn16 k1,...,k16 slider16 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum16, imin16, imax16, init16, ifn16
Initialization
i1 ... i16 -- output values ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum16 -- MIDI control number (0-127) imin1 ... imin16 -- minimum values for each controller imax1 ... imax16 -- maximum values for each controller init1 ... init16 -- initial value for each controller ifn1 ... ifn16 -- function table for conversion for each controller
Performance
k1 ... k16 -- output values slider16 is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider16 allows a bank of 16 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. In the i-rate version of slider16, there is not an initial value input argument, because the output is gotten 1860
See Also
s16b14, s32b14, slider16f, slider32, slider32f, slider64, slider64f, slider8, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1861
slider16f
slider16f Creates a bank of 16 different MIDI control message numbers, filtered before output.
Description
Creates a bank of 16 different MIDI control message numbers, filtered before output.
Syntax
k1,...,k16 slider16f ichan, ictlnum1, imin1, imax1, init1, ifn1, \ icutoff1,..., ictlnum16, imin16, imax16, init16, ifn16, icutoff16
Initialization
ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum16 -- MIDI control number (0-127) imin1 ... imin16 -- minimum values for each controller imax1 ... imax16 -- maximum values for each controller init1 ... init16 -- initial value for each controller ifn1 ... ifn16 -- function table for conversion for each controller icutoff1 ... icutoff16 -- low-pass filter cutoff frequency for each controller
Performance
k1 ... k16 -- output values slider16f is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider16f allows a bank of 16 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required.
1862
Warning
slider16f does not output the required initial value immediately, but only after some kcycles because the filter slightly delays the output.
See Also
s16b14, s32b14, slider16, slider32, slider32f, slider64, slider64f, slider8, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1863
slider32
slider32 Creates a bank of 32 different MIDI control message numbers.
Description
Creates a bank of 32 different MIDI control message numbers.
Syntax
i1,...,i32 slider32 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum32, imin32, imax32, init32, ifn32 k1,...,k32 slider32 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum32, imin32, imax32, init32, ifn32
Initialization
i1 ... i32 -- output values ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum32 -- MIDI control number (0-127) imin1 ... imin32 -- minimum values for each controller imax1 ... imax32 -- maximum values for each controller init1 ... init32 -- initial value for each controller ifn1 ... ifn32 -- function table for conversion for each controller
Performance
k1 ... k32 -- output values slider32 is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider32 allows a bank of 32 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. In the i-rate version of slider32, there is not an initial value input argument, because the output is gotten 1864
See Also
s16b14, s32b14, slider16, slider16f, slider32f, slider64, slider64f, slider8, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1865
slider32f
slider32f Creates a bank of 32 different MIDI control message numbers, filtered before output.
Description
Creates a bank of 32 different MIDI control message numbers, filtered before output.
Syntax
k1,...,k32 slider32f ichan, ictlnum1, imin1, imax1, init1, ifn1, icutoff1, \ ..., ictlnum32, imin32, imax32, init32, ifn32, icutoff32
Initialization
ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum32 -- MIDI control number (0-127) imin1 ... imin32 -- minimum values for each controller imax1 ... imax32 -- maximum values for each controller init1 ... init32 -- initial value for each controller ifn1 ... ifn32 -- function table for conversion for each controller icutoff1 ... icutoff32 -- low-pass filter cutoff frequency for each controller
Performance
k1 ... k32 -- output values slider32f is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider32f allows a bank of 32 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required.
1866
Warning
slider32f opcodes do not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
s16b14, s32b14, slider16, slider16f, slider32, slider64, slider64f, slider8, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1867
slider64
slider64 Creates a bank of 64 different MIDI control message numbers.
Description
Creates a bank of 64 different MIDI control message numbers.
Syntax
i1,...,i64 slider64 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum64, imin64, imax64, init64, ifn64 k1,...,k64 slider64 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum64, imin64, imax64, init64, ifn64
Initialization
i1 ... i64 -- output values ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum64 -- MIDI control number (0-127) imin1 ... imin64 -- minimum values for each controller imax1 ... imax64 -- maximum values for each controller init1 ... init64 -- initial value for each controller ifn1 ... ifn64 -- function table for conversion for each controller
Performance
k1 ... k64 -- output values slider64 is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider64 allows a bank of 64 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. In the i-rate version of slider64, there is not an initial value input argument, because the output is gotten 1868
See Also
s16b14, s32b14, slider16, slider16f, slider32, slider32f, slider64f slider8, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1869
slider64f
slider64f Creates a bank of 64 different MIDI control message numbers, filtered before output.
Description
Creates a bank of 64 different MIDI control message numbers, filtered before output.
Syntax
k1,...,k64 slider64f ichan, ictlnum1, imin1, imax1, init1, ifn1, \ icutoff1,..., ictlnum64, imin64, imax64, init64, ifn64, icutoff64
Initialization
ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum64 -- MIDI control number (0-127) imin1 ... imin64 -- minimum values for each controller imax1 ... imax64 -- maximum values for each controller init1 ... init64 -- initial value for each controller ifn1 ... ifn64 -- function table for conversion for each controller icutoff1 ... icutoff64 -- low-pass filter cutoff frequency for each controller
Performance
k1 ... k64 -- output values slider64f is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider64f allows a bank of 64 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required.
1870
Warning
slider64f opcodes do not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
s16b14, s32b14, slider16, slider16f, slider32, slider32f, slider64, slider8, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1871
slider8
slider8 Creates a bank of 8 different MIDI control message numbers.
Description
Creates a bank of 8 different MIDI control message numbers.
Syntax
i1,...,i8 slider8 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum8, imin8, imax8, init8, ifn8 k1,...,k8 slider8 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum8, imin8, imax8, init8, ifn8
Initialization
i1 ... i8 -- output values ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum8 -- MIDI control number (0-127) imin1 ... imin8 -- minimum values for each controller imax1 ... imax8 -- maximum values for each controller init1 ... init8 -- initial value for each controller ifn1 ... ifn8 -- function table for conversion for each controller
Performance
k1 ... k8 -- output values slider8 is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider8 allows a bank of 8 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. In the i-rate version of slider8, there is not an initial value input argument, because the output is gotten 1872
See Also
s16b14, s32b14, slider16, slider16f, slider32, slider32f, slider64, slider64f, slider8f
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1873
slider8f
slider8f Creates a bank of 8 different MIDI control message numbers, filtered before output.
Description
Creates a bank of 8 different MIDI control message numbers, filtered before output.
Syntax
k1,...,k8 slider8f ichan, ictlnum1, imin1, imax1, init1, ifn1, icutoff1, \ ..., ictlnum8, imin8, imax8, init8, ifn8, icutoff8
Initialization
ichan -- MIDI channel (1-16) ictlnum1 ... ictlnum8 -- MIDI control number (0-127) imin1 ... imin8 -- minimum values for each controller imax1 ... imax8 -- maximum values for each controller init1 ... init8 -- initial value for each controller ifn1 ... ifn8 -- function table for conversion for each controller icutoff1 ... icutoff8 -- low-pass filter cutoff frequency for each controller
Performance
k1 ... k8 -- output values slider8f is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider8f allows a bank of 8 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required.
1874
Warning
slider8f opcodes do not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
s16b14, s32b14, slider16, slider16f, slider32, slider32f, slider64, slider64f, slider8
Credits
Author: Gabriel Maldonado Italy December 1998 New in Csound version 3.50 Thanks goes to Rasmus Ekman for pointing out the correct MIDI channel and controller number ranges.
1875
slider16table
slider16table Stores a bank of 16 different MIDI control messages to a table.
Description
Stores a bank of 16 different MIDI control messages to a table.
Syntax
kflag slider16table ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, .... , ictlnum16, imin16, imax16, init16, ifn16
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum16 -- MIDI control number (0-127) imin1 ... imin16 -- minimum values for each controller imax1 ... imax16 -- maximum values for each controller init1 ... init16 -- initial value for each controller ifn1 ... ifn16 -- function table for conversion for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider16table is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider16table allows a bank of 16 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. 1876
slider16table is very similar to slider16 and sliderN family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
See Also
slider16tablef, slider32table, slider32tablef, slider64table, slider64tablef, slidertable8, slider8tablef
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1877
slider16tablef
slider16tablef Stores a bank of 16 different MIDI control messages to a table, filtered before output.
Description
Stores a bank of 16 different MIDI control messages to a table, filtered before output.
Syntax
kflag slider16tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum16, imin16, imax16, init16, ifn16, icutoff16
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum16 -- MIDI control number (0-127) imin1 ... imin16 -- minimum values for each controller imax1 ... imax16 -- maximum values for each controller init1 ... init16 -- initial value for each controller ifn1 ... ifn16 -- function table for conversion for each controller icutoff1 ... icutoff16 -- low-pass filter cutoff frequency for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider16tablef is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider16tablef allows a bank of 16 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). 1878
As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. slider16tablef is very similar to slider16f and sliderNf family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
Warning
slider16tablef does not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
slider16table, slider32table, slider32tablef, slider64table, slider64tablef, slider8table, slider8tablef
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1879
slider32table
slider32table Stores a bank of 32 different MIDI control messages to a table.
Description
Creates a bank of 32 different MIDI control messages to a table.
Syntax
kflag slider32table ichan, ioutTable, ioffset, ictlnum1, imin1, \ imax1, init1, ifn1, .... , ictlnum32, imin32, imax32, init32, ifn32
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum32 -- MIDI control number (0-127) imin1 ... imin32 -- minimum values for each controller imax1 ... imax32 -- maximum values for each controller init1 ... init32 -- initial value for each controller ifn1 ... ifn32 -- function table for conversion for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider32table is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider32table allows a bank of 32 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. 1880
slider32table is very similar to slider32 and sliderN family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
See Also
slider16table, slider16tablef, slider32tablef, slider64table, slider64tablef, slider8table, slider8tablef
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1881
slider32tablef
slider32tablef Stores a bank of 32 different MIDI control messages to a table, filtered before output.
Description
Stores a bank of 32 different MIDI control messages to a table, filtered before output.
Syntax
kflag slider32tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum32, imin32, imax32, init32, ifn32, icutoff32
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum32 -- MIDI control number (0-127) imin1 ... imin32 -- minimum values for each controller imax1 ... imax32 -- maximum values for each controller init1 ... init32 -- initial value for each controller ifn1 ... ifn32 -- function table for conversion for each controller icutoff1 ... icutoff32 -- low-pass filter cutoff frequency for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider32tablef is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider32tablef allows a bank of 32 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). 1882
As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. slider32tablef is very similar to slider32f and sliderNf family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
Warning
slider32tablef opcodes do not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
slider16, slider16f, slider32, slider64, slider64f, slider8, slider8f
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1883
slider64table
slider64table Stores a bank of 64 different MIDI control messages to a table.
Description
Creates a bank of 64 different MIDI control messages to a table.
Syntax
kflag slider64table ichan, ioutTable, ioffset, ictlnum1, imin1, \ imax1, init1, ifn1, .... , ictlnum64, imin64, imax64, init64, ifn64
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum64 -- MIDI control number (0-127) imin1 ... imin64 -- minimum values for each controller imax1 ... imax64 -- maximum values for each controller init1 ... init64 -- initial value for each controller ifn1 ... ifn64 -- function table for conversion for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider64table is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider64table allows a bank of 64 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. 1884
slider64table is very similar to slider64 and sliderN family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
See Also
slider16table, slider16tablef, slider32table, slider32tablef, slider64tablef slider8table, slider8tablef
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1885
slider64tablef
slider64tablef Stores a bank of 64 different MIDI control messages to a table, filtered before output.
Description
Stores a bank of 64 different MIDI MIDI control messages to a table, filtered before output.
Syntax
kflag slider64tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum64, imin64, imax64, init64, ifn64, icutoff64
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum64 -- MIDI control number (0-127) imin1 ... imin64 -- minimum values for each controller imax1 ... imax64 -- maximum values for each controller init1 ... init64 -- initial value for each controller ifn1 ... ifn64 -- function table for conversion for each controller icutoff1 ... icutoff64 -- low-pass filter cutoff frequency for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider64tablef is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider64tablef allows a bank of 64 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). 1886
As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. slider64tablef is very similar to slider64f and sliderN family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
Warning
slider64tablef opcodes do not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
slider16table, slider16tablef, slider32table, slider32tablef, slider64table, slider8table, slider8tablef
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1887
slider8table
slider8table Stores a bank of 8 different MIDI control messages to a table.
Description
Stores a bank of 8 different MIDI control messages to a table.
Syntax
kflag slider8table ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1,..., ictlnum8, imin8, imax8, init8, ifn8
Initialization
i1 ... i8 -- output values ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum8 -- MIDI control number (0-127) imin1 ... imin8 -- minimum values for each controller imax1 ... imax8 -- maximum values for each controller init1 ... init8 -- initial value for each controller ifn1 ... ifn8 -- function table for conversion for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider8table handles a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional non-interpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider8table allows a bank of 8 different MIDI control message numbers. As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using 1888
the separate ones (ctrl7 and tonek) when more controllers are required. slider8table is very similar to slider8 and sliderN family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
See Also
slider16table, slider16tablef, slider8tabletablef slider32table, slider32tablef, slider64table, slider64tablef,
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1889
slider8tablef
slider8tablef Stores a bank of 8 different MIDI control messages to a table, filtered before output.
Description
Stores a bank of 8 different MIDI control messages to a table, filtered before output.
Syntax
kflag slider8tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum8, imin8, imax8, init8, ifn8, icutoff8
Initialization
ichan -- MIDI channel (1-16) ioutTable -- number of the table that will contain the output ioffset -- output table offset. A zero means that the output of the first slider will affect the first table element. A 10 means that the output of the first slider will affect the 11th table element. ictlnum1 ... ictlnum8 -- MIDI control number (0-127) imin1 ... imin8 -- minimum values for each controller imax1 ... imax8 -- maximum values for each controller init1 ... init8 -- initial value for each controller ifn1 ... ifn8 -- function table for conversion for each controller icutoff1 ... icutoff8 -- low-pass filter cutoff frequency for each controller
Performance
kflag -- a flag that informs if any control-change message in the bank has been received. In this case kflag is set to 1. Otherwise is set to zero. slider8tablef is a bank of MIDI controllers, useful when using MIDI mixer such as Kawai MM-16 or others for changing whatever sound parameter in real-time. The raw MIDI control messages at the input port are converted to agree with iminN and imaxN, and an initial value can be set. Also, an optional noninterpolated function table with a custom translation curve is allowed, useful for enabling exponential response curves. When no function table translation is required, set the ifnN value to 0, else set ifnN to a valid function table number. When table translation is enabled (i.e. setting ifnN value to a non-zero number referring to an already allocated function table), initN value should be set equal to iminN or imaxN value, else the initial output value will not be the same as specified in initN argument. slider8tablef allows a bank of 8 different MIDI control message numbers. It filters the signal before output. This eliminates discontinuities due to the low resolution of the MIDI (7 bit). The cutoff frequency can be set separately for each controller (suggested range: .1 to 5 Hz). 1890
As the input and output arguments are many, you can split the line using '\' (backslash) character (new in 3.47 version) to improve the readability. Using these opcodes is considerably more efficient than using the separate ones (ctrl7 and tonek) when more controllers are required. slider8tablef is very similar to slider8f and sliderNf family of opcodes (see their manual for more information). The actual difference is that the output is not stored to k-rate variables, but to a table, denoted by the ioutTable argument. It is possible to define a starting index in order to use the same table for more than one slider bank (or other purposes). It is possible to use this opcode together with FLslidBnk2Setk and FLslidBnk2, so you can synchronize the position of the MIDI values to the position of the FLTK valuator widgets of FLslidBnk2. Notice that you have to specify the same min/max values as well the linear/exponential responses in both sliderNtable(f) and FLslidBnk2. The exception is when using table-indexed response instead of a lin/exp response. In this case, in order to achieve a useful result, the table-indexed response and actual min/max values must be set only in FLslidBnk2, whereas, in sliderNtable(f), you have to set a linear response and a minimum of zero and a maximum of one in all sliders.
Warning
slider8tablef opcodes do not output the required initial value immediately, but only after some k-cycles because the filter slightly delays the output.
See Also
slider16table, slider16tablef, slider32table, slider32tablef, slider64table, slider64tablef, slider8table
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1891
sliderKawai
sliderKawai Creates a bank of 16 different MIDI control message numbers from a KAWAI MM-16 midi mixer.
Description
Creates a bank of 16 different MIDI control message numbers from a KAWAI MM-16 midi mixer.
Syntax
k1, k2, ...., k16 sliderKawai imin1, imax1, init1, ifn1, \ imin2, imax2, init2, ifn2, ..., imin16, imax16, init16, ifn16
Initialization
imin1 ... imin16 -- minimum values for each controller imax1 ... imax16 -- maximum values for each controller init1 ... init16 -- initial value for each controller ifn1 ... ifn16 -- function table for conversion for each controller
Performance
k1 ... k16 -- output values The opcode sliderKawai is equivalent to slider16, but it has the controller and channel numbers (ichan and ictlnum) hard-coded to make for quick compatiblity with the KAWAI MM-16 midi mixer. This device doesn't allow changing the midi message associated to each slider. It can only output on control 7 for each fader on a separate midi channel. This opcode is a quick way of assigning the mixer's 16 faders to k-rate variables in csound.
See Also
slider16, slider16f, slider32, slider32f, slider64, slider64f, slider8, slider8f
Credits
Author: Gabriel Maldonado New in Csound version 5.06
1892
sndload
sndload Loads a sound file into memory for use by loscilx
Description
sndload loads a sound file into memory for use by loscilx.
Syntax
sndload Sfname[, ifmt[, ichns[, isr[, ibas[, iamp[, istrt [, ilpmod[, ilps[, ilpe]]]]]]]]] \
Initialization
Sfname - file name as a string constant or variable, string p-field, or a number that is used either as an index to strings set with strset, or, if that is not available, a fine name in the format soundin.n is used. If the file name does not include a full path, the file is searched in the current directory first, then those specified by SSDIR (if defined), and finally SFDIR. If the same file was already loaded previously, it will not be read again, but the parameters ibas, iamp, istrt, ilpmod, ilps, and ilpe are still updated. ifmt (optional, defaults to zero) - default sample format for raw (headerless) sound files; if the file has a header, this is ignored. Can be one of the following: -1: do not allow headerless files (fail with an init error) 0: use the same format as the one specified on the command line 1: 8 bit signed integers 2: a-law 3: u-law 4: 16 bit signed integers 5: 32 bit signed integers 6: 32 bit floats 7: 8 bit unsigned integers 8: 24 bit signed integers 9: 64 bit floats ichns (optional, defaults to zero) - default number of channels for raw (headerless) sound files; if the file has a header, this is ignored. Zero or negative values are interpreted as 1 channel. isr (optional, defaults to zero) - default sample rate for raw (headerless) sound files; if the file has a header, this is ignored. Zero or negative values are interpreted as the orchestra sample rate (sr). ibas (optional, defaults to zero) - base frequency in Hz. If positive, overrides the value specified in the sound file header; otherwise, the value from the header is used if present, and 1.0 if the file does not include such information. iamp (optional, defaults to zero) - amplitude scale. If non-zero, overrides the value specified in the sound file header (note: negative values are allowed, and will invert the sound output); otherwise, the value from the header is used if present, and 1.0 if the file does not include such information. istrt (optional, defaults to -1) - starting position in sample frames, can be fractional. If non-negative, overrides the value specified in the sound file header; otherwise, the value from the header is used if present, and 0 if the file does not include such information. Note: even if this parameter is specified, the whole file is still read into memory. 1893
ilpmod (optional, defaults to -1) - loop mode, can be one of the following: any negative value: use the loop information specified in the sound file header, ignoring ilps and ilpe 0: no looping (ilps and ilpe are ignored) 1: forward looping (wrap around loop end if it is crossed in forward direction, and wrap around loop start if it is crossed in backward direction) 2: backward looping (change direction at loop end if it is crossed in forward direction, and wrap around loop start if it is crossed in backward direction) 3: forward-backward looping (change direction at both loop points if they are crossed as described above) ilps (optional, defaults to 0) - loop start in sample frames (fractional values are allowed), or loop end if ilps is greater than ilpe. Ignored unless ilpmod is set to 1, 2, or 3. If the loop points are equal, the whole sample is looped. ilpe (optional, defaults to 0) - loop end in sample frames (fractional values are allowed), or loop start if ilps is greater than ilpe. Ignored unless ilpmod is set to 1, 2, or 3. If the loop points are equal, the whole sample is looped.
Credits
Written by Istvan Varga. 2006 New in Csound 5.03
1894
sndloop
sndloop A sound looper with pitch control.
Description
This opcode records input audio and plays it back in a loop with user-defined duration and crossfade time. It also allows the pitch of the loop to be controlled, including reversed playback.
Syntax
asig, krec sndloop ain, kpitch, ktrig, idur, ifad
Initialization
idur -- loop duration in seconds ifad -- crossfade duration in seconds
Performance
asig -- output sig krec -- 'rec on' signal, 1 when recording, 0 otherwise kpitch -- pitch control (transposition ratio); negative values play the loop back in reverse ktrig -- trigger signal: when 0, processing is bypassed. When switched on (ktrig >= 1), the opcode starts recording until the loop memory is full. It then plays the looped sound until it is switched off again (ktrig = 0). Another recording can start again with ktrig >= 1.
Examples
Example 562. Example
asig in ktrig line aout,krec sndloop printk out ; ; ; ; get the signal in trigger signal rec starts at 1 sec, for 4 secs 0.05 crossfade prints the recording signal
The example above shows the basic operation of sndloop. Pitch can be controlled at the k-rate, recording is started as soon as the trigger value is >= 1. Recording can be restarted by making the trigger 0 and then 1 again.
Credits
1895
1896
sndwarp
sndwarp Reads a mono sound sample from a table and applies time-stretching and/or pitch modification.
Description
sndwarp reads sound samples from a table and applies time-stretching and/or pitch modification. Time and frequency modification are independent from one another. For example, a sound can be stretched in time while raising the pitch! The window size and overlap arguments are important to the result and should be experimented with. In general they should be as small as possible. For example, start with iwsize=sr/10 and ioverlap=15. Try irandw=iwsize*0.2. If you can get away with less overlaps, the program will be faster. But too few may cause an audible flutter in the amplitude. The algorithm reacts differently depending upon the input sound and there are no fixed rules for the best use in all circumstances. But with proper tuning, excellent results can be achieved.
Syntax
ares [, ac] sndwarp xamp, xtimewarp, xresample, ifn1, ibeg, iwsize, \ irandw, ioverlap, ifn2, itimemode
Initialization
ifn1 -- the number of the table holding the sound samples which will be subjected to the sndwarp processing. GEN01 is the appropriate function generator to use to store the sound samples from a preexisting soundfile. ibeg -- the time in seconds to begin reading in the table (or soundfile). When itimemode is non- zero, the value of xtimewarp is offset by ibeg. iwsize -- the window size in samples used in the time scaling algorithm. irandw -- the bandwidth of a random number generator. The random numbers will be added to iwsize. ioverlap -- determines the density of overlapping windows. ifn2 -- a function used to shape the window. It is usually used to create a ramp of some kind from zero at the beginning and back down to zero at the end of each window. Try using a half sine (i.e.: f1 0 16384 9 .5 1 0) which works quite well. Other shapes can also be used.
Performance
ares -- the single channel of output from the sndwarp unit generator. sndwarp assumes that the function table holding the sampled signal is a mono one. This simply means that sndwarp will index the table by single-sample frame increments. The user must be aware then that if a stereo signal is used with sndwarp, time and pitch will be altered accordingly. ac (optional) -- a single-layer (no overlaps), unwindowed versions of the time and/or pitch altered signal. They are supplied in order to be able to balance the amplitude of the signal output, which typically contains many overlapping and windowed versions of the signal, with a clean version of the time-scaled and pitch-shifted signal. The sndwarp process can cause noticeable changes in amplitude, (up and 1897
down), due to a time differential between the overlaps when time-shifting is being done. When used with a balance unit, ac can greatly enhance the quality of sound. xamp -- the value by which to scale the amplitude (see note on the use of this when using ac). xtimewarp -- determines how the input signal will be stretched or shrunk in time. There are two ways to use this argument depending upon the value given for itimemode. When the value of itimemode is 0, xtimewarp will scale the time of the sound. For example, a value of 2 will stretch the sound by 2 times. When itimemode is any non-zero value then xtimewarp is used as a time pointer in a similar way in which the time pointer works in lpread and pvoc. An example below illustrates this. In both cases, the pitch will not be altered by this process. Pitch shifting is done independently using xresample. xresample -- the factor by which to change the pitch of the sound. For example, a value of 2 will produce a sound one octave higher than the original. The timing of the sound, however, will not be altered.
Examples
Here is an example of the sndwarp opcode. It uses the file sndwarp.csd [examples/sndwarp.csd], and mary.wav [examples/mary.wav].
1898
out a1 endin </CsInstruments> <CsScore> ; f ; f ; i ; i e Table #1: an audio file. 1 0 262144 1 "mary.wav" 0 0 0 Table #2: half of a sine wave. 2 0 16384 9 0.5 1 0 Play Instrument #1 for 3.5 seconds. 1 0 3.5 Play Instrument #2 for 7 seconds (time-stretched). 2 3.5 10.5
</CsScore> </CsoundSynthesizer>
The below example shows a slowing down or stretching of the sound stored in the stored table (ifn1). Over the duration of the note, the stretching will grow from no change from the original to a sound which is ten times slower than the original. At the same time the overall pitch will move upward over the duration by an octave.
iwindfun = 1 isampfun = 2 ibeg = 0 iwindsize = 2000 iwindrand = 400 ioverlap = 10 awarp line 1, p3, 1 aresamp line 1, p3, 2 kenv line 1, p3, .1 asig sndwarp kenv, awarp, aresamp, isampfun, ibeg, iwindsize, iwindrand, ioverlap, iwindfun, 0
Now, here's an example using xtimewarp as a time pointer and using stereo:
= 1 line 0, p3, 10 sndwarpst kenv, atime, aresamp, sampfun, ibeg, iwindsize, iwindrand, ioverlap, \ iwindfun, itimemode
In the above, atime advances the time pointer used in the sndwarpst from 0 to 10 over the duration of the note. If p3 is 20 then the sound will be two times slower than the original. Of course you can use a more complex function than just a single straight line to control the time factor. Now the same as above but using the balance function with the optional outputs:
asig,acmp abal
sndwarp 1, awarp, aresamp, isampfun, ibeg, iwindsize, iwindrand, ioverlap, iwindfun, itimem balance asig, acmp
asig1,asig2,acmp1,acmp2 sndwarpst 1, atime, aresamp, sampfun, ibeg, iwindsize, iwindrand, ioverlap, \ iwindfun, itimemode abal1 balance asig1, acmp1 abal2 balance asig2, acmp2
In the above two examples notice the use of the balance unit. The output of balance can then be scaled, 1899
enveloped, sent to an out or outs, and so on. Notice that the amplitude arguments to sndwarp and sndwarpst are 1 in these examples. By scaling the signal after the sndwarp process, abal, abal1, and abal2 should contain signals that have nearly the same amplitude as the original input signal to the sndwarp process. This makes it much easier to predict the levels and avoid samples out of range or sample values that are too small.
More Advice
Only use the stereo version when you really need to be processing a stereo file. It is somewhat slower than the mono version and if you use the balance function it is slower again. There is nothing wrong with using a mono sndwarp in a stereo orchestra and sending the result to one or both channels of the stereo output!
See Also
sndwarpst
Credits
Author: Richard Karpen Seattle, WA USA 1997 Example written by Kevin Conder.
1900
sndwarpst
sndwarpst Reads a stereo sound sample from a table and applies time-stretching and/or pitch modification.
Description
sndwarpst reads stereo sound samples from a table and applies time-stretching and/or pitch modification. Time and frequency modification are independent from one another. For example, a sound can be stretched in time while raising the pitch! The window size and overlap arguments are important to the result and should be experimented with. In general they should be as small as possible. For example, start with iwsize=sr/10 and ioverlap=15. Try irandw=iwsize*.2. If you can get away with less overlaps, the program will be faster. But too few may cause an audible flutter in the amplitude. The algorithm reacts differently depending upon the input sound and there are no fixed rules for the best use in all circumstances. But with proper tuning, excellent results can be achieved.
Syntax
ar1, ar2 [,ac1] [, ac2] sndwarpst xamp, xtimewarp, xresample, ifn1, \ ibeg, iwsize, irandw, ioverlap, ifn2, itimemode
Initialization
ifn1 -- the number of the table holding the sound samples which will be subjected to the sndwarpst processing. GEN01 is the appropriate function generator to use to store the sound samples from a preexisting soundfile. ibeg -- the time in seconds to begin reading in the table (or soundfile). When itimemode is non-zero, the value of xtimewarp is offset by ibeg. iwsize -- the window size in samples used in the time scaling algorithm. irandw -- the bandwidth of a random number generator. The random numbers will be added to iwsize. ioverlap -- determines the density of overlapping windows. ifn2 -- a function used to shape the window. It is usually used to create a ramp of some kind from zero at the beginning and back down to zero at the end of each window. Try using a half a sine (i.e.: f1 0 16384 9 .5 1 0) which works quite well. Other shapes can also be used.
Performance
ar1, ar2 -- ar1 and ar2 are the stereo (left and right) outputs from sndwarpst. sndwarpst assumes that the function table holding the sampled signal is a stereo one. sndwarpst will index the table by a two-sample frame increment. The user must be aware then that if a mono signal is used with sndwarpst, time and pitch will be altered accordingly. ac1, ac2 -- ac1 and ac2 are single-layer (no overlaps), unwindowed versions of the time and/or pitch altered signal. They are supplied in order to be able to balance the amplitude of the signal output, which typically contains many overlapping and windowed versions of the signal, with a clean version of the time-scaled and pitch-shifted signal. The sndwarpst process can cause noticeable changes in amplitude, 1901
(up and down), due to a time differential between the overlaps when time-shifting is being done. When used with a balance unit, ac1 and ac2 can greatly enhance the quality of sound. They are optional, but note that they must both be present in the syntax (use both or neither). An example of how to use this is given below. xamp -- the value by which to scale the amplitude (see note on the use of this when using ac1 and ac2). xtimewarp -- determines how the input signal will be stretched or shrunk in time. There are two ways to use this argument depending upon the value given for itimemode. When the value of itimemode is 0, xtimewarp will scale the time of the sound. For example, a value of 2 will stretch the sound by 2 times. When itimemode is any non-zero value then xtimewarp is used as a time pointer in a similar way in which the time pointer works in lpread and pvoc. An example below illustrates this. In both cases, the pitch will not be altered by this process. Pitch shifting is done independently using xresample. xresample -- the factor by which to change the pitch of the sound. For example, a value of 2 will produce a sound one octave higher than the original. The timing of the sound, however, will not be altered.
Examples
The below example shows a slowing down or stretching of the sound stored in the stored table (ifn1). Over the duration of the note, the stretching will grow from no change from the original to a sound which is ten times slower than the original. At the same time the overall pitch will move upward over the duration by an octave.
iwindfun = 1 isampfun = 2 ibeg = 0 iwindsize = 2000 iwindrand = 400 ioverlap = 10 awarp line 1, p3, 1 aresamp line 1, p3, 2 kenv line 1, p3, .1 asig sndwarp kenv, awarp, aresamp, isampfun, ibeg, iwindsize, iwindrand, ioverlap, iwindfun, 0
Now, here's an example using xtimewarp as a time pointer and using stereo:
= 1 line 0, p3, 10 sndwarpst kenv, atime, aresamp, sampfun, ibeg, iwindsize, iwindrand, ioverlap, \ iwindfun, itimemode
In the above, atime advances the time pointer used in the sndwarpst from 0 to 10 over the duration of the note. If p3 is 20 then the sound will be two times slower than the original. Of course you can use a more complex function than just a single straight line to control the time factor. Now the same as above but using the balance function with the optional outputs:
asig,acmp abal
sndwarp 1, awarp, aresamp, isampfun, ibeg, iwindsize, iwindrand, ioverlap, iwindfun, itime balance asig, acmp
asig1,asig2,acmp1,acmp2 sndwarpst 1, atime, aresamp, sampfun, ibeg, iwindsize, iwindrand, ioverlap, \ iwindfun, itimemode abal1 balance asig1, acmp1 abal2 balance asig2, acmp2
1902
In the above two examples notice the use of the balance unit. The output of balance can then be scaled, enveloped, sent to an out or outs, and so on. Notice that the amplitude arguments to sndwarp and sndwarpst are 1 in these examples. By scaling the signal after the sndwarp process, abal, abal1, and abal2 should contain signals that have nearly the same amplitude as the original input signal to the sndwarp process. This makes it much easier to predict the levels and avoid samples out of range or sample values that are too small.
More Advice
Only use the stereo version when you really need to be processing a stereo file. It is somewhat slower than the mono version and if you use the balance function it is slower again. There is nothing wrong with using a mono sndwarp in a stereo orchestra and sending the result to one or both channels of the stereo output!
See Also
sndwarp
Credits
Author: Richard Karpen Seattle, WA USA 1997
1903
socksend
socksend Sends data to other processes using the low-level UDP or TCP protocols
Description
Transmits data directly using the UDP (socksend and socksends) or TCP (stsend) protocol onto a network. The data is not subject to any encoding or special routing. The socksends opcode send a stereo signal interleaved.
Syntax
socksend asig, Sipaddr, iport, ilength socksends asigl, asigr, Sipaddr, iport, ilength stsend asig, Sipaddr, iport
Initialization
Sipaddr -- a string that is the IP address of the receiver in standard 4-octet dotted form. iport -- the number of the port that is used for the communication. ilength -- the length of the individual packets in UDP transmission. This number must be sufficiently small to fit a single MTU, which is set to the save value of 1456. In UDP transmissions the receiver needs to know this value
Performance
asig, asigl, asigr -- audio data to be transmitted.
Example
The example shows a simple sine wave being sent just once to a computer called "172.16.0.255", on port 7777 using UDP. Note that .255 is often used for broadcasting.
Credits
1904
1905
sockrecv
sockrecv Receives data from other processes using the low-level UDP or TCP protocols
Description
Receives directly using the UDP (sockrecv and sockrecvs) or TCP (strecv) protocol onto a network. The data is not subject to any encoding or special routing. The sockrecvs opcode receives a stereo signal interleaved.
Syntax
asig sockrecv iport, ilength asigl, asigr sockrecvs iport, ilength asig strecv Sipaddr, iport
Initialization
Sipaddr -- a string that is the IP address of the sender in standard 4-octet dotted form. iport -- the number of the port that is used for the communication. ilength -- the length of the individual packets in UDP transmission. This number must be sufficiently small to fit a single MTU, which is set to the save value of 1456. In UDP transmissions the sender and receiver needs agree on this value
Performance
asig, asigl, asigr -- audio data to be received.
Example
The example shows a mono signal being received on port 7777 using UDP.
7777, 200 a1
Credits
Author: John ffitch 2006 1906
1907
soundin
soundin Reads audio data from an external device or stream.
Description
Reads audio data from an external device or stream. Up to 24 channels may be read.
Syntax
ar1[, ar2[, ar3[, ... a24]]] soundin ifilcod [, iskptim] [, iformat] \ [, iskipinit] [, ibufsize]
Initialization
ifilcod -- integer or character-string denoting the source soundfile name. An integer denotes the file soundin.filcod; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is sought first in the current directory, then in that given by the environment variable SSDIR (if defined) then by SFDIR. See also GEN01. iskptim (optional, default=0) -- time in seconds of input sound to be skipped. The default value is 0. In csound 5.00 and later, this may be negative to add a delay instead of skipping time. iformat (optional, default=0) -- specifies the audio data file format: 1 = 8-bit signed char (high-order 8 bits of a 16-bit integer) 2 = 8-bit A-law bytes 3 = 8-bit U-law bytes 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats 7 = 8-bit unsigned int (not available in Csound versions older than 5.00) 8 = 24-bit int (not available in Csound versions older than 5.00) 9 = 64-bit doubles (not available in Csound versions older than 5.00) iskipinit -- switches off all initialisation if non zero (default=0). This was introduced in 4_23f13 and csound5. ibufsize -- buffer size in mono samples (not sample frames). Not available in Csound versions older than 5.00. The default buffer size is 2048. If iformat = 0 it is taken from the soundfile header, and if no header from the Csound -o command-line flag. The default value is 0.
1908
Performance
soundin is functionally an audio generator that derives its signal from a pre-existing file. The number of channels read in is controlled by the number of result cells, a1, a2, etc., which must match that of the input file. A soundin opcode opens this file whenever the host instrument is initialized, then closes it again each time the instrument is turned off. There can be any number of soundin opcodes within a single instrument or orchestra. Two or more of them can read simultaneously from the same external file.
Examples
Here is an example of the soundin opcode. It uses the file soundin.csd [examples/soundin.csd], beats.wav [examples/beats.wav].
1909
e </CsScore> </CsoundSynthesizer>
See Also
diskin, in, inh, ino, inq, ins
Credits
Authors: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997 Example written by Kevin Conder. Warning to Windows users added by Kevin Conder, April 2002
1910
soundout
soundout Deprecated. Writes audio output to a disk file.
Description
Note
The usage of soundout is discouraged. Please use fout instead. Writes audio output to a disk file.
Syntax
soundout asig1, ifilcod [, iformat]
Initialization
ifilcod -- integer or character-string denoting the destination soundfile name. An integer denotes the file soundin.filcod; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is sought first in the current directory, then in that given by the environment variable SSDIR (if defined) then by SFDIR. See also GEN01. iformat (optional, default=0) -- specifies the audio data file format: 1 = 8-bit signed char (high-order 8 bits of a 16-bit integer) 2 = 8-bit A-law bytes 3 = 8-bit U-law bytes 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats If iformat = 0 it is taken from the soundfile header, and if no header from the Csound -o command-line flag. The default value is 0.
Performance
soundout writes audio output to a disk file.
Note
Use of fout is recommended instead of soundout
1911
See Also
fout, out, outh, outo, outq, outq1, outq2, outq3, outq4, outs, outs1, outs2 soundouts
Credits
Author: Barry L. Vercoe, Matt Ingalls/Mike Berry MIT, Mills College 1993-1997
1912
soundouts
soundouts Deprecated. Writes audio output to a disk file.
Description
Note
The usage of soundouts is discouraged. Please use fout instead. Writes audio output to a disk file.
Syntax
soundouts asigl, asigr, ifilcod [, iformat]
Initialization
ifilcod -- integer or character-string denoting the destination soundfile name. An integer denotes the file soundout.ifilcod; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is written relative to the directory given by the SFDIR environment variable if defined, or the current directory. See also GEN01. iformat (optional, default=0) -- specifies the audio data file format: 1 = 8-bit signed char (high-order 8 bits of a 16-bit integer) 4 = 16-bit short integers 5 = 32-bit long integers 6 = 32-bit floats If iformat = 0 it is taken from the Csound -o command-line flag. The default value is 0.
Performance
soundouts writes stereo audio output to a disk file in raw (headerless) format without 0dBFS scaling. The expected range of the audio signals depends on the selected sample format.
Note
Use of fout is recommended instead of soundouts
See Also
out, outh, outo, outq, outq1, outq2, outq3, outq4, outs, outs1, outs2 soundout
1913
Credits
Author: Istvan Varga
1914
space
space Distributes an input signal among 4 channels using cartesian coordinates.
Description
space takes an input signal and distributes it among 4 channels using Cartesian xy coordinates to calculate the balance of the outputs. The xy coordinates can be defined in a separate text file and accessed through a Function statement in the score using Gen28, or they can be specified using the optional kx, ky arguments. The advantages to the former are: 1. A graphic user interface can be used to draw and edit the trajectory through the Cartesian plane 2. The file format is in the form time1 X1 Y1 time2 X2 Y2 time3 X3 Y3 allowing the user to define a time-tagged trajectory space then allows the user to specify a time pointer (much as is used for pvoc, lpread and some other units) to have detailed control over the final speed of movement.
Syntax
a1, a2, a3, a4 space asig, ifn, ktime, kreverbsend, kx, ky
Initialization
ifn -- number of the stored function created using Gen28. This function generator reads a text file which contains sets of three values representing the xy coordinates and a time-tag for when the signal should be placed at that location. The file should look like: 0 -1 1 1 2 4 2.1 -4 3 10 5 -40 1 1 4 -4 -10 0
If that file were named move then the Gen28 call in the score would like: f1 0 0 28 "move"
Gen28 takes 0 as the size and automatically allocates memory. It creates values to 10 milliseconds of resolution. So in this case there will be 500 values created by interpolating X1 to X2 to X3 and so on, and Y1 to Y2 to Y3 and so on, over the appropriate number of values that are stored in the function table. In the above example, the sound will begin in the left front, over 1 second it will move to the right front, over another second it move further into the distance but still in the right front, then in just 1/10th of a second it moves to the left rear, a bit distant. Finally over the last .9 seconds the sound will move to 1915
the right rear, moderately distant, and it comes to rest between the two left channels (due west!), quite distant. Since the values in the table are accessed through the use of a time-pointer in the space unit, the actual timing can be made to follow the file's timing exactly or it can be made to go faster or slower through the same trajectory. If you have access to the GUI that allows one to draw and edit the files, there is no need to create the text files manually. But as long as the file is ASCII and in the format shown above, it doesn't matter how it is made!
Important
If ifn is 0, then space will take its values for the xy coordinates from kx and ky.
Performance
The configuration of the xy coordinates in space places the signal in the following way: a1 is -1, 1 a2 is 1, 1 a3 is -1, -1 a4 is 1, -1 This assumes a loudspeaker set up as a1 is left front, a2 is right front, a3 is left back, a4 is right back. Values greater than 1 will result in sounds being attenuated, as if in the distance. space considers the speakers to be at a distance of 1; smaller values of xy can be used, but space will not amplify the signal in this case. It will, however balance the signal so that it can sound as if it were within the 4 speaker space. x=0, y=1, will place the signal equally balanced between left and right front channels, x=y=0 will place the signal equally in all 4 channels, and so on. Although there must be 4 output signals from space, it can be used in a 2 channel orchestra. If the xy's are kept so that y>=1, it should work well to do panning and fixed localization in a stereo field. asig -- input audio signal. ktime -- index into the table containing the xy coordinates. If used like: ktime line 0, 5, 5 a1, a2, a3, a4 space asig, 1, ktime, ...
with the file move described above, the speed of the signal's movement will be exactly as described in that file. However: ktime line 0, 10, 5
the signal will move at half the speed specified. Or in the case of: ktime line 5, 15, 0
1916
the signal will move in the reverse direction as specified and 3 times slower! Finally: ktime line 2, 10, 3
will cause the signal to move only from the place specified in line 3 of the text file to the place specified in line 5 of the text file, and it will take 10 seconds to do it. kreverbsend -- the percentage of the direct signal that will be factored along with the distance as derived from the xy coordinates to calculate signal amounts that can be sent to reverb units such as reverb, or reverb2. kx, ky -- when ifn is 0, space and spdist will use these values as the xy coordinates to localize the signal.
Examples
instr 1 asig ;some audio signal ktime line 0, p3, p10 a1, a2, a3, a4 space asig,1, ktime, .1 ar1, ar2, ar3, ar4 spsend ga1 ga2 ga3 ga4 endin instr 99 ; reverb instrument a1 a2 a3 a4 reverb2 reverb2 reverb2 reverb2 ga1, ga2, ga3, ga4, 2.5, 2.5, 2.5, 2.5, .5 .5 .5 .5 = = = = ga1+ar1 ga2+ar2 ga3+ar3 ga4+ar4 outq a1, a2, a3, a4
In the above example, the signal, asig, is moved according to the data in Function #1 indexed by ktime. space sends the appropriate amount of the signal internally to spsend. The outputs of the spsend are added to global accumulators in a common Csound style and the global signals are used as inputs to the reverb units in a separate instrument. space can be useful for quad and stereo panning as well as fixed placed of sounds anywhere between two loudspeakers. Below is an example of the fixed placement of sounds in a stereo field using xy values from the score instead of a function table.
instr 1 ... a1, a2, a3, a4 space asig, 0, 0, .1, p4, p5 ar1, ar2, ar3, ar4 spsend ga1 = ga1+ar1 ga2 = ga2+ar2
1917
a1, a2
the sound in the left speaker and near 1 -1 1 the sound in the right speaker and far 1 45 45 the sound equally between left and right and in the middle ground distance 1 0 12
The next example shows a simple intuitive use of the distance values returned by spdist to simulate Doppler shift.
ktime line 0, p3, 10 kdist spdist 1, ktime kfreq = (ifreq * 340) / (340 + kdist) asig oscili iamp, kfreq, 1 a1, a2, a3, a4 space asig, 1, ktime, .1 ar1, ar2, ar3, ar4 spsend
The same function and time values are used for both spdist and space. This insures that the distance values used internally in the space unit will be the same as those returned by spdist to give the impression of a Doppler shift!
See Also
spdist, spsend
Credits
Author: Richard Karpen Seattle, WA USA 1998 New in Csound version 3.48
1918
spat3d
spat3d Positions the input sound in a 3D space and allows moving the sound at k-rate.
Description
This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. spat3d allows moving the sound at k-rate (this movement is interpolated internally to eliminate "zipper noise" if sr not equal to kr).
Syntax
aW, aX, aY, aZ spat3d ain, kX, kY, kZ, idist, ift, imode, imdel, iovr [, istor]
Initialization
idist -- For modes 0 to 3, idist is the unit circle distance in meters. For mode 4, idist is the distance between microphones. The following formulas describe amplitude and delay as a function of sound source distance from microphone(s): amplitude = 1 / (0.1 + distance)
Distance can be calculated as: distance = sqrt(iX^2 + iY^2 + iZ^2) In Mode 4, distance can be calculated as: distance from left mic = sqrt((iX + idist/2)^2 + iY^2 + iZ^2) distance from right mic = sqrt((iX - idist/2)^2 + iY^2 + iZ^2)
With spat3d the distance between the sound source and any microphone should be at least (340 * 18) / sr meters. Shorter distances will work, but may produce artifacts in some cases. There is no such limitation for spat3di and spat3dt. Sudden changes or discontinuities in sound source location can result in pops or clicks. Very fast movement may also degrade quality. ift -- Function table storing room parameters (for free field spatialization, set it to zero or negative). Ta1919
ble size is 54. The values in the table are: Room Parameter 0 Purpose Early reflection recursion depth (0 is the sound source, 1 is the first reflection etc.) for spat3d and spat3di. The number of echoes for four walls (front, back, right, left) is: N = (2*R + 2) * R. If all six walls are enabled: N = (((4*R + 6)*R + 8)*R) / 3 Late reflection recursion depth (used by spat3dt only). spat3dt skips early reflections and renders echoes up to this level. If early reflection depth is negative, spat3d and spat3di will output zero, while spat3dt will start rendering from the sound source. imdel for spat3d. Overrides opcode parameter if non-negative. irlen for spat3dt. Overrides opcode parameter if non-negative. idist value. Overrides opcode parameter if >= 0. Random seed (0 - 65535) -1 seeds from current time. wall parameters (w = 6: ceil, w = 14: floor, w = 22: front, w = 30: back, w = 38: right, w = 46: left) Enable reflections from this wall (0: no, 1: yes) Wall distance from listener (in meters) Randomization of wall distance (0 - 1) (in units of 1 / (wall distance)) Reflection level (-1 - 1) Parametric equalizer frequency in Hz. Parametric equalizer level (1.0: no filtering) Parametric equalizer Q (0.7071: no resonance) Parametric equalizer mode (0: peak EQ, 1: low shelf, 2: high shelf)
1: B format with W and Y output (stereo) aleft = aW + 0.7071*aY aright = aW - 0.7071*aY 2: B format with W, X, and Y output (2D). This can be converted to UHJ: 1920
aWre, aWim hilbert aW aXre, aXim hilbert aX aYre, aYim hilbert aY aWXr = 0.0928*aXre + 0.4699*aWre aWXiYr = 0.2550*aXim - 0.1710*aWim + 0.3277*aYre aleft = aWXr + aWXiYr aright = aWXr - aWXiYr 3: B format with all outputs (3D) 4: Simulates a pair of microphones (stereo output) aW butterlp aW, ifreq aY butterlp aY, ifreq aleft = aW + aX aright = aY + aZ ; recommended values for ifreq ; are around 1000 Hz
Mode 0 is the cheapest to calculate, while mode 4 is the most expensive. In Mode 4, The optional lowpass filters can change the frequency response depending on direction. For example, if the sound source is located left to the listener then the high frequencies are attenuated in the right channel and slightly increased in the left. This effect can be disabled by not using filters. You can also experiment with other filters (tone etc.) for better effect. Note that mode 4 is most useful for listening with headphones, and is also more expensive to calculate than the B-format (0 to 3) modes. The idist parameter in this case sets the distance between left and right microphone; for headphones, values between 0.2 - 0.25 are recommended, although higher settings up to 0.4 may be used for wide stereo effects. More information about B format tp://www.york.ac.uk/inst/mustech/3d_audio/ambis2.htm can be found here: ht-
imdel -- Maximum delay time for spat3d in seconds. This has to be longer than the delay time of the latest reflection (depends on room dimensions, sound source distance, and recursion depth; using this formula gives a safe (although somewhat overestimated) value: imdel = (R + 1) * sqrt(W*W + H*H + D*D) / 340.0 where R is the recursion depth, W, H, and D are the width, height, and depth of the room, respectively). iovr -- Oversample ratio for spat3d (1 to 8). Setting it higher improves quality at the expense of memory and CPU usage. The recommended value is 2. istor (optional, default=0) -- Skip initialization if non-zero (default: 0).
Performance
aW, aX, aY, aZ -- Output signals
1921
mode 0 aW aX aY aZ W out 0 0 0
mode 4 left chn / low freq. left chn / high frq. right chn / low frq. right chn / high fr.
ain -- Input signal kX, kY, kZ -- Sound source coordinates (in meters) If you encounter very slow performance (up to 100 times slower), it may be caused by denormals (this is also true of many other IIR opcodes, including butterlp, pareq, hilbert, and many others). Underflows can be avoided by: Using the denorm opcode on ain before spat3d. mixing low level DC or noise to the input signal, e.g. atmp rnd31 1/1e24, 0, 0 aW, aX, aY, aZ spa3di ain + atmp, ... or aW, aX, aY, aZ spa3di ain + 1/1e24, ... reducing irlen in the case of spat3dt (which does not have an input signal). A value of about 0.005 is suitable for most uses, although it also depends on EQ settings. If the equalizer is not used, irlen can be set to 0.
Examples
Here is a example of the spat3d opcode that outputs a stereo file. It uses the file spat3d_stereo.csd [examples/spat3d_stereo.csd].
1922
/* room parameters */ idep itmp = 3 /* early reflection depth */ \ idist, seed */ \ \ 2, /* ceil */ \ 2, /* floor */ \ 2, /* front */ \ 2, /* back */ \ 2, /* right */ \ 2 /* left */
ftgen
1, 0, 64, -2, /* depth1, depth2, max delay, IR length, idep, 48, -1, 0.01, 0.25, 123, 1, 21.982, 0.05, 0.87, 4000.0, 0.6, 0.7, 1, 1.753, 0.05, 0.87, 3500.0, 0.5, 0.7, 1, 15.220, 0.05, 0.87, 5000.0, 0.8, 0.7, 1, 9.317, 0.05, 0.87, 5000.0, 0.8, 0.7, 1, 17.545, 0.05, 0.87, 5000.0, 0.8, 0.7, 1, 12.156, 0.05, 0.87, 5000.0, 0.8, 0.7,
instr 1 /* some source signal */ a1 a1 a1 a2 a2 a2 a1 kazim kdist phasor 150 butterbp a1, 500, 200 = taninv(a1 * 100) phasor 3 mirror 40*a2, -100, 5 limit a2, 0, 1 = a1 * a2 * 9000 line 0, 2.5, 360 line 1, 10, 4 ; oscillator ; filter ; envelope
; convert polar coordinates kX = sin(kazim * 3.14159 / 180) * kdist kY = cos(kazim * 3.14159 / 180) * kdist kZ = 0 a1 imode = = a1 + 0.000001 * 0.000001 1 ; avoid underflows
; change this to 3 for 8 spk in a cube, ; or 1 for simple stereo spat3d a1, kX, kY, kZ, 1.0, 1, imode, 2, 2
aW * 1.4142
; stereo ; aL = aR =
aW + aY aW - aY
/* left /* right
*/ */
; quad (square) ; ;aFL = aW + ;aFR = aW + ;aRL = aW ;aRR = aW ; eight ; ;aUFL ;aUFR ;aURL ;aURR ;aLFL ;aLFR ;aLRL ;aLRR
aX aX aX aX
+ + -
aY aY aY aY
/* /* /* /*
*/ */ */ */
channels (cube) = = = = = = = = aW aW aW aW aW aW aW aW + + + + aX aX aX aX aX aX aX aX + + + + aY aY aY aY aY aY aY aY + + + + aZ aZ aZ aZ aZ aZ aZ aZ /* /* /* /* /* /* /* /* upper upper upper upper lower lower lower lower front left front right rear left rear right front left front right rear left rear right */ */ */ */ */ */ */ */
1923
Here is a example of the spat3d opcode that outputs a UHJ file. It uses the file spat3d_UHJ.csd [examples/spat3d_UHJ.csd].
instr 1 p3 = p3 + 1.0
kazim line 0.0, 4.0, 360.0 ; azimuth kelev line 40, p3 - 1.0, -20 ; elevation kdist = 2.0 ; distance ; convert coordinates kX = kdist * cos(kelev * 0.01745329) * sin(kazim * 0.01745329) kY = kdist * cos(kelev * 0.01745329) * cos(kazim * 0.01745329) kZ = kdist * sin(kelev * 0.01745329) ; source signal a1 phasor 160.0 a2 delay1 a1 a1 = a1 - a2 kffrq1 port 200.0, 0.8, 12000.0 affrq upsamp kffrq1 affrq pareq affrq, 5.0, 0.0, 1.0, 2 kffrq downsamp affrq aenv4 phasor 3.0 aenv4 limit 2.0 - aenv4 * 8.0, 0.0, 1.0 a1 butterbp a1 * aenv4, kffrq, 160.0 aenv linseg 1.0, p3 - 1.0, 1.0, 0.04, 0.0, 1.0, 0.0 a_ = 4000000 * a1 * aenv + 0.00000001 ; spatialize a_W, a_X, a_Y, a_Z spat3d a_, kX, kY, kZ, 1.0, 1, 2, 2.0, 2 ; convert to UHJ format (stereo) aWre, aWim hilbert a_W aXre, aXim hilbert a_X aYre, aYim hilbert a_Y
1924
aWXre = aWXim = aL = aR =
Here is a example of the spat3d opcode that outputs a quadrophonic file. It uses the file spat3d_quad.csd [examples/spat3d_quad.csd].
/* room parameters */ idep itmp = 3 /* early reflection depth */ \ idist, seed */ \ \ 2, /* ceil */ \ 2, /* floor */ \ 2, /* front */ \ 2, /* back */ \ 2, /* right */ \ 2 /* left */
ftgen
1, 0, 64, -2, /* depth1, depth2, max delay, IR length, idep, 48, -1, 0.01, 0.25, 123, 1, 21.982, 0.05, 0.87, 4000.0, 0.6, 0.7, 1, 1.753, 0.05, 0.87, 3500.0, 0.5, 0.7, 1, 15.220, 0.05, 0.87, 5000.0, 0.8, 0.7, 1, 9.317, 0.05, 0.87, 5000.0, 0.8, 0.7, 1, 17.545, 0.05, 0.87, 5000.0, 0.8, 0.7, 1, 12.156, 0.05, 0.87, 5000.0, 0.8, 0.7,
instr 1 /* some source signal */ a1 a1 a1 a2 a2 a2 a1 kazim kdist phasor 150 butterbp a1, 500, 200 = taninv(a1 * 100) phasor 3 mirror 40*a2, -100, 5 limit a2, 0, 1 = a1 * a2 * 9000 line 0, 2.5, 360 line 1, 10, 4 ; oscillator ; filter ; envelope
1925
; convert polar coordinates kX = sin(kazim * 3.14159 / 180) * kdist kY = cos(kazim * 3.14159 / 180) * kdist kZ = 0 a1 imode = = a1 + 0.000001 * 0.000001 2 ; avoid underflows
; change this to 3 for 8 spk in a cube, ; or 1 for simple stereo spat3d a1, kX, kY, kZ, 1.0, 1, imode, 2, 2
aW * 1.4142
aW + aY aW - aY
/* left /* right
*/ */
; quad (square) ; aFL = aW + aX + aY aFR = aW + aX - aY aRL = aW - aX + aY aRR = aW - aX - aY ; eight ; ;aUFL ;aUFR ;aURL ;aURR ;aLFL ;aLFR ;aLRL ;aLRR channels (cube) = = = = = = = = aW aW aW aW aW aW aW aW + + + + aX aX aX aX aX aX aX aX + + + + aY aY aY aY aY aY aY aY + + + + aZ aZ aZ aZ aZ aZ aZ aZ
/* /* /* /*
*/ */ */ */
/* /* /* /* /* /* /* /*
front left front right rear left rear right front left front right rear left rear right
*/ */ */ */ */ */ */ */
outq aFL, aFR, aRL, aRR endin </CsInstruments> <CsScore> /* Written by Istvan Varga */ t 0 60 i 1 0 10 e </CsScore> </CsoundSynthesizer>
See Also
spat3di, spat3dt
Credits
Author: Istvan Varga 2001 New in version 4.12 Updated April 2002 by Istvan Varga
1926
spat3di
spat3di Positions the input sound in a 3D space with the sound source position set at i-time.
Description
This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. With spat3di, sound source position is set at i-time.
Syntax
aW, aX, aY, aZ spat3di ain, iX, iY, iZ, idist, ift, imode [, istor]
Initialization
iX -- Sound source X coordinate in meters (positive: right, negative: left) iY -- Sound source Y coordinate in meters (positive: front, negative: back) iZ -- Sound source Z coordinate in meters (positive: up, negative: down) idist -- For modes 0 to 3, idist is the unit circle distance in meters. For mode 4, idist is the distance between microphones. The following formulas describe amplitude and delay as a function of sound source distance from microphone(s): amplitude = 1 / (0.1 + distance)
Distance can be calculated as: distance = sqrt(iX^2 + iY^2 + iZ^2) In Mode 4, distance can be calculated as: distance from left mic = sqrt((iX + idist/2)^2 + iY^2 + iZ^2) distance from right mic = sqrt((iX - idist/2)^2 + iY^2 + iZ^2)
With spat3d the distance between the sound source and any microphone should be at least (340 * 18) / sr meters. Shorter distances will work, but may produce artifacts in some cases. There is no such limitation for spat3di and spat3dt. 1927
Sudden changes or discontinuities in sound source location can result in pops or clicks. Very fast movement may also degrade quality. ift -- Function table storing room parameters (for free field spatialization, set it to zero or negative). Table size is 54. The values in the table are: Room Parameter 0 Purpose Early reflection recursion depth (0 is the sound source, 1 is the first reflection etc.) for spat3d and spat3di. The number of echoes for four walls (front, back, right, left) is: N = (2*R + 2) * R. If all six walls are enabled: N = (((4*R + 6)*R + 8)*R) / 3 Late reflection recursion depth (used by spat3dt only). spat3dt skips early reflections and renders echoes up to this level. If early reflection depth is negative, spat3d and spat3di will output zero, while spat3dt will start rendering from the sound source. imdel for spat3d. Overrides opcode parameter if non-negative. irlen for spat3dt. Overrides opcode parameter if non-negative. idist value. Overrides opcode parameter if >= 0. Random seed (0 - 65535) -1 seeds from current time. wall parameters (w = 6: ceil, w = 14: floor, w = 22: front, w = 30: back, w = 38: right, w = 46: left) Enable reflections from this wall (0: no, 1: yes) Wall distance from listener (in meters) Randomization of wall distance (0 - 1) (in units of 1 / (wall distance)) Reflection level (-1 - 1) Parametric equalizer frequency in Hz. Parametric equalizer level (1.0: no filtering) Parametric equalizer Q (0.7071: no resonance) Parametric equalizer mode (0: peak EQ, 1: low shelf, 2: high shelf)
1928
aleft = aW + 0.7071*aY aright = aW - 0.7071*aY 2: B format with W, X, and Y output (2D). This can be converted to UHJ: aWre, aWim hilbert aW aXre, aXim hilbert aX aYre, aYim hilbert aY aWXr = 0.0928*aXre + 0.4699*aWre aWXiYr = 0.2550*aXim - 0.1710*aWim + 0.3277*aYre aleft = aWXr + aWXiYr aright = aWXr - aWXiYr 3: B format with all outputs (3D) 4: Simulates a pair of microphones (stereo output) aW butterlp aW, ifreq aY butterlp aY, ifreq aleft = aW + aX aright = aY + aZ ; recommended values for ifreq ; are around 1000 Hz
Mode 0 is the cheapest to calculate, while mode 4 is the most expensive. In Mode 4, The optional lowpass filters can change the frequency response depending on direction. For example, if the sound source is located left to the listener then the high frequencies are attenuated in the right channel and slightly increased in the left. This effect can be disabled by not using filters. You can also experiment with other filters (tone etc.) for better effect. Note that mode 4 is most useful for listening with headphones, and is also more expensive to calculate than the B-format (0 to 3) modes. The idist parameter in this case sets the distance between left and right microphone; for headphones, values between 0.2 - 0.25 are recommended, although higher settings up to 0.4 may be used for wide stereo effects. More information about B format tp://www.york.ac.uk/inst/mustech/3d_audio/ambis2.htm can be found here: ht-
Performance
ain -- Input signal aW, aX, aY, aZ -- Output signals mode 0 aW aX W out 0 mode 1 W out 0 mode 2 W out X out mode 3 W out X out mode 4 left chn / low freq. left chn / high frq.
1929
mode 0 aY aZ 0 0
mode 1 Y out 0
mode 2 Y out 0
If you encounter very slow performance (up to 100 times slower), it may be caused by denormals (this is also true of many other IIR opcodes, including butterlp, pareq, hilbert, and many others). Underflows can be avoided by: Using the denorm opcode on ain before spat3di. mixing low level DC or noise to the input signal, e.g. atmp rnd31 1/1e24, 0, 0 aW, aX, aY, aZ spat3di ain + atmp, ... or aW, aX, aY, aZ spa3di ain + 1/1e24, ... reducing irlen in the case of spat3dt (which does not have an input signal). A value of about 0.005 is suitable for most uses, although it also depends on EQ settings. If the equalizer is not used, irlen can be set to 0.
Examples
See the examples for spat3d.
See Also
spat3d, spat3dt
Credits
Author: Istvan Varga 2001 New in version 4.12 Updated April 2002 by Istvan Varga
1930
spat3dt
spat3dt Can be used to render an impulse response for a 3D space at i-time.
Description
This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. spat3dt can be used to render the impulse response at i-time, storing output in a function table, suitable for convolution.
Syntax
spat3dt ioutft, iX, iY, iZ, idist, ift, imode, irlen [, iftnocl]
Initialization
ioutft -- Output ftable number for spat3dt. W, X, Y, and Z outputs are written interleaved to this table. If the table is too short, output will be truncated. iX -- Sound source X coordinate in meters (positive: right, negative: left) iY -- Sound source Y coordinate in meters (positive: front, negative: back) iZ -- Sound source Z coordinate in meters (positive: up, negative: down) idist -- For modes 0 to 3, idist is the unit circle distance in meters. For mode 4, idist is the distance between microphones. The following formulas describe amplitude and delay as a function of sound source distance from microphone(s): amplitude = 1 / (0.1 + distance)
Distance can be calculated as: distance = sqrt(iX^2 + iY^2 + iZ^2) In Mode 4, distance can be calculated as: distance from left mic = sqrt((iX + idist/2)^2 + iY^2 + iZ^2) distance from right mic = sqrt((iX - idist/2)^2 + iY^2 + iZ^2)
1931
With spat3d the distance between the sound source and any microphone should be at least (340 * 18) / sr meters. Shorter distances will work, but may produce artifacts in some cases. There is no such limitation for spat3di and spat3dt. Sudden changes or discontinuities in sound source location can result in pops or clicks. Very fast movement may also degrade quality. ift -- Function table storing room parameters (for free field spatialization, set it to zero or negative). Table size is 54. The values in the table are: Room Parameter 0 Purpose Early reflection recursion depth (0 is the sound source, 1 is the first reflection etc.) for spat3d and spat3di. The number of echoes for four walls (front, back, right, left) is: N = (2*R + 2) * R. If all six walls are enabled: N = (((4*R + 6)*R + 8)*R) / 3 Late reflection recursion depth (used by spat3dt only). spat3dt skips early reflections and renders echoes up to this level. If early reflection depth is negative, spat3d and spat3di will output zero, while spat3dt will start rendering from the sound source. imdel for spat3d. Overrides opcode parameter if non-negative. irlen for spat3dt. Overrides opcode parameter if non-negative. idist value. Overrides opcode parameter if >= 0. Random seed (0 - 65535) -1 seeds from current time. wall parameters (w = 6: ceil, w = 14: floor, w = 22: front, w = 30: back, w = 38: right, w = 46: left) Enable reflections from this wall (0: no, 1: yes) Wall distance from listener (in meters) Randomization of wall distance (0 - 1) (in units of 1 / (wall distance)) Reflection level (-1 - 1) Parametric equalizer frequency in Hz. Parametric equalizer level (1.0: no filtering) Parametric equalizer Q (0.7071: no resonance) Parametric equalizer mode (0: peak EQ, 1: low shelf, 2: high shelf)
1932
1: B format with W and Y output (stereo) aleft = aW + 0.7071*aY aright = aW - 0.7071*aY 2: B format with W, X, and Y output (2D). This can be converted to UHJ: aWre, aWim hilbert aW aXre, aXim hilbert aX aYre, aYim hilbert aY aWXr = 0.0928*aXre + 0.4699*aWre aWXiYr = 0.2550*aXim - 0.1710*aWim + 0.3277*aYre aleft = aWXr + aWXiYr aright = aWXr - aWXiYr 3: B format with all outputs (3D) 4: Simulates a pair of microphones (stereo output) aW butterlp aW, ifreq aY butterlp aY, ifreq aleft = aW + aX aright = aY + aZ ; recommended values for ifreq ; are around 1000 Hz
Mode 0 is the cheapest to calculate, while mode 4 is the most expensive. In Mode 4, The optional lowpass filters can change the frequency response depending on direction. For example, if the sound source is located left to the listener then the high frequencies are attenuated in the right channel and slightly increased in the left. This effect can be disabled by not using filters. You can also experiment with other filters (tone etc.) for better effect. Note that mode 4 is most useful for listening with headphones, and is also more expensive to calculate than the B-format (0 to 3) modes. The idist parameter in this case sets the distance between left and right microphone; for headphones, values between 0.2 - 0.25 are recommended, although higher settings up to 0.4 may be used for wide stereo effects. More information about B format tp://www.york.ac.uk/inst/mustech/3d_audio/ambis2.htm can be found here: ht-
irlen -- Impulse response length of echoes (in seconds). Depending on filter parameters, values around 0.005-0.01 are suitable for most uses (higher values result in more accurate output, but slower rendering) iftnocl (optional, default=0) -- Do not clear output ftable (mix to existing data) if set to 1, clear table before writing if set to 0 (default: 0).
Examples
See the examples for spat3d.
See Also
1933
spat3d, spat3di
Credits
Author: Istvan Varga 2001 New in version 4.12 Updated April 2002 by Istvan Varga
1934
spdist
spdist Calculates distance values from xy coordinates.
Description
spdist uses the same xy data as space, also either from a text file using Gen28 or from x and y arguments given to the unit directly. The purpose of this unit is to make available the values for distance that are calculated from the xy coordinates. In the case of space, the xy values are used to determine a distance which is used to attenuate the signal and prepare it for use in spsend. But it is also useful to have these values for distance available to scale the frequency of the signal before it is sent to the space unit.
Syntax
k1 spdist ifn, ktime, kx, ky
Initialization
ifn -- number of the stored function created using Gen28. This function generator reads a text file which contains sets of three values representing the xy coordinates and a time-tag for when the signal should be placed at that location. The file should look like: 0 -1 1 1 2 4 2.1 -4 3 10 5 -40 1 1 4 -4 -10 0
If that file were named "move" then the Gen28 call in the score would like: f1 0 0 28 "move" Gen28 takes 0 as the size and automatically allocates memory. It creates values to 10 milliseconds of resolution. So in this case there will be 500 values created by interpolating X1 to X2 to X3 and so on, and Y1 to Y2 to Y3 and so on, over the appropriate number of values that are stored in the function table. In the above example, the sound will begin in the left front, over 1 second it will move to the right front, over another second it move further into the distance but still in the right front, then in just 1/10th of a second it moves to the left rear, a bit distant. Finally over the last .9 seconds the sound will move to the right rear, moderately distant, and it comes to rest between the two left channels (due west!), quite distant. Since the values in the table are accessed through the use of a time-pointer in the space unit, the actual timing can be made to follow the file's timing exactly or it can be made to go faster or slower through the same trajectory. If you have access to the GUI that allows one to draw and edit the files, there is no need to create the text files manually. But as long as the file is ASCII and in the format shown above, it doesn't matter how it is made! IMPORTANT: If ifn is 0 then spdist will take its values for the xy coordinates from kx and ky. 1935
Performance
The configuration of the xy coordinates in space places the signal in the following way: a1 is -1, 1 a2 is 1, 1 a3 is -1, -1 a4 is 1, -1 This assumes a loudspeaker set up as a1 is left front, a2 is right front, a3 is left back, a4 is right back. Values greater than 1 will result in sounds being attenuated, as if in the distance. space considers the speakers to be at a distance of 1; smaller values of xy can be used, but space will not amplify the signal in this case. It will, however balance the signal so that it can sound as if it were within the 4 speaker space. x=0, y=1, will place the signal equally balanced between left and right front channels, x=y=0 will place the signal equally in all 4 channels, and so on. Although there must be 4 output signals from space, it can be used in a 2 channel orchestra. If the xy's are kept so that Y>=1, it should work well to do panning and fixed localization in a stereo field. ktime -- index into the table containing the xy coordinates. If used like: ktime line 0, 5, 5 a1, a2, a3, a4 space asig, 1, ktime, ...
with the file "move" described above, the speed of the signal's movement will be exactly as described in that file. However: ktime line 0, 10, 5
the signal will move at half the speed specified. Or in the case of: ktime line 5, 15, 0
the signal will move in the reverse direction as specified and 3 times slower! Finally: ktime line 2, 10, 3
will cause the signal to move only from the place specified in line 3 of the text file to the place specified in line 5 of the text file, and it will take 10 seconds to do it. kx, ky -- when ifn is 0, space and spdist will use these values as the XY coordinates to localize the signal.
Examples
1936
instr 1 asig ;some audio signal ktime line 0, p3, p10 a1, a2, a3, a4 space asig,1, ktime, .1 ar1, ar2, ar3, ar4 spsend ga1 ga2 ga3 ga4 endin instr 99 ; reverb instrument a1 a2 a3 a4 reverb2 reverb2 reverb2 reverb2 ga1, ga2, ga3, ga4, 2.5, 2.5, 2.5, 2.5, .5 .5 .5 .5 = = = = ga1+ar1 ga2+ar2 ga3+ar3 ga4+ar4 outq a1, a2, a3, a4
In the above example, the signal, asig, is moved according to the data in Function #1 indexed by ktime. space sends the appropriate amount of the signal internally to spsend. The outputs of the spsend are added to global accumulators in a common Csound style and the global signals are used as inputs to the reverb units in a separate instrument. space can be useful for quad and stereo panning as well as fixed placed of sounds anywhere between two loudspeakers. Below is an example of the fixed placement of sounds in a stereo field using xy values from the score instead of a function table.
instr 1 ... a1, a2, a3, a4 space asig, 0, 0, .1, p4, p5 ar1, ar2, ar3, ar4 spsend ga1 = ga1+ar1 ga2 = ga2+ar2 outs endin instr 99 ; reverb.... .... endin a1, a2
the sound in the left speaker and near 1 -1 1 the sound in the right speaker and far 1 45 45 the sound equally between left and right and in the middle ground distance 1 0 12
1937
The next example shows a simple intuitive use of the distance values returned by spdist to simulate Doppler shift.
ktime line 0, p3, 10 kdist spdist 1, ktime kfreq = (ifreq * 340) / (340 + kdist) asig oscili iamp, kfreq, 1 a1, a2, a3, a4 space asig, 1, ktime, .1 ar1, ar2, ar3, ar4 spsend
The same function and time values are used for both spdist and space. This insures that the distance values used internally in the space unit will be the same as those returned by spdist to give the impression of a Doppler shift!
See Also
space, spsend
Credits
Author: Richard Karpen Seattle, WA USA 1998 New in Csound version 3.48
1938
specaddm
specaddm Perform a weighted add of two input spectra.
Description
Perform a weighted add of two input spectra.
Syntax
wsig specaddm wsig1, wsig2 [, imul2]
Initialization
imul2 (optional, default=0) -- if non-zero, scale the wsig2 magnitudes before adding. The default value is 0.
Performance
wsig1 -- the first input spectra. wsig2 -- the second input spectra. Do a weighted add of two input spectra. For each channel of the two input spectra, the two magnitudes are combined and written to the output according to: magout = mag1in + mag2in * imul2
The operation is performed whenever the input wsig1 is sensed to be new. This unit will (at Initialization) verify the consistency of the two spectra (equal size, equal period, equal mag types).
Examples
wsig2 wsig3 specdiff specfilt specdisp specdisp wsig1 wsig2, 2 wsig2, .1 wsig3, .1 ; sense onsets ; absorb slowly ; & display both spectra
See Also
specdiff, specfilt, spechist, specscal
1939
specdiff
specdiff Finds the positive difference values between consecutive spectral frames.
Description
Finds the positive difference values between consecutive spectral frames.
Syntax
wsig specdiff wsigin
Performance
wsig -- the output spectrum. wsigin -- the input spectra. Finds the positive difference values between consecutive spectral frames. At each new frame of wsigin, each magnitude value is compared with its predecessor, and the positive changes written to the output spectrum. This unit is useful as an energy onset detector.
Examples
wsig2 wsig3 specdiff specfilt specdisp specdisp wsig1 wsig2, 2 wsig2, .1 wsig3, .1 ; sense onsets ; absorb slowly ; & display both spectra
See Also
specaddm, specfilt, spechist, specscal
1940
specdisp
specdisp Displays the magnitude values of the spectrum.
Description
Displays the magnitude values of the spectrum.
Syntax
specdisp wsig, iprd [, iwtflg]
Initialization
iprd -- the period, in seconds, of each new display. iwtflg (optional, default=0) -- wait flag. If non-zero, hold each display until released by the user. The default value is 0 (no wait).
Performance
wsig -- the input spectrum. Displays the magnitude values of spectrum wsig every iprd seconds (rounded to some integral number of wsig's originating iprd).
Examples
ksum koct zero: koct contin: specsum if specptrk kgoto = 0 wsig, 1 ksum < 2000 wsig contin ; sum the spec bins, and ksmooth ; if sufficient amplitude ; pitch-track the signal ; else output zero
kgoto
zero
See Also
specsum
1941
specfilt
specfilt Filters each channel of an input spectrum.
Description
Filters each channel of an input spectrum.
Syntax
wsig specfilt wsigin, ifhtim
Initialization
ifhtim -- half-time constant.
Performance
wsigin -- the input spectrum. Filters each channel of an input spectrum. At each new frame of wsigin, each magnitude value is injected into a 1st-order lowpass recursive filter, whose half-time constant has been initially set by sampling the ftable ifhtim across the (logarithmic) frequency space of the input spectrum. This unit effectively applies a persistence factor to the data occurring in each spectral channel, and is useful for simulating the energy integration that occurs during auditory perception. It may also be used as a time-attenuated running histogram of the spectral distribution.
Examples
wsig2 wsig3 specdiff specfilt specdisp specdisp wsig1 wsig2, 2 wsig2, .1 wsig3, .1 ; sense onsets ; absorb slowly ; & display both spectra
See Also
specaddm, specdiff, spechist, specscal
1942
spechist
spechist Accumulates the values of successive spectral frames.
Description
Accumulates the values of successive spectral frames.
Syntax
wsig spechist wsigin
Performance
wsigin -- the input spectra. Accumulates the values of successive spectral frames. At each new frame of wsigin, the accumulationsto-date in each magnitude track are written to the output spectrum. This unit thus provides a running histogram of spectral distribution.
Examples
wsig2 wsig3 specdiff specfilt specdisp specdisp wsig1 wsig2, 2 wsig2, .1 wsig3, .1 ; sense onsets ; absorb slowly ; & display both spectra
See Also
specaddm, specdiff, specfilt, specscal
1943
specptrk
spectrk Estimates the pitch of the most prominent complex tone in the spectrum.
Description
Estimate the pitch of the most prominent complex tone in the spectrum.
Syntax
koct, kamp specptrk wsig, kvar, ilo, ihi, istr, idbthresh, inptls, \ irolloff [, iodd] [, iconfs] [, interp] [, ifprd] [, iwtflg]
Initialization
ilo, ihi, istr -- pitch range conditioners (low, high, and starting) expressed in decimal octave form. idbthresh -- energy threshold (in decibels) for pitch tracking to occur. Once begun, tracking will be continuous until the energy falls below one half the threshold (6 dB down), whence the koct and kamp outputs will be zero until the full threshold is again surpassed. idbthresh is a guiding value. At initialization it is first converted to the idbout mode of the source spectrum (and the 6 dB down point becomes .5, .25, or 1/root 2 for modes 0, 2 and 3). The values are also further scaled to allow for the weighted partial summation used during correlation.The actual thresholding is done using the internal weighted and summed kamp value that is visible as the second output parameter. inptls, irolloff -- number of harmonic partials used as a matching template in the spectrally-based pitch detection, and an amplitude rolloff for the set expressed as some fraction per octave (linear, so don't roll off to negative). Since the partials and rolloff fraction can affect the pitch following, some experimentation will be useful: try 4 or 5 partials with .6 rolloff as an initial setting; raise to 10 or 12 partials with rolloff .75 for complex timbres like the bassoon (weak fundamental). Computation time is dependent on the number of partials sought. The maximum number is 16. iodd (optional) -- if non-zero, employ only odd partials in the above set (e.g. inptls of 4 would employ partials 1,3,5,7). This improves the tracking of some instruments like the clarinet The default value is 0 (employ all partials). iconfs (optional) -- number of confirmations required for the pitch tracker to jump an octave, pro-rated for fractions of an octave (i.e. the value 12 implies a semitone change needs 1 confirmation (two hits) at the spectrum generating iprd). This parameter limits spurious pitch analyses such as octave errors. A value of 0 means no confirmations required; the default value is 10. interp (optional) -- if non-zero, interpolate each output signal (koct, kamp) between incoming wsig frames. The default value is 0 (repeat the signal values between frames). ifprd (optional) -- if non-zero, display the internally computed spectrum of candidate fundamentals. The default value is 0 (no display). iwtftg (optional) -- wait flag. If non-zero, hold each display until released by the user. The default value is 0 (no wait).
Performance
At note initialization this unit creates a template of inptls harmonically related partials (odd partials, if 1944
iodd non-zero) with amplitude rolloff to the fraction irolloff per octave. At each new frame of wsig, the spectrum is cross-correlated with this template to provide an internal spectrum of candidate fundamentals (optionally displayed). A likely pitch/amp pair (koct, kamp, in decimal octave and summed idbout form) is then estimated. koct varies from the previous koct by no more than plus or minus kvar decimal octave units. It is also guaranteed to lie within the hard limit range ilo -- ihi (decimal octave low and high pitch). kvar can be dynamic, e.g. onset amp dependent. Pitch resolution uses the originating spectrum ifrqs bins/octave, with further parabolic interpolation between adjacent bins. Settings of root magnitude, ifrqs = 24, iq = 15 should capture all the inflections of interest. Between frames, the output is either repeated or interpolated at the k-rate. (See spectrum.)
Examples
a1,a2 krms kvar wsig ins rms = spectrum specdisp koct,ka spectrk aosc oscil koct = display display outs
a1, 20 0.6 + krms/8000 a1, .01, 7, 24, 15, 0, 3 wsig, .2 wsig, kvar, 7.0, 10, 9, 20, ka*ka*10, cpsoct(koct),2 (koct<7.0?7.0:koct) koct-7.0, .25, 20 ka, .25, 20 a1, aosc
; read a stereo clarinet input ; find a monaural rms value ; & use to gate the pitch varianc ; get a 7-oct spectrum, 24 bibs/o ; display this and now estimate 4, .7, 1, 5, 1, .2 ; the pch and amp ; & generate \ new tone with thes ; replace non pitch with low C ; & display the pitch track ; plus the summed root mag ; output 1 original and 1 new tra
1945
specscal
specscal Scales an input spectral datablock with spectral envelopes.
Description
Scales an input spectral datablock with spectral envelopes.
Syntax
wsig specscal wsigin, ifscale, ifthresh
Initialization
ifscale -- scale function table. A function table containing values by which a value's magnitude is rescaled. ifthresh -- threshold function table. If ifthresh is non-zero, each magnitude is reduced by its corresponding table-value (to not less than zero)
Performance
wsig -- the output spectrum wsigin -- the input spectra Scales an input spectral datablock with spectral envelopes. Function tables ifthresh and ifscale are initially sampled across the (logarithmic) frequency space of the input spectrum; then each time a new input spectrum is sensed the sampled values are used to scale each of its magnitude channels as follows: if ifthresh is non-zero, each magnitude is reduced by its corresponding table-value (to not less than zero); then each magnitude is rescaled by the corresponding ifscale value, and the resulting spectrum written to wsig.
Examples
wsig2 wsig3 specdiff specfilt specdisp specdisp wsig1 wsig2, 2 wsig2, .1 wsig3, .1 ; sense onsets ; absorb slowly ; & display both spectra
See Also
specaddm, specdiff, specfilt, spechist
1946
specsum
specsum Sums the magnitudes across all channels of the spectrum.
Description
Sums the magnitudes across all channels of the spectrum.
Syntax
ksum specsum wsig [, interp]
Initialization
interp (optional, default-0) -- if non-zero, interpolate the output signal (koct or ksum). The default value is 0 (repeat the signal value between changes).
Performance
ksum -- the output signal. wsig -- the input spectrum. Sums the magnitudes across all channels of the spectrum. At each new frame of wsig, the magnitudes are summed and released as a scalar ksum signal. Between frames, the output is either repeated or interpolated at the k-rate. This unit produces a k-signal summation of the magnitudes present in the spectral data, and is thereby a running measure of its moment-to-moment overall strength.
Examples
ksum koct zero: koct contin: specsum if specptrk kgoto = 0 wsig, 1 ksum < 2000 wsig contin ; sum the spec bins, and ksmooth ; if sufficient amplitude ; pitch-track the signal ; else output zero
kgoto
zero
See Also
specdisp
1947
spectrum
spectrum Generate a constant-Q, exponentially-spaced DFT.
Description
Generate a constant-Q, exponentially-spaced DFT across all octaves of a multiply-downsampled control or audio input signal.
Syntax
wsig spectrum xsig, iprd, iocts, ifrqa [, iq] [, ihann] [, idbout] \ [, idsprd] [, idsinrs]
Initialization
ihann (optional) -- apply a Hamming or Hanning window to the input. The default is 0 (Hamming window) idbout (optional) -- coded conversion of the DFT output: 0 = magnitude 1 = dB 2 = mag squared 3 = root magnitude The default value is 0 (magnitude). idisprd (optional) -- if non-zero, display the composite downsampling buffer every idisprd seconds. The default value is 0 (no display). idsines (optional) -- if non-zero, display the Hamming or Hanning windowed sinusoids used in DFT filtering. The default value is 0 (no sinusoid display).
Performance
This unit first puts signal asig or ksig through iocts of successive octave decimation and downsampling, and preserves a buffer of down-sampled values in each octave (optionally displayed as a composite buffer every idisprd seconds). Then at every iprd seconds, the preserved samples are passed through a filter bank (ifrqs parallel filters per octave, exponentially spaced, with frequency/bandwidth Q of iq), and the output magnitudes optionally converted (idbout ) to produce a band-limited spectrum that can be read by other units. The stages in this process are computationally intensive, and computation time varies directly with iocts, ifrqs, iq, and inversely with iprd. Settings of ifrqs = 12, iq = 10, idbout = 3, and iprd = .02 will normally be adequate, but experimentation is encouraged. ifrqs currently has a maximum of 120 divisions per octave. For audio input, the frequency bins are tuned to coincide with A440. This unit produces a self-defining spectral datablock wsig, whose characteristics used (iprd, iocts, ifrqs, idbout) are passed via the data block itself to all derivative wsigs. There can be any number of spectrum 1948
Examples
asig in wsig spectrum
asig,.02,6,12,33,0,1,1
; get external audio ; downsample in 6 octs & calc a 72 pt dft (Q 33, dB out) every 2
1949
splitrig
splitrig Split a trigger signal
Description
splitrig splits a trigger signal (i.e. a timed sequence of control-rate impulses) into several channels following a structure designed by the user.
Syntax
splitrig ktrig, kndx, imaxtics, ifn, kout1 [,kout2,...,koutN]
Initialization
imaxtics - number of tics belonging to largest pattern ifn - number of table containing channel-data structuring
Performance
asig - incoming (input) signal ktrig - trigger signal The splitrig opcode splits a trigger signal into several output channels according to one or more patterns provided by the user. Normally the regular timed trigger signal generated by metro opcode is used to be transformed into rhythmic pattern that can trig several independent melodies or percussion riffs. But you can also start from non-isocronous trigger signals. This allows to use some "interpretative" and less "mechanic" groove variations. Patterns are looped and each numtics_of_pattern_N the cycle is repeated. The scheme of patterns is defined by the user and is stored into ifn table according to the following format:
gi1 ftgen 1,0,1024, -2 \ ; table is generated with GEN02 in this case \ ; numtics_of_pattern_1, \ ;pattern 1 tic1_out1, tic1_out2, ... , tic1_outN,\ tic2_out1, tic2_out2, ... , tic2_outN,\ tic3_out1, tic3_out2, ... , tic3_outN,\ ..... ticN_out1, ticN_out2, ... , ticN_outN,\ \ numtics_of_pattern_2, \ ;pattern 2 tic1_out1, tic1_out2, ... , tic1_outN,\ tic2_out1, tic2_out2, ... , tic2_outN,\ tic3_out1, tic3_out2, ... , tic3_outN,\ ..... ticN_out1, ticN_out2, ... , ticN_outN,\ ..... \ numtics_of_pattern_N,\ ;pattern N tic1_out1, tic1_out2, ... , tic1_outN,\ tic2_out1, tic2_out2, ... , tic2_outN,\ tic3_out1, tic3_out2, ... , tic3_outN,\ ..... ticN_out1, ticN_out2, ... , ticN_outN,\
1950
This scheme can contain more than one pattern, each one with a different number of rows. Each pattern is preceded by a a special row containing a single numtics_of_pattern_N field; this field expresses the number of tics that makes up the corresponding pattern. Each pattern's row makes up a tic. Each pattern's column corresponds to a channel, and each field of a row is a number that makes up the value outputted by the corresponding koutXX channel (if number is a zero, corresponding output channel will not trigger anything in that particular arguments). Obviously, all rows must contain the same number of fields that must be equal to the number of koutXX channel. All patterns must contain the same number of rows, this number must be equal to the largest pattern and is defined by imaxtics variable. Even if a pattern has less tics than the largest pattern, it must be made up of the same number of rows, in this case, some of these rows, at the end of the pattern itself, will not be used (and can be set to any value, because it doesn't matter). The kndx variable chooses the number of the pattern to be played, zero indicating the first pattern. Each time the integer part of kndx changes, tic counter is reset to zero. Patterns are looped and each numtics_of_pattern_N the cycle is repeated. examples 4 - calculate average value of asig in the time interval This opcode can be useful in several situations, for example to implement a vu-meter
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
1951
spsend
spsend Generates output signals based on a previously defined space opcode.
Description
spsend depends upon the existence of a previously defined space. The output signals from spsend are derived from the values given for xy and reverb in the space and are ready to be sent to local or global reverb units (see example below).
Syntax
a1, a2, a3, a4 spsend
Performance
The configuration of the xy coordinates in space places the signal in the following way: a1 is -1, 1 a2 is 1, 1 a3 is -1, -1 a4 is 1, -1 This assumes a loudspeaker set up as a1 is left front, a2 is right front, a3 is left back, a4 is right back. Values greater than 1 will result in sounds being attenuated, as if in the distance. space considers the speakers to be at a distance of 1; smaller values of xy can be used, but space will not amplify the signal in this case. It will, however balance the signal so that it can sound as if it were within the 4 speaker space. x=0, y=1, will place the signal equally balanced between left and right front channels, x=y=0 will place the signal equally in all 4 channels, and so on. Although there must be 4 output signals from space, it can be used in a 2 channel orchestra. If the xy's are kept so that Y>=1, it should work well to do panning and fixed localization in a stereo field.
Examples
instr 1 asig ;some audio signal ktime line 0, p3, p10 a1, a2, a3, a4 space asig,1, ktime, .1 ar1, ar2, ar3, ar4 spsend ga1 ga2 ga3 ga4 endin instr 99 ; reverb instrument = = = = ga1+ar1 ga2+ar2 ga3+ar3 ga4+ar4 outq a1, a2, a3, a4
1952
a1 a2 a3 a4
.5 .5 .5 .5
In the above example, the signal, asig, is moved according to the data in Function #1 indexed by ktime. space sends the appropriate amount of the signal internally to spsend. The outputs of the spsend are added to global accumulators in a common Csound style and the global signals are used as inputs to the reverb units in a separate instrument. space can be useful for quad and stereo panning as well as fixed placed of sounds anywhere between two loudspeakers. Below is an example of the fixed placement of sounds in a stereo field using xy values from the score instead of a function table.
instr 1 ... a1, a2, a3, a4 space asig, 0, 0, .1, p4, p5 ar1, ar2, ar3, ar4 spsend ga1 = ga1+ar1 ga2 = ga2+ar2 outs endin instr 99 ; reverb.... .... endin a1, a2
the sound in the left speaker and near 1 -1 1 the sound in the right speaker and far 1 45 45 the sound equally between left and right and in the middle ground distance 1 0 12
The next example shows a simple intuitive use of the distance values returned by spdist to simulate Doppler shift.
ktime line 0, p3, 10 kdist spdist 1, ktime kfreq = (ifreq * 340) / (340 + kdist) asig oscili iamp, kfreq, 1 a1, a2, a3, a4 space asig, 1, ktime, .1 ar1, ar2, ar3, ar4 spsend
The same function and time values are used for both spdist and space. This insures that the distance values used internally in the space unit will be the same as those returned by spdist to give the impression 1953
of a Doppler shift!
See Also
space, spdist
Credits
Author: Richard Karpen Seattle, WA USA 1998 New in Csound version 3.48
1954
sprintf
sprintf printf-style formatted output to a string variable.
Description
sprintf write printf-style formatted output to a string variable, similarly to the C function sprintf(). sprintf runs at i-time only.
Syntax
Sdst sprintf Sfmt, xarg1[, xarg2[, ... ]]
Initialization
Sfmt -- format string, has the same format as in printf() and other similar C functions, except length modifiers (l, ll, h, etc.) are not supported. The following conversion specifiers are allowed: d, i, o, u, x, X, e, E, f, F, g, G, c, s xarg1, xarg2, ... -- input arguments (max. 30) for format, should be i-rate for all conversion specifiers except %s, which requires a string argument. Integer formats like %d round the input values to the nearest integer.
Performance
Sdst -- output string variable
Example
Sname Smsg asig sprintf sprintf puts soundin "soundin-%04d.wav", ifileno "The file name is: '%s'", Sname Smsg, 1 Sname
See Also
sprintfk
Credits
Author: Istvan Varga 2005
1955
sprintfk
sprintfk printf-style formatted output to a string variable at k-rate.
Description
sprintfk writes printf-style formatted output to a string variable, similarly to the C function sprintf(). sprintfk runs both at initialization and performance time.
Syntax
Sdst sprintfk Sfmt, xarg1[, xarg2[, ... ]]
Initialization
Sfmt -- format string, has the same format as in printf() and other similar C functions, except length modifiers (l, ll, h, etc.) are not supported. The following conversion specifiers are allowed: d, i, o, u, x, X, e, E, f, F, g, G, c, s xarg1, xarg2, ... -- input arguments (max. 30) for format, should be i-rate for all conversion specifiers except %s, which requires a string argument. sprintfk also allows k-rate number arguments, but these should still be valid at init time as well (unless sprintfk is skipped with igoto). Integer formats like %d round the input values to the nearest integer.
Performance
Sdst -- output string variable
Examples
Here is an example of the sprintfk opcode. It uses the file sprintfk.csd [examples/sprintfk.csd].
1956
; Example by Jonathan Murphy 2007 instr 1 S1 = "1" S2 = " + 1" ktrig init 0 kval init 2 if (ktrig == 1) then S1 strcatk S1, S2 kval = kval + 1 endif String sprintfk "%s = %d", S1, kval puts String, kval ktrig metro 1 endin </CsInstruments> <CsScore> i1 0 10 e </CsScore> </CsoundSynthesizer>
See also
sprintf, puts, strcatk
Credits
Author: Istvan Varga 2005 Example by Jonathan Murphy
1957
sqrt
sqrt Returns a square root value.
Description
Returns the square root of x (x non-negative). The argument value is restricted for log, log10, and sqrt.
Syntax
sqrt(x) (no rate restriction)
where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.
Examples
Here is an example of the sqrt opcode. It uses the file sqrt.csd [examples/sqrt.csd].
1958
See Also
abs, exp, frac, int, log, log10, i
Credits
Example written by Kevin Conder.
1959
sr
sr Sets the audio sampling rate.
Description
These statements are global value assignments, made at the beginning of an orchestra, before any instrument block is defined. Their function is to set certain reserved symbol variables that are required for performance. Once set, these reserved symbols can be used in expressions anywhere in the orchestra.
Syntax
sr = iarg
Initialization
sr = (optional) -- set sampling rate to iarg samples per second per channel. The default value is 44100. In addition, any global variable [53] can be initialized by an init-time assignment anywhere before the first instr statement. All of the above assignments are run as instrument 0 (i-pass only) at the start of real performance. Beginning with Csound version 3.46, sr may be omitted. The sample rate will be calculated from kr and ksmps, but this must evaluate to an integer. If none of these global values is defined, the sample rate will default to 44100. You will usually want to use a value that your soundcard supports, like 44100 or 48000, otherwise, the audio generated by csound may be unplayable, or you will get an error if you attempt to run in real-time. You may naturally use a sample rate like 96000, for off-line rendering even if your soundcard doesn't support it. Csound will generate a valid file that can be played on capable systems.
Examples
sr = 10000 kr = 500 ksmps = 20 gi1 = sr/2. ga init 0 itranspose = octpch(.0l)
See Also
kr, ksmps, nchnls
1960
stack
stack Initializes the stack.
Description
Initializes and sets the size of the global stack.
Syntax
stack iStackSize
Initialization
iStackSize - size of the stack in bytes.
Performance
Csound implements a single global stack. Initializing the stack with the stack opcode is not required - it is optional, and if not done, the first use of push or push_f will automatically create a stack of 32768 bytes. Otherwise, stack is normally called from the orchestra header, and takes a stack size parameter in bytes (there is an upper limit of about 16 MB). Once set, the stack size is fixed and cannot be changed during performance. The global stack works in LIFO order: after multiple push calls, pop should be used in reverse order. Each push or pop operation can work on a "bundle" of multiple variables. When using pop, the number, type, and order of items must match those used by the corresponding push. That is, after a 'push Sfoo, ibar', you must call something like 'pop Sbar, ifoo', and not e.g. two separate 'pop' statements. push and pop opcodes can take variables of any type (i-, k-, a- and strings). Variables of type 'a' and 'k' are passed at performance time only, while 'i' and 'S' are passed at init time only. push/pop for a, k, i, and S types copy data by value. By contrast, push_f only pushes a "reference" to the f-signal, and then the corresponding pop_f will copy directly from the original variable to its output signal. For this reason, changing the source f-signal of push_f before pop_f is called is not recommended, and if the instrument instance owning the variable that was passed by push_f is deactivated before pop_f is called, undefined behavior may occur. Any stack errors (trying to push when there is no more space, or pop from an empty stack, inconsistent number or type of arguments, etc.) are fatal and terminate performance.
See also
pop, push, pop_f and push_f.
Credits
By: Istvan Varga. 2006 1961
statevar
statevar State-variable filter.
Description
Statevar is a new digital implementation of the analogue state-variable filter. This filter has four simultaneous outputs: high-pass, low-pass, band-pass and band-reject. This filter uses oversampling for sharper resonance (default: 3 times oversampling). It includes a resonance limiter that prevents the filter from getting unstable.
Syntax
ahp,alp,abp,abr statevar ain, kcf, kq [, iosamps, istor]
Initialization
iosamps -- number of times of oversampling used in the filtering process. This will determine the maximum sharpness of the filter resonance (Q). More oversampling allows higher Qs, less oversampling will limit the resonance. The default is 3 times (iosamps=0). istor --initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a nonzero value will allow previous information to remain. The default value is 0.
Performance
ahp -- high-pass output signal. alp -- low-pass output signal. abp -- band-pass signal. abr -- band-reject signal. asig -- input signal. kcf -- filter cutoff frequency kq -- filter Q. This value is limited internally depending on the frequency and the number of times of oversampling used in the process (3-times oversampling by default).
Examples
Example 570. Example
kenv asig kf ahp, alp, abp, abr linseg buzz expseg statevar 0, 0.1, 1, p3-0.2, 1, 0.1, 0 16000*kenv, 100, 100, 1; 100, p3/2, 5000, p3/2, 1000 asig, kf, 200
1962
outs
alp, ahp
Credits
Author: Victor Lazzarini January 2005 New plugin in version 5 January 2005.
1963
stix
stix Semi-physical model of a stick sound.
Description
stix is a semi-physical model of a stick sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares stix iamp, idettack [, inum] [, idamp] [, imaxshake]
Initialization
iamp -- Amplitude of output. Note: As these instruments are stochastic, this is only a approximation. idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 30. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.998 + (idamp * 0.002) The default damping_amount is 0.998 which means that the default value of idamp is 0. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 1.0. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional) -- amount of energy to add back into the system. The value should be in range 0 to 1.
Examples
Here is an example of the stix opcode. It uses the file stix.csd [examples/stix.csd].
1964
;orchestra --------------sr = kr = ksmps = nchnls = instr 01 a1 a2 a3 44100 4410 10 1 ;an example of stix line 20, p3, 20 ;preset amplitude increase stix p4, 0.01 ;stix needs a little amp help at these settings product a1, a2 ;increase amplitude out a3 endin
See Also
cabasa, crunch, sandpaper, sekere
Credits
Author: Perry Cook, part of the PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
1965
STKBandedWG
STKBandedWG STKBandedWG uses banded waveguide techniques to model a variety of sounds.
Description
This opcode uses banded waveguide techniques to model a variety of sounds, including bowed bars, glasses, and bowls.
Syntax Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
asignal STKBandedWG ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5[, kc6
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 7 controller numbers and values that work for STKBandedWG are: kc, kv -- 2, pressure of bow. kc, kv -- 4, motion of bow. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, velocity. of bow kc, kv -- 64, striking of bow. kc, kv -- 16, instrument presets (0 = uniform bar, 1 = tuned bar, 2 = glass harmonica, 3 = Tibetan bowl)
Note
The code for this opcode is taken directly from the BandedWG class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKBandedWG opcode. It uses the file STKBandedWG.csd [examples/ 1966
STKBandedWG.csd],
Credits
Author: Michael Gogins (after Georg Essl) Irreducible Productions New York, NY New in Csound version 5.11
1967
STKBeeThree
STKBeeThree STK Hammond-oid organ-like FM synthesis instrument.
Description
STK Hammond-oid organ-like FM synthesis instrument. This opcode a simple 4 operator topology, also referred to as algorithm 8 of the TX81Z. It simulates the sound of a Hammond-oid organ, and some related sounds.
Syntax
asignal STKBeeThree ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKBeeThree are: kc, kv -- 2, gain of feedback of operator 4. kc, kv -- 4, gain of operator 3 kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 target.
Note
The code for this opcode is taken directly from the BeeThree class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKBeeThree opcode. It uses the file STKBeeThree.csd [examples/STKBeeThree.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
1968
asig STKBeeThree cpspch(ipch), 1, 2, kfdb, 4, kop3, 11, 50, 1, 0, 128, kvol outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 20 100 127 8.00 i 1 + 3 120 0 0 6.09 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1969
STKBlowBotl
STKBlowBotl STKBlowBotl uses a helmholtz resonator (biquad filter) with a polynomial jet excitation.
Description
This opcode implements a helmholtz resonator (biquad filter) with a polynomial jet excitation (a la Cook).
Syntax
asignal STKBlowBotl ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 4 controller numbers and values that work for STKBlowBotl are: kc, kv -- 4, gain of noise. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, volume
Note
The code for this opcode is taken directly from the BlowBotl class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKBlowBotl opcode. It uses the file STKBlowBotl.csd [examples/ STKBlowBotl.csd].
1970
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKBlowBotl.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ipch = p4 knoise line p5, p3, p6 kvol line 100, p3, 70 ;noise ;volume
asig STKBlowBotl cpspch(ipch), 1, 4, knoise, 11, 10, 1, 50, 128, kvol asig = asig * .7 ;too loud outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 9.00 20 100 i 1 + 3 8.03 120 0 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1971
STKBlowHole
STKBlowHole STK clarinet physical model with one register hole and one tonehole.
Description
This opcode is based on the clarinet model, with the addition of a two-port register hole and a three-port dynamic tonehole implementation. In this implementation, the distances between the reed/register hole and tonehole/bell are fixed. As a result, both the tonehole and register hole will have variable influence on the playing frequency, which is dependent on the length of the air column. In addition, the highest playing freqeuency is limited by these fixed lengths.
Syntax
asignal STKBlowHole ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKBlowHole are: kc, kv -- 2, stiffness of reed kc, kv -- 4, gain of noise. kc, kv -- 11, state of tonehole. kc, kv -- 1, state of register. kc, kv -- 128, breath pressure
Note
The code for this opcode is taken directly from the BlowHole class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKBlowHole opcode. It uses the file STKBlowHole.csd [examples/ 1972
STKBlowHole.csd].
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1973
STKBowed
STKBowed STKBowed is a bowed string instrument.
Description
STKBowed is a bowed string instrument, using a waveguide model.
Syntax
asignal STKBowed ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKBowed are: kc, kv -- 2, bow pressure. kc, kv -- 4, position on bow kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, volume.
Note
The code for this opcode is taken directly from the Bowed class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of [examples/STKBowed.csd]. the STKBowed opcode. It uses the file STKBowed.csd
1974
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKBowed.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ipch = p4 kpos = p7 kpres line p5, p3, p6 kvib line 0, p3, 7 asig STKBowed cpspch(ipch), 1, 2, kpres, 4, kpos, 11, 40, 1, kvib, 128, 100 asig = asig*4 ;amplify outs asig, asig endin </CsInstruments> <CsScore> i 1 0 5 6.00 20 100 127 i 1 + 3 7.00 120 0 0 i 1 8 3 7.05 120 0 30 i 1 8 4 7.03 50 0 0 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1975
STKBrass
STKBrass STKBrass is a simple brass instrument.
Description
STKBrass uses a simple brass instrument waveguide model, a la Cook.
Syntax
asignal STKBrass ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKBrass are: kc, kv -- 2, lip tension. kc, kv -- 4, slide length kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, volume.
Note
The code for this opcode is taken directly from the Brass class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKBrass opcode. It uses the file STKBrass.csd [examples/STKBrass.csd].
1976
<CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKBrass.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kjet line p5, p3, p6 ktrl line p7, p3, p8 asig STKBrass cpspch(ifrq), 1, 2, kjet, 4, 100, 11, ktrl, 1, 10, 128, 50 asig = asig * 3 ;amplify outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 8.05 100 120 50 0 i 1 + 3 9.00 80 82 10 0 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1977
STKClarinet
STKClarinet STKClarinet uses a simple clarinet physical model.
Description
STKClarinet uses a simple clarinet physical model.
Syntax
asignal STKClarinet ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKClarinet are: kc, kv -- 2, reed stiffness. kc, kv -- 4, gain of noise kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, breath pressure.
Note
The code for this opcode is taken directly from the Clarinet class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKClarinet opcode. It uses the file STKClarinet.csd [examples/STKClarinet.csd].
1978
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKclarinet.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kpress = p5 kstiff line p6, p3, p7 asig STKClarinet cpspch(p4), 1, 2, kstiff, 4, 100, 11, 60, 1, 10, 128, kpress outs asig, asig endin </CsInstruments> <CsScore> i 1 0 3 8.00 100 127 10 i 1 + 10 8.08 80 60 100 e </CsScore> </CsoundSynthesizer>
See Also
STKFlute,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1979
STKDrummer
STKDrummer STKDrummer is a drum sampling synthesizer.
Description
STKDrummer is a drum sampling synthesizer using raw waves and one-pole filters, The drum rawwave files are sampled at 22050 Hz, but will be appropriately interpolated for other sample rates.
Syntax
asignal STKDrummer ifrequency, iamplitude
Initialization
ifrequency -- Samples being played. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). There are no controller numbers and values that work for STKDrummer:
Note
The code for this opcode is taken directly from the Drummer class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKDrummer opcode. It uses the file STKDrummer.csd [examples/STKDrummer.csd].
1980
instr 1 ;STK Drummer - has no controllers but plays samples icps cpsmidi iamp ampmidi 1 asig STKDrummer icps, iamp outs asig, asig endin </CsInstruments> <CsScore> ; play 5 minutes f0 300 e </CsScore> </CsoundSynthesizer>
See Also
STKClarinet,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1981
STKFlute
STKFlute STKFlute uses a simple flute physical model.
Description
STKFlute uses a simple flute physical model. The jet model uses a polynomial, a la Cook.
Syntax
asignal STKFlute ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKFlute are: kc, kv -- 2, jet delay. kc, kv -- 4, gain of noise kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, breath pressure.
Note
The code for this opcode is taken directly from the Flute class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKFlute opcode. It uses the file STKFlute.csd [examples/STKFlute.csd].
1982
<CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKFlute.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kjet line p5, p3, p6 kvib line 0, p3, 100 ;jet delay ;vibrato depth
asig STKFlute cpspch(ifrq), 1, 2, kjet, 4, 100, 11, 100, 1, kvib, 128, 100 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 8.00 0 0 i 1 3 3 9.00 20 120 e </CsScore> </CsoundSynthesizer>
See Also
STKClarinet,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1983
STKFMVoices
STKFMVoices STKFMVoices is a singing FM synthesis instrument.
Description
STKFMVoices is a singing FM synthesis instrument. It has 3 carriers and a common modulator, also referred to as algorithm 6 of the TX81Z.
Syntax
asignal STKFMVoices ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKFMVoices are: kc, kv -- 2, vowel. kc, kv -- 4, spectral tilt kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 Target.
Note
The code for this opcode is taken directly from the FMVoices class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKFMVoices opcode. It uses the file STKFMVoices.csd [examples/ STKFMVoices.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKFMVoices.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kjet line p5, p3, p6 ktlt line p7, p3, p8 ;vowel ;specral tilt
asig STKFMVoices cpspch(ifrq), 1, 2, kjet, 4, ktlt, 11, 10, 1, 10, 128, 50 asig = asig * 4 ;amplify outs asig, asig endin </CsInstruments> <CsScore> i 1 0 5 5.00 10 120 0 0 i 1 + 2 8.00 80 82 127 0 e </CsScore> </CsoundSynthesizer>
See Also
STKBeeThree,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1985
STKHevyMetl
STKHevyMetl STKHevyMetl produces metal sounds.
Description
STKHevyMetl produces metal sounds, using FM synthesis. It uses 3 cascade operators with feedback modulation, also referred to as algorithm 3 of the TX81Z.
Syntax
asignal STKHevyMetl ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKHevyMetl are: kc, kv -- 2, total modulator index. kc, kv -- 4, crossfade of modulator. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 target.
Note
The code for this opcode is taken directly from the HevyMetl class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKHevyMetl opcode. It uses the file STKHevyMetl.csd [examples/ STKHevyMetl.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKHevyMetl.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kndx line p5, p3, p6 kfad line p7, p3, 0 ;Total Modulator Index ;Modulator Crossfade
asig STKHevyMetl cpspch(ifrq), 1, 2, kndx, 4, kfad, 11, 0, 1, 100, 128, 40 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 7 8.05 100 i 1 3 7 9.03 20 i 1 3 .5 8.05 20 i 1 4 .5 9.09 20 i 1 5 3 9.00 20
e </CsScore> </CsoundSynthesizer>
See Also
STKWurley,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1987
STKMandolin
STKMandolin STKMandolin produces mamdolin-like sounds.
Description
STKMandolin produces mamdolin-like sounds, using "commuted synthesis" techniques to model a mandolin instrument.
Syntax
asignal STKMandolin ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKMandolin are: kc, kv -- 2, size of body. kc, kv -- 4, pluck position. kc, kv -- 11, string sustain. kc, kv -- 1, string detuning. kc, kv -- 128, position of microphone.
Note
The code for this opcode is taken directly from the Mandolin class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKMandolin opcode. It uses the file STKMandolin.csd [examples/STKMandolin.csd], and mandpluck.aiff [examples/mandpluk.aiff].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKMandolin.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kbody line p5, p3, p6 ksus = p7 ;body size ;sustain
asig STKMandolin cpspch(ifrq), 1, 2, kbody, 4, 10, 11, ksus, 1, 100, 128, 100 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 .3 7.00 100 0 20 i 1 + . 8.00 10 100 20 i 1 + . 8.00 100 0 120 i 1 + 4 8.00 10 10 127 e </CsScore> </CsoundSynthesizer>
See Also
STKPlucked,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1989
STKModalBar
STKModalBar STKModalBar is a resonant bar instrument.
Description
This opcode is a resonant bar instrument.It has a number of different struck bar instruments.
Syntax Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
asignal STKModalBar ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5[, kc6
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 7 controller numbers and values that work for STKModalBar are: kc, kv -- 2, hardness of the stick. kc, kv -- 4, stick position. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 8, direct stick mix kc, kv -- 128, volume. kc, kv -- 16, instrument presets (0 = marimba, 1 = vibraphone, 2 = agogo, 3 = wood1, 4 = reso, 5 = wood2, 6 = beats, 7 = two fixed, 8 = clump)
Note
The code for this opcode is taken directly from the ModalBar class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKModalBar opcode. It uses the file STKModalBar.csd [examples/ STKModalBar.csd]. 1990
asig STKModalBar cpspch(ifrq), 1, 2, khard, 4, 120, 11, 0, 1, 0, 8, 10, 16, 1 asig = asig * 3 ;amplify outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 8.00 0 i 1 + 2 8.05 120 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Georg Essl) Irreducible Productions New York, NY New in Csound version 5.11
1991
STKMoog
STKMoog STKMoog produces moog-like swept filter sounds.
Description
STKMoog produces moog-like swept filter sounds, using one attack wave, one looped wave, and an ADSR envelope and adds two sweepable formant filters.
Syntax
asignal STKMoog ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKMoog are: kc, kv -- 2, Q filter. kc, kv -- 4, rate of filter sweep . kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, volume.
Note
The code for this opcode is taken directly from the Moog class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKMoog opcode. It uses the file STKMoog.csd [examples/STKMoog.csd].
1992
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKMoog.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kfil line p5, p3, p6 ;filter Q
asig STKMoog cpspch(ifrq), 1, 2,kfil, 4, 120, 11, 40, 1, 1, 128, 120 asig = asig * .3 ;too loud outs asig, asig endin </CsInstruments> <CsScore> i 1 0 .5 6.00 100 0 i 1 + . 5.05 10 127 i 1 + . 7.06 100 0 i 1 + 3 7.00 10 10 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1993
STKPercFlut
STKPercFlut STKPercFlut is a percussive flute FM synthesis instrument.
Description
STKPercFlut is a percussive flute FM synthesis instrument. The instrument uses an algorithm like the algorithm 4 of the TX81Z.
Syntax
asignal STKPercFlut ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKPercFlut are: kc, kv -- 2, total modulator index. kc, kv -- 4, crossfade of modulator. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 target.
Note
The code for this opcode is taken directly from the PercFlut class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKPercFlut opcode. It uses the file STKPercFlut.csd [examples/STKPercFlut.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKPercFlut.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kndx line p5, p3, p6 kfad line p7, p3, 0 ;Total Modulator Index ;Modulator Crossfade
asig STKPercFlut cpspch(ifrq), 1, 2, kndx, 4, kfad, 11, 0, 1, 100, 128, 40 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 7 8.05 100 i 1 3 7 9.03 20 i 1 3 .5 8.05 20 i 1 4 .5 9.09 20 i 1 5 3 9.00 20
e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1995
STKPlucked
STKPlucked STKPlucked uses a plucked string physical model.
Description
STKPlucked uses a plucked string physical model based on the Karplus-Strong algorithm.
Syntax
asignal STKPlucked ifrequency, iamplitude
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). There are no controller numbers and values that work for STKPlucked.
Note
The code for this opcode is taken directly from the Plucked class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKPlucked opcode. It uses the file STKPlucked.csd [examples/STKPlucked.csd].
1996
ifrq = p4 asig STKPlucked cpspch(ifrq), 1 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 6.00 i 1 + 8 5.00 i 1 + .5 8.00 e </CsScore> </CsoundSynthesizer>
See Also
STKSitar,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1997
STKResonate
STKResonate STKResonate is a noise driven formant filter.
Description
STKResonate is a noise driven formant filter. This instrument contains a noise source, which excites a biquad resonance filter, with volume controlled by an ADSR.
Syntax
asignal STKResonate ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKResonate are: kc, kv -- 2, frequency of resonance. kc, kv -- 4, pole radii kc, kv -- 11, notch frequency. kc, kv -- 1, zero radii. kc, kv -- 128, gain of envelope.
Note
The code for this opcode is taken directly from the Resonate class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKResonate opcode. It uses the file STKResonate.csd [examples/ STKResonate.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKResonate.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ; frequency of STKResonate has no effect on sound kpol = p4 kfrq line 100, p3, 0 ;pole radii ;resonance freq + notch freq
asig STKResonate 1, 1, 2, kfrq, 4, kpol, 1, 10, 11, kfrq, 128, 127 asig = asig * .7 ;too loud outs asig, asig endin </CsInstruments> <CsScore> i 1 0 1 0 i 1 + . > i 1 + . > i 1 + . > i 1 + . 120 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
1999
STKRhodey
STKRhodey STK Fender Rhodes-like electric piano FM synthesis instrument.
Description
STK Fender Rhodes-like electric piano FM synthesis instrument. This opcode implements an instrument based on two simple FM Pairs summed together, also referred to as algorithm 5 of the Yamaha TX81Z. It simulates the sound of a Rhodes electric piano, and some related sounds.
Syntax
asignal STKRhodey ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKRhodey are: kc, kv -- 2, modulator index 1. kc, kv -- 4, crossfade of outputs. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 target.
Note
The code for this opcode is taken directly from the Rhodey class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKRhodey opcode. It uses the file STKRhodey.csd [examples/ STKRhodey.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
2000
asig STKRhodey cpspch(p4), 1, 2, kndx, 4, 10, 11, 100, 1, 3, 128, 75 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 .5 7.00 75 0 i 1 + . 8.00 120 0 i 1 + 1 6.00 50 120 i 1 + 4 8.00 10 10 e </CsScore> </CsoundSynthesizer> 20 20 20 127
See Also
STKWurley,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2001
STKSaxofony
STKSaxofony STKSaxofony is a faux conical bore reed instrument.
Description
STKSaxofony is a faux conical bore reed instrument. This opcode uses a "hybrid" digital waveguide instrument that can generate a variety of wind-like sounds. It has also been referred to as the "blowed string" model. The waveguide section is essentially that of a string, with one rigid and one lossy termination. The non-linear function is a reed table. The string can be "blown" at any point between the terminations, though just as with strings, it is impossible to excite the system at either end. If the excitation is placed at the string mid-point, the sound is that of a clarinet. At points closer to the "bridge", the sound is closer to that of a saxophone.
Syntax Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
asignal STKSaxofony ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5[, kc6
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 7 controller numbers and values that work for STKSaxofony are: kc, kv -- 2, stiffness of reed. kc, kv -- 26, .reed aperture kc, kv -- 11, blow position kc, kv -- 4, noise gain. kc, kv -- 29, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, breath pressure
Note
The code for this opcode is taken directly from the Saxofony class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
2002
Examples
Here is an example of the STKSaxofony opcode. It uses the file STKSaxofony.csd [examples/STKSaxofony.csd],
asig STKSaxofony cpspch(p4), 1, 2, kstiff, 4, 100, 26, 70, 11, kblw, 1, kvib, 29, 100 asig = asig * .5 ;too loud outs asig, asig endin </CsInstruments> <CsScore> i 1 0 3 6.00 30 100 10 i 1 + . 8.00 30 100 100 i 1 + . 7.00 90 127 30 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Georg Essl) Irreducible Productions New York, NY New in Csound version 5.11
2003
STKShakers
STKShakers STKShakers is an instrument that simulates environmental sounds or collisions of multiple independent sound producing objects.
Description
STKShakers are a set of PhISEM and PhOLIES instruments: PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects. It can simulate a Maraca, Sekere, Cabasa, Bamboo Wind Chimes, Water Drops, Tambourine, Sleighbells, and a Guiro. On http://soundlab.cs.princeton.edu/research/controllers/shakers/ PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) there is a similar approach for the synthesis of environmental sounds. It simulates of breaking sticks, crunchy snow (or not), a wrench, sandpaper, and more..
Syntax Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
asignal STKShakers ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5[, kc6,
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 6 controller numbers and values that work for STKShakers are: kc, kv -- 2, shake energy. kc, kv -- 4, system decay. kc, kv -- 128, .shake energy kc, kv -- 11, number of objects kc, kv -- 1, resonance frequency. kc, kv -- 1071, instrument selection (Maraca = 0, Cabasa = 1, Sekere = 2, Guiro = 3, Water Drops = 4, Bamboo Chimes = 5, Tambourine = 6, Sleigh Bells = 7, Sticks = 8, Crunch = 9, Wrench = 10, Sand Paper = 11, Coke Can = 12, Next Mug = 13, Penny + Mug = 14, Nickle + Mug = 15, Dime + Mug = 16, Quarter + Mug = 17, Franc + Mug = 18, Peso + Mug = 19, Big Rocks = 20, Little Rocks = 21, Tuned Bamboo Chimes = 22)
Note
The code for this opcode is taken directly from the Shakers class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found 2004
here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKShakers opcode. It uses the file STKShakerscsd [examples/STKShakers.csd].
e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Georg Essl) Irreducible Productions New York, NY New in Csound version 5.11
2005
STKSimple
STKSimple STKSimple is a wavetable/noise instrument.
Description
STKSimple is a wavetable/noise instrument. It combines a looped wave, a noise source, a biquad resonance filter, a one-pole filter, and an ADSR envelope to create some interesting sounds.
Syntax
asignal STKSimple ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 4 controller numbers and values that work for STKSimple are: kc, kv -- 2, position of filter pole. kc, kv -- 4, noise/pitched cross-fade kc, kv -- 11, rate of envelope. kc, kv -- 128, gain.
Note
The code for this opcode is taken directly from the Simple class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of [examples/STKSimple.csd]. the STKSimple opcode. It uses the file STKSimple.csd
2006
<CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKSimple.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kfil line p5, p3, p6 knois line 20, p3, 90 ;Filter Pole Position ;Noise/Pitched Cross-Fade
asig STKSimple cpspch(p4), 1, 2, kfil, 4, knois, 11, 100, 128, 120 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 .5 7.00 100 0 120 i 1 + . 7.05 10 127 220 i 1 + . 8.03 100 0 320 i 1 + 5 5.00 10 10 127 e </CsScore> </CsoundSynthesizer>
See Also
STKClarinet,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2007
STKSitar
STKSitar STKSitar uses a plucked string physical model.
Description
STKSitar uses a plucked string physical model based on the Karplus-Strong algorithm.
Syntax
asignal STKSitar ifrequency, iamplitude
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). There are no controller numbers and values that work for STKSitar.
Note
The code for this opcode is taken directly from the Sitar class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKSitar opcode. It uses the file STKSitar.csd [examples/STKSitar.csd].
2008
ifrq = p4 asig STKSitar cpspch(p4), 1 asig = asig * 3 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 4 6.00 i 1 + 2 7.05 i 1 + 4 5.05 e </CsScore> </CsoundSynthesizer> ;amplify
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2009
STKStifKarp
STKStifKarp STKStifKarp is a plucked stiff string instrument.
Description
STKStifKarp is a plucked stiff string instrument. It a simple plucked string algorithm (Karplus Strong) with enhancements, including string stiffness and pluck position controls. The stiffness is modeled with allpass filters.
Syntax
asignal STKStifKarp ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 3 controller numbers and values that work for STKStifKarp are: kc, kv -- 4, pickup position. kc, kv -- 11, string sustain kc, kv -- 1, string stretch.
Note
The code for this opcode is taken directly from the StifKarp class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKStifKarp opcode. It uses the file STKStifKarp.csd [examples/STKStifKarp.csd].
2010
-odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKStifKarp.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kpos line p6, p3, p7 ksus = p5 ;Pickup Position ;String Sustain
asig STKStifKarp cpspch(p4), 1, 4, kpos, 11, ksus, 1, 10 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 5.00 0 100 100 i 1 + 40 5.00 127 1 127 i 1 10 32 5.00 127 1 10 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2011
STKTubeBell
STKTubeBell STKTubeBell is a tubular bell (orchestral chime) FM synthesis instrument.
Description
STKTubeBell is a tubular bell (orchestral chime) FM synthesis instrument. It uses two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.
Syntax
asignal STKTubeBell ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKTubeBell are: kc, kv -- 2, modulator index 1. kc, kv -- 4, crossfade of outputs. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 target.
Note
The code for this opcode is taken directly from the TubeBell class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKTubeBell opcode. It uses the file STKTubeBell.csd [examples/STKTubeBell.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKTubeBell.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kfad line p6, p3, p7 kindx = p5 ;Crossfade of Outputs ;(FM) Modulator Index One
asig STKTubeBell cpspch(p4), 1, 2, kindx, 4, kfad, 11, 10, 1, 70, 128,50 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 7.05 0 100 100 i 1 + 4 9.00 127 127 30 i 1 + 1 10.00 127 12 30 i 1 + 3 6.08 127 1 100 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2013
STKVoicForm
STKVoicForm STKVoicForm is a four formant synthesis instrument.
Description
STKVoicForm is a four formant synthesis instrument. This instrument contains an excitation singing wavetable (looping wave with random and periodic vibrato, smoothing on frequency, etc.), excitation noise, and four sweepable complex resonances. Measured formant data is included, and enough data is there to support either parallel or cascade synthesis. In the floating point case cascade synthesis is the most natural so that's what you'll find here.
Syntax
asignal STKVoicForm ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKVoicForm are: kc, kv -- 2, voiced/unvoiced mix. kc, kv -- 4, vowel/phoneme selection. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, loudness (spectral tilt).
Note
The code for this opcode is taken directly from the VoicForm class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKVoicForm opcode. It uses the file STKVoicForm.csd [examples/ STKVoicForm.csd] , and ahh.aiff [examples/ahh.aiff] , eee.aiff [examples/eee.aiff] , ooo.aiff [examples/ ooo.aiff]. 2014
asig STKVoicForm cpspch(p4), 1, 2, 1, 4, ksel, 128, 100, 1, 10, 11, 100 asig = asig * .5 ;too loud outs asig, asig endin </CsInstruments> <CsScore> i 1 0 5 7.00 100 0 i 1 + 10 7.00 1 50 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2015
STKWhistle
STKWhistle STKWhistle produces whistle sounds.
Description
STKWhistle produces (police) whistle sounds. It uses a hybrid physical/spectral model of a police whistle (a la Cook).
Syntax
asignal STKWhistle ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKWhistle are: kc, kv -- 2, blowing frequency modulation. kc, kv -- 4, noise gain. kc, kv -- 11, fipple modulation frequency. kc, kv -- 1, fipple modulation gain. kc, kv -- 128, volume.
Note
The code for this opcode is taken directly from the Whistle class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKWhistle opcode. It uses the file STKWhistle.csd [examples/STKWhistle.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKWhistle.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kblw line p5, p3, p6 kflp = p7 ;Blowing Frequency Modulation ;Fipple Modulation Frequency
asig STKWhistle cpspch(p4), 1, 4, 20, 11, kflp, 1, 100, 2, kblw, 128, 127 asig = asig*.7 ;too loud outs asig, asig endin </CsInstruments> <CsScore> i 1 0 .5 9.00 100 30 30 i 1 1 3 9.00 100 0 20 i 1 4.5 . 9.00 1 0 100 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2017
STKWurley
STKWurley STKWurley simulates a Wurlitzer electric piano FM synthesis instrument.
Description
STKWurley simulates a Wurlitzer electric piano FM synthesis instrument. It uses two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.
Syntax
asignal STKWurley ifrequency, iamplitude, [kc1, kv1[, kc2, kv2[, kc3, kv3[, kc4, kv4[, kc5, kv5]]]]]
Initialization
ifrequency -- Frequency of note played, in Hertz. iamplitude -- Amplitude of note played (range 0-1).
Performance
kc1, kv1, kc2, kv2, kc3, kv3, kc4, kv4, kc5, kv5, kc6, kv6, kc7, kv7, kc8, kv8 -- Up to 8 optional k-rate controller pairs for the STK opcodes. Each controller pair consists of a controller number (kc) followed by a controller value (kv). The 5 controller numbers and values that work for STKWurley are: kc, kv -- 2, modulator index 1. kc, kv -- 4, crossfade of outputs. kc, kv -- 11, speed of low-frequency oscillator. kc, kv -- 1, depth of low-frequency oscillator. kc, kv -- 128, ADSR 2 and 4 target.
Note
The code for this opcode is taken directly from the Wurley class in the Synthesis Toolkit in C++ by Perry R. Cook and Gary P. Scavone. More on the STK classes can be found here: https://ccrma.stanford.edu/software/stk/classes.html
Examples
Here is an example of the STKWurley opcode. It uses the file STKWurley.csd [examples/STKWurley.csd], and fwavblnk.aiff [examples/fwavblnk.aiff].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o STKWurley.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifrq = p4 kndx line p5, p3, p6 kspd = p7 ;(FM) Modulator Index One
asig STKWurley cpspch(p4), 1, 2,kndx, 4, 10, 11, kspd, 1, 30, 128, 75 outs asig, asig endin </CsInstruments> <CsScore> i 1 0 .5 7.00 75 0 i 1 + . 8.00 120 0 i 1 + 1 6.00 50 120 i 1 + 4 8.00 10 10 e </CsScore> </CsoundSynthesizer> 20 20 20 127
See Also
STKRhodey,
Credits
Author: Michael Gogins (after Perry Cook) Irreducible Productions New York, NY New in Csound version 5.11
2019
strchar
strchar Return the ASCII code of a character in a string
Description
Return the ASCII code of the character in Sstr at ipos (defaults to zero which means the first character), or zero if ipos is out of range. strchar runs at init time only.
Syntax
ichr strchar Sstr[, ipos]
See also
strchark
Credits
Author: Istvan Varga 2006
2020
strchark
strchark Return the ASCII code of a character in a string
Description
Return the ASCII code of the character in Sstr at kpos (defaults to zero which means the first character), or zero if kpos is out of range. strchark runs both at init and performance time.
Syntax
kchr strchark Sstr[, kpos]
See also
strchar
Credits
Author: Istvan Varga 2006 New in version 5.02
2021
strcpy
strcpy Assign value to a string variable
Description
Assign to a string variable by copying the source which may be a constant or another string variable. strcpy and = copy the string at i-time only.
Syntax
Sdst strcpy Ssrc Sdst = Ssrc
Example
Sfoo strcpy "Hello, world !" puts Sfoo, 1
See also
strcpyk
Credits
Author: Istvan Varga 2005
2022
strcpyk
strcpyk Assign value to a string variable (k-rate)
Description
Assign to a string variable by copying the source which may be a constant or another string variable. strcpyk does the assignment both at initialization and performance time.
Syntax
Sdst strcpyk Ssrc
See also
strcpy
Credits
Author: Istvan Varga 2005
2023
strcat
strcat Concatenate strings
Description
Concatenate two strings and store the result in a variable. strcat runs at i-time only. It is allowed for any of the input arguments to be the same as the output variable.
Syntax
Sdst strcat Ssrc1, Ssrc2
Example
Sname Sname asig = "beats" strcat Sname, ".wav" soundin Sname
See also
strcatk
Credits
Author: Istvan Varga 2005 New in version 5.02
2024
strcatk
strcatk Concatenate strings (k-rate)
Description
Concatenate two strings and store the result in a variable. strcatk does the concatenation both at initialization and performance time. It is allowed for any of the input arguments to be the same as the output variable.
Syntax
Sdst strcatk Ssrc1, Ssrc2
See also
strcat
Credits
Author: Istvan Varga 2005 New in version 5.02
2025
strcmp
strcmp Compare strings
Description
Compare strings and set the result to -1, 0, or 1 if the first string is less than, equal to, or greater than the second, respectively. strcmp compares at i-time only.
Syntax
ires strcmp S1, S2
See also
strcmpk
Credits
Author: Istvan Varga 2005
2026
strcmpk
strcmp Compare strings
Description
Compare strings and set the result to -1, 0, or 1 if the first string is less than, equal to, or greater than the second, respectively. strcmpk does the comparison both at initialization and performance time.
Syntax
kres strcmpk S1, S2
See also
strcmp
Credits
Author: Istvan Varga 2005
2027
streson
streson A string resonator with variable fundamental frequency.
Description
An audio signal is modified by a string resonator with variable fundamental frequency.
Syntax
ares streson asig, kfr, ifdbgain
Initialization
ifdbgain -- feedback gain, between 0 and 1, of the internal delay line. A value close to 1 creates a slower decay and a more pronounced resonance. Small values may leave the input signal unaffected. Depending on the filter frequency, typical values are > .9.
Performance
asig -- the input audio signal. kfr -- the fundamental frequency of the string. streson passes the input asig through a network composed of comb, low-pass and all-pass filters, similar to the one used in some versions of the Karplus-Strong algorithm, creating a string resonator effect. The fundamental frequency of the string is controlled by the k-rate variable kfr.This opcode can be used to simulate sympathetic resonances to an input signal. See Modal Frequency Ratios for frequency ratios of real intruments which can be used to determine the values of kfrq. streson is an adaptation of the StringFlt object of the SndObj Sound Object Library developed by the author.
Examples
Here is an example of the streson opcode. It uses the file streson.csd [examples/streson.csd].
2028
<CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Generate a normal sine wave. asig oscils 1500, 440, 1 ; Vary the fundamental frequency of the string ; resonator linearly from 220 to 880 Hertz. kfr line 220, p3, 880 ifdbgain = 0.95 ; Run our sine wave through the string resonator. astres streson asig, kfr, ifdbgain ; The resonance can get quite loud. ; So we'll clip the signal at 30,000. a1 clip astres, 1, 30000 out a1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for five seconds. i 1 0 5 e </CsScore> </CsoundSynthesizer>
Credits
Author: Victor Lazzarini Music Department National University of Ireland, Maynooth Maynooth, Co. Kildare 1998 Example written by Kevin Conder. New in Csound version 3.494
2029
strget
strget Set string variable to value from strset table or string p-field
Description
strget sets a string variable at initialization time to the value stored in strset table at the specified index, or a string p-field from the score. If there is no string defined for the index, the variable is set to an empty string.
Syntax
Sdst strget indx
Initialization
indx -- strset index, or score p-field Sdst -- destination string variable
See also
strset
Credits
Author: Istvan Varga 2005
2030
strindex
strindex Return the position of the first occurence of a string in another string
Description
Return the position of the first occurence of S2 in S1, or -1 if not found. If S2 is empty, 0 is returned. strindex runs at init time only.
Syntax
ipos strindex S1, S2
See also
strindexk
Credits
Author: Istvan Varga 2006 New in version 5.02
2031
strindexk
strindexk Return the position of the first occurence of a string in another string
Description
Return the position of the first occurence of S2 in S1, or -1 if not found. If S2 is empty, 0 is returned. strindexk runs both at init and performance time.
Syntax
kpos strindexk S1, S2
See also
strindex
Credits
Author: Istvan Varga 2006 New in version 5.02
2032
strlen
strlen Return the length of a string
Description
Return the length of a string, or zero if it is empty. strlen runs at init time only.
Syntax
ilen strlen Sstr
See also
strlenk
Credits
Author: Istvan Varga 2006 New in version 5.02
2033
strlenk
strlenk Return the length of a string
Description
Return the length of a string, or zero if it is empty. strlenk runs both at init and performance time.
Syntax
klen strlenk Sstr
See also
strlen
Credits
Author: Istvan Varga 2006 New in version 5.02
2034
strlower
strlower Convert a string to lower case
Description
Convert Ssrc to lower case, and write the result to Sdst. strlower runs at init time only.
Syntax
Sdst strlower Ssrc
See also
strlowerk
Credits
Author: Istvan Varga 2006 New in version 5.02
2035
strlowerk
strlowerk Convert a string to lower case
Description
Convert Ssrc to lower case, and write the result to Sdst. strlowerk runs both at init and performance time.
Syntax
Sdst strlowerk Ssrc
See also
strlower
Credits
Author: Istvan Varga 2006 New in version 5.02
2036
strrindex
strrindex Return the position of the last occurence of a string in another string
Description
Return the position of the last occurence of S2 in S1, or -1 if not found. If S2 is empty, the length of S1 is returned. strrindex runs at init time only.
Syntax
ipos strrindex S1, S2
See also
strrindexk
Credits
Author: Istvan Varga 2006 New in version 5.02
2037
strrindexk
strrindexk Return the position of the last occurence of a string in another string
Description
Return the position of the last occurence of S2 in S1, or -1 if not found. If S2 is empty, the length of S1 is returned. strrindexk runs both at init and performance time.
Syntax
kpos strrindexk S1, S2
See also
strrindex
Credits
Author: Istvan Varga 2006 New in version 5.02
2038
strset
strset Allows a string to be linked with a numeric value.
Description
Allows a string to be linked with a numeric value.
Syntax
strset iarg, istring
Initialization
iarg -- the numeric value. istring -- the alphanumeric string (in double-quotes). strset (optional) allows a string, such as a filename, to be linked with a numeric value. Its use is optional.
Examples
The following statement, used in the orchestra header, will allow the numeric value 10 to be substituted anywhere the soundfile asound.wav is called for.
Examples
Here is an example of the strset opcode. It uses the file strset.csd [examples/strset.csd].
2039
; \\n is used to denote "new line" strset 1, "String 1\\n" strset 2, "String 2\\n" instr 1 Str strget p4 prints Str endin </CsInstruments> <CsScore> ; p4 is used to select string i 1 0 1 1 i 1 3 1 2 </CsScore> </CsoundSynthesizer>
See Also
pset and strget
2040
strsub
strsub Extract a substring
Description
Return a substring of the source string. strsub runs at init time only.
Syntax
Sdst strsub Ssrc[, istart[, iend]]
Initialization
istart (optional, defaults to 0) -- start position in Ssrc, counting from 0. A negative value means the end of the string. iend (optional, defaults to -1) -- end position in Ssrc, counting from 0. A negative value means the end of the string. If iend is less than istart, the output is reversed.
Examples
Here is an example of the strsub opcode. It uses the file strsub.csd [examples/strsub.csd].
printf "First string: %s\nSecond string: %s\n", 1, S1, S2 endin </CsInstruments> <CsScore> i 1 0 1 "String1:String2" </CsScore> </CsoundSynthesizer>
2041
See also
strsubk
Credits
Author: Istvan Varga 2006
2042
strsubk
strsubk Extract a substring
Description
Return a substring of the source string. strsubk runs both at init and performance time.
Syntax
Sdst strsubk Ssrc, kstart, kend
Performance
kstart -- start position in Ssrc, counting from 0. A negative value means the end of the string. kend -- end position in Ssrc, counting from 0. A negative value means the end of the string. If kend is less than kstart, the output is reversed.
See also
strsub
Credits
Author: Istvan Varga 2006
2043
strtod
strtod Converts a string to a float (i-rate).
Description
Convert a string to a floating point value. It is also possible to pass an strset index or a string p-field from the score instead of a string argument. If the string cannot be parsed as a floating point or integer number, an init or perf error occurs and the instrument is deactivated.
Syntax
ir strtod Sstr ir strtod indx
Initialization
Sstr -- String to convert. indx -- index of string set by strset
Performance
ir -- Value of string as float.
Credits
Author: Istvan Varga 2005
2044
strtodk
strtodk Converts a string to a float (k-rate).
Description
Convert a string to a floating point value at i- or k-rate. It is also possible to pass an strset index or a string p-field from the score instead of a string argument. If the string cannot be parsed as a floating point or integer number, an init or perf error occurs and the instrument is deactivated.
Note
If a k-rate index variable is used, it should be valid at i-time as well.
Syntax
kr strtodk Sstr kr strtodk kndx
Performance
kr -- Value of string as float. Sstr -- String to convert. indx -- index of string set by strset
Credits
Author: Istvan Varga 2005
2045
strtol
strtol Converts a string to a signed integer (i-rate).
Description
Convert a string to a signed integer value. It is also possible to pass an strset index or a string p-field from the score instead of a string argument. If the string cannot be parsed as an integer number, an init error occurs and the instrument is deactivated.
Syntax
ir strtol Sstr ir strtol indx
Initialization
Sstr -- String to convert. indx -- index of string set by strset strtol can parse numbers in decimal, octal (prefixed by 0), and hexadecimal (with a prefix of 0x) format.
Performance
ir -- Value of string as signed integer.
Credits
Author: Istvan Varga 2005
2046
strtolk
strtolk Converts a string to a signed integer (k-rate).
Description
Convert a string to a signed integer value at i- or k-rate. It is also possible to pass an strset index or a string p-field from the score instead of a string argument. If the string cannot be parsed as an integer number, an init or perf error occurs and the instrument is deactivated.
Note
If a k-rate index variable is used, it should be valid at i-time as well.
Syntax
kr strtolk Sstr kr strtolk kndx
strtolk can parse numbers in decimal, octal (prefixed by 0), and hexadecimal (with a prefix of 0x) format.
Performance
kr -- Value of string as signed integer. Sstr -- String to convert. indx -- index of string set by strset
Credits
Author: Istvan Varga 2005
2047
strupper
strupper Convert a string to upper case
Description
Convert Ssrc to upper case, and write the result to Sdst. strupper runs at init time only.
Syntax
Sdst strupper Ssrc
See also
strupperk
Credits
Author: Istvan Varga 2006 New in version 5.02
2048
strupperk
strupperk Convert a string to upper case
Description
Convert Ssrc to upper case, and write the result to Sdst. strupperk runs both at init and performance time.
Syntax
Sdst strupperk Ssrc
See also
strupper
Credits
Author: Istvan Varga 2006 New in version 5.02
2049
subinstr
subinstr Creates and runs a numbered instrument instance.
Description
Creates an instance of another instrument and is used as if it were an opcode.
Syntax
a1, [...] [, a8] subinstr instrnum [, p4] [, p5] [...] a1, [...] [, a8] subinstr "insname" [, p4] [, p5] [...]
Initialization
instrnum -- Number of the instrument to be called. insname -- A string (in double-quotes) representing a named instrument. For more information about specifying input and output interfaces, see Calling an Instrument within an Instrument.
Performance
a1, ..., a8 -- The audio output from the called instrument. This is generated using the signal output opcodes. p4, p5, ... -- Additional input values the are mapped to the called instrument p-fields, starting with p4. The called instrument's p2 and p3 values will be identical to the host instrument's values. While the host instrument can control its own duration, any such attempts inside the called instrument will most likely have no effect.
See Also
Calling an Instrument within an Instrument, event, schedule, subinstrinit
Examples
Here is an example of the subinstr opcode. It uses the file subinstr.csd [examples/subinstr.csd].
2050
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o subinstr.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - Creates a basic tone. instr 1 ; Print the value of p4, should be equal to ; Instrument #2's iamp field. print p4 ; Print the value of p5, should be equal to ; Instrument #2's ipitch field. print p5 ; Create a tone. asig oscils p4, p5, 0 out asig endin ; Instrument #2 - Demonstrates the subinstr opcode. instr 2 iamp = 20000 ipitch = 440 ; Use Instrument #1 to create a basic sine-wave tone. ; Its p4 parameter will be set using the iamp variable. ; Its p5 parameter will be set using the ipitch variable. abasic subinstr 1, iamp, ipitch ; Output the basic tone that we have created. out abasic endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #2 for one second. i 2 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the subinstr opcode using a named instrument. It uses the file subinstr_named.csd [examples/subinstr_named.csd].
according to platform audio I/O only the line below: for file output any platform
2051
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument "basic_tone" - Creates a basic tone. instr basic_tone ; Print the value of p4, should be equal to ; Instrument #2's iamp field. print p4 ; Print the value of p5, should be equal to ; Instrument #2's ipitch field. print p5 ; Create a tone. asig oscils p4, p5, 0 out asig endin ; Instrument #1 - Demonstrates the subinstr opcode. instr 1 iamp = 20000 ipitch = 440 ; Use the "basic_tone" named instrument to create a ; basic sine-wave tone. ; Its p4 parameter will be set using the iamp variable. ; Its p5 parameter will be set using the ipitch variable. abasic subinstr "basic_tone", iamp, ipitch ; Output the basic tone that we have created. out abasic endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Credits
New in version 4.21
2052
subinstrinit
subinstrinit Creates and runs a numbered instrument instance at init-time.
Description
Same as subinstr, but init-time only and has no output arguments.
Syntax
subinstrinit instrnum [, p4] [, p5] [...] subinstrinit "insname" [, p4] [, p5] [...]
Initialization
instrnum -- Number of the instrument to be called. insname -- A string (in double-quotes) representing a named instrument. For more information about specifying input and output interfaces, see Calling an Instrument within an Instrument.
Performance
p4, p5, ... -- Additional input values the are mapped to the called instrument p-fields, starting with p4. The called instrument's p2 and p3 values will be identical to the host instrument's values. While the host instrument can control its own duration, any such attempts inside the called instrument will most likely have no effect.
See Also
Calling an Instrument within an Instrument, event, schedule, subinstr
Credits
New in version 4.23
2053
sum
sum Sums any number of a-rate signals.
Description
Sums any number of a-rate signals.
Syntax
ares sum asig1 [, asig2] [, asig3] [...]
Performance
asig1, asig2, ... -- a-rate signals to be summed (mixed or added).
Credits
Author: Gabriel Maldonado Italy April 1999 New in Csound version 3.54
2054
svfilter
svfilter A resonant second order filter, with simultaneous lowpass, highpass and bandpass outputs.
Description
Implementation of a resonant second order filter, with simultaneous lowpass, highpass and bandpass outputs.
Syntax
alow, ahigh, aband svfilter asig, kcf, kq [, iscl]
Initialization
iscl -- coded scaling factor, similar to that in reson. A non-zero value signifies a peak response factor of 1, i.e. all frequencies other than kcf are attenuated in accordance with the (normalized) response curve. A zero value signifies no scaling of the signal, leaving that to some later adjustment (see balance). The default value is 0.
Performance
svfilter is a second order state-variable filter, with k-rate controls for cutoff frequency and Q. As Q is increased, a resonant peak forms around the cutoff frequency. svfilter has simultaneous lowpass, highpass, and bandpass filter outputs; by mixing the outputs together, a variety of frequency responses can be generated. The state-variable filter, or "multimode" filter was a common feature in early analog synthesizers, due to the wide variety of sounds available from the interaction between cutoff, resonance, and output mix ratios. svfilter is well suited to the emulation of "analog" sounds, as well as other applications where resonant filters are called for. asig -- Input signal to be filtered. kcf -- Cutoff or resonant frequency of the filter, measured in Hz. kq -- Q of the filter, which is defined (for bandpass filters) as bandwidth/cutoff. kq should be in a range between 1 and 500. As kq is increased, the resonance of the filter increases, which corresponds to an increase in the magnitude and "sharpness" of the resonant peak. When using svfilter without any scaling of the signal (where iscl is either absent or 0), the volume of the resonant peak increases as Q increases. For high values of Q, it is recommended that iscl be set to a non-zero value, or that an external scaling function such as balance is used. svfilter is based upon an algorithm in Hal Chamberlin's Musical Applications of Microprocessors (Hayden Books, 1985).
Examples
Here is an example of the svfilter opcode. It uses the file svfilter.csd [examples/svfilter.csd].
2055
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o svfilter.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Orchestra file for resonant filter sweep of a sawtooth-like waveform. ; The seperate outputs of the filter are scaled by values from the score, ; and are mixed together. sr = 44100 kr = 2205 ksmps = 20 nchnls = 1 instr 1 idur ifreq iamp ilowamp ihighamp ibandamp iq iharms asig kfreq = = = = = = = = p3 p4 p5 p6 p7 p8 p9
; ; ; ;
determines amount of lowpass output in signal determines amount of highpass output in signal determines amount of bandpass output in signal value of q
gbuzz 1, ifreq, iharms, 1, .9, 1 linseg 1, idur * 0.5, 4000, idur * 0.5, 1 svfilter asig, kfreq, iq
alow, ahigh, aband aout1 aout2 aout3 asum kenv endin </CsInstruments> <CsScore> f1 0 8192 9 1 1 .25 i1 i1 i1 i1 i1 i1 i1 e 0 5 10 15 20 25 30 5 5 5 5 5 5 5 100 200 100 200 100 200 200 1000 1000 1000 1000 1000 1000 2000
= alow * ilowamp = ahigh * ihighamp = aband * ibandamp = aout1 + aout2 + aout3 linseg 0, .1, iamp, idur -.2, iamp, .1, 0 out asum * kenv
1 0 0 5 1 0 0 30 0 1 0 5 0 1 0 30 0 0 1 5 0 0 1 30 .4 .6 0
; ; ; ; ; ; ;
lowpass sweep lowpass sweep, octave higher, higher q highpass sweep highpass sweep, octave higher, higher q bandpass sweep bandpass sweep, octave higher, higher q notch sweep - notch formed by combining highpass and lowpass outputs
</CsScore> </CsoundSynthesizer>
Credits
Author: Sean Costello Seattle, Washington 1999 2056
2057
syncgrain
syncgrain Synchronous granular synthesis.
Description
syncgrain implements synchronous granular synthesis. The source sound for the grains is obtained by reading a function table containing the samples of the source waveform. For sampled-sound sources, GEN01 is used. syncgrain will accept deferred allocation tables. The grain generator has full control of frequency (grains/sec), overall amplitude, grain pitch (a sampling increment) and grain size (in secs), both as fixed or time-varying (signal) parameters. An extra parameter is the grain pointer speed (or rate), which controls which position the generator will start reading samples in the table for each successive grain. It is measured in fractions of grain size, so a value of 1 (the default) will make each successive grain read from where the previous grain should finish. A value of 0.5 will make the next grain start at the midway position from the previous grain start and finish, etc.. A value of 0 will make the generator read always from a fixed position of the table (wherever the pointer was last at). A negative value will decrement pointer positions. This control gives extra flexibility for creating timescale modifications in the resynthesis. syncgrain will generate any number of parallel grain streams (which will depend on grain density/frequency), up to the iolaps value (default 100). The number of streams (overlapped grains) is determined by grainsize*grain_freq. More grain overlaps will demand more calculations and the synthesis might not run in realtime (depending on processor power). syncgrain can simulate FOF-like formant synthesis, provided that a suitable shape is used as grain envelope and a sinewave as the grain wave. For this use, grain sizes of around 0.04 secs can be used. The formant centre frequency is determined by the grain pitch. Since this is a sampling increment, in order to use a frequency in Hz, that value has to be scaled by tablesize/sr. Grain frequency will determine the fundamental. syncgrain uses floating-point indexing, so its precision is not affected by large-size tables. This opcode is based on the SndObj library SyncGrain class.
Syntax
asig syncgrain kamp, kfreq, kpitch, kgrsize, kprate, ifun1, \ ifun2, iolaps
Initialization
ifun1 -- source signal function table. Deferred-allocation tables (see GEN01) are accepted, but the opcode expects a mono source. ifun2 -- grain envelope function table. iolaps -- maximum number of overlaps, max(kfreq)*max(kgrsize). Estimating a large value should not affect performance, but exceeding this value will probably have disastrous consequences.
Performance
kamp -- amplitude scaling
2058
kfreq -- frequency of grain generation, or density, in grains/sec. kpitch -- grain pitch scaling (1=normal pitch, < 1 lower, > 1 higher; negative, backwards) kgrsize -- grain size in secs. kprate -- readout pointer rate, in grains. The value of 1 will advance the reading pointer 1 grain ahead in the source table. Larger values will time-compress and smaller values will time-expand the source signal. Negative values will cause the pointer to run backwards and zero will freeze it.
Examples
Example 605. Example
= = = =
= .5 = 1
Credits
Author: Victor Lazzarini January 2005 New plugin in version 5 January 2005.
2059
syncloop
syncloop Synchronous granular synthesis.
Description
syncloop is a variation on syncgrain, which implements synchronous granular synthesis. syncloop adds loop start and end points and an optional start position. Loop start and end control grain start positions, so the actual grains can go beyond the loop points (if the loop points are not at the extremes of the table), enabling seamless crossfading. For more information on the granular synthesis process, check the syncgrain manual page.
Syntax
asig syncloop kamp, kfreq, kpitch, kgrsize, kprate, klstart, \ klend, ifun1, ifun2, iolaps[,istart, iskip]
Initialization
ifun1 -- source signal function table. Deferred-allocation tables (see GEN01) are accepted, but the opcode expects a mono source. ifun2 -- grain envelope function table. iolaps -- maximum number of overlaps, max(kfreq)*max(kgrsize). Estimating a large value should not affect performance, but execeeding this value will probably have disastrous consequences. istart -- starting point of synthesis in secs (defaults to 0). iskip -- if 1, the opcode initialisation is skipped, for tied notes, performance continues from the position in the loop where the previous note stopped. The default, 0, does not skip initialisation
Performance
kamp -- amplitude scaling kfreq -- frequency of grain generation, or density, in grains/sec. kpitch -- grain pitch scaling (1=normal pitch, < 1 lower, > 1 higher; negative, backwards) kgrsize -- grain size in secs. kprate -- readout pointer rate, in grains. The value of 1 will advance the reading pointer 1 grain ahead in the source table. Larger values will time-compress and smaller values will time-expand the source signal. Negative values will cause the pointer to run backwards and zero will freeze it. klstart -- loop start in secs. klend -- loop end in secs.
Examples
2060
= = = =
= .5 = 1
Credits
Author: Victor Lazzarini January 2005 New plugin in version 5 January 2005.
2061
syncphasor
syncphasor Produces a normalized moving phase value with sync input and output.
Description
Produces a moving phase value between zero and one and an extra impulse output ("sync out") whenever its phase value crosses or is reset to zero. The phase can be reset at any time by an impulse on the "sync in" parameter.
Syntax
aphase, asyncout syncphasor xcps, asyncin, [, iphs]
Initialization
iphs (optional) -- initial phase, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is zero.
Performance
aphase -- the output phase value; always between 0 and 1. asyncout -- the sync output has a value of 1.0 for one sample whenever the phase value crosses zero or whenever the sync input is non-zero. It is zero at all other times. asyncin -- the sync input causes the phase to reset to zero whenever asyncin is non-zero. xcps -- frequency of the phasor in cycles-per-second. If xcps is negative, the phase value will decrease from 1 to 0 instead of increasing. An internal phase is successively accumulated in accordance with the xcps frequency to produce a moving phase value, normalized to lie in the range 0 <= phs < 1. When used as the index to a table unit, this phase (multiplied by the desired function table length) will cause it to behave like an oscillator. The phase of syncphasor though can be synced to another phasor (or other signal) using the asyncin parameter. Any time that asyncin is a non-zero value, the value of aphase will be reset to zero. syncphasor also outputs its own "sync" signal that consists of a one-sample impulse whenever its phase crosses zero or is reset. This makes it easy to chain together multiple syncphasor opcodes to create an oscillator "hard sync" effect.
Examples
Here is an example of the syncphasor opcode. It uses the file syncphasor.csd [examples/syncphasor.csd].
2062
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o abs.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> instr 1 ; Use two syncphasors - one is the "master", ; the other the "slave" ; master's frequency determines pitch imastercps = cpspch(p4) imaxamp = 10000 ; the slave's frequency affects the timbre kslavecps line imastercps, p3, imastercps * 3 ; the master "oscillator" ; the master has no sync input anosync init 0.0 am, async syncphasor imastercps, anosync ; the slave "oscillator" aout, as syncphasor kslavecps, async adeclick linseg 0.0, 0.05, 1.0, p3 - 0.1, 1.0, 0.05, 0.0
; Output the slave's phase value which is a rising ; sawtooth wave. This produces aliasing, but hey, this ; this is just an example ;) out endin </CsInstruments> <CsScore> i1 i1 i1 i1 i1 i1 e </CsScore> </CsoundSynthesizer> 0 + + + + + 1 0.5 . . . 2 7.00 7.02 7.05 7.07 7.09 7.06 aout * adeclick * imaxamp
Here is another example of the syncphasor opcode. It uses the file syncphasor-CZresonance.csd [examples/syncphasor-CZresonance.csd].
2063
; by the master phasor. ; Based on information from the Wikipedia article on phase distortion: ; http://en.wikipedia.org/wiki/Phase_distortion_synthesis ; Sawtooth Resonance waveform. Smoothing function is just the inverted ; master phasor. ; ; ; ; ; The Wikipedia article shows an inverted cosine as the stored waveform, which implies that it must be unipolar for the smoothing to work. I have substituted a sine wave in the first phrase to keep the output bipolar. The second phrase demonstrates the much "rezzier" sound of the bipolar cosine due to discontinuities. = = = = init cpspch(p4) p5 p6 10000 0.0 line syncphasor syncphasor tablei = linseg out endin ; ; ; ; Triangle or Trapezoidal Resonance waveform. Uses a second table to change the shape of the smoothing function. (This is my best guess so far as to how these worked). The cosine table works fine with the triangular smoothing but we once again need to use a sine table with the trapezoidal smoothing. ifreq * initReson, p3, ifreq ifreq, anosync ; pair of phasors kslavecps, async ; slave synced to master aslave, itable, 1 ; use slave phasor to read a (co)sine table aosc * (1.0 - amaster) ; inverted master smoothes jumps 0.0, 0.05, 1.0, p3 - 0.1, 1.0, 0.05, 0.0 aout * adeclick * imaxamp
; (It might be interesting to be able to vary the "width" of the trapezoid. ; This could be done with the pdhalf opcode). instr 2 ifreq initReson itable ismoothtbl imaxamp anosync = = = = = init cpspch(p4) p5 p6 p7 10000 0.0 line syncphasor syncphasor tablei tablei = linseg ifreq * initReson, p3, ifreq ifreq, anosync ; pair of phasors kslavecps, async ; slave synced to master aslave, itable, 1 ; use slave phasor to read a (co)sine table amaster, ismoothtbl, 1 ; use master phasor to read smoothing table aosc * asmooth 0.0, 0.05, 1.0, p3 - 0.1, 1.0, 0.05, 0.0
kslavecps amaster, async aslave, async2 aosc asmooth aout adeclick out endin
</CsInstruments> <CsScore> f1 0 16385 10 1 f3 0 16385 9 1 1 270 ; inverted cosine f5 0 4097 7 0.0 2048 1.0 2049 0.0 ; unipolar triangle f6 0 4097 7 1.0 2048 1.0 2049 0.0 ; "trapezoid" ; Sawtooth resonance with a sine table i1 0 1 7.00 5.0 1 i. + 0.5 7.02 4.0 i. + . 7.05 3.0 i. + . 7.07 2.0 i. + . 7.09 1.0 i. + 2 7.06 12.0 f0 6 s ; Sawtooth resonance with a cosine table i1 0 1 7.00 5.0 3 i. + 0.5 7.02 4.0 i. + . 7.05 3.0 i. + . 7.07 2.0 i. + . 7.09 1.0
2064
i. + 2 f0 6 s
7.06
12.0
; Triangle resonance with a cosine table i2 0 1 7.00 5.0 3 5 i. + 0.5 7.02 4.0 i. + . 7.05 3.0 i. + . 7.07 2.0 i. + . 7.09 1.0 i. + 2 7.06 12.0 f0 6 s ; Trapezoidal resonance with a sine table i2 0 1 7.00 5.0 1 6 i. + 0.5 7.02 4.0 i. + . 7.05 3.0 i. + . 7.07 2.0 i. + . 7.09 1.0 i. + 2 7.06 12.0 e </CsScore> </CsoundSynthesizer>
See also
phasor. And the Table Access opcodes like: table, tablei, table3 and tab.
Credits
Adapted from the phasor opcode by Anthony Kozar January 2008 New in Csound version 5.08
2065
system
system Call an external program via the system call
Description
system and system_i call any external command understood by the operating system, similarly to the C function system(). system_i runs at i-time only, while system runs both at initialization and performance time.
Syntax
ires system_i itrig, Scmd, [inowait] kres system ktrig, Scmd, [knowait]
Initialization
Scmd -- command string itrig -- if greater than zero the opcode performs the printing; otherwise it is an null operation.
Performance
ktrig -- if greater than zero and different from the value on the previous control cycle the opcode performs the requested printing. Initially this previous value is taken as zero. inowait,knowait -- if given an non zero the command is run in the background and the command does not wait for the result. (default = 0) ires, kres -- the return code of the command in wait mode and if the command is run.In other cases returns zero. More than one system command (a script) can be executed with a single system opcode by using double braces strings {{ }}.
Note
This opcode is very system dependant, so should be used with extreme care (or not used) if platform neutrality is desired.
Example
Here is an example of the system_i opcode. It uses the file system.csd [examples/system.csd].
2066
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac ; -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o system.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 ; Waits for command to execute before continuing ires system_i 1,{{ ps date cd ~/Desktop pwd ls -l whois csounds.com }} print ires turnoff endin instr 2 ; Runs command in a separate thread ires system_i 1,{{ ps date cd ~/Desktop pwd ls -l whois csounds.com }}, 1 print ires turnoff endin </CsInstruments> <CsScore> ; Play Instrument #1 for thirty seconds. i 1 0 1 i 2 5 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch 2007 New in version 5.06
2067
tb
tb0, tb1, tb2, tb3, tb4, tb5, tb6, tb7, tb8, tb9, tb10, tb11, tb12, tb13, tb14, tb15, tb0_init, tb1_init, tb2_init, tb3_init, tb4_init, tb5_init, tb6_init, tb7_init, tb8_init, tb9_init, tb10_init, tb11_init, tb12_init, tb13_init, tb14_init, tb15_init Table Read Access inside expressions.
Description
Allow to read tables in function fashion, to be used inside expressions. At present time Csound only supports functions with a single input argument. However, to access table elements, user must provide two numbers, i.e. the number of table and the index of element. So, in order to allow to access a table element with a function, a previous preparation step should be done.
Syntax
tb0_init ifn tb1_init ifn tb2_init ifn tb3_init ifn tb4_init ifn tb5_init ifn tb6_init ifn tb7_init ifn tb8_init ifn tb9_init ifn tb10_init ifn tb11_init ifn tb12_init ifn tb13_init ifn tb14_init ifn tb15_init ifn iout = tb0(iIndex) kout = tb0(kIndex)
2068
iout = tb1(iIndex) kout = tb1(kIndex) iout = tb2(iIndex) kout = tb2(kIndex) iout = tb3(iIndex) kout = tb3(kIndex) iout = tb4(iIndex) kout = tb4(kIndex) iout = tb5(iIndex) kout = tb5(kIndex) iout = tb6(iIndex) kout = tb6(kIndex) iout = tb7(iIndex) kout = tb7(kIndex) iout = tb8(iIndex) kout = tb8(kIndex) iout = tb9(iIndex) kout = tb9(kIndex) iout = tb10(iIndex) kout = tb10(kIndex) iout = tb11(iIndex) kout = tb11(kIndex) iout = tb12(iIndex) kout = tb12(kIndex) iout = tb13(iIndex) kout = tb13(kIndex) iout = tb14(iIndex)
2069
Performance
There are 16 different opcodes whose name is associated with a number from 0 to 15. User can associate a specific table with each opcode (so the maximum number of tables that can be accessed in function fashion is 16). Prior to access a table, user must associate the table with one of the 16 opcodes by means of an opcode chosen among tb0_init, ..., tb15_init. For example,
tb0_init 1
associates table 1 with tb0( ) function, so that, each element of table 1 can be accessed (in function fashion) with:
kvar = tb0(k_some_index_of_table1) * k_some_other_var
etc... By using these opcodes, user can drastically reduce the number of lines of an orchestra, improving its readability.
Credits
Written by Gabriel Maldonado.
2070
tab
tab Fast table opcodes.
Description
Fast table opcodes. Faster than table and tablew because don't allow wrap-around and limit and don't check index validity. Have been implemented in order to provide fast access to arrays. Support nonpower of two tables (can be generated by any GEN function by giving a negative length value).
Syntax
ir tab_i indx, ifn[, ixmode] kr tab kndx, ifn[, ixmode] ar tab xndx, ifn[, ixmode] tabw_i isig, indx, ifn [,ixmode] tabw ksig, kndx, ifn [,ixmode] tabw asig, andx, ifn [,ixmode]
Initialization
ifn -- table number ixmode -- defaults to zero. If zero xndx and ixoff ranges match the length of the table; if non zero xndx and ixoff have a 0 to 1 range. isig -- input value to write. indx -- table index
Performance
asig, ksig -- input signal to write. andx, kndx -- table index. tab and tabw opcodes are similar to table and tablew, but are faster and support tables having nonpower-of-two length. Special care of index value must be taken into account. Index values out of the table allocated space will crash Csound.
Credits
Written by Gabriel Maldonado.
2071
tabrec
tabrec Recording of control signals.
Description
Records control-rate signals on trigger-temporization basis.
Syntax
tabrec ktrig_start, ktrig_stop, knumtics, kfn, kin1 [,kin2,...,kinN]
Performance
ktrig_start -- start recording when non-zero. ktrig_stop -- stop recording when knumtics trigger impulses are received by this input argument. knumtics -- stop recording or reset playing pointer to zero when the number of tics defined by this argument is reached. kfn -- table where k-rate signals are recorded. kin1,...,kinN -- input signals to record. The tabrec and tabplay opcodes allow to record/playback control signals on trigger-temporization basis. tabrec opcode records a group of k-rate signals by storing them into kfn table. Each time ktrig_start is triggered, tabrec resets the table pointer to zero and begins to record. Recording phase stops after knumtics trigger impulses have been received by ktrig_stop argument. These opcodes can be used like a sort of ``middle-term'' memory that ``remembers'' generated signals. Such memory can be used to supply generative music with a coherent iterative compositional structure.
See Also
tabplay
Credits
Written by Gabriel Maldonado.
2072
table
table Accesses table values by direct indexing.
Description
Accesses table values by direct indexing.
Syntax
ares table andx, ifn [, ixmode] [, ixoff] [, iwrap] ires table indx, ifn [, ixmode] [, ixoff] [, iwrap] kres table kndx, ifn [, ixmode] [, ixoff] [, iwrap]
Initialization
ifn -- function table number. ixmode (optional) -- index data mode. The default value is 0. 0 = raw index 1 = normalized (0 to 1) ixoff (optional) -- amount by which index is to be offset. For a table with origin at center, use tablesize/2 (raw) or .5 (normalized). The default value is 0. iwrap (optional) -- wraparound index flag. The default value is 0. 0 = nowrap (index < 0 treated as index=0; index > tablesize sticks at index=size) 1 = wraparound.
Performance
table invokes table lookup on behalf of init, control or audio indices. These indices can be raw entry numbers (0,l,2...size - 1) or scaled values (0 to 1-e). Indices are first modified by the offset value then checked for range before table lookup (see iwrap). If index is likely to be full scale, or if interpolation is being used, the table should have an extended guard point. table indexed by a periodic phasor ( see phasor) will simulate an oscillator.
Examples
Here is an example of the table opcode. It uses the file table.csd [examples/table.csd].
2073
See Also
tablei, table3, oscil1, oscil1i, osciln
Credits
Example written by Kevin Conder.
2074
table3
table3 Accesses table values by direct indexing with cubic interpolation.
Description
Accesses table values by direct indexing with cubic interpolation.
Syntax
ares table3 andx, ifn [, ixmode] [, ixoff] [, iwrap] ires table3 indx, ifn [, ixmode] [, ixoff] [, iwrap] kres table3 kndx, ifn [, ixmode] [, ixoff] [, iwrap]
Initialization
ifn -- function table number. ixmode (optional) -- index data mode. The default value is 0. 0 = raw index 1 = normalized (0 to 1) ixoff (optional) -- amount by which index is to be offset. For a table with origin at center, use tablesize/2 (raw) or .5 (normalized). The default value is 0. iwrap (optional) -- wraparound index flag. The default value is 0. 0 = nowrap (index < 0 treated as index=0; index > tablesize sticks at index=size) 1 = wraparound.
Performance
table3 is identical to tablei, except that it uses cubic interpolation. (New in Csound version 3.50).
See Also
table, tablei, oscil1, oscil1i, osciln
2075
tablecopy
tablecopy Simple, fast table copy opcode.
Description
Simple, fast table copy opcode.
Syntax
tablecopy kdft, ksft
Performance
kdft -- Destination function table. ksft -- Number of source function table. tablecopy -- Simple, fast table copy opcode. Takes the table length from the destination table, and reads from the start of the source table. For speed reasons, does not check the source length - just copies regardless - in wrap mode. This may read through the source table several times. A source table with length 1 will cause all values in the destination table to be written to its value. tablecopy cannot read or write the guardpoint. To read it use table, with ndx = the table length. Likewise use table write to write it. To write the guardpoint to the value in location 0, use tablegpw. This is primarily to change function tables quickly in a real-time situation.
See Also
tablegpw, tablemix, tableicopy, tableigpw, tableimix
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2076
tablefilter
tablefilter Filters a source table and writes result into a destination table.
Description
This opcode can be used in order to filter values from function tables following certain algorithms. The filtered output is written into a destination table and the number of elements that have passed the filter is returned.
Syntax
knumpassed tablefilter kouttable, kintatble, kmode, kparam
Performance
knumpassed -- the number of elements that have passed the filter. kouttable -- the number of the table containing the values that have passed. kintatble -- the number of the table used as filter input. kmode -- mode of the filter: 1 -- tests the weight of the denominators of the fractions in the source table. Letting pass only vaules from the source that are less heavy than the weight of the threshold. 2 -- tests the weight of the denominators of the fractions in the source table. Letting pass only vaules from the source that are heavier than or equal to the weight of the threshold. kparam -- integer threshold parameter for the filter. It means that denominators whose weights are heavier than the weight of this threshold are not passed through the filter. The weight of an integer is calculated using Clarence Barlow's function of indigestibility of a number. According to this function, higher prime numbers contribute to an increased weight of any natural integer they divide. The order of the first 16 integers according to their indigestibility is: 1, 2, 4, 3, 8, 6, 16, 12, 9, 5, 10, 15, 7, 14
Examples
Here is an example of the tablefilter opcode. It uses the file tablefilter.csd [examples/tablefilter.csd].
2077
sr=44100 ksmps=10 nchnls=1 gifarn init 8 ; initialise integer for Farey Sequence F_8 gires fareyleni gifarn ; calculate length of F_8, returns 23 ; the table length won't be a power of 2 ; (The length of a Farey Sequence with n > 1 is always odd) gilen init gires * -1 ; initialize destiniation table with 0s gifiltered ftgen 0, 0, gilen, 21, 1, 0 ; initialize second destiniation table with 0s gifiltered2 ftgen 0, 0, gilen, 21, 1, 0 ; table filtering opcode: dest. source, mode, threshold ginumpassed tablefilteri gifiltered, gifarey, 1, 6 ; the threshold parameter indicates that denominators whose weights are heavier ; than 6 are not passing through the filter. The weight is calculated using ; Clarence Barlow's function of indigestibility of a number. According to this function, ; higher prime numbers contribute to an increased weight of any natural integer they divide. ; ginumpassed is the number of elements from the source table 'gifarey' ; that have passed the test and which have been copied to the destination table 'gifiltered' ; apply a different filter: ginumpassed2 tablefilteri gifiltered2, gifarey, 2, 5 ; In mode=2 we again test the digestibility of the denominators of the ; fractions in the source table. ; The difference to mode=1 is that we now let pass only vaules from the ; source that are as heavy as the threshold or greater. instr 4 kndx init 0 ; read out elements of now filtered F_8 sequentially and print to file if (kndx < ginumpassed) then kelem tab kndx, gifiltered fprintks "fareyfilter_lp.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin instr 5 kndx init 0 ; read out elements and print to file if (kndx < ginumpassed2) then kelem tab kndx, gifiltered2 fprintks "fareyfilter_hp.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin </CsInstruments> <CsScore> f1 0 23 "farey" 8 i4 0 1 i5 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: Georg Boenn University of Glamorgan, UK New in Csound version 5.13
2078
tablefilteri
tablefilteri Filters a source table and writes result into a destination table.
Description
This opcode can be used in order to filter values from function tables following certain algorithms. The filtered output is written into a destination table and the number of elements that have passed the filter is returned.
Syntax
inumpassed tablefilteri iouttable, iintatble, imode, iparam
Performance
inumpassed -- the number of elements that have passed the filter. iouttable -- the number of the table containing the values that have passed. iintatble -- the number of the table used as filter input. imode -- mode of the filter: 1 -- tests the weight of the denominators of the fractions in the source table. Letting pass only vaules from the source that are less heavy than the weight of the threshold. 2 -- tests the weight of the denominators of the fractions in the source table. Letting pass only vaules from the source that are heavier than or equal to the weight of the threshold. iparam -- integer threshold parameter for the filter. It means that denominators whose weights are heavier than the weight of this threshold are not passed through the filter. The weight of an integer is calculated using Clarence Barlow's function of indigestibility of a number. According to this function, higher prime numbers contribute to an increased weight of any natural integer they divide. The order of the first 16 integers according to their indigestibility is: 1, 2, 4, 3, 8, 6, 16, 12, 9, 5, 10, 15, 7, 14
Examples
Here is an example of the tablefilteri opcode. It uses the file tablefilter.csd [examples/tablefilter.csd].
2079
sr=44100 ksmps=10 nchnls=1 gifarn init 8 ; initialise integer for Farey Sequence F_8 gires fareyleni gifarn ; calculate length of F_8, returns 23 ; the table length won't be a power of 2 ; (The length of a Farey Sequence with n > 1 is always odd) gilen init gires * -1 ; initialize destiniation table with 0s gifiltered ftgen 0, 0, gilen, 21, 1, 0 ; initialize second destiniation table with 0s gifiltered2 ftgen 0, 0, gilen, 21, 1, 0 ; table filtering opcode: dest. source, mode, threshold ginumpassed tablefilteri gifiltered, gifarey, 1, 6 ; the threshold parameter indicates that denominators whose weights are heavier ; than 6 are not passing through the filter. The weight is calculated using ; Clarence Barlow's function of indigestibility of a number. According to this function, ; higher prime numbers contribute to an increased weight of any natural integer they divide. ; ginumpassed is the number of elements from the source table 'gifarey' ; that have passed the test and which have been copied to the destination table 'gifiltered' ; apply a different filter: ginumpassed2 tablefilteri gifiltered2, gifarey, 2, 5 ; In mode=2 we again test the digestibility of the denominators of the ; fractions in the source table. ; The difference to mode=1 is that we now let pass only vaules from the ; source that are as heavy as the threshold or greater. instr 4 kndx init 0 ; read out elements of now filtered F_8 sequentially and print to file if (kndx < ginumpassed) then kelem tab kndx, gifiltered fprintks "fareyfilter_lp.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin instr 5 kndx init 0 ; read out elements and print to file if (kndx < ginumpassed2) then kelem tab kndx, gifiltered2 fprintks "fareyfilter_hp.txt", "%2.6f\\n", kelem kndx = kndx+1 endif endin </CsInstruments> <CsScore> f1 0 23 "farey" 8 i4 0 1 i5 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: Georg Boenn University of Glamorgan, UK New in Csound version 5.13
2080
tablegpw
tablegpw Writes a table's guard point.
Description
Writes a table's guard point.
Syntax
tablegpw kfn
Performance
kfn -- Table number to be interrogated tablegpw -- For writing the table's guard point, with the value which is in location 0. Does nothing if table does not exist. Likely to be useful after manipulating a table with tablemix or tablecopy.
See Also
tablecopy, tablemix, tableicopy, tableigpw, tableimix
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2081
tablei
tablei Accesses table values by direct indexing with linear interpolation.
Description
Accesses table values by direct indexing with linear interpolation.
Syntax
ares tablei andx, ifn [, ixmode] [, ixoff] [, iwrap] ires tablei indx, ifn [, ixmode] [, ixoff] [, iwrap] kres tablei kndx, ifn [, ixmode] [, ixoff] [, iwrap]
Initialization
ifn -- function table number. tablei requires the extended guard point. ixmode (optional) -- index data mode. The default value is 0. 0 = raw index 1 = normalized (0 to 1) ixoff (optional) -- amount by which index is to be offset. For a table with origin at center, use tablesize/2 (raw) or .5 (normalized). The default value is 0. iwrap (optional) -- wraparound index flag. The default value is 0. 0 = nowrap (index < 0 treated as index=0; index > tablesize sticks at index=size) 1 = wraparound.
Performance
tablei is a interpolating unit in which the fractional part of index is used to interpolate between adjacent table entries. The smoothness gained by interpolation is at some small cost in execution time (see also oscili, etc.), but the interpolating and non-interpolating units are otherwise interchangeable. Note that when tablei uses a periodic index whose modulo n is less than the power of 2 table length, the interpolation process requires that there be an (n + 1)th table value that is a repeat of the 1st (see f Statement in score).
See Also
table, table3, oscil1, oscil1i, osciln
2082
tableicopy
tableicopy Simple, fast table copy opcode.
Description
Simple, fast table copy opcode.
Syntax
tableicopy idft, isft
Initialization
idft -- Destination function table. isft -- Number of source function table.
Performance
tableicopy -- Simple, fast table copy opcodes. Takes the table length from the destination table, and reads from the start of the source table. For speed reasons, does not check the source length - just copies regardless - in "wrap" mode. This may read through the source table several times. A source table with length 1 will cause all values in the destination table to be written to its value. tableicopy cannot read or write the guardpoint. To read it use table, with ndx = the table length. Likewise use table write to write it. To write the guardpoint to the value in location 0, use tablegpw. This is primarily to change function tables quickly in a real-time situation.
See Also
tablecopy, tablegpw, tablemix, tableigpw, tableimix
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2083
tableigpw
tableigpw Writes a table's guard point.
Description
Writes a table's guard point.
Syntax
tableigpw ifn
Initialization
ifn -- Table number to be interrogated
Performance
tableigpw -- For writing the table's guard point, with the value which is in location 0. Does nothing if table does not exist. Likely to be useful after manipulating a table with tablemix or tablecopy.
See Also
tablecopy, tablegpw, tablemix, tableicopy, tableimix
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2084
tableikt
tableikt Provides k-rate control over table numbers.
Description
k-rate control over table numbers. Function tables are read with linear interpolation. The standard Csound opcode tablei, when producing a k- or a-rate result, can only use an init-time variable to select the table number. tableikt accepts k-rate control as well as i-time. In all other respects they are similar to the original opcodes.
Syntax
ares tableikt xndx, kfn [, ixmode] [, ixoff] [, iwrap] kres tableikt kndx, kfn [, ixmode] [, ixoff] [, iwrap]
Initialization
ixmode -- if 0, xndx and ixoff ranges match the length of the table. if non-zero xndx and ixoff have a 0 to 1 range. Default is 0 ixoff -- if 0, total index is controlled directly by xndx, ie. the indexing starts from the start of the table. If non-zero, start indexing from somewhere else in the table. Value must be positive and less than the table length (ixmode = 0) or less than 1 (ixmode not equal to 0). Default is 0. iwrap -- if iwrap = 0, Limit mode: when total index is below 0, then final index is 0.Total index above table length results in a final index of the table length - high out of range total indexes stick at the upper limit of the table. If iwrap not equal to 0, Wrap mode: total index is wrapped modulo the table length so that all total indexes map into the table. For instance, in a table of length 8, xndx = 5 and ixoff = 6 gives a total index of 11, which wraps to a final index of 3. Default is 0.
Performance
kndx -- Index into table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0). xndx -- matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0) kfn -- Table number. Must be >= 1. Floats are rounded down to an integer. If a table number does not point to a valid table, or the table has not yet been loaded (GEN01) then an error will result and the instrument will be de-activated.
2085
See Also
tablekt
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2086
tableimix
tableimix Mixes two tables.
Description
Mixes two tables.
Syntax
tableimix idft, idoff, ilen, is1ft, is1off, is1g, is2ft, is2off, is2g
Initialization
idft -- Destination function table. idoff -- Offset to start writing from. Can be negative. ilen -- Number of write operations to perform. Negative means work backwards. is1ft, is2ft -- Source function tables. These can be the same as the destination table, if care is exercised about direction of copying data. is1off, is2off -- Offsets to start reading from in source tables. is1g, is2g -- Gains to apply when reading from the source tables. The results are added and the sum is written to the destination table.
Performance
tableimix -- This opcode mixes from two tables, with separate gains into the destination table. Writing is done for ilen locations, usually stepping forward through the table - if ilen is positive. If it is negative, then the writing and reading order is backwards - towards lower indexes in the tables. This bi-directional option makes it easy to shift the contents of a table sideways by reading from it and writing back to it with a different offset. If ilen is 0, no writing occurs. Note that the internal integer value of ilen is derived from the ANSI C floor() function - which returns the next most negative integer. Hence a fractional negative ilen value of -2.3 would create an internal length of 3, and cause the copying to start from the offset locations and proceed for two locations to the left. The total index for table reading and writing is calculated from the starting offset for each table, plus the index value, which starts at 0 and then increments (or decrements) by 1 as mixing proceeds. These total indexes can potentially be very large, since there is no restriction on the offset or the ilen. However each total index for each table is ANDed with a length mask (such as 0000 0111 for a table of length 8) to form a final index which is actually used for reading or writing. So no reading or writing can occur outside the tables. This is the same as wrap mode in table read and write. These opcodes do not read or write the guardpoint. If a table has been rewritten with one of these, then if it has a guardpoint which is supposed to contain the same value as the location 0, then call tableigpw afterwards. The indexes and offsets are all in table steps - they are not normalized to 0 - 1. So for a table of length 256, ilen should be set to 256 if all the table was to be read or written. 2087
The tables do not need to be the same length - wrapping occurs individually for each table.
See Also
tablecopy, tablegpw, tablemix, tableicopy, tableigpw
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2088
tableiw
tableiw Change the contents of existing function tables.
Description
This opcode operates on existing function tables, changing their contents. tableiw is used when all inputs are init time variables or constants and you only want to run it at the initialization of the instrument. The valid combinations of variable types are shown by the first letter of the variable names.
Syntax
tableiw isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode]
Initialization
isig -- Input value to write to the table. indx -- Index into table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0) ifn -- Table number. Must be >= 1. Floats are rounded down to an integer. If a table number does not point to a valid table, or the table has not yet been loaded (GEN01) then an error will result and the instrument will be de-activated. ixmode (optional, default=0) -- index mode. 0 = indx and ixoff ranges match the length of the table. not equal to 0 = indx and ixoff have a 0 to 1 range. ixoff (optional, default=0) -- index offset. 0 = Total index is controlled directly by indx, i.e. the indexing starts from the start of the table. Not equal to 0 = Start indexing from somewhere else in the table. Value must be positive and less than the table length (ixmode = 0) or less than 1 (ixmode not equal to 0). iwgmode (optional, default=0) -- Wrap and guard point mode. 0 = Limit mode. 1 = Wrap mode. 2 = Guardpoint mode.
Performance
2089
See Also
tablew, tablewkt
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47 Updated August 2002, thanks go to Abram Hindle for pointing out the correct syntax.
2090
tablekt
tablekt Provides k-rate control over table numbers.
Description
k-rate control over table numbers. The standard Csound opcode table when producing a k- or a-rate result, can only use an init-time variable to select the table number. tablekt accepts k-rate control as well as i-time. In all other respects they are similar to the original opcodes.
Syntax
ares tablekt xndx, kfn [, ixmode] [, ixoff] [, iwrap] kres tablekt kndx, kfn [, ixmode] [, ixoff] [, iwrap]
Initialization
ixmode -- if 0, xndx and ixoff ranges match the length of the table. if non-zero xndx and ixoff have a 0 to 1 range. Default is 0 ixoff -- if 0, total index is controlled directly by xndx, ie. the indexing starts from the start of the table. If non-zero, start indexing from somewhere else in the table. Value must be positive and less than the table length (ixmode = 0) or less than 1 (ixmode not equal to 0). Default is 0. iwrap -- if iwrap = 0, Limit mode: when total index is below 0, then final index is 0.Total index above table length results in a final index of the table length - high out of range total indexes stick at the upper limit of the table. If iwrap not equal to 0, Wrap mode: total index is wrapped modulo the table length so that all total indexes map into the table. For instance, in a table of length 8, xndx = 5 and ixoff = 6 gives a total index of 11, which wraps to a final index of 3. Default is 0.
Performance
kndx -- Index into table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0). xndx -- matching the table length (ixmode = 0) or a 0 to 1 range (ixmode not equal to 0) kfn -- Table number. Must be >= 1. Floats are rounded down to an integer. If a table number does not point to a valid table, or the table has not yet been loaded (GEN01) then an error will result and the instrument will be de-activated.
2091
See Also
tableikt
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2092
tablemix
tablemix Mixes two tables.
Description
Mixes two tables.
Syntax
tablemix kdft, kdoff, klen, ks1ft, ks1off, ks1g, ks2ft, ks2off, ks2g
Performance
kdft -- Destination function table. kdoff -- Offset to start writing from. Can be negative. klen -- Number of write operations to perform. Negative means work backwards. ks1ft, ks2ft -- Source function tables. These can be the same as the destination table, if care is exercised about direction of copying data. ks1off, ks2off -- Offsets to start reading from in source tables. ks1g, ks2g -- Gains to apply when reading from the source tables. The results are added and the sum is written to the destination table. tablemix -- This opcode mixes from two tables, with separate gains into the destination table. Writing is done for klen locations, usually stepping forward through the table - if klen is positive. If it is negative, then the writing and reading order is backwards - towards lower indexes in the tables. This bi-directional option makes it easy to shift the contents of a table sideways by reading from it and writing back to it with a different offset. If klen is 0, no writing occurs. Note that the internal integer value of klen is derived from the ANSI C floor() function - which returns the next most negative integer. Hence a fractional negative klen value of -2.3 would create an internal length of 3, and cause the copying to start from the offset locations and proceed for two locations to the left. The total index for table reading and writing is calculated from the starting offset for each table, plus the index value, which starts at 0 and then increments (or decrements) by 1 as mixing proceeds. These total indexes can potentially be very large, since there is no restriction on the offset or the klen. However each total index for each table is ANDed with a length mask (such as 0000 0111 for a table of length 8) to form a final index which is actually used for reading or writing. So no reading or writing can occur outside the tables. This is the same as wrap mode in table read and write. These opcodes do not read or write the guardpoint. If a table has been rewritten with one of these, then if it has a guardpoint which is supposed to contain the same value as the location 0, then call tablegpw afterwards. The indexes and offsets are all in table steps - they are not normalized to 0 - 1. So for a table of length 256, klen should be set to 256 if all the table was to be read or written. The tables do not need to be the same length - wrapping occurs individually for each table.
2093
See Also
tablecopy, tablegpw, tableicopy, tableigpw, tableimix
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47
2094
tableng
tableng Interrogates a function table for length.
Description
Interrogates a function table for length.
Syntax
ires tableng ifn kres tableng kfn
Initialization
ifn -- Table number to be interrogated
Performance
kfn -- Table number to be interrogated tableng returns the length of the specified table. This will be a power of two number in most circumstances. It will not show whether a table has a guardpoint or not. It seems this information is not available in the table's data structure. If the specified table is not found, then 0 will be returned. Likely to be useful for setting up code for table manipulation operations, such as tablemix and tablecopy.
Examples
Here is an example of the tableng opcode. It uses the file tableng.csd [examples/tableng.csd].
2095
instr 1 ; Let's look at Table #1. ifn = 1 ilen tableng ifn print ilen endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
The table is 16,384 samples long. So its output should include a line like this:
instr 1: ilen = 16384.000
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder.
2096
tablera
tablera Reads tables in sequential locations.
Description
These opcode reads tables in sequential locations to an a-rate variable. Some thought is required before using it. It has at least two major, and quite different, applications which are discussed below.
Syntax
ares tablera kfn, kstart, koff
Performance
ares -- a-rate destination for reading ksmps values from a table. kfn -- i- or k-rate number of the table to read or write. kstart -- Where in table to read or write. koff -- i- or k-rate offset into table. Range unlimited - see explanation at end of this section. In one application, tablera is intended to be used in pair with tablewa, or with several tablera opcodes before a tablewa -- all sharing the same kstart variable. These read from and write to sequential locations in a table at audio rates, with ksmps floats being written and read each cycle. tablera starts reading from location kstart. tablewa starts writing to location kstart, and then writes to kstart with the number of the location one more than the one it last wrote. (Note that for tablewa, kstart is both an input and output variable.) If the writing index reaches the end of the table, then no further writing occurs and zero is written to kstart. For instance, if the table's length was 16 (locations 0 to 15), and ksmps was 5. Then the following steps would occur with repetitive runs of the tablewa opcode, assuming that kstart started at 0. Run Number 1 2 3 4 Initial kstart 0 5 10 15 Final kstart 5 10 15 0 Locations Written 01234 56789 10 11 12 13 14 15
This is to facilitate processing table data using standard a-rate orchestra code between the tablera and tablewaopcodes. They allow all Csound k-rate operators to be used (with caution) on a-rate variables something that would only be possible otherwise by ksmps = 1, downsamp and upsamp.
Several cautions
2097
The k-rate code in the processing loop is really running at a-rate, so time dependent functions like port and oscil work faster than normal - their code is expecting to be running at k-rate. This system will produce undesirable results unless the ksmps fits within the table length. For instance a table of length 16 will accommodate 1 to 16 samples, so this example will work with ksmps = 1 to 16.
Both these opcodes generate an error and deactivate the instrument if a table with length < ksmps is selected. Likewise an error occurs if kstart is below 0 or greater than the highest entry in the table - if kstart = table length.
kstart is intended to contain integer values between 0 and (table length - 1). Fractional values above this should not affect operation but do not achieve anything useful. These opcodes are not interpolating, and the kstart and koff parameters always have a range of 0 to (table length - 1) - not 0 to 1 as is available in other table read/write opcodes. koff can be outside this range but it is wrapped around by the final AND operation. These opcodes are permanently in wrap mode. When koff is 0, no wrapping needs to occur, since the kstart++ index will always be within the table's normal range. koff not equal to 0 can lead to wrapping. The offset does not affect the number of read/write cycles performed, or the value written to kstart by tablewa. These opcodes cannot read or write the guardpoint. Use tablegpw to write the guardpoint after manipulations have been done with tablewa.
Examples
kstart lab1: atemp atemp = 0 ; Read 5 values from table into an
0 goto lab1 ; Loop until all table locations ; have been processed.
The above example shows a processing loop, which runs every k-cycle, reading each location in the table ktabsource, and writing the log of those values into the same locations of table ktabdest. This enables whole tables, parts of tables (with offsets and different control loops) and data from several tables at once to be manipulated with a-rate code and written back to another (or to the same) table. This is a bit of a fudge, but it is faster than doing it with k-rate table read and write code.
2098
kzero = 0 kloop = 0 kzero tablewa 23, asignal, 0 ; ksmps a-rate samples written ; into locations 0 to (ksmps -1) of table 23. lab1: ktemp table kloop, 23 ; Start a loop which runs ksmps times, ; in which each cycle processes one of [ Some code to manipulate ] ; table 23's values with k-rate orchestra [ the value of ktemp. ] ; code. tablew ktemp, kloop, 23 ; Write the processed value to the table.
kloop = kloop + 1 ; Increment the kloop, which is both the ; pointer into the table and the loop if kloop < ksmps goto lab1 ; counter. Keep looping until all values ; in the table have been processed. asignal tablera 23, 0, 0 ; Copy the table contents back ; to an a-rate variable.
koff -- This is an offset which is added to the sum of kstart and the internal index variable which steps through the table. The result is then ANDed with the lengthmask (000 0111 for a table of length 8 - or 9 with guardpoint) and that final index is used to read or write to the table. koff can be any value. It is converted into a long using the ANSI floor() function so that -4.3 becomes -5. This is what we would want when using offsets which range above and below zero. Ideally this would be an optional variable, defaulting to 0, however with the existing Csound orchestra read code, such default parameters must be init time only. We want k-rate here, so we cannot have a default.
See Also
tablewa
2099
tableseg
tableseg Creates a new function table by making linear segments between values in stored function tables.
Description
tableseg is like linseg but interpolate between values in a stored function tables. The result is a new function table passed internally to any following vpvoc which occurs before a subsequent tableseg (much like lpread/lpreson pairs work). The uses of these are described below under vpvoc.
Syntax
tableseg ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]
Initialization
ifn1, ifn2, ifn3, etc. -- function table numbers. ifn1, ifn2, and so on, must be the same size. idur1, idur2, etc. -- durations during which interpolation from one table to the next will take place.
See Also
pvbufread, pvcross, pvinterp, pvread, tablexseg
Credits
Author: Richard Karpen Seattle, Wash 1997 New in version 3.44
2100
tableshuffle
tableshuffle shuffles the content of a function table so that each element of the source table is put into a different random position.
Description
This opcode can be used in order to shuffle the content of function tables into a random order but without loosing any of the elements. Imagine shuffling a deck of cards. Each element of the table is copied to a different random position. If that position was already chosen before then the next free position is chosen. The length of the table remains the same.
Syntax
tableshuffle ktablenum tableshufflei itablenum
Performance
ktablenum or itablenum -- the number of the table to shuffle.
Examples
Here is an example of the tableshuffle opcode. It uses the file farey7shuffled.csd [examples/ farey7shuffled.csd].
2101
ifundam init p7 ktrigger seqtime ktime_unit, kstart, kloop, kinitndx, kfn_times if (ktrigger > 0 ) then kpitch = cpspch(ifundam) kmult tab kindx2, gimult kpitch = kpitch * kmult knote = kbasenote + kmult event "i", 901, 0, .4, .1, kpitch, kpitch * .9, .4, 5, .75, .8, kindx = kindx + 1 kindx = kindx % kloop kindx2 = kindx2 + 1 kindx2 = kindx2 % kloop if (kindx2 == 0) then tableshuffle gimult endif endif endin ; 1
;------ basic 2 Operators FM algorithm ---------------instr 901 inotedur = p3 imaxamp = p4 ;ampdb(p4) icarrfreq = p5 imodfreq = p6 ilowndx = p7 indxdiff = p8-p7 knote = p27 aampenv linseg p9, p14*p3, p10, p15*p3, p11, p16*p3, p12, p17*p3, p13 adevenv linseg p18, p23*p3, p19, p24*p3, p20, p25*p3, p21, p26*p3, p22 amodosc oscili (ilowndx+indxdiff*adevenv)*imodfreq, imodfreq, 10 acarosc oscili imaxamp*aampenv, icarrfreq+amodosc, 10 out acarosc ;------ we also write down a midi track here ---------midion 1, knote, 100 endin ; 901 </CsInstruments> <CsScore> f10 0 4096 10 1 f100 0 -18 "farey" 7 1 f101 0 -18 "farey" 7 2 ; ; ; ; ; ; ; p4 kstart := index offset into the Farey Sequence p5 kloop := end index into Farey Seq. p6 timefac := time in seconds for one loop to complete p7 fundam := fundamental of the FM instrument p8 basenote:= root pitch of the midi voice output note that pitch structures of the midi file output are not equivalent to the ones used for the FM real-time synthesis. kstart kloop timefac fundam. basenote 18 1 6.05 60 18 3 7.05 72 0 18 1.5 8 84 0 18 1 5 48 5 17 1.7 4 36 0
See Also
GEN farey, tablefilter, tablecopy
Credits
Author: Georg Boenn University of Glamorgan, UK New in Csound version 5.13 2102
tablew
tablew Change the contents of existing function tables.
Description
This opcode operates on existing function tables, changing their contents. tablew is for writing at k- or at a-rates, with the table number being specified at init time. Using tablew with i-rate signal and index values is allowed, but the specified data will always be written to the function table at k-rate, not during the initialization pass. The valid combinations of variable types are shown by the first letter of the variable names.
Syntax
tablew asig, andx, ifn [, ixmode] [, ixoff] [, iwgmode] tablew isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode] tablew ksig, kndx, ifn [, ixmode] [, ixoff] [, iwgmode]
Initialization
asig, isig, ksig -- The value to be written into the table. andx, indx, kndx -- Index into table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0) ifn -- Table number. Must be >= 1. Floats are rounded down to an integer. If a table number does not point to a valid table, or the table has not yet been loaded (GEN01) then an error will result and the instrument will be de-activated. ixmode (optional, default=0) -- index mode. 0 = xndx and ixoff ranges match the length of the table. !=0 = xndx and ixoff have a 0 to 1 range. ixoff (optional, default=0) -- index offset. 0 = Total index is controlled directly by xndx, i.e. the indexing starts from the start of the table. !=0 = Start indexing from somewhere else in the table. Value must be positive and less than the table length (ixmode = 0) or less than 1 (ixmode != 0). iwgmode (optional, default=0) -- Wrap and guardpoint mode. 0 = Limit mode. 1 = Wrap mode. 2103
2 = Guardpoint mode.
Performance
Limit mode (0)
Limit the total index (ndx + ixoff) to between 0 and the guard point. For a table of length 5, this means that locations 0 to 3 and location 4 (the guard point) can be written. A negative total index writes to location 0.
Warning
Note that tablew is always a k-rate opcode. This means that even its i-rate version runs at k-rate and will write the value of the i-rate variable. For this reason, the following code will not work as expected: 2104
<CsoundSynthesizer> <CsOptions> </CsOptions> <CsInstruments> giFt ftgen 1, 0, 8, 2, 0 instr 1 indx = 0 tablew 10, indx, giFt ival tab_i indx, giFt print ival endin </CsInstruments> <CsScore> i 1 0 1 </CsScore> </CsoundSynthesizer>
Although it may seem this program should print a 10 to the console. It will print 0, because tab_i will read the value at the initialization of the note, before the first performance pass, when tablew writes its value.
See Also
tableiw, tablewkt
Credits
Author: Robin Whittle Australia May 1997
2105
tablewa
tablewa Writes tables in sequential locations.
Description
This opcode writes to a table in sequential locations to and from an a-rate variable. Some thought is required before using it. It has at least two major, and quite different, applications which are discussed below.
Syntax
kstart tablewa kfn, asig, koff
Performance
kstart -- Where in table to read or write. kfn -- i- or k-rate number of the table to read or write. asig -- a-rate signal to read from when writing to the table. koff -- i- or k-rate offset into table. Range unlimited - see explanation at end of this section. In one application, it is intended to be used with one or with several tablera opcodes before a tablewa -all sharing the same kstart variable. These read from and write to sequential locations in a table at audio rates, with ksmps floats being written and read each cycle. tablera starts reading from location kstart. tablewa starts writing to location kstart, and then writes to kstart with the number of the location one more than the one it last wrote. (Note that for tablewa, kstart is both an input and output variable.) If the writing index reaches the end of the table, then no further writing occurs and zero is written to kstart. For instance, if the table's length was 16 (locations 0 to 15), and ksmps was 5. Then the following steps would occur with repetitive runs of the tablewa opcode, assuming that kstart started at 0. Run Number 1 2 3 4 Initial kstart 0 5 10 15 Final kstart 5 10 15 0 Locations Written 01234 56789 10 11 12 13 14 15
This is to facilitate processing table data using standard a-rate orchestra code between the tablera and tablewa opcodes. They allow all Csound k-rate operators to be used (with caution) on a-rate variables something that would only be possible otherwise by ksmps = 1, downsamp and upsamp.
Several cautions
2106
The k-rate code in the processing loop is really running at a-rate, so time dependent functions like port and oscil work faster than normal - their code is expecting to be running at k-rate. This system will produce undesirable results unless the ksmps fits within the table length. For instance a table of length 16 will accommodate 1 to 16 samples, so this example will work with ksmps = 1 to 16.
Both these opcodes generate an error and deactivate the instrument if a table with length < ksmps is selected. Likewise an error occurs if kstart is below 0 or greater than the highest entry in the table - if kstart = table length.
kstart is intended to contain integer values between 0 and (table length - 1). Fractional values above this should not affect operation but do not achieve anything useful. These opcodes are not interpolating, and the kstart and koff parameters always have a range of 0 to (table length - 1) - not 0 to 1 as is available in other table read/write opcodes. koff can be outside this range but it is wrapped around by the final AND operation. These opcodes are permanently in wrap mode. When koff is 0, no wrapping needs to occur, since the kstart++ index will always be within the table's normal range. koff not equal to 0 can lead to wrapping. The offset does not affect the number of read/write cycles performed, or the value written to kstart by tablewa. These opcodes cannot read or write the guardpoint. Use tablegpw to write the guardpoint after manipulations have been done with tablewa.
Examples
kstart lab1: atemp atemp = 0 ; Read 5 values from table into an
0 goto lab1 ; Loop until all table locations ; have been processed.
The above example shows a processing loop, which runs every k-cycle, reading each location in the table ktabsource, and writing the log of those values into the same locations of table ktabdest. This enables whole tables, parts of tables (with offsets and different control loops) and data from several tables at once to be manipulated with a-rate code and written back to another (or to the same) table. This is a bit of a fudge, but it is faster than doing it with k-rate table read and write code.
2107
kzero = 0 kloop = 0 kzero tablewa 23, asignal, 0 ; ksmps a-rate samples written ; into locations 0 to (ksmps -1) of table 23. lab1: ktemp table kloop, 23 ; Start a loop which runs ksmps times, ; in which each cycle processes one of [ Some code to manipulate ] ; table 23's values with k-rate orchestra [ the value of ktemp. ] ; code. tablew ktemp, kloop, 23 ; Write the processed value to the table.
kloop = kloop + 1 ; Increment the kloop, which is both the ; pointer into the table and the loop if kloop < ksmps goto lab1 ; counter. Keep looping until all values ; in the table have been processed. asignal tablera 23, 0, 0 ; Copy the table contents back ; to an a-rate variable.
koff -- This is an offset which is added to the sum of kstart and the internal index variable which steps through the table. The result is then ANDed with the lengthmask (000 0111 for a table of length 8 - or 9 with guardpoint) and that final index is used to read or write to the table. koff can be any value. It is converted into a long using the ANSI floor() function so that -4.3 becomes -5. This is what we would want when using offsets which range above and below zero. Ideally this would be an optional variable, defaulting to 0, however with the existing Csound orchestra read code, such default parameters must be init time only. We want k-rate here, so we cannot have a default.
Credits
Author: Robin Whittle Australia
2108
tablewkt
tablewkt Change the contents of existing function tables.
Description
This opcode operates on existing function tables, changing their contents. tablewkt uses a k-rate variable for selecting the table number. The valid combinations of variable types are shown by the first letter of the variable names.
Syntax
tablewkt asig, andx, kfn [, ixmode] [, ixoff] [, iwgmode] tablewkt ksig, kndx, kfn [, ixmode] [, ixoff] [, iwgmode]
Initialization
asig, ksig -- The value to be written into the table. andx, kndx -- Index into table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0) kfn -- Table number. Must be >= 1. Floats are rounded down to an integer. If a table number does not point to a valid table, or the table has not yet been loaded (GEN01) then an error will result and the instrument will be de-activated. ixmode -- index mode. Default is zero. 0 = xndx and ixoff ranges match the length of the table. Not equal to 0 = xndx and ixoff have a 0 to 1 range. ixoff -- index offset. Default is 0. 0 = Total index is controlled directly by xndx, i.e. the indexing starts from the start of the table. Not equal to 0 = Start indexing from somewhere else in the table. Value must be positive and less than the table length (ixmode = 0) or less than 1 (ixmode != 0). iwgmode -- table writing mode. Default is 0. 0 = Limit mode. 1 = Wrap mode. 2 = Guardpoint mode.
2109
Performance
Limit mode (0)
Limit the total index (ndx + ixoff) to between 0 and the guard point. For a table of length 5, this means that locations 0 to 3 and location 4 (the guard point) can be written. A negative total index writes to location 0.
See Also
tableiw, tablew
Credits
Author: Robin Whittle Australia May 1997 2110
2111
tablexkt
tablexkt Reads function tables with linear, cubic, or sinc interpolation.
Description
Reads function tables with linear, cubic, or sinc interpolation.
Syntax
ares tablexkt xndx, kfn, kwarp, iwsize [, ixmode] [, ixoff] [, iwrap]
Initialization
iwsize -- This parameter controls the type of interpolation to be used: 2: Use linear interpolation. This is the lowest quality, but also the fastest mode. 4: Cubic interpolation. Slightly better quality than iwsize = 2, at the expense of being somewhat slower. 8 and above (up to 1024): sinc interpolation with window size set to iwsize (should be an integer multiply of 4). Better quality than linear or cubic interpolation, but very slow. When transposing up, a kwarp value above 1 can be used for anti-aliasing (this is even slower). ixmode1 (optional) -- index data mode. The default value is 0. 0: raw index any non-zero value: normalized (0 to 1)
Notes
if tablexkt is used to play back samples with looping (e.g. table index is generated by lphasor), there must be at least iwsize / 2 extra samples after the loop end point for interpolation, otherwise audible clicking may occur (also, at least iwsize / 2 samples should be before the loop start point). ixoff (optional) -- amount by which index is to be offset. For a table with origin at center, use tablesize / 2 (raw) or 0.5 (normalized). The default value is 0. iwrap (optional) -- wraparound index flag. The default value is 0. 0: Nowrap (index < 0 treated as index = 0; index >= tablesize (or 1.0 in normalized mode) sticks at the guard point). any non-zero value: Index is wrapped to the allowed range (not including the guard point in this case).
2112
Note
iwrap also applies to extra samples for interpolation.
Performance
ares -- audio output xndx -- table index kfn -- function table number kwarp -- if greater than 1, use sin (x / kwarp) / x function for sinc interpolation, instead of the default sin (x) / x. This is useful to avoid aliasing when transposing up (kwarp should be set to the transpose factor in this case, e.g. 2.0 for one octave), however it makes rendering up to twice as slow. Also, iwsize should be at least kwarp * 8. This feature is experimental, and may be optimized both in terms of speed and quality in new versions.
Note
kwarp has no effect if it is less than, or equal to 1, or linear or cubic interpolation is used.
Examples
Here is an example of the tablexkt opcode. It uses the file tablexkt.csd [examples/tablexkt.csd].
= 4 ; transpose up 4 octaves = 16 ; allow iwsize/2 samples at start = ilen - 16 ; and at end = 3 ; loop forwards and backwards = 16 ; start 16 samples into loop lphasor itrns, ilps, ilpe, imode, istrt ; use lphasor as index = alphs
2113
= = =
; read f1 4 ; anti-aliasing, should be same value as itrns above 32 ; iwsize must be at least 8 * kwarp andx, kfn, kwarp, iwsize
tablexkt =
out endin
Credits
Author: Istvan Varga January 2002 Example by: Jonathan Murphy 2006 New in version 4.18
2114
tablexseg
tablexseg Creates a new function table by making exponential segments between values in stored function tables.
Description
tablexseg is like expseg but interpolate between values in a stored function tables. The result is a new function table passed internally to any following vpvoc which occurs before a subsequent tablexseg (much like lpread/lpreson pairs work). The uses of these are described below under vpvoc.
Syntax
tablexseg ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]
Initialization
ifn1, ifn2, ifn3, etc. -- function table numbers. ifn1, ifn2, and so on, must be the same size. idur1, idur2, etc. -- durations during which interpolation from one table to the next will take place.
See Also
pvbufread, pvcross, pvinterp, pvread, tableseg
Credits
Author: Richard Karpen Seattle, WA USA 1997
2115
tabmorph
tabmorph Allow morphing between a set of tables.
Description
tabmorph allows morphing between a set of tables of the same size, by means of a weighted average between two currently selected tables.
Syntax
kout tabmorph kindex, kweightpoint, ktabnum1, ktabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ...,ifnN]
Initialization
ifn1, ifn2 [, ifn3, ifn4, ..., ifnN] - function table numbers. This is a set of chosen tables the user want to use in the morphing. All tables must have the same length. Be aware that only two of these tables can be chosen for the morphing at one time. Since it is possible to use non-integer numbers for the ktabnum1 and ktabnum2 arguments, the morphing is the result from the interpolation between adjacent consecutive tables of the set.
Performance
kout - The output value for index kindex, resulting from morphing two tables (see below). kindex - main index of the morphed resultant table. The range is 0 to table_length (not included). kweightpoint - the weight of the influence of a pair of selected tables in the morphing. The range of this argument is 0 to 1. A zero makes it output the first table unaltered, a 1 makes it output the second table of the pair unaltered. All intermediate values between 0 and 1 determine the gradual morphing between the two tables of the pair. ktabnum1 - the first table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, the corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. ktabnum2 - the second table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. The tabmorph family of opcodes is similar to the table family, but allows morphing between two tables chosen into a set of tables. Firstly the user has to provide a set of tables of equal length (ifn2 [, ifn3, ifn4, ..., ifnN]). Then he can choose a pair of tables in the set in order to perform the morphing: ktabnum1 and ktabnum2 are filled with numbers (zero represents the first table in the set, 1 the second, 2 the third and so on). Then determine the morphing between the two chosen tables with the kweightpoint parameter. After that the resulting table can be indexed with the kindex parameter like a normal table opcode. If the value of this parameter surpasses the length of tables (which must be the same for all tables), then it is wrapped around. tabmorph acts similarly to the table opcode, that is, without using interpolation. This means that it trun2116
cates the fractional part of the kindex argument. Anyway, fractional parts of ktabnum1 and ktabnum2 are significant, resulting in linear interpolation between the same element of two adjacent subsequent tables.
See Also
table, tabmorphi, tabmorpha, tabmorphak, ftmorf,
Credits
Author: Gabriel Maldonado New in version 5.06
2117
tabmorpha
tabmorpha Allow morphing between a set of tables at audio rate with interpolation.
Description
tabmorpha allows morphing between a set of tables of the same size, by means of a weighted average between two currently selected tables.
Syntax
aout tabmorpha aindex, aweightpoint, atabnum1, atabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ... ifnN]
Initialization
ifn1, ifn2 , ifn3, ifn4, ... ifnN - function table numbers. This is a set of chosen tables the user want to use in the morphing. All tables must have the same length. Be aware that only two of these tables can be chosen for the morphing at one time. Since it is possible to use non-integer numbers for the atabnum1 and atabnum2 arguments, the morphing is the result from the interpolation between adjacent consecutive tables of the set.
Performance
aout - The output value for index aindex, resulting from morphing two tables (see below). aindex - main index index of the morphed resultant table. The range is 0 to table_length (not included). aweightpoint - the weight of the influence of a pair of selected tables in the morphing. The range of this argument is 0 to 1. A zero makes it output the first table unaltered, a 1 makes it output the second table of the pair unaltered. All intermediate values between 0 and 1 determine the gradual morphing between the two tables of the pair. atabnum1 - the first table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, the corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. atabnum2 - the second table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. The tabmorpha family of opcodes is similar to the table family, but allows morphing between two tables chosen into a set of tables. Firstly the user has to provide a set of tables of equal length (ifn2 [, ifn3, ifn4,ifnN]). Then he can choose a pair of tables in the set in order to perform the morphing: atabnum1 and atabnum2 are filled with numbers (zero represents the first table in the set, 1 the second, 2 the third and so on). Then determine the morphing between the two chosen tables with the aweightpoint parameter. After that the resulting table can be indexed with the aindex parameter like a normal table opcode. If the value of this parameter surpasses the length of tables (which must be the same for all tables), then it is wrapped around. tabmorpha is the audio-rate version of tabmorphi (it uses interpolation). All input arguments work at a2118
rate.
See Also
table, tabmorph, tabmorphi, tabmorphak, ftmorf,
Credits
Author: Gabriel Maldonado New in version 5.06
2119
tabmorphak
tabmorphak Allow morphing between a set of tables at audio rate with interpolation.
Description
tabmorphak allows morphing between a set of tables of the same size, by means of a weighted average between two currently selected tables.
Syntax
aout tabmorphak aindex, kweightpoint, ktabnum1, ktabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ... ifnN]
Initialization
ifn1, ifn2 , ifn3, ifn4, ... ifnN - function table numbers. This is a set of chosen tables the user want to use in the morphing. All tables must have the same length. Be aware that only two of these tables can be chosen for the morphing at one time. Since it is possible to use non-integer numbers for the ktabnum1 and ktabnum2 arguments, the morphing is the result from the interpolation between adjacent consecutive tables of the set.
Performance
aout - The output value for index aindex, resulting from morphing two tables (see below). aindex - main index index of the morphed resultant table. The range is 0 to table_length (not included). kweightpoint - the weight of the influence of a pair of selected tables in the morphing. The range of this argument is 0 to 1. A zero makes it output the first table unaltered, a 1 makes it output the second table of the pair unaltered. All intermediate values between 0 and 1 determine the gradual morphing between the two tables of the pair. ktabnum1 - the first table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, the corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. ktabnum2 - the second table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. The tabmorphak family of opcodes is similar to the table family, but allows morphing between two tables chosen into a set of tables. Firstly the user has to provide a set of tables of equal length (ifn2 [, ifn3, ifn4, ... ifnN]). Then he can choose a pair of tables in the set in order to perform the morphing: ktabnum1 and ktabnum2 are filled with numbers (zero represents the first table in the set, 1 the second, 2 the third and so on). Then determine the morphing between the two chosen tables with the kweightpoint parameter. After that the resulting table can be indexed with the aindex parameter like a normal table opcode. If the value of this parameter surpasses the length of tables (which must be the same for all tables), then it is wrapped around. tabmorphak works at a-rate, but kweightpoint, ktabnum1 and ktabnum2 are working at k-rate, making it 2120
more efficient than tabmorpha, since there are less calculations. Except the rate of these three arguments, it is identical to tabmorpha.
See Also
table, tabmorph, tabmorphi, tabmorpha, ftmorf,
Credits
Author: Gabriel Maldonado New in version 5.06
2121
tabmorphi
tabmorphi Allow morphing between a set of tables with interpolation.
Description
tabmorphi allows morphing between a set of tables of the same size, by means of a weighted average between two currently selected tables.
Syntax
kout tabmorphi kindex, kweightpoint, ktabnum1, ktabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ..., ifnN]
Initialization
ifn1, ifn2 [, ifn3, ifn4, ..., ifnN] - function table numbers. This is a set of chosen tables the user want to use in the morphing. All tables must have the same length. Be aware that only two of these tables can be chosen for the morphing at one time. Since it is possible to use non-integer numbers for the ktabnum1 and ktabnum2 arguments, the morphing is the result from the interpolation between adjacent consecutive tables of the set.
Performance
kout - The output value for index kindex, resulting from morphing two tables (see below). kindex - main index index of the morphed resultant table. The range is 0 to table_length (not included). kweightpoint - the weight of the influence of a pair of selected tables in the morphing. The range of this argument is 0 to 1. A zero makes it output the first table unaltered, a 1 makes it output the second table of the pair unaltered. All intermediate values between 0 and 1 determine the gradual morphing between the two tables of the pair. ktabnum1 - the first table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, the corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. ktabnum2 - the second table chosen for the morphing. This number doesnt express the table number directly, but the position of the table in the set sequence (starting from 0 to N-1). If this number is an integer, corresponding table will be chosen unaltered. If it contains fractional values, then an interpolation with the next adjacent table will result. The tabmorphi family of opcodes is similar to the table family, but allows morphing between two tables chosen into a set of tables. Firstly the user has to provide a set of tables of equal length (ifn2 [, ifn3, ifn4, ..., ifnN]). Then he can choose a pair of tables in the set in order to perform the morphing: ktabnum1 and ktabnum2 are filled with numbers (zero represents the first table in the set, 1 the second, 2 the third and so on). Then determine the morphing between the two chosen tables with the kweightpoint parameter. After that the resulting table can be indexed with the kindex parameter like a normal table opcode. If the value of this parameter surpasses the length of tables (which must be the same for all tables), then it is wrapped around. tabmorphi is identical to tabmorph, but it performs linear interpolation for non-integer values of kindex, 2122
See Also
table, tabmorph, tabmorpha, tabmorphak, ftmorf,
Credits
Author: Gabriel Maldonado New in version 5.06
2123
tabplay
tabplay Playing-back control signals.
Description
Plays-back control-rate signals on trigger-temporization basis.
Syntax
tabplay ktrig, knumtics, kfn, kout1 [,kout2,..., koutN]
Performance
ktrig -- starts playing when non-zero. knumtics -- stop recording or reset playing pointer to zero when the number of tics defined by this argument is reached. kfn -- table where k-rate signals are recorded. kout1,...,koutN -- playback output signals. The tabplay and tabrec opcodes allow to record/playback control signals on trigger-temporization basis. tabplay plays back a group of k-rate signals, previously recorded by tabrec into a table. Each time ktrig argument is triggered, an internal counter is increased of one unit. After knumtics trigger impluses are received by ktrig argument, the internal counter is zeroed and playback is restarted from the beginning, in looping style. These opcodes can be used like a sort of ``middle-term'' memory that ``remembers'' generated signals. Such memory can be used to supply generative music with a coherent iterative compositional structure.
See Also
tabrec
Credits
Written by Gabriel Maldonado.
2124
tabsum
tabsum Adding values in a range of a table.
Description
Sums the values in an f-table in a consecutive range.
Syntax
kr tabsum ifn[[, kmin] [, kmax]]
Initialization
ifn -- table number
Performance
kr -- input signal to write. kmin, kmax -- range of the table to sum. If omitted or zero they default to 0 to length of the table.
See Also
Vectorial opcodes
Credits
Author: John ffitch Codemist Ltd 2009 New in version 5.11
2125
tambourine
tambourine Semi-physical model of a tambourine sound.
Description
tambourine is a semi-physical model of a tambourine sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.
Syntax
ares tambourine kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \ [, ifreq1] [, ifreq2]
Initialization
idettack -- period of time over which all sound is stopped inum (optional) -- The number of beads, teeth, bells, timbrels, etc. If zero, the default value is 32. idamp (optional) -- the damping factor, as part of this equation: damping_amount = 0.9985 + (idamp * 0.002) The default damping_amount is 0.9985 which means that the default value of idamp is 0. The maximum damping_amount is 1.0 (no damping). This means the maximum value for idamp is 0.75. The recommended range for idamp is usually below 75% of the maximum value. imaxshake (optional, default=0) -- amount of energy to add back into the system. The value should be in range 0 to 1. ifreq (optional) -- the main resonant frequency. The default value is 2300. ifreq1 (optional) -- the first resonant frequency. The default value is 5600. ifreq2 (optional) -- the second resonant frequency. The default value is 8100.
Performance
kamp -- Amplitude of output. Note: As these instruments are stochastic, this is only an approximation.
Examples
Here is an example of [examples/tambourine.csd]. the tambourine opcode. It uses the file tambourine.csd
2126
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o tambourine.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 22050 kr = 2205 ksmps = 10 nchnls = 1 ; Instrument #1: An example of a tambourine. instr 01 a1 tambourine 15000, 0.01 out a1 endin </CsInstruments> <CsScore> i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
bamboo, dripwater, guiro, sleighbells
Credits
Author: Perry Cook, part of the PhISEM (Physically Informed Stochastic Event Modeling) Adapted by John ffitch University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07 Added notes by Rasmus Ekman on May 2002.
2127
tan
tan Performs a tangent function.
Description
Returns the tangent of x (x in radians).
Syntax
tan(x) (no rate restriction)
Examples
Here is an example of the tan opcode. It uses the file tan.csd [examples/tan.csd].
2128
See Also
cos, cosh, cosinv, sin, sinh, sininv, tan, taninv
Credits
Written by John ffitch. New in version 3.47 Example written by Kevin Conder.
2129
tanh
tanh Performs a hyperbolic tangent function.
Description
Returns the hyperbolic tangent of x (x in radians).
Syntax
tanh(x) (no rate restriction)
Examples
Here is an example of the tanh opcode. It uses the file tanh.csd [examples/tanh.csd].
2130
See Also
cos, cosh, cosinv, sin, sinh, sininv, tan, taninv
Credits
Author: John ffitch New in version 3.47 Example written by Kevin Conder.
2131
taninv
taninv Performs an arctangent function.
Description
Returns the arctangent of x (x in radians).
Syntax
taninv(x) (no rate restriction)
Examples
Here is an example of the taninv opcode. It uses the file taninv.csd [examples/taninv.csd].
2132
See Also
cos, cosh, cosinv, sin, sinh, sininv, tan, tanh, taninv2
Credits
Author: John ffitch New in version 3.48 Example written by Kevin Conder.
2133
taninv2
taninv2 Returns an arctangent.
Description
Returns the arctangent of iy/ix, ky/kx, or ay/ax.
Syntax
ares taninv2 ay, ax ires taninv2 iy, ix kres taninv2 ky, kx
Returns the arctangent of iy/ix, ky/kx, or ay/ax. If y is zero, taninv2 returns zero regardless of the value of x. If x is zero, the return value is: #/2, if y is positive. -#/2, if y is negative. 0, if y is 0.
Initialization
iy, ix -- values to be converted
Performance
ky, kx -- control rate signals to be converted ay, ax -- audio rate signals to be converted
Examples
Here is an example of the taninv2 opcode. It uses the file taninv2.csd [examples/taninv2.csd].
2134
; For Non-realtime ouput leave only the line below: ; -o taninv2.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Returns the arctangent for 1/2. i1 taninv2 1, 2 print i1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
See Also
taninv
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April 1998 Example written by Kevin Conder. New in Csound version 3.48 Corrected on May 2002, thanks to Istvan Varga.
2135
tbvcf
tbvcf Models some of the filter characteristics of a Roland TB303 voltage-controlled filter.
Description
This opcode attempts to model some of the filter characteristics of a Roland TB303 voltage-controlled filter. Euler's method is used to approximate the system, rather than traditional filter methods. Cutoff frequency, Q, and distortion are all coupled. Empirical methods were used to try to unentwine, but frequency is only approximate as a result. Future fixes for some problems with this opcode may break existing orchestras relying on this version of tbvcf.
Syntax
ares tbvcf asig, xfco, xres, kdist, kasym [, iskip]
Initialization
iskip (optional, default=0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
Performance
asig -- input signal. Should be normalized to 1. xfco -- filter cutoff frequency. Optimum range is 10,000 to 1500. Values below 1000 may cause problems. xres -- resonance or Q. Typically in the range 0 to 2. kdist -- amount of distortion. Typical value is 2. Changing kdist significantly from 2 may cause odd interaction with xfco and xres. kasym -- asymmetry of resonance. Typically in the range 0 to 1.
Examples
Here is an example of the tbvcf opcode. It uses the file tbvcf.csd [examples/tbvcf.csd].
2136
<CsInstruments> ;--------------------------------------------------------; TBVCF Test ; Coded by Hans Mikelson December, 2000 ;--------------------------------------------------------sr = 44100 ; Sample rate ksmps = 10 ; Samples/Kontrol period nchnls = 2 ; Normal stereo 0dbfs = 1 instr 10 idur = p3 iamp = p4 ifqc = cpspch(p5) ipanl = sqrt(p6) ipanr = sqrt(1-p6) iq = p7 idist = p8 iasym = p9 kdclck kfco ax ay ay ; Duration ; Amplitude ; Pitch to frequency ; Pan left ; Pan right
linseg 0, .002, 1, idur-.004, 1, .002, 0 ; Declick envelope expseg 10000, idur, 1000 ; Frequency envelope vco 1, ifqc, 2, 0.5 ; Square wave tbvcf ax, kfco, iq, idist, iasym ; TB-VCF buthp ay/1, 100 ; Hi-pass outs endin ay*iamp*ipanl*kdclck, ay*iamp*ipanr*kdclck
</CsInstruments> <CsScore> f1 0 65536 10 1 ; TeeBee ; Sta i10 0 i10 0.3 i10 0.6 i10 0.9 i10 1.2 ;i10 1.5 i10 1.8 i10 2.1 i10 2.4 i10 2.7 i10 3.0 i10 3.3 i10 3.6 i10 3.9 i10 4.2 i10 4.5 i10 4.8 i10 5.1 i10 5.4 i10 5.7 i10 6.0 i10 6.3 i10 6.6 i10 6.9 i10 7.2 i10 7.5 i10 7.8 i10 8.1 i10 8.4 i10 8.7 e Test Dur 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 Amp 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 Pitch 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 7.00 Pan .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 .5 Q 0.0 0.8 1.6 2.4 3.2 4.0 0.0 0.8 1.6 2.4 3.2 4.0 0.0 0.8 1.6 2.4 3.2 4.0 0.0 0.8 1.6 2.4 3.2 4.0 0.0 0.8 1.6 2.4 3.2 4.0 Dist1 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 Asym 0.0 0.0 0.0 0.0 0.0 0.0 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5 0.5 0.5 0.5 0.5 0.75 0.75 0.75 0.75 0.75 0.75 1.0 1.0 1.0 1.0 1.0 1.0
</CsScore> </CsoundSynthesizer>
Credits
2137
Author: Hans Mikelson December, 2000 -- January, 2001 New in Csound 4.10
2138
tempest
tempest Estimate the tempo of beat patterns in a control signal.
Description
Estimate the tempo of beat patterns in a control signal.
Syntax
ktemp tempest kin, iprd, imindur, imemdur, ihp, ithresh, ihtim, ixfdbak, \ istartempo, ifn [, idisprd] [, itweek]
Initialization
iprd -- period between analyses (in seconds). Typically about .02 seconds. imindur -- minimum duration (in seconds) to serve as a unit of tempo. Typically about .2 seconds. imemdur -- duration (in seconds) of the kin short-term memory buffer which will be scanned for periodic patterns. Typically about 3 seconds. ihp -- half-power point (in Hz) of a low-pass filter used to smooth input kin prior to other processing. This will tend to suppress activity that moves much faster. Typically 2 Hz. ithresh -- loudness threshold by which the low-passed kin is center-clipped before being placed in the short-term buffer as tempo-relevant data. Typically at the noise floor of the incoming data. ihtim -- half-time (in seconds) of an internal forward-masking filter that masks new kin data in the presence of recent, louder data. Typically about .005 seconds. ixfdbak -- proportion of this unit's anticipated value to be mixed with the incoming kin prior to all processing. Typically about .3. istartempo -- initial tempo (in beats per minute). Typically 60. ifn -- table number of a stored function (drawn left-to-right) by which the short-term memory data is attenuated over time. idisprd (optional) -- if non-zero, display the short-term past and future buffers every idisprd seconds (normally a multiple of iprd). The default value is 0 (no display). itweek (optional) -- fine-tune adjust this unit so that it is stable when analyzing events controlled by its own output. The default value is 1 (no change).
Performance
tempest examines kin for amplitude periodicity, and estimates a current tempo. The input is first lowpass filtered, then center-clipped, and the residue placed in a short-term memory buffer (attenuated over time) where it is analyzed for periodicity using a form of autocorrelation. The period, expressed as a tempo in beats per minute, is output as ktemp. The period is also used internally to make predictions about future amplitude patterns, and these are placed in a buffer adjacent to that of the input. The two adjacent buffers can be periodically displayed, and the predicted values optionally mixed with the in2139
coming signal to simulate expectation. This unit is useful for sensing the metric implications of any k-signal (e.g.- the RMS of an audio signal, or the second derivative of a conducting gesture), before sending to a tempo statement.
Examples
Here is an example of the tempest opcode. It uses the file tempest.csd [examples/tempest.csd], and beats.wav [examples/beats.wav].
2140
The tempo of the audio file beats.wav is 120 beats per minute. In this examples, tempest will print out its best guess as the audio file plays. Its output should include lines like this:
. i1 . i1 118.24654 121.72949
2141
tempo
tempo Apply tempo control to an uninterpreted score.
Description
Apply tempo control to an uninterpreted score.
Syntax
tempo ktempo, istartempo
Initialization
istartempo -- initial tempo (in beats per minute). Typically 60.
Performance
ktempo -- The tempo to which the score will be adjusted. tempo allows the performance speed of Csound scored events to be controlled from within an orchestra. It operates only in the presence of the Csound -t flag. When that flag is set, scored events will be performed from their uninterpreted p2 and p3 (beat) parameters, initially at the given command-line tempo. When a tempo statement is activated in any instrument (ktempo 0.), the operating tempo will be adjusted to ktempo beats per minute. There may be any number of tempo statements in an orchestra, but coincident activation is best avoided.
Examples
Here is an example of the tempo opcode. Remember, it only works if you use the -t flag with Csound. The example uses the file tempo.csd [examples/tempo.csd].
2142
kval tempoval printk 0.1, kval ; If the fourth p-field is 1, increase the tempo. if (p4 == 1) kgoto speedup kgoto playit speedup: ; Increase the tempo to 150 beats per minute. tempo 150, 60 playit: a1 oscil 10000, 440, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; p4 = plays at a faster tempo (when p4=1). ; Play Instrument #1 at the normal tempo, repeat 3 times. r3 i 1 00.00 00.25 0 i 1 00.25 00.25 0 i 1 00.50 00.25 0 i 1 00.75 00.25 0 s ; Play Instrument #1 at a faster tempo, repeat 3 times. r3 i 1 00.00 00.25 1 i 1 00.25 00.25 0 i 1 00.50 00.25 0 i 1 00.75 00.25 0 s e </CsScore> </CsoundSynthesizer>
See Also
tempoval
Credits
Example written by Kevin Conder.
2143
temposcal
temposcal Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.
Description
temposcal implements phase-locked vocoder processing using function tables containing sampled-sound sources, with GEN01, and temposcal will accept deferred allocation tables. This opcode allows for time and frequency-independent scaling. Time is advanced internally, but controlled by a tempo scaling parameter; when an onset is detected, timescaling is momentarily stopped to avoid smearing of attacks. The quality of the effect is generally improved with phase locking switched on. temposcal will also scale pitch, independently of frequency, using a transposition factor (k-rate).
Syntax
asig temposcal ktimescal,kamp,kpitch,ktab,klock[,ifftsize, idecim, ithresh]
Initialization
ifftsize -- FFT size (power-of-two), defaults to 2048. idecim -- decimation, defaults to 4 (meaning hopsize = fftsize/4) idbthresh -- threshold based on dB power spectrum ratio between two successive windows. A detected ratio above it will cancel timescaling momentarily, to avoid smearing (defaults to 1)
Performance
ktimescal -- timescaling ratio, < 1 stretch, > 1 contract. kamp -- amplitude scaling kpitch -- grain pitch scaling (1=normal pitch, < 1 lower, > 1 higher; negative, backwards) klock -- 0 or 1, to switch phase-locking on/off ktab -- source signal function table. Deferred-allocation tables (see GEN01) are accepted, but the opcode expects a mono source. Tables can be switched at k-rate.
Examples
Example 624. Example
idur = p3 ilock = p4
2144
itab = 1 ipitch = 1 iamp = 0.8 ktime linseg 0.3, p3/2, 0.8, p3/2, 0.3 a1 temposcal ktime,iamp,ipitch,itab,ilock out a1
Credits
Author: Victor Lazzarini February 2010 New plugin in version 5.13 February 2005.
2145
tempoval
tempoval Reads the current value of the tempo.
Description
Reads the current value of the tempo.
Syntax
kres tempoval
Performance
kres -- the value of the tempo. If you use a positive value with the -t command-line flag, tempoval returns the percentage increase/decrease from the original tempo of 60 beats per minute. If you don't, its value will be 60 (for 60 beats per minute).
Examples
Here is an example of the tempoval opcode. Remember, it only works if you use the -t flag with Csound. It uses the file tempoval.csd [examples/tempoval.csd].
2146
Since 120 beats per minute is a 50% increase over the original 60 beats per minute, its output should include lines like:
kval = 0.500000
See Also
tempo and miditempo
Credits
Example written by Kevin Conder. New in version 4.15 December 2002. Thanks to Drake Wilson for pointing out unclear documentation.
2147
tigoto
tigoto Transfer control at i-time when a new note is being tied onto a previously held note
Description
Similar to igoto but effective only during an i-time pass at which a new note is being tied onto a previously held note. (See i Statement) It does not work when a tie has not taken place. Allows an instrument to skip initialization of units according to whether a proposed tie was in fact successful. (See also tival).
Syntax
tigoto label
See Also
cigoto, goto, if, igoto, kgoto, timout
2148
timedseq
timedseq Time Variant Sequencer
Description
An event-sequencer in which time can be controlled by a time-pointer. Sequence data are stored into a table.
Syntax
ktrig timedseq ktimpnt, ifn, kp1 [,kp2, kp3, ...,kpN]
Initialization
ifn -- number of table containing sequence data.
Performance
ktri -- output trigger signal ktimpnt -- time pointer into sequence file, in seconds. kp1,...,kpN -- output p-fields of notes. kp2 meaning is relative action time and kp3 is the duration of notes in seconds. timedseq is a sequencer that allows to schedule notes starting from a user sequence, and depending from an external timing given by a time-pointer value (ktimpnt argument). User should fill table ifn with a list of notes, that can be provided in an external text file by using GEN23, or by typing it directly in the orchestra (or score) file with GEN02. The format of the text file containing the sequence is made up simply by rows containing several numbers separated by space (similarly to normal Csound score). The first value of each row must be a positive or null value, except for a special case that will be explained below. This first value is normally used to define the instrument number corresponding to that particular note (like normal score). The second value of each row must contain the action time of corresponding note and the third value its duration. This is an example:
0 0 0 0.25 0 0.5 0 0.75 0 1 0 1.25 0 1.5 0 1.75 0 2 0 2.25 0 2.5 0 2.75 -1 3 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 -1 1 2 3 4 5 6 7 8 9 10 11 12 -1 93 63 91 70 83 75 78 78 83 70 54 80 -1
In this example, the first value of each row is always zero (it is a dummy value, but this p-field can be used, for example, to express a MIDI channel or an instrument number), except the last row, that begins with -1. This value (-1) is a special value, that indicates the end of sequence. It has itself an action time, because sequences can be looped. So the previous sequence has a default duration of 3 seconds, being value 3 the last action time of the sequence. 2149
It is important that ALL lines contains the same number of values (in the example all rows contains exactly 5 values). The number of values contained by each row, MUST be the number of kpXX output arguments (notice that, even if kp1, kp2 etc. are placed at the right of the opcode, they are output arguments, not input arguments). ktimpnt argument provide the real temporization of the sequence. Actually the passage of time through sequence is specified by ktimpnt itself, which represents the time in seconds. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the sequence file, in the same way of pvoc or lpread. When ktimpnt crosses the action time of a note, a trigger signal is sent to ktrig output argument, and kp1, kp2,...kpN arguments are updated with the values of that note. This information can then be used with schedk or schedkwhen to actually activate note events. Notice that kp1,...kpn data can be further processed (for example delayed with delayk, transposed, etc.) before feeding schedk or schedkwhen. ktimpnt can be controlled by a linear signal, for example:
ktimpnt line 0, p3, 3 ; original sequence duration was 3 secs ktrig timedseq ktimpnt, 1, kp1, kp2, kp3, kp4, kp5 schedk ktrig, 105, 2, 0, kp3, kp4, kp5
in this case the complete sequence (with original duration of 3 seconds) will be played in p3 seconds. You can loop a sequence by controlling it with a phasor:
kphs phasor ktimpnt = ktrig timedseq schedk 1/3 kphs * 3 ktimpnt ,1 ,kp1, kp2, kp3, kp4, kp5 ktrig, 105, 2, 0, kp3, kp4, kp5
Obviously you can play only a fragment of the sequence, read it backward, and non-linearly access sequence data in the same way of pvoc and lpread opcodes. With timedseq opcode you can do almost all things of a normal score, except you have the following limitations: 1. You can't have two notes exactly starting with the same action time; actually at least a k-cycle should separate timing of two notes (otherwise the schedk mechanism eats one of them). 2. All notes of the sequence must have the same number of p-fields (even if they activate different instruments). You can remedy this limitation by filling with dummy values notes that belongs to instruments with less p-fields than other ones.
See Also
GEN02, GEN23, seqtime, seqtime2, trigseq
Credits
Author: Gabriel Maldonado
2150
timeinstk
timeinstk Read absolute time in k-rate cycles.
Description
Read absolute time, in k-rate cycles, since the start of an instance of an instrument. Called at both i-time as well as k-time.
Syntax
kres timeinstk
Performance
timeinstk is for time in k-rate cycles. So with:
then after half a second, the timeinstk opcode would report 3150. It will always report an integer. timeinstk produces a k-rate variable for output. There are no input parameters. timeinstk is similar to timek except it returns the time since the start of this instance of the instrument.
Examples
Here is an example of the timeinstk opcode. It uses the file timeinstk.csd [examples/timeinstk.csd].
2151
; Print out the value from timeinstk every half-second. k1 timeinstk printks "k1 = %f samples\\n", 0.5, k1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
timeinsts, timek, times
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder.
2152
timeinsts
timeinsts Read absolute time in seconds.
Description
Read absolute time, in seconds, since the start of an instance of an instrument.
Syntax
kres timeinsts
Performance
Time in seconds is available with timeinsts. This would return 0.5 after half a second. timeinsts produces a k-rate variable for output. There are no input parameters. timeinsts is similar to times except it returns the time since the start of this instance of the instrument.
Examples
Here is an example of the timeinsts opcode. It uses the file timeinsts.csd [examples/timeinsts.csd].
2153
</CsScore> </CsoundSynthesizer>
See Also
timeinstk, timek, times
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder.
2154
timek
timek Read absolute time in k-rate cycles.
Description
Read absolute time, in k-rate cycles, since the start of the performance.
Syntax
ires timek kres timek
Performance
timek is for time in k-rate cycles. So with:
then after half a second, the timek opcode would report 3150. It will always report an integer. timek can produce a k-rate variable for output. There are no input parameters. timek can also operate only at the start of the instance of the instrument. It produces an i-rate variable (starting with i or gi) as its output.
Examples
Here is an example of the timek opcode. It uses the file timek.csd [examples/timek.csd].
according to platform audio I/O only the line below: output any platform
2155
; Instrument #1. instr 1 ; Print out the value from timek every half-second. k1 timek printks "k1 = %f samples\\n", 0.5, k1 endin </CsInstruments> <CsScore> ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
timeinstk, timensts, times
Credits
Author: Robin Whittle Australia May 1997 New in version 3.47 Example written by Kevin Conder.
2156
times
times Read absolute time in seconds.
Description
Read absolute time, in seconds, since the start of the performance.
Syntax
ires times kres times
Performance
Time in seconds is available with times. This would return 0.5 after half a second. times can both produce a k-rate variable for output. There are no input parameters. times can also operate at the start of the instance of the instrument. It produces an i-rate variable (starting with i or gi) as its output.
Examples
Here is an example of the times opcode. It uses the file times.csd [examples/times.csd].
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Print out the value from times every half-second. k1 times printks "k1 = %f seconds\\n", 0.5, k1 endin </CsInstruments>
2157
See Also
timeinstk, timeinsts, timek
Credits
Author: Robin Whittle Australia May 1997 Example written by Kevin Conder.
2158
timout
timout Conditional branch during p-time depending on elapsed note time.
Description
Conditional branch during p-time depending on elapsed note time. istrt and idur specify time in seconds. The branch to label will become effective at time istrt, and will remain so for just idur seconds. Note that timout can be reinitialized for multiple activation within a single note (see example under reinit).
Syntax
timout istrt, idur, label
See Also
goto, if, igoto, kgoto, tigoto
2159
tival
tival Puts the value of the instrument's internal tie-in flag into the named i-rate variable.
Syntax
ir tival
Description
Puts the value of the instrument's internal tie-in flag into the named i-rate variable.
Initialization
Puts the value of the instrument's internal tie-in flag into the named i-rate variable. Assigns 1 if this note has been tied onto a previously held note (see i statement); assigns 0 if no tie actually took place. (See also tigoto.)
See Also
=, divz, init
2160
tlineto
tlineto Generate glissandos starting from a control signal.
Description
Generate glissandos starting from a control signal with a trigger.
Syntax
kres tlineto ksig, ktime, ktrig
Performance
kres -- Output signal. ksig -- Input signal. ktime -- Time length of glissando in seconds. ktrig -- Trigger signal. tlineto is similar to lineto but can be applied to any kind of signal (not only stepped signals) without producing discontinuities. Last value of each segment is sampled and held from input signal each time ktrig value is set to a nonzero value. Normally ktrig signal consists of a sequence of zeroes (see trigger opcode). The effect of glissando is quite different from port. Since in these cases, the lines are straight. Also the context of usage is different.
See Also
lineto
Credits
Author: Gabriel Maldonado New in Version 4.13
2161
tone
tone A first-order recursive low-pass filter with variable frequency response.
Description
A first-order recursive low-pass filter with variable frequency response. tone is a 1 term IIR filter. Its formula is: yn = c1 * xn + c2 * yn-1 where
Syntax
ares tone asig, khp [, iskip]
Initialization
iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
ares -- the output audio signal. asig -- the input audio signal. khp -- the response curve's half-power point, in Hertz. Half power is defined as peak power / root 2. tone implements a first-order recursive low-pass filter in which the variable khp (in Hz) determines the response curve's half-power point. Half power is defined as peak power / root 2.
See Also
areson, aresonk, atone, atonek, port, portk, reson, resonk, tonek
2162
tonek
tonek A first-order recursive low-pass filter with variable frequency response.
Description
A first-order recursive low-pass filter with variable frequency response.
Syntax
kres tonek ksig, khp [, iskip]
Initialization
iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
kres -- the output signal at control-rate. ksig -- the input signal at control-rate. khp -- the response curve's half-power point, in Hertz. Half power is defined as peak power / root 2. tonek is like tone except its output is at control-rate rather than audio rate.
See Also
areson, aresonk, atone, atonek, port, portk, reson, resonk, tone
Credits
Author: Robin Whittle Australia May 1997
2163
tonex
tonex Emulates a stack of filters using the tone opcode.
Description
tonex is equivalent to a filter consisting of more layers of tone with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.
Syntax
ares tonex asig, khp [, inumlayer] [, iskip]
Initialization
inumlayer (optional) -- number of elements in the filter stack. Default value is 4. iskip (optional, default=0) -- initial disposition of internal data space. Since filtering incorporates a feedback loop of previous output, the initial status of the storage space used is significant. A zero value will clear the space; a non-zero value will allow previous information to remain. The default value is 0.
Performance
asig -- input signal khp -- the response curve's half-power point. Half power is defined as peak power / root 2.
See Also
atonex, resonx
Credits
Author: Gabriel Maldonado (adapted by John ffitch) Italy New in Csound version 3.49
2164
trandom
trandom Generates a controlled pseudo-random number series between min and max values according to a trigger.
Description
Generates a controlled pseudo-random number series between min and max values at k-rate whenever the trigger parameter is different to 0.
Syntax
kout trandom ktrig, kmin, kmax
Performance
ktrig -- trigger (opcode produces a new random number whenever this value is not 0. kmin -- minimum range limit kmax -- maximum range limit trandom is almost identical to random opcode, except trandom updates its output with a new random value only when the ktrig argument is triggered (i.e. whenever it is not zero).
See also
random
Credits
Written by Gabriel Maldonado. New in Csound 5.06
2165
tradsyn
tradsyn Streaming partial track additive synthesis
Description
The tradsyn opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials),as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial Tracking", Proc.of ICMC05, Barcelona. It resynthesises the signal using linear amplitude and frequency interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls.
Syntax
asig tradsyn fin, kscal, kpitch, kmaxtracks, ifn
Performance
asig -- output audio rate signal fin -- input pv stream in TRACKS format kscal -- amplitude scaling kpitch -- pitch scaling kmaxtracks -- max number of tracks in resynthesis. Limiting this will cause a non-linear filtering effect, by discarding newer and higher-frequency tracks (tracks are ordered by start time and ascending frequency, respectively) ifn -- function table containing one cycle of a sinusoid (sine or cosine)
Examples
Example 630. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking aout tradsyn fst, 1, 1.5, 500, 1 ; resynthesis (up a 5th) out aout
The example above shows partial tracking of an ifd-analysis signal and linear additive resynthesis with pitch shifting.
Credits
2166
Author: Victor Lazzarini June 2005 New plugin in version 5 November 2004.
2167
transeg
transeg Constructs a user-definable envelope.
Description
Constructs a user-definable envelope.
Syntax
ares transeg ia, idur, itype, ib [, idur2] [, itype] [, ic] ... kres transeg ia, idur, itype, ib [, idur2] [, itype] [, ic] ...
Initialization
ia -- starting value. ib, ic, etc. -- value after idur seconds. idur -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2,... idurx etc. -- duration in seconds of segment itype, itype2, etc. -- if 0, a straight line is produced. If non-zero, then transeg creates the following curve, for n steps: ibeg + (ivalue - ibeg) * (1 - exp( i*itype/(n-1) )) / (1 - exp(itype))
Performance
If itype > 0, there is a slowly rising (concave) or slowly decaying (convex) curve, while if itype < 0, the curve is fast rising (convex) or fast decaying (concave). See also GEN16.
Examples
Here is an example of the transeg opcode. It uses the file transeg.csd [examples/transeg.csd]. The example produces the following output:
2168
See Also
expsega, expsegr, linseg, linsegr, transegr
Credits
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK October 2000 New in Csound version 4.09 Thanks goes to Matt Gerassimoff for pointing out the correct command syntax.
2169
transegr
transegr Constructs a user-definable envelope with extended release segment.
Description
Constructs a user-definable envelope. It is the same as transeg, with an extended release segment.
Syntax
ares transegr ia, idur, itype, ib [, idur2] [, itype] [, ic] ... kres transegr ia, idur, itype, ib [, idur2] [, itype] [, ic] ...
Initialization
ia -- starting value. ib, ic, etc. -- value after idur seconds. idur -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped. idur2,... idurx etc. -- duration in seconds of segment itype, itype2, etc. -- if 0, a straight line is produced. If non-zero, then transegr creates the following curve, for n steps: ibeg + (ivalue - ibeg) * (1 - exp( i*itype/(n-1) )) / (1 - exp(itype))
Performance
If itype > 0, there is a slowly rising (concave) or slowly decaying (convex) curve, while if itype < 0, the curve is fast rising (convex) or fast decaying (concave). See also GEN16. This opcode is the same as of transeg with an additional release segment triggered by a MIDI noteoff event, a negative p1 note event in the score or a turnoff2 opcode.
See Also
expsega, expsegr, linseg, linsegr, transeg
Credits
Author: John ffitch january 2010 New in Csound version 5.12 2170
trcross
trcross Streaming partial track cross-synthesis.
Description
The trcross opcode takes two inputs containg TRACKS pv streaming signals (as generated, for instance by partials) and cross-synthesises them into a single TRACKS stream. Two different modes of operation are used: mode 0, cross-synthesis by multiplication of the amplitudes of the two inputs and mode 1, cross-synthesis by the substititution of the amplitudes of input 1 by the input 2. Frequencies and phases of input 1 are preserved in the output. The cross-synthesis is done by matching tracks between the two inputs using a 'search interval'. The matching algorithm will look for tracks in the second input that are within the search interval around each track in the first input. This interval can be changed at the control rate. Wider search intervals will find more matches.
Syntax
fsig trcross fin1, fin2, ksearch,kdepth[,kmode]
Performance
fsig -- output pv stream in TRACKS format fin1 -- first input pv stream in TRACKS format. fin2 -- second input pv stream in TRACKS format ksearch -- search interval ratio, defining a 'search area' around each track of 1st input for matching purposes. kdepth -- depth of effect (0-1). kmode -- mode of cross-synthesis. 0, multiplication of amplitudes (filtering), 1, subsitution of amplitudes of input 1 by input 2 (akin to vocoding). Defaults to 0.
Examples
Example 632. Example
ain inch 1 ; input signals ain inch 2 fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fs11,fsi12 pvsifd ain,2048,512,1 ; ifd analysis (second input) fst1 partials fs11,fsi12,.003,1,3,500 ; partial tracking \(second input fcr trcross fst,fst1, 1.05, 1 ; cross-synthesis (mode 0) aout tradsyn fcr, 1, 1, 500, 1 ; resynthesis of tracks out aout
The example above shows partial tracking of two ifd-analysis signals, cross-synthesis, followed by the 2171
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
2172
trfilter
trfilter Streaming partial track filtering.
Description
The trfilter opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials) and filters it using an amplitude response curve stored in a function table. The function table can have any size (no restriction to powers-of-two). The table lookup is done by linear-interpolation. It is possible to create time-varying filter curves by updating the amlitude response table with a tablewriting opcode.
Syntax
fsig trfilter fin, kamnt, ifn
Performance
fsig -- output pv stream in TRACKS format fin -- input pv stream in TRACKS format kamnt -- amount of filtering (0-1) ifn -- function table number. This will contain an amplitude response curve, from 0 Hz to the Nyquist (table indexes 0 to N). Any size is allowed. Larger tables will provide a smoother amplitude response curve. Table reading uses linear interpolation.
Examples
Example 633. Example
gifn ftgen 2, 0, -22050, 5 1 1000 1 4000 0.000001 17050 0.000001 ; low-pass filter curve of 22050 point instr 1 ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fscl trfilter fst, 1, gifn ; filtering using function table 2 aout tradsyn fscl, 1, 1, 500, 1 ; resynthesis out aout endin
The example above shows partial tracking of an ifd-analysis signal and linear additive resynthesis with low-pass filtering.
Credits
2173
2174
trhighest
trhighest Extracts the highest-frequency track from a streaming track input signal.
Description
The trhighest opcode takes an input containg TRACKS pv streaming signals (as generated, for instance by partials) and outputs only the highest track. In addition it outputs two k-rate signals, corresponding to the frequency and amplitude of the highest track signal.
Syntax
fsig, kfr,kamp trhighest fin1, kscal
Performance
fsig -- output pv stream in TRACKS format kfr -- frequency (in Hz) of the highest-frequency track kamp -- amplitude of the highest-frequency track fin -- input pv stream in TRACKS format. kscal -- amplitude scaling of output.
Examples
Example 634. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fhi,kfr,kamp trhighest fst,1 ; highest freq-track aout tradsyn fhi, 1, 1, 1, 1 ; resynthesis of highest frequency out aout
The example above shows partial tracking of an ifd-analysis signal, extraction of the highest frequency and resynthesis.
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
2175
trigger
trigger Informs when a krate signal crosses a threshold.
Description
Informs when a krate signal crosses a threshold.
Syntax
kout trigger ksig, kthreshold, kmode
Performance
ksig -- input signal kthreshold -- trigger threshold kmode -- can be 0 , 1 or 2 Normally trigger outputs zeroes: only each time ksig crosses kthreshold trigger outputs a 1. There are three modes of using ktrig: kmode = 0 - (down-up) ktrig outputs a 1 when current value of ksig is higher than kthreshold, while old value of ksig was equal to or lower than kthreshold. kmode = 1 - (up-down) ktrig outputs a 1 when current value of ksig is lower than kthreshold while old value of ksig was equal or higher than kthreshold. kmode = 2 - (both) ktrig outputs a 1 in both the two previous cases.
Examples
Here is an example of the trigger opcode. It uses the file trigger.csd [examples/trigger.csd].
2176
kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Use a square-wave low frequency oscillator as the trigger. klf lfo 1, 10, 3 ktr trigger klf, 1, 2 ; When the value of the trigger isn't equal to 0, print it out. if (ktr == 0) kgoto contin ; Print the value of the trigger and the time it occurred. ktm times printks "time = %f seconds, trigger = %f\\n", 0, ktm, ktr contin: ; Continue with processing. endin </CsInstruments> <CsScore> ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: Gabriel Maldonado Italy Example written by Kevin Conder. New in Csound version 3.49
2177
trigseq
trigseq Accepts a trigger signal as input and outputs a group of values.
Description
Accepts a trigger signal as input and outputs a group of values.
Syntax
trigseq ktrig_in, kstart, kloop, kinitndx, kfn_values, kout1 [, kout2] [...]
Performance
ktrig_in -- input trigger signal kstart -- start index of looped section kloop -- end index of looped section kinitndx -- initial index
Note
Although kinitndx is listed as k-rate, it is in fact accessed only at init-time. So if you are using a k-rate argument, it must be assigned with init. kfn_values -- number of a table containing a sequence of groups of values kout1 -- output values kout2, ... (optional) -- more output values This opcode handles timed-sequences of groups of values stored into a table. trigseq accepts a trigger signal (ktrig_in) as input and outputs group of values (contained in the kfn_values table) each time ktrig_in assumes a non-zero value. Each time a group of values is triggered, table pointer is advanced of a number of positions corresponding to the number of group-elements, in order to point to the next group of values. The number of elements of groups is determined by the number of koutX arguments. It is possible to start the sequence from a value different than the first, by assigning to kinitndx an index different than zero (which corresponds to the first value of the table). Normally the sequence is looped, and the start and end of loop can be adjusted by modifying kstart and kloop arguments. User must be sure that values of these arguments (as well as kinitndx) correspond to valid table numbers, otherwise Csound will crash because no range-checking is implemented. It is possible to disable loop (one-shot mode) by assigning the same value both to kstart and kloop arguments. In this case, the last read element will be the one corresponding to the value of such arguments. Table can be read backward by assigning a negative kloop value. trigseq is designed to be used together with seqtime or trigger opcodes. 2178
See Also
seqtime, trigger
Credits
Author: Gabriel Maldonado November 2002. Added a note about the kinitndx parameter, thanks to Rasmus Ekman. January 2003. Thanks to a note from yvind Brandtsegg, I corrected the credits. New in version 4.06
2179
trirand
trirand Triangular distribution random number generator
Description
Triangular distribution random number generator. This is an x-class noise generator.
Syntax
ares trirand krange ires trirand krange kres trirand krange
Performance
krange -- the range of the random numbers (-krange to +krange). For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the trirand opcode. It uses the file trirand.csd [examples/trirand.csd].
2180
instr 1 ; Generate a random number between -1 and 1. ; krange = 1 i1 trirand 1 print i1 endin ; Instrument #2. instr 2 ; Generate a random number between -1 and 1. ; krange = 1 seed 0 i1 trirand 1 print i1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 1 1
</CsScore> </CsoundSynthesizer>
See Also
betarand, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, poisson, unirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Example written by Kevin Conder.
2181
trlowest
trlowest Extracts the lowest-frequency track from a streaming track input signal.
Description
The trlowest opcode takes an input containg TRACKS pv streaming signals (as generated, for instance by partials) and outputs only the lowest track. In addition it outputs two k-rate signals, corresponding to the frequency and amplitude of the lowest track signal.
Syntax
fsig, kfr,kamp trlowest fin1, kscal
Performance
fsig -- output pv stream in TRACKS format kfr -- frequency (in Hz) of the lowest-frequency track kamp -- amplitude of the lowest-frequency track fin -- input pv stream in TRACKS format. kscal -- amplitude scaling of output.
Examples
Example 637. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking flow,kfr,kamp trlowest fst,1 ; lowest freq-track aout tradsyn flow, 1, 1, 1, 1 ; resynthesis of lowest frequency out aout
The example above shows partial tracking of an ifd-analysis signal, extraction of the lowest frequency and resynthesis.
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
2182
trmix
trmix Streaming partial track mixing.
Description
The trmix opcode takes two inputs containg TRACKS pv streaming signals (as generated, for instance by partials) and mixes them into a single TRACKS stream. Tracks will be mixed up to the available space (defined by the original number of FFT bins in the analysed signals). If the sum of the input tracks exceeds this space, the higher-ordered tracks in the second input will be pruned.
Syntax
fsig trmix fin1, fin2
Performance
fsig -- output pv stream in TRACKS format fin1 -- first input pv stream in TRACKS format. fin2 -- second input pv stream in TRACKS format
Examples
Example 638. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fslo,fshi trsplit fst, 1500 ; split partial tracks at 1500 Hz fscl trscale fshi, 1.15 ; shift the upper tracks fmix trmix fslo,fscl ; mix the shifted and unshifted tracks aout tradsyn fmix, 1, 1, 500, 1 ; resynthesis of tracks out aout
The example above shows partial tracking of an ifd-analysis signal, frequency splitting and pitch shifting of the upper part of the spectrum, followed by the remix of the two parts of the spectrum and resynthesis.
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
2183
trscale
trscale Streaming partial track frequency scaling.
Description
The trscale opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials) and scales all frequencies by a k-rate amount. It can also, optionally, scale the gain of the signal by a k-rate amount (default 1). The result is pitch shifting of the input tracks.
Syntax
fsig trscale fin, kpitch[, kgain]
Performance
fsig -- output pv stream in TRACKS format fin -- input pv stream in TRACKS format kpitch -- frequency scaling kgain -- amplitude scaling (default 1)
Examples
Example 639. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fscl trscale fst, 1.5 ; frequency scale (up a 5th) aout tradsyn fscl, 1, 1, 500, 1 ; resynthesis out aout
The example above shows partial tracking of an ifd-analysis signal and linear additive resynthesis with pitch shifting.
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
2184
trshift
trshift Streaming partial track frequency scaling.
Description
The trshift opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials) and shifts all frequencies by a k-rate frequency. It can also, optionally, scale the gain of the signal by a k-rate amount (default 1). The result is frequency shifting of the input tracks.
Syntax
fsig trshift fin, kpshift[, kgain]
Performance
fsig -- output pv stream in TRACKS format fin -- input pv stream in TRACKS format kshift -- frequency shift in Hz kgain -- amplitude scaling (default 1)
Examples
Example 640. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fscl trshift fst, 150 ; frequency shift (adds 150Hz to all tracks) aout tradsyn fscl, 1, 1, 500, 1 ; resynthesis out aout
The example above shows partial tracking of an ifd-analysis signal and linear additive resynthesis with frequency shifting.
Credits
Author: Victor Lazzarini February 2006 New in Csound5.01
2185
trsplit
trsplit Streaming partial track frequency splitting.
Description
The trsplit opcode takes an input containg a TRACKS pv streaming signal (as generated, for instance by partials) and splits it into two signals according to a k-rate frequency 'split point'. The first output will contain all tracks up from 0Hz to the split frequency and the second will contain the tracks from the split frequency up to the Nyquist. It can also, optionally, scale the gain of the output signals by a k-rate amount (default 1). The result is two output signals containing only part of the original spectrum.
Syntax
fsiglow, fsighi trsplit fin, ksplit[, kgainlow, kgainhigh]
Performance
fsiglow -- output pv stream in TRACKS format containing the tracks below the split point. fsighi -- output pv stream in TRACKS format containing the tracks above and including the split point. fin -- input pv stream in TRACKS format ksplit -- frequency split point in Hz kgainlow, kgainhig -- amplitude scaling of each one of the outputs (default 1).
Examples
Example 641. Example
ain inch 1 ; input signal fs1,fsi2 pvsifd ain,2048,512,1 ; ifd analysis fst partials fs1,fsi2,.003,1,3,500 ; partial tracking fslo,fshi trsplit fst, 1500 ; split partial tracks at 1500 Hz aout tradsyn fshi, 1, 1, 500, 1 ; resynthesis of tracks above 1500Hz out aout
The example above shows partial tracking of an ifd-analysis signal and linear additive resynthesis of the upper part of the spectrum (from 1500Hz).
Credits
Author: Victor Lazzarini February 2006 2186
New in Csound5.01
2187
turnoff
turnoff Enables an instrument to turn itself off.
Description
Enables an instrument to turn itself off.
Syntax
turnoff
Performance
turnoff -- this p-time statement enables an instrument to turn itself off. Whether of finite duration or held, the note currently being performed by this instrument is immediately removed from the active note list. No other notes are affected.
Note
As a rule of thumb, you should turn off instruments with a higher instrument number than the one where turnoff is called, as doing otherwise might cause initialization issues.
Examples
The following example uses the turnoff opcode. It will cause a note to terminate when a control signal passes a certain threshold (here the Nyquist frequency). It uses the file turnoff.csd [examples/turnoff.csd].
2188
contin: a1 oscil 10000, k1, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1: an ordinary sine wave. f 1 0 32768 10 1 ; Play Instrument #1 for 4 seconds. i 1 0 4 e </CsScore> </CsoundSynthesizer>
See Also
ihold, turnoff2, turnon
2189
turnoff2
turnoff2 Turn off instance(s) of other instruments at performance time.
Description
Turn off instance(s) of other instruments at performance time.
Syntax
turnoff2 kinsno, kmode, krelease
Performance
kinsno -- instrument to be turned off (can be fractional) if zero or negative, no instrument is turned off kmode -- sum of the following values: 0, 1, or 2: turn off all instances (0), oldest only (1), or newest only (2) 4: only turn off notes with exactly matching (fractional) instrument number, rather than ignoring fractional part 8: only turn off notes with indefinite duration (p3 < 0 or MIDI) krelease -- if non-zero, the turned off instances are allowed to release, otherwise are deactivated immediately (possibly resulting in clicks)
Note
As a rule of thumb, you should turn off instruments with a higher instrument number than the one where turnoff is called, as doing otherwise might cause initialization issues.
See Also
turnoff
Credits
Author: Istvan Varga 2005 New in Csound 5.00
2190
turnon
turnon Activate an instrument for an indefinite time.
Description
Activate an instrument for an indefinite time.
Syntax
turnon insnum [, itime]
Initialization
insnum -- instrument number to be activated itime (optional, default=0) -- delay, in seconds, after which instrument insnum will be activated. Default is 0.
Performance
turnon activates instrument insnum after a delay of itime seconds, or immediately if itime is not specified. Instrument is active until explicitly turned off. (See turnoff.)
See Also
turnoff, turnoff2
2191
unirand
unirand Uniform distribution random number generator (positive values only).
Description
Uniform distribution random number generator (positive values only). This is an x-class noise generator.
Syntax
ares unirand krange ires unirand krange kres unirand krange
Performance
krange -- the range of the random numbers (0 - krange). For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the unirand opcode. It uses the file unirand.csd [examples/unirand.csd].
2192
instr 1 ; Generate a random number between 0 and 1. ; krange = 1 i1 unirand 1 print i1 endin ; Instrument #2. instr 2 ; Generate a random number between 0 and 1. ; krange = 1 seed 0 i1 unirand 1 print i1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 1 1
</CsScore> </CsoundSynthesizer>
See Also
seed, betarand, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, poisson, trirand, weibull
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Example written by Kevin Conder.
2193
upsamp
upsamp Modify a signal by up-sampling.
Description
Modify a signal by up-sampling.
Syntax
ares upsamp ksig
Performance
upsamp converts a control signal to an audio signal. It does it by simple repetition of the kval. upsamp is a slightly more efficient form of the assignment, asig = ksig.
Examples
asrc adif anew agate asamp aout buzz diff balance reson samphold tone 10000, 440, 20, 1 asrc adif, asrc asrc, 0, 440 anew, agate asamp, 100 ; ; ; ; ; ; band-limited pulse train emphasize the highs but retain the power use a lowpass of the original to gate the new audiosig smooth out the rough edges
See Also
diff, downsamp, integ, interp, samphold
2194
urandom
urandom truly random opcodes with controllable range.
Description
truly random opcodes with controllable range. These units are for Linux only and use /dev/urandom to construct Csound random values
Syntax
ax urandom [imin, imax] ix urandom [imin, imax] kx urandom [imin, imax]
Initialization
ix -- i-rate output value. imin -- minimum value of range; defaults to -1. imax -- maximum value of range; defaults to +1.
Notes
The algorithm produces 2^64 different possible values which are scaled to fit the range requested. The randomness comes form the usual Linux /dev/urandom method, and there is no guarantee that it will be truly random, but there is a good chance. It does not show any cycles.
Performance
ax -- a-rate output value. kx -- k-rate output value.
Examples
Here is an example of the urandom opcode at a-rate. It uses the file urandom.csd [examples/urandom.csd].
2195
<CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o rnd31.wav -W ;;; for file </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create random numbers at a-rate in the range -2 to 2 aur urandom -2, 2 ; Use the random numbers to choose a frequency. afreq = aur * 500 + 100 a1 oscil 30000, afreq, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Here is an example of the urandom opcode at k-rate. It uses the file urandom_krate.csd [examples/urandom_krate.csd].
2196
Credits
Author: John ffitch New in version 5.13
2197
urd
urd A discrete user-defined-distribution random generator that can be used as a function.
Description
A discrete user-defined-distribution random generator that can be used as a function.
Syntax
aout = urd(ktableNum) iout = urd(itableNum) kout = urd(ktableNum)
Initialization
itableNum -- number of table containing the random-distribution function. Such table is generated by the user. See GEN40, GEN41, and GEN42. The table length does not need to be a power of 2
Performance
ktableNum -- number of table containing the random-distribution function. Such table is generated by the user. See GEN40, GEN41, and GEN42. The table length does not need to be a power of 2 urd is the same opcode as duserrnd, but can be used in function fashion. For a tutorial about random distribution histograms and functions see: D. Lorrain. "A panoply of stochastic cannons". In C. Roads, ed. 1989. Music machine. Cambridge, Massachusetts: MIT press, pp. 351 - 379.
See Also
cuserrnd, duserrnd
Credits
Author: Gabriel Maldonado New in Version 4.16
2198
vadd
vadd Adds a scalar value to a vector in a table.
Description
Adds a scalar value to a vector in a table.
Syntax
vadd ifn, kval, kelements [, kdstoffset] [, kverbose]
Initialization
ifn - number of the table hosting the vectorial signal to be processed
Performance
kval - scalar value to be added kelements - number of elements of the vector kdstoffset - index offset for the destination table (Optional, default = 0) kverbose - Selects whether or not warnings are printed (Default=0) vadd adds the value of kval to each element of the vector contained in the table ifn, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. Note that this opcode runs at k-rate so the value of kval is added every control period. Use with care or you will end up with very large numbers (or use vadd_i). These opcodes (vadd, vmult, vpow and vexp) perform numeric operations between a vectorial control signal (hosted by the table ifn), and a scalar signal (kval). Result is a new vector that overrides old values of ifn. All these opcodes work at k-rate. Negative values for kdstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable iele2199
Examples
Here is an example of the vadd opcode. It uses the file vadd.csd [examples/vadd.csd].
2200
e </CsScore> </CsoundSynthesizer>
See also
vadd_i, vmult, vpow and vexp.
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2201
vadd_i
vadd_i Adds a scalar value to a vector in a table.
Description
Adds a scalar value to a vector in a table.
Syntax
vadd_i ifn, ival, ielements [, idstoffset]
Initialization
ifn - number of the table hosting the vectorial signal to be processed ielements - number of elements of the vector ival - scalar value to be added idstoffset - index offset for the destination table
Performance
vadd_i adds the value of ival to each element of the vector contained in the table ifn, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. This opcode runs only on initialization, there is a k-rate version of this opcode called vadd. Negative values for idstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Examples
Here is an example of the vadd_i opcode. It uses the file vadd_i.csd [examples/vadd_i.csd].
2202
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o cigoto.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr=44100 ksmps=128 nchnls=2 instr 1 ifn1 = p4 ival = p5 ielements = p6 idstoffset = p7 kval init 25 vadd_i ifn1, ival, ielements, idstoffset endin instr 2 ;Printtable itable = p4 isize = ftlen(itable) kcount init 0 kval table kcount, itable printk2 kval if (kcount == isize) then turnoff endif kcount = kcount + 1 endin </CsInstruments> <CsScore> f 1 0 16 -7 1 16 17 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.4 0.8 1.0 1.2 1.4 1.6 0.2 1 0.01 1 2 3 4 0.2 1 0.01 1 0.5 5 -3 0.2 1 0.01 1 1.5 10 12 0.2 1
</CsScore> </CsoundSynthesizer>
See also
vadd, vmult_i, vpow_i and vexp_i.
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2203
vaddv
vaddv Performs addition between two vectorial control signals
Description
Performs addition between two vectorial control signals
Syntax
vaddv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed
Performance
kelements - number of elements of the two vectors kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vaddv adds two vectorial control signals, that is, each element of the first vector is processed (only) with the corresponding element of the other vector. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_iopcode to copy it in another table. You can use kdstoffset and ksrcoffset to specify vectors in any location of the tables. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If ksrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination vector will not be changed for these elements).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. Please note that using the same table as source and destination table, might produce unexpected behavior so use with care. This opcode works at k-rate (this means that every k-pass the vectors are added). There's an i-rate ver2204
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Examples
Here is an example of the vaddv opcode. It uses the file vaddv.csd [examples/vaddv.csd].
opcode TableDumpSimp, 0, ijo ;prints the content of a table in a simple way ifn, iprec, ippr xin; function table, float precision while printing (default = 3), parameters per ro iprec = (iprec == -1 ? 3 : iprec) ippr = (ippr == 0 ? 10 : ippr) iend = ftlen(ifn) indx = 0 Sformat sprintf "%%.%df\t", iprec Sdump = "" loop: ival tab_i indx, ifn Snew sprintf Sformat, ival Sdump strcat Sdump, Snew indx = indx + 1 imod = indx % ippr if imod == 0 then puts Sdump, 1 Sdump = "" endif if indx < iend igoto loop puts Sdump, 1 endop
2205
instr 1 ifn1 = p4 ifn2 = p5 ielements = p6 idstoffset = p7 isrcoffset = p8 kval init 25 vaddv ifn1, ifn2, ielements, idstoffset, isrcoffset, 1 turnoff endin instr 2 TableDumpSimp p4, 3, 16 endin </CsInstruments> <CsScore> f 1 0 16 -7 1 15 16 f 2 0 16 -7 1 15 2 i2 i2 i1 i2 i1 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.2 0.4 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 0.2 1 0.2 2 0.01 1 2 5 3 8 0.2 1 0.01 1 2 5 10 -2 0.2 1 0.01 1 2 8 14 0 0.2 1 0.01 1 2 8 0 14 0.2 1 0.002 1 1 8 5 2 0.2 1
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2206
vaddv_i
vaddv_i Performs addition between two vectorial control signals at init time.
Description
Performs addition between two vectorial control signals at init time.
Syntax
vaddv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed ielements - number of elements of the two vectors idstoffset - index offset for the destination (ifn1) table (Default=0) isrcoffset - index offset for the source (ifn2) table (Default=0)
Performance
vaddv_i adds two vectorial control signals, that is, each element of the first vector is processed (only) with the corresponding element of the other vector. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use idstoffset and isrcoffset to specify vectors in any location of the tables. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination vector will not be changed for these elements).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at init time. There's an k-rate version of this opcode called vaddv. All these operators (vaddv_i,vsubv_i,vmultv_i,vdivv_i,vpowv_i,vexpv_i, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
2207
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2208
vaget
vaget Access values of the current buffer of an a-rate variable by indexing.
Description
Access values of the current buffer of an a-rate variable by indexing. Useful for doing sample-by-sample manipulation at k-rate without using setksmps 1.
Note
Because this opcode does not do any bounds checking, the user must be careful not to try to read values past ksmps (the size of a buffer for an a-rate variable) by using index values greater than ksmps.
Syntax
kval vaget kndx, avar
Performance
kval - value read from avar kndx - index of the sample to read from the current buffer of the given avar variable avar - a-rate variable to read from
Examples
Here is an example of the vaget opcode. It uses the file vaget.csd [examples/vaget.csd].
2209
ksampnum init 0 kenv linseg 0, p3 * .5, 1, p3 * .5, 0 aout1 vco2 1, ifreq aout2 vco2 .5, ifreq * 2 aout3 vco2 .2, ifreq * 4 aout sum aout1, aout2, aout3
;Take Sqrt of signal, checking for negatives kcount = 0 loopStart: kval vaget kcount,aout if (kval > .0) kval = elseif (kval < kval = else kval = endif then sqrt(kval) 0) then sqrt(-kval) * -1 0
vaset kval, kcount,aout loop_lt kcount, 1, ksmps, loopStart aout = aout * kenv aout moogladder aout, 8000, .1 aout = aout * iamp outs aout, aout endin </CsInstruments> <CsScore> i1 0.0 2 440 80 e </CsScore> </CsoundSynthesizer>
See Also
vaset
Credits
Author: Steven Yi New in version 5.04 September 2006.
2210
valpass
valpass Variably reverberates an input signal with a flat frequency response.
Description
Variably reverberates an input signal with a flat frequency response.
Syntax
ares valpass asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]
Initialization
imaxlpt -- maximum loop time for klpt iskip (optional, default=0) -- initial disposition of delay-loop data space (cf. reson). The default value is 0. insmps (optional, default=0) -- delay amount, as a number of samples.
Performance
krvt -- the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). xlpt -- variable loop time in seconds, same as ilpt in comb. Loop time can be as large as imaxlpt. This filter reiterates input with an echo density determined by loop time xlpt. The attenuation rate is independent and is determined by krvt, the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). Its output will begin to appear immediately.
See Also
alpass, comb, reverb, vcomb
Credits
Author: William Pete Moss University of Texas at Austin Austin, Texas USA January 2002
2211
vaset
vaset Write value of into the current buffer of an a-rate variable by index.
Description
Write values into the current buffer of an a-rate variable at the given index. Useful for doing sampleby-sample manipulation at k-rate without using setksmps 1.
Note
Because this opcode does not do any bounds checking, the user must be careful not to try to write values past ksmps (the size of a buffer for an a-rate variable) by using index values greater than ksmps.
Syntax
vaset kval, kndx, avar
Performance
kval - value to write into avar kndx - index of the sample to write to the current buffer of the given avar variable avar - a-rate variable to write to
Examples
Here is an example of the vaset opcode. It uses the file vaset.csd [examples/vaset.csd].
2212
aout init 0 ksampnum init 0 kcount = 0 iperiod = sr / ifreq i2pi = 3.14159 * 2 loopStart: kphase = (ksampnum % iperiod) / iperiod knewval = sin(kphase * i2pi) vaset knewval, kcount,aout ksampnum = ksampnum + 1 loop_lt kcount, 1, ksmps, loopStart aout = aout * iamp * kenv outs aout, aout endin </CsInstruments> <CsScore> i1 0.0 2 440 80 e </CsScore> </CsoundSynthesizer>
See Also
vaget
Credits
Author: Steven Yi New in version 5.04 September 2006.
2213
vbap16
vbap16 Distributes an audio signal among 16 channels.
Description
Distributes an audio signal among 16 channels.
Syntax
ar1, ..., ar16 vbap16 asig, kazim [, kelev] [, kspread]
Performance
asig -- audio signal to be panned kazim -- azimuth angle of the virtual source kelev (optional) -- elevation angle of the virtual source kspread (optional) -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When kspread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. vbap16 takes an input signal, asig, and distribute it among 16 outputs, according to the controls kazim and kelev, and the configured loudspeaker placement. If idim = 2, kelev is set to zero. The distribution is performed using Vector Base Amplitude Panning (VBAP - See reference). VBAP distributes the signal using loudspeaker data configured with vbaplsinit. The signal is applied to, at most, two loudspeakers in 2-D loudspeaker configurations, and three loudspeakers in 3-D loudspeaker configurations. If the virtual source is panned outside the region spanned by loudspeakers, the nearest loudspeakers are used in panning.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
Examples
See the entry for vbap8 for an example of usage of the vbap opcodes.
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16move, vbap4, vbap4move, vbap8, vbap8move, vbaplsinit, vbapz, vbapzmove
2214
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.07. Input parameters accept k-rate since Csound 5.09.
2215
vbap16move
vbap16move Distribute an audio signal among 16 channels with moving virtual sources.
Description
Distribute an audio signal among 16 channels with moving virtual sources.
Syntax
ar1, ..., ar16 vbap16move asig, idur, ispread, ifldnum, ifld1 \ [, ifld2] [...]
Initialization
idur -- the duration over which the movement takes place. ispread -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When ispread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. ifldnum -- number of fields (absolute value must be 2 or larger). If ifldnum is positive, the virtual source movement is a polyline specified by given directions. Each transition is performed in an equal time interval. If ifldnum is negative, specified angular velocities are applied to the virtual source during specified relative time intervals (see below). ifld1, ifld2, ... -- azimuth angles or angular velocities, and relative durations of movement phases.
Performance
asig -- audio signal to be panned vbap16move allows the use of moving virtual sources. If ifldnum is positive, the fields represent directions of virtual sources and equal times, iazi1, [iele1,] iazi2, [iele2,], etc. The position of the virtual source is interpolated between directions starting from the first direction and ending at the last. Each interval is interpolated in time that is fraction total_time / number_of_intervals of the duration of the sound event. If ifldnum is negative, the fields represent angular velocities and equal times. The first field is, however, the starting direction, iazi1, [iele1,] iazi_vel1, [iele_vel1,] iazi_vel2, [iele_vel2,] .... Each velocity is applied to the note that is fraction total_time / number_of_velocities of the duration of the sound event. If the elevation of the virtual source becomes greater than 90 degrees or less than 0 degrees, the polarity of angular velocity is changed. Thus the elevational angular velocity produces a virtual source that moves up and down between 0 and 90 degrees.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
Examples
2216
See the entry for vbap8move for an example of usage of the vbapXmove opcodes.
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap4, vbap4move, vbap8, vbap8move, vbaplsinit, vbapz, vbapzmove, vbapzmove
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.07
2217
vbap4
vbap4 Distributes an audio signal among 4 channels.
Description
Distributes an audio signal among 4 channels.
Syntax
ar1, ar2, ar3, ar4 vbap4 asig, kazim [, kelev] [, kspread]
Performance
asig -- audio signal to be panned kazim -- azimuth angle of the virtual source kelev (optional) -- elevation angle of the virtual source kspread (optional) -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When kspread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. vbap4 takes an input signal, asig and distributes it among 4 outputs, according to the controls kazim and kelev, and the configured loudspeaker placement. If idim = 2, kelev is set to zero. The distribution is performed using Vector Base Amplitude Panning (VBAP - See reference). VBAP distributes the signal using loudspeaker data configured with vbaplsinit. The signal is applied to, at most, two loudspeakers in 2-D loudspeaker configurations, and three loudspeakers in 3-D loudspeaker configurations. If the virtual source is panned outside the region spanned by loudspeakers, the nearest loudspeakers are used in panning.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
Examples
See the entry for vbap8 for an example of usage of the vbap opcodes.
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap16move, vbap4move, vbap8, vbap8move, vbaplsinit, vbapz, vbapzmove
2218
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.06. Input parameters accept k-rate since Csund 5.09.
2219
vbap4move
vbap4move Distributes an audio signal among 4 channels with moving virtual sources.
Description
Distributes an audio signal among 4 channels with moving virtual sources.
Syntax
ar1, ar2, ar3, ar4 vbap4move asig, idur, ispread, ifldnum, ifld1 \ [, ifld2] [...]
Initialization
idur -- the duration over which the movement takes place. ispread -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When ispread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. ifldnum -- number of fields (absolute value must be 2 or larger). If ifldnum is positive, the virtual source movement is a polyline specified by given directions. Each transition is performed in an equal time interval. If ifldnum is negative, specified angular velocities are applied to the virtual source during specified relative time intervals (see below). ifld1, ifld2, ... -- azimuth angles or angular velocities, and relative durations of movement phases (see below).
Performance
asig -- audio signal to be panned vbap4move allows the use of moving virtual sources. If ifldnum is positive, the fields represent directions of virtual sources and equal times, iazi1, [iele1,] iazi2, [iele2,], etc. The position of the virtual source is interpolated between directions starting from the first direction and ending at the last. Each interval is interpolated in time that is fraction total_time / number_of_intervals of the duration of the sound event. If ifldnum is negative, the fields represent angular velocities and equal times. The first field is, however, the starting direction, iazi1, [iele1,] iazi_vel1, [iele_vel1,] iazi_vel2, [iele_vel2,] .... Each velocity is applied to the note that is fraction total_time / number_of_velocities of the duration of the sound event. If the elevation of the virtual source becomes greater than 90 degrees or less than 0 degrees, the polarity of angular velocity is changed. Thus the elevational angular velocity produces a virtual source that moves up and down between 0 and 90 degrees.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
2220
Examples
See the entry for vbap8move for an example of usage of the vbapXmove opcodes.
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap16move, vbap4, vbap8, vbap8move, vbaplsinit, vbapz, vbapzmove
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.07
2221
vbap8
vbap8 Distributes an audio signal among 8 channels.
Description
Distributes an audio signal among 8 channels.
Syntax
ar1, ..., ar8 vbap8 asig, kazim [, kelev] [, kspread]
Performance
asig -- audio signal to be panned kazim -- azimuth angle of the virtual source kelev (optional) -- elevation angle of the virtual source kspread (optional) -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When kspread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. vbap8 takes an input signal, asig, and distributes it among 8 outputs, according to the controls kazim and kelev, and the configured loudspeaker placement. If idim = 2, kelev is set to zero. The distribution is performed using Vector Base Amplitude Panning (VBAP - See reference). VBAP distributes the signal using loudspeaker data configured with vbaplsinit. The signal is applied to, at most, two loudspeakers in 2-D loudspeaker configurations, and three loudspeakers in 3-D loudspeaker configurations. If the virtual source is panned outside the region spanned by loudspeakers, the nearest loudspeakers are used in panning.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
Example
Here is a simple example of the vbap8 opcode. It uses the file vbap8.csd [examples/vbap8.csd].
2222
; For Non-realtime ouput leave only the line below: -o vbap8.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = kr = ksmps = nchnls = vbaplsinit 41000 441 100 4 2, 8,
instr 1 asig oscil 20000, 440, 1 a1,a2,a3,a4,a5,a6,a7,a8 vbap8 asig, p4, 0, 20 ;p4 = azimuth ;render twice with alternate outq statements ; to obtain two 4 channel .wav files: outq a1,a2,a3,a4 ; outq a5,a6,a7,a8 ; or use an 8-channel output for realtime output (set nchnls to 8): ; outo a1,a2,a3,a4,a5,a6,a7,a8 endin </CsInstruments> <CsScore> ; , i i i i i i i i e Play Instrument #1 for one second. azimuth 1 0 1 20 1 + . 40 1 + . 60 1 + . 80 1 + . 100 1 + . 120 1 + . 140 1 + . 160
</CsScore> </CsoundSynthesizer>
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap16move, vbap4, vbap4move, vbap8move, vbaplsinit, vbapz, vbapzmove
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.07. Input parameters accept k-rate since Csund 5.09.
2223
vbap8move
vbap8move Distributes an audio signal among 8 channels with moving virtual sources.
Description
Distributes an audio signal among 8 channels with moving virtual sources.
Syntax
ar1, ..., ar8 vbap8move asig, idur, ispread, ifldnum, ifld1 \ [, ifld2] [...]
Initialization
idur -- the duration over which the movement takes place. ispread -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When ispread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. ifldnum -- number of fields (absolute value must be 2 or larger). If ifldnum is positive, the virtual source movement is a polyline specified by given directions. Each transition is performed in an equal time interval. If ifldnum is negative, specified angular velocities are applied to the virtual source during specified relative time intervals (see below). ifld1, ifld2, ... -- azimuth angles or angular velocities, and relative durations of movement phases (see below).
Performance
asig -- audio signal to be panned vbap8move allows the use of moving virtual sources. If ifldnum is positive, the fields represent directions of virtual sources and equal times, iazi1, [iele1,] iazi2, [iele2,], etc. The position of the virtual source is interpolated between directions starting from the first direction and ending at the last. Each interval is interpolated in time that is fraction total_time / number_of_intervals of the duration of the sound event. If ifldnum is negative, the fields represent angular velocities and equal times. The first field is, however, the starting direction, iazi1, [iele1,] iazi_vel1, [iele_vel1,] iazi_vel2, [iele_vel2,] .... Each velocity is applied to the note that is fraction total_time / number_of_velocities of the duration of the sound event. If the elevation of the virtual source becomes greater than 90 degrees or less than 0 degrees, the polarity of angular velocity is changed. Thus the elevational angular velocity produces a virtual source that moves up and down between 0 and 90 degrees.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
2224
Example
Here is a simple example of the vbap8move opcode. It uses the file vbap8move.csd [examples/ vbap8move.csd].
;; Move circling around once all the speakers aout1, aout2, aout3, aout4, aout5, aout6, aout7, aout8 vbap8move a1, idur, ispread, ifldnum, 15, 65, 11 ;; Speaker mapping aFL = aout8 ; Front Left aFR = aout1 ; Front Right aMFL = aout7 ; Mid Front Left aMFR = aout2 ; Mid Front Right aMBL = aout6 ; Mid Back Left aMBR = aout3 ; Mid Back Right aBL = aout5 ; Back Left aBR = aout4 ; Back Right outo aFL, aFR, aMFL, aMFR, aMBL, aMBR, aBL, aBR endin </CsInstruments> <CsScore> i1 0 30 e </CsScore> </CsoundSynthesizer>
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
2225
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.07
2226
vbaplsinit
vbaplsinit Configures VBAP output according to loudspeaker parameters.
Description
Configures VBAP output according to loudspeaker parameters.
Syntax
vbaplsinit idim, ilsnum [, idir1] [, idir2] [...] [, idir32]
Initialization
idim -- dimensionality of loudspeaker array. Either 2 or 3. ilsnum -- number of loudspeakers. In two dimensions, the number can vary from 2 to 16. In three dimensions, the number can vary from 3 and 16. idir1, idir2, ..., idir32 -- directions of loudspeakers. Number of directions must be less than or equal to 16. In two-dimensional loudspeaker positioning, idirn is the azimuth angle respective to nth channel. In three-dimensional loudspeaker positioning, fields are the azimuth and elevation angles of each loudspeaker consequently (azi1, ele1, azi2, ele2, etc.).
Performance
VBAP distributes the signal using loudspeaker data configured with vbaplsinit. The signal is applied to, at most, two loudspeakers in 2-D loudspeaker configurations, and three loudspeakers in 3-D loudspeaker configurations. If the virtual source is panned outside the region spanned by loudspeakers, the nearest loudspeakers are used in panning.
Examples
See the entry for vbap8move and vbap8 for examples of usage of the vbap opcodes.
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap16move, vbap4, vbap4move, vbap8, vbap8move, vbapz, vbapzmove
Credits
Author: Ville Pulkki Sibelius Academy Computer Music Studio Laboratory of Acoustics and Audio Signal Processing 2227
Helsinki University of Technology Helsinki, Finland May 2000 New in Csound Version 4.07
2228
vbapz
vbapz Writes a multi-channel audio signal to a ZAK array.
Description
Writes a multi-channel audio signal to a ZAK array.
Syntax
vbapz inumchnls, istartndx, asig, kazim [, kelev] [, kspread]
Initialization
inumchnls -- number of channels to write to the ZA array. Must be in the range 2 - 256. istartndx -- first index or position in the ZA array to use
Performance
asig -- audio signal to be panned kazim -- azimuth angle of the virtual source kelev (optional) -- elevation angle of the virtual source kspread (optional) -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When kspread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. The opcode vbapz is the multiple channel analog of the opcodes like vbap4, working on inumchnls and using a ZAK array for output.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
Examples
See the entry for vbap8 for an example of usage of the vbap opcodes.
Reference
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap16move, vbap4, vbap4move, vbap8, vbap8move, vbaplsinit, vbapzmove 2229
Credits
John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07. Input parameters accept k-rate since Csund 5.09.
2230
vbapzmove
vbapzmove Writes a multi-channel audio signal to a ZAK array with moving virtual sources.
Description
Writes a multi-channel audio signal to a ZAK array with moving virtual sources.
Syntax
vbapzmove inumchnls, istartndx, asig, idur, ispread, ifldnum, ifld1, \ ifld2, [...]
Initialization
inumchnls -- number of channels to write to the ZA array. Must be in the range 2 - 256. istartndx -- first index or position in the ZA array to use idur -- the duration over which the movement takes place. ispread -- spreading of the virtual source (range 0 - 100). If value is zero, conventional amplitude panning is used. When ispread is increased, the number of loudspeakers used in panning increases. If value is 100, the sound is applied to all loudspeakers. ifldnum -- number of fields (absolute value must be 2 or larger). If ifldnum is positive, the virtual source movement is a polyline specified by given directions. Each transition is performed in an equal time interval. If ifldnum is negative, specified angular velocities are applied to the virtual source during specified relative time intervals (see below). ifld1, ifld2, ... -- azimuth angles or angular velocities, and relative durations of movement phases (see below).
Performance
asig -- audio signal to be panned The opcode vbapzmove is the multiple channel analog of the opcodes like vbap4move, working on inumchnls and using a ZAK array for output.
Warning
Please note that all vbap panning opcodes require the vbap system to be initialized using vbaplsinit.
Examples
See the entry for vbap8move for an example of usage of the vbapXmove opcodes.
Reference
2231
Ville Pulkki: Virtual Sound Source Positioning Using Vector Base Amplitude Panning Journal of the Audio Engineering Society, 1997 June, Vol. 45/6, p. 456.
See Also
vbap16, vbap16move, vbap4, vbap4move, vbap8, vbap8move, vbaplsinit, vbapz,
Credits
John ffitch University of Bath/Codemist Ltd. Bath, UK May 2000 New in Csound Version 4.07
2232
vcella
vcella Cellular Automata
Description
Unidimensional Cellular Automata applied to Csound vectors
Syntax
vcella ktrig, kreinit, ioutFunc, initStateFunc, \ iRuleFunc, ielements, irulelen [, iradius]
Initialization
ioutFunc - number of the table where the state of each cell is stored initStateFunc - number of a table containig the inital states of each cell iRuleFunc - number of a lookup table containing the rules ielements - total number of cells irulelen - total number of rules iradius (optional) - radius of Cellular Automata. At present time CA radius can be 1 or 2 (1 is the default)
Performance
ktrig - trigger signal. Each time it is non-zero, a new generation of cells is evaluated kreinit - trigger signal. Each time it is non-zero, state of all cells is forced to be that of initStateFunc. vcella supports unidimensional cellular automata, where the state of each cell is stored in ioutFunc. So ioutFunc is a vector containing current state of each cell. This variant vector can be used together with any other vector-based opcode, such as adsynt, vmap, vpowv etc. initStateFunc is an input vector containing the inital value of the row of cells, while iRuleFunc is an input vector containing the rules in the form of a lookup table. Notice that initStateFunc and iRuleFunc can be updated during the performance by means of other vector-based opcodes (for example vcopy) in order to force to change rules and status at performance time. A new generation of cells is evaluated each time ktrig contains a non-zero value. Also the status of all cells can be forced to assume the status corresponding to the contents of initStateFunc each time kreinit contains a non-zero value. Radius of CA algorithm can be 1 or 2 (optional iradius arguement).
Examples
Here is an example of the vcella opcode. It uses the file vcella.csd [examples/vcella.csd].
2233
; Cellular automata-driven oscillator bank using vcella and adsynt instr 1 idur = p3 iCArate = p4 ; number of times per second the CA calculates new valu ; f-tables for CA parameters iCAinit = p5 ; CA initial states iCArule = p6 ; CA rule values ; The rule is used as follows: ; the states (values) of each cell are summed with their neighboring cells within ; the specied radius (+/- 1 or 2 cells). Each sum is used as an index to read a ; value from the rule table which becomes the new state value for its cell. ; All new states are calculated first, then the new values are all applied ; simultaneously. ielements = ftlen(iCAinit) inumrules = ftlen(iCArule) iradius = 1 ; create some needed tables iCAstate ftgen 0, 0, ielements, -2, 0 ifreqs ftgen 0, 0, ielements, -2, 0 iamps ftgen 0, 0, ielements, -2, 0 ; will hold the current CA states ; will hold the oscillator frequency for each cell ; will hold the amplitude for each cell
; calculate cellular automata state ktrig metro iCArate ; trigger the CA to update iCArate times per second vcella ktrig, 0, iCAstate, iCAinit, iCArule, ielements, inumrules, iradius ; scale CA state for use as amplitudes of the oscillator bank vcopy iamps, iCAstate, ielements vmult iamps, (1/3), ielements ; divide by 3 since state values are 0-3 vport iamps, .01, ielements ; need to smooth the amplitude changes for adsynt ; we could use adsynt2 instead of adsynt, but it does not seem to be working ; i-time loop for calculating frequencies index = 0 inew = 1 iratio = 1.125 loop1: tableiw inew, index, ifreqs, 0 inew = inew * iratio index = index + 1 if (index < ielements) igoto loop1 ; create sound with additive oscillator bank ifreqbase = 64
; just major second (creating a whole tone scale) ; 0 indicates integer indices
2234
; random oscillator phases 0.0, 0.5, 1.0, idur - 1.0, 1.0, 0.5, 0.0 kenv, ifreqbase, iwavefn, ifreqs, iamps, ielements, iphs aosc * ampdb(68)
</CsInstruments> <CsScore> f1 0 16384 10 1 ; This example uses a 4-state cellular automata ; Possible state values are 0, 1, 2, and 3 ; CA initial state ; We have 16 cells in our CA, so the initial state table is size 16 f10 0 16 -2 0 1 0 0 1 0 0 2 2 0 0 1 0 0 1 0 ; CA rule ; The maximum sum with radius 1 (3 cells) is 9, so we need 10 values in the rule (0-9) f11 0 16 -2 1 0 3 2 1 0 0 2 1 0 ; Here is our one and only note! i1 0 20 4 10 11 e </CsScore> </CsoundSynthesizer>
Credits
Written by: Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV) Example by: Anthony Kozar
2235
vco
vco Implementation of a band limited, analog modeled oscillator.
Description
Implementation of a band limited, analog modeled oscillator, based on integration of band limited impulses. vco can be used to simulate a variety of analog wave forms.
Syntax
ares vco xamp, xcps, iwave, kpw [, ifn] [, imaxd] [, ileak] [, inyx] \ [, iphs] [, iskip]
Initialization
iwave -- determines the waveform: iwave = 1 - sawtooth iwave = 2 - square/PWM iwave = 3 - triangle/saw/ramp ifn (optional, default = 1) -- should be the table number of a of a stored sine wave. Must point to a valid table which contains a sine wave. Csound will report an error if this parameter is not set and table 1 doesn't exist. imaxd (optional, default = 1) -- is the maximum delay time. A time of 1/ifqc may be required for the PWM and triangle waveform. To bend the pitch down this value must be as large as 1/(minimum frequency). ileak (optional, default = 0) -- if ileak is between zero and one (0 < ileak < 1) then ileak is used as the leaky integrator value. Otherwise a leaky integrator value of .999 is used for the saw and square waves and .995 is used for the triangle wave. This can be used to flatten the square wave or straighten the saw wave at low frequencies by setting ileak to .99999 or a similar value. This should give a hollower sounding square wave. inyx (optional, default = .5) -- this is used to determine the number of harmonics in the band limited pulse. All overtones up to sr * inyx will be used. The default gives sr * .5 (sr/2). For sr/4 use inyx = .25. This can generate a fatter sound in some cases. iphs (optional, default = 0) -- this is a phase value. There is an artifact (bug-like feature) in vco which occurs during the first half cycle of the square wave which causes the waveform to be greater in magnitude than all others. The value of iphs has an effect on this artifact. In particular setting iphs to .5 will cause the first half cycle of the square wave to resemble a small triangle wave. This may be more desirable than the large wave artifact which is the current default. iskip (optional, default = 0) -- if non zero skip the initialisation of the filter. (New in Csound version 4.23f13 and 5.0)
2236
Performance
kpw -- determines either the pulse width (if iwave is 2) or the saw/ramp character (if iwave is 3) The value of kpw should be greater than 0 and less than 1. A value of 0.5 will generate either a square wave (if iwave is 2) or a triangle wave (if iwave is 3). xamp -- determines the amplitude xcps -- is the frequency of the wave in cycles per second.
Examples
Here is an example of the vco opcode. It uses the file vco.csd [examples/vco.csd].
2237
; i i i
p6 = 1 00 1 02 1 04
the waveform (1=Saw, 2=Square/PWM, 3=Tri/Saw-Ramp-Mod) 02 20000 05.00 1 02 20000 05.00 2 02 20000 05.00 3
i 1 06 02 20000 07.00 1 i 1 08 02 20000 07.00 2 i 1 10 02 20000 07.00 3 i 1 12 02 20000 09.00 1 i 1 14 02 20000 09.00 2 i 1 16 02 20000 09.00 3 i 1 18 02 20000 11.00 1 i 1 20 02 20000 11.00 2 i 1 22 02 20000 11.00 3 e </CsScore> </CsoundSynthesizer>
See Also
vco2
Credits
Author: Hans Mikelson December 1998 New in Csound version 3.50 November 2002. Corrected the documentation for the kpw parameter thanks to Luis Jure and Hans Mikelson.
2238
vco2
vco2 Implementation of a band-limited oscillator using pre-calculated tables.
Description
vco2 is similar to vco. But the implementation uses pre-calculated tables of band-limited waveforms (see also GEN30) rather than integrating impulses. This opcode can be faster than vco (especially if a low control-rate is used) and also allows better sound quality. Additionally, there are more waveforms and oscillator phase can be modulated at k-rate. The disadvantage is increased memory usage. For more details about vco2 tables, see also vco2init and vco2ft.
Syntax
ares vco2 kamp, kcps [, imode] [, kpw] [, kphs] [, inyx]
Initialization
imode (optional, default=0) -- a sum of values representing the waveform and its control values. One may use any of the following values for imode: 16: enable k-rate phase control (if set, kphs is a required k-rate parameter that allows phase modulation) 1: skip initialization One may use exactly one of these imode values to select the waveform to be generated: 14: user defined waveform -1 (requires using the vco2init opcode) 12: triangle (no ramp, faster) 10: square wave (no PWM, faster) 8: 4 * x * (1 - x) (i.e. integrated sawtooth) 6: pulse (not normalized) 4: sawtooth / triangle / ramp 2: square / PWM 0: sawtooth The default value for imode is zero, which means a sawtooth wave with no k-rate phase control. inyx (optional, default=0.5) -- bandwidth of the generated waveform, as percentage (0 to 1) of the sample rate. The expected range is 0 to 0.5 (i.e. up to sr/2), other values are limited to the allowed range. Setting inyx to 0.25 (sr/4), or 0.3333 (sr/3) can produce a fatter sound in some cases, although it is 2239
Performance
ares -- the output audio signal. kamp -- amplitude scale. In the case of a imode waveform value of 6 (a pulse waveform), the actual output level can be a lot higher than this value. kcps -- frequency in Hz (should be in the range -sr/2 to sr/2). kpw (optional) -- the pulse width of the square wave (imode waveform=2) or the ramp characteristics of the triangle wave (imode waveform=4). It is required only by these waveforms and ignored in all other cases. The expected range is 0 to 1, any other value is wrapped to the allowed range.
Warning
kpw must not be an exact integer value (e.g. 0 or 1) if a sawtooth / triangle / ramp (imode waveform=4) is generated. In this case, the recommended range is about 0.01 to 0.99. There is no such limitation for a square/PWM waveform. kphs (optional) -- oscillator phase (depending on imode, this can be either an optional i-rate parameter that defaults to zero or required k-rate). Similarly to kpw, the expected range is 0 to 1.
Note
When a low control-rate is used, pulse width (kpw) and phase (kphs) modulation is internally converted to frequency modulation. This allows for faster processing and reduced artifacts. But in the case of very long notes and continuous fast changes in kpw or kphs, the phase may drift away from the requested value. In most cases, the phase error is at most 0.037 per hour (assuming a sample rate of 44100 Hz). This is a problem mainly in the case of pulse width (kpw), where it may result in various artifacts. While future releases of vco2 may fix such errors, the following work-arounds may also be of some help: Use kpw values only in the range 0.05 to 0.95. (There are more artifacts around integer values) Try to avoid modulating kpw by asymmetrical waveforms like a sawtooth wave. Relatively slow (<= 20 Hz) symmetrical modulation (e.g. sine or triangle), random splines (also slow), or a fixed pulse width is a lot less likely to cause synchronization problems. In some cases, adding random jitter (for example: random splines with an amplitude of about 0.01) to kpw may also fix the problem.
Examples
Here is an example of the vco2 opcode. It uses the file vco2.csd [examples/vco2.csd].
2240
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o vco2.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr ksmps nchnls = = = 44100 10 1
; user defined waveform -1: trapezoid wave with default parameters (can be ; accessed at ftables starting from 10000) itmp ftgen 1, 0, 16384, 7, 0, 2048, 1, 4096, 1, 4096, -1, 4096, -1, 2048, 0 ift vco2init -1, 10000, 0, 0, 0, 1 ; user defined waveform -2: fixed table size (4096), number of partials ; multiplier is 1.02 (~238 tables) itmp ftgen 2, 0, 16384, 7, 1, 4095, 1, 1, -1, 4095, -1, 1, 0, 8192, 0 ift vco2init -2, ift, 1.02, 4096, 4096, 2 kcps a1 instr 1 expon p4, p3, p5 vco2 12000, kcps out a1 endin ; instr 1: basic vco2 example ; (sawtooth wave with default ; parameters)
kcps kpw a1
instr 2 expon p4, p3, p5 linseg 0.1, p3/2, 0.9, p3/2, 0.1 vco2 10000, kcps, 2, kpw out a1 endin instr 3 expon p4, p3, p5 vco2 14000, kcps, 14 linseg 1, p3 - 0.1, 1, 0.1, 0 out a1 * aenv endin instr 4 expon p4, p3, p5 vco2ft kcps, -2, 0.25 oscilikt 12000, kcps, kfn out a1 endin
kcps a1 aenv
kcps kfn a1
; instr 4: vco2ft example, ; with user defined waveform ; (-2), and sr/4 bandwidth
f 0 14 e </CsScore> </CsoundSynthesizer>
See Also
vco, vco2ft, vco2ift, and vco2init. 2241
Credits
Author: Istvan Varga New in version 4.22
2242
vco2ft
vco2ft Returns a table number at k-time for a given oscillator frequency and wavform.
Description
vco2ft returns the function table number to be used for generating the specified waveform at a given frequency. This function table number can be used by any Csound opcode that generates a signal by reading function tables (like oscilikt). The tables must be calculated by vco2init before vco2ft is called and shared as Csound ftables (ibasfn).
Syntax
kfn vco2ft kcps, iwave [, inyx]
Initialization
iwave -- the waveform for which table number is to be selected. Allowed values are: 0: sawtooth 1: 4 * x * (1 - x) (integrated sawtooth) 2: pulse (not normalized) 3: square wave 4: triangle Additionally, negative iwave values select user defined waveforms (see also vco2init). inyx (optional, default=0.5) -- bandwidth of the generated waveform, as percentage (0 to 1) of the sample rate. The expected range is 0 to 0.5 (i.e. up to sr/2), other values are limited to the allowed range. Setting inyx to 0.25 (sr/4), or 0.3333 (sr/3) can produce a fatter sound in some cases, although it is more likely to reduce quality.
Performance
kfn -- the ftable number, returned at k-rate. kcps -- frequency in Hz, returned at k-rate. Zero and negative values are allowed. However, if the absolute value exceeds sr/2 (or sr * inyx), the selected table will contain silence.
Examples
See the example for the vco2 opcode.
See Also
2243
Credits
Author: Istvan Varga New in version 4.22
2244
vco2ift
vco2ift Returns a table number at i-time for a given oscillator frequency and wavform.
Description
vco2ift is the same as vco2ft, but works at i-time. It is suitable for use with opcodes that expect an i-rate table number (for example, oscili).
Syntax
ifn vco2ift icps, iwave [, inyx]
Initialization
ifn -- the ftable number. icps -- frequency in Hz. Zero and negative values are allowed. However, if the absolute value exceeds sr/2 (or sr * inyx), the selected table will contain silence. iwave -- the waveform for which table number is to be selected. Allowed values are: 0: sawtooth 1: 4 * x * (1 - x) (integrated sawtooth) 2: pulse (not normalized) 3: square wave 4: triangle Additionally, negative iwave values select user defined waveforms (see also vco2init). inyx (optional, default=0.5) -- bandwidth of the generated waveform, as percentage (0 to 1) of the sample rate. The expected range is 0 to 0.5 (i.e. up to sr/2), other values are limited to the allowed range. Setting inyx to 0.25 (sr/4), or 0.3333 (sr/3) can produce a fatter sound in some cases, although it is more likely to reduce quality.
See Also
vco2ft, vco2init, and vco2.
Credits
Author: Istvan Varga New in version 4.22
2245
vco2init
vco2init Calculates tables for use by vco2 opcode.
Description
vco2init calculates tables for use by vco2 opcode. Optionally, it is also possible to access these tables as standard Csound function tables. In this case, vco2ft can be used to find the correct table number for a given oscillator frequency. In most cases, this opcode is called from the orchestra header. Using vco2init in instruments is possible but not recommended. This is because replacing tables during performance can result in a Csound crash if other opcodes are accessing the tables at the same time. Note that vco2init is not required for vco2 to work (tables are automatically allocated by the first vco2 call, if not done yet), however it can be useful in some cases: Pre-calculate tables at orchestra load time. This is useful to avoid generating the tables during performance, which could interrupt real-time processing. Share the tables as Csound ftables. By default, the tables can be accessed only by vco2. Change the default parameters of tables (e.g. size) or use an user-defined waveform specified in a function table.
Syntax
ifn vco2init iwave [, ibasfn] [, ipmul] [, iminsiz] [, imaxsiz] [, isrcft]
Initialization
ifn -- the first free ftable number after the allocated tables. If ibasfn was not specified, -1 is returned. iwave -- sum of the following values selecting which waveforms are to be calculated: 16: triangle 8: square wave 4: pulse (not normalized) 2: 4 * x * (1 - x) (integrated sawtooth) 1: sawtooth Alternatively, iwave can be set to a negative integer that selects an user-defined waveform. This also requires the isrcft parameter to be specified. vco2 can access waveform number -1. However, other userdefined waveforms are usable only with vco2ft or vco2ift. ibasfn (optional, default=-1) -- ftable number from which the table set(s) can be accessed by opcodes 2246
other than vco2. This is required by user defined waveforms, with the exception of -1. If this value is less than 1, it is not possible to access the tables calculated by vco2init as Csound function tables. ipmul (optional, default=1.05) -- multiplier value for number of harmonic partials. If one table has n partials, the next one will have n * ipmul (at least n + 1). The allowed range for ipmul is 1.01 to 2. Zero or negative values select the default (1.05). iminsiz (optional, default=-1) -- minimum table size. imaxsiz (optional, default=-1) -- maximum table size. The actual table size is calculated by multiplying the square root of the number of harmonic partials by iminsiz, rounding up the result to the next power of two, and limiting this not to be greater than imaxsiz. Both parameters, iminsiz and imaxsiz, must be power of two, and in the allowed range. The allowed range is 16 to 262144 for iminsiz to up to 16777216 for imaxsiz. Zero or negative values select the default settings: The minimum size is 128 for all waveforms except pulse (iwave=4). Its minimum size is 256. The default maximum size is usually the minimum size multiplied by 64, but not more than 16384 if possible. It is always at least the minimum size. isrcft (optional, default=-1) -- source ftable number for user-defined waveforms (if iwave < 0). isrcft should point to a function table containing the waveform to be used for generating the table array. The table size is recommended to be at least imaxsiz points. If iwave is not negative (built-in waveforms are used), isrcft is ignored.
Warning
The number and size of tables is not fixed. Orchestras should not depend on these parameters, as they are subject to changes between releases. If the selected table set already exists, it is replaced. If any opcode is accessing the tables at the same time, it is very likely that a crash will occur. This is why it is recommended to use vco2init only in the orchestra header. These tables should not be replaced/overwritten by GEN routines or the ftgen opcode. Otherwise, unpredictable behavior or a Csound crash may occur if vco2 is used. The first free ftable after the table array(s) is returned in ifn.
Examples
See the example for the vco2 opcode.
See Also
vco2ft, vco2ift, and vco2.
Credits
Author: Istvan Varga New in version 4.22 2247
vcomb
vcomb Variably reverberates an input signal with a colored frequency response.
Description
Variably reverberates an input signal with a colored frequency response.
Syntax
ares vcomb asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]
Initialization
imaxlpt -- maximum loop time for klpt iskip (optional, default=0) -- initial disposition of delay-loop data space (cf. reson). The default value is 0. insmps (optional, default=0) -- delay amount, as a number of samples.
Performance
krvt -- the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). xlpt -- variable loop time in seconds, same as ilpt in comb. Loop time can be as large as imaxlpt. This filter reiterates input with an echo density determined by loop time xlpt. The attenuation rate is independent and is determined by krvt, the reverberation time (defined as the time in seconds for a signal to decay to 1/1000, or 60dB down from its original amplitude). Output will appear only after ilpt seconds.
Examples
Here is an example of the vcomb opcode. It uses the file vcomb.csd [examples/vcomb.csd].
2248
nchnls
; new, and important. Make sure that midi note events are only ; received by instruments that actually need them. ; turn default midi routing off massign 0, 0 ; route note events on channel 1 to instr 1 massign 1, 1 ; Define your midi controllers #define C1 #21# #define C2 #22# #define C3 #23# ; Initialize MIDI controllers initc7 1, $C1, 0.5 initc7 1, $C2, 0.5 initc7 1, $C3, 0.5 gaosc init 0 ;delay send ;delay: time to zero ;delay: rate
; Define an opcode to "smooth" the MIDI controller signal opcode smooth, k, k kin xin kport linseg 0, 0.0001, 0.01, 1, 0.01 kin portk kin, kport xout kin endop instr 1 ; Generate a sine wave at the frequency of the MIDI note that triggered the intrument ifqc cpsmidi iamp ampmidi 10000 aenv linenr iamp, .01, .1, .01 ;envelope a1 oscil aenv, ifqc, 1 ; All sound goes to the global variable gaosc gaosc = gaosc + a1 endin instr 198 ; ECHO kcmbsnd ctrl7 1, $C1, 0, 1 ;delay send ktime ctrl7 1, $C2, 0.01, 6 ;time loop fades out kloop ctrl7 1, $C3, 0.01, 1 ;loop speed ; Receive MIDI controller values and then smooth them kcmbsnd smooth kcmbsnd ktime smooth ktime kloop smooth kloop imaxlpt = 1 ;max loop time ; Create a variable reverberation (delay) of the gaosc signal acomb vcomb gaosc, ktime, kloop, imaxlpt, 1 aout = (acomb * kcmbsnd) + gaosc * (1 - kcmbsnd) outs aout, aout gaosc = 0 endin </CsInstruments> <CsScore> f1 0 16384 10 1 i198 0 10000 e </CsScore> </CsoundSynthesizer>
See Also
alpass, comb, reverb, valpass
Credits
Author: William Pete Moss University of Texas at Austin 2249
2250
vcopy
vcopy Copies between two vectorial control signals
Description
Copies between two vectorial control signals
Syntax
vcopy ifn, ifn2, kelements [, kdstoffset] [, ksrcoffset] [, kverbose]
Initialization
ifn1 - number of the table where the vectorial signal will be copied (destination) ifn2 - number of the table hosting the vectorial signal to be copied (source)
Performance
kelements - number of elements of the vector kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vcopy copies kelements elements from ifn2 (starting from position isrcoffset) to ifn1 (starting from position idstoffset). Useful to keep old vector values, by storing them in another table. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If kdstoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector will not be changed for these elements). If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded.
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at k-rate (this means that every k-pass the vectors are copied). There's an i-rate version of this opcode called vcopy_i.
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. 2251
This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexp, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc. Note: bmscan not yet available on Canonical Csound
Examples
Here is an example of the vcopy opcode. It uses the file vcopy.csd [examples/vcopy.csd].
i1 0 4 i2 3 1 s i1 0 4 i3 3 1
2252
s i1 0 4 </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2253
vcopy_i
vcopy_i Copies a vector from one table to another.
Description
Copies a vector from one table to another.
Syntax
vcopy_i ifn, ifn2, ielements [,idstoffset, isrcoffset]
Initialization
ifn - number of the table where the vectorial signal will be copied ifn - number of the table hosting the vectorial signal to be copied ielements - number of elements of the vector idstoffset - index offset for destination table isrcoffset - index offset for source table
Performance
vcopy copies ielements elements from ifn2 (starting from position isrcoffset) to ifn1 (starting from position idstoffset). Useful to keep old vector values, by storing them in another table. This opcode is exactly the same as vcopy but performs all the copying on the intialization pass only. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will be set to 0). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination vector elements will be 0).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexp, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc. Note: bmscan not yet available on Canonical Csound
Examples
See vcopy for an example.
2254
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2255
vdelay
vdelay An interpolating variable time delay.
Description
This is an interpolating variable time delay, it is not very different from the existing implementation (deltapi), it is only easier to use.
Syntax
ares vdelay asig, adel, imaxdel [, iskip]
Initialization
imaxdel -- Maximum value of delay in milliseconds. If adel gains a value greater than imaxdel it is folded around imaxdel. This should not happen. iskip -- Skip initialization if present and non-zero
Performance
With this unit generator it is possible to do Doppler effects or chorusing and flanging. asig -- Input signal. adel -- Current value of delay in milliseconds. Note that linear functions have no pitch change effects. Fast changing values of adel will cause discontinuities in the waveform resulting noise.
Examples
f1 0 8192 10 1 ims = a1 oscil a2 oscil a2 = a3 vdelay out
; ; ; ; ;
Maximum delay time in msec Make a signal Make an LFO Offset the LFO so that it is positive Use the LFO to control delay time
Two important points here. First, the delay time must be always positive. And second, even though the delay time can be controlled in k-rate, it is not advised to do so, since sudden time changes will create clicks.
See Also
vdelay3
Credits
2256
2257
vdelay3
vdelay3 A variable time delay with cubic interpolation.
Description
vdelay3 is experimental. It is the same as vdelay except that it uses cubic interpolation. (New in Version 3.50.)
Syntax
ares vdelay3 asig, adel, imaxdel [, iskip]
Initialization
imaxdel -- Maximum value of delay in milliseconds. If adel gains a value greater than imaxdel it is folded around imaxdel. This should not happen. iskip (optional) -- Skip initialization if present and non-zero.
Performance
With this unit generator it is possible to do Doppler effects or chorusing and flanging. asig -- Input signal. adel -- Current value of delay in milliseconds. Note that linear functions have no pitch change effects. Fast changing values of adel will cause discontinuities in the waveform resulting noise.
Examples
f1 0 8192 10 1 ims = a1 oscil a2 oscil a2 = a3 vdelay out
; ; ; ; ;
Maximum delay time in msec Make a signal Make an LFO Offset the LFO so that it is positive Use the LFO to control delay time
Two important points here. First, the delay time must be always positive. And second, even though the delay time can be controlled in k-rate, it is not advised to do so, since sudden time changes will create clicks.
See Also
vdelay
Credits
2258
2259
vdelayx
vdelayx A variable delay opcode with high quality interpolation.
Description
A variable delay opcode with high quality interpolation.
Syntax
aout vdelayx ain, adl, imd, iws [, ist]
Initialization
imd -- max. delay time (seconds) iws -- interpolation window size (see below) ist (optional) -- skip initialization if not zero
Performance
aout -- output audio signal ain -- input audio signal adl -- delay time in seconds This opcode uses high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed.
Notes
Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate. The minimum allowed delay is iws/2 samples. Using the same variables as input and output is allowed in these opcodes. In vdelayxw*, changing the delay time has some effects on output volume: a = 1 / (1 + dt) where a is the output gain, and dt is the change of delay time per seconds. These opcodes are best used in the double-precision version of Csound.
2260
See Also
vdelayxq, vdelayxs, vdelayxw, vdelayxwq, vdelayxws
2261
vdelayxq
vdelayxq A 4-channel variable delay opcode with high quality interpolation.
Description
A 4-channel variable delay opcode with high quality interpolation.
Syntax
aout1, aout2, aout3, aout4 vdelayxq ain1, ain2, ain3, ain4, adl, imd, iws [, ist]
Initialization
imd -- max. delay time (seconds) iws -- interpolation window size (see below) ist (optional) -- skip initialization if not zero
Performance
aout1, aout2, aout3, aout4 -- output audio signals. ain1, ain2, ain3, ain4 -- input audio signals. adl -- delay time in seconds This opcode uses high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed. The multichannel opcodes (eg. vdelayxq) allow delaying 2 or 4 variables at once (stereo or quad signals); this is much more efficient than using separate opcodes for each channel.
Notes
Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate. The minimum allowed delay is iws/2 samples. Using the same variables as input and output is allowed in these opcodes. In vdelayxw*, changing the delay time has some effects on output volume: a = 1 / (1 + dt) where a is the output gain, and dt is the change of delay time per seconds. These opcodes are best used in the double-precision version of Csound. 2262
See Also
vdelayx, vdelayxs, vdelayxw, vdelayxwq, vdelayxws
2263
vdelayxs
vdelayxs A stereo variable delay opcode with high quality interpolation.
Description
A stereo variable delay opcode with high quality interpolation.
Syntax
aout1, aout2 vdelayxs ain1, ain2, adl, imd, iws [, ist]
Initialization
imd -- max. delay time (seconds) iws -- interpolation window size (see below) ist (optional) -- skip initialization if not zero
Performance
aout1, aout2 -- output audio signals ain1, ain2 -- input audio signals adl -- delay time in seconds This opcode uses high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed. The multichannel opcodes (eg. vdelayxq) allow delaying 2 or 4 variables at once (stereo or quad signals); this is much more efficient than using separate opcodes for each channel.
Notes
Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate. The minimum allowed delay is iws/2 samples. Using the same variables as input and output is allowed in these opcodes. In vdelayxw*, changing the delay time has some effects on output volume: a = 1 / (1 + dt) where a is the output gain, and dt is the change of delay time per seconds. These opcodes are best used in the double-precision version of Csound. 2264
See Also
vdelayx, vdelayxq, vdelayxw, vdelayxwq, vdelayxws
2265
vdelayxw
vdelayxw Variable delay opcodes with high quality interpolation.
Description
Variable delay opcodes with high quality interpolation.
Syntax
aout vdelayxw ain, adl, imd, iws [, ist]
Initialization
imd -- max. delay time (seconds) iws -- interpolation window size (see below) ist (optional) -- skip initialization if not zero
Performance
aout -- output audio signal ain -- input audio signal adl -- delay time in seconds These opcodes use high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed. The vdelayxw opcodes change the position of the write tap in the delay line (unlike all other delay ugens that move the read tap), and are most useful for implementing Doppler effects where the position of the listener is fixed, and the sound source is moving.
Notes
Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate. The minimum allowed delay is iws/2 samples. Using the same variables as input and output is allowed in these opcodes. In vdelayxw*, changing the delay time has some effects on output volume: a = 1 / (1 + dt) where a is the output gain, and dt is the change of delay time per seconds.
2266
See Also
vdelayx, vdelayxq, vdelayxs, vdelayxwq, vdelayxws
2267
vdelayxwq
vdelayxwq Variable delay opcodes with high quality interpolation.
Description
Variable delay opcodes with high quality interpolation.
Syntax
aout1, aout2, aout3, aout4 vdelayxwq ain1, ain2, ain3, ain4, adl, \ imd, iws [, ist]
Initialization
imd -- max. delay time (seconds) iws -- interpolation window size (see below) ist (optional) -- skip initialization if not zero
Performance
ain1, ain2, ain3, ain4 -- input audio signals aout1, aout2, aout3, aout4 -- output audio signals adl -- delay time in seconds These opcodes use high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed. The vdelayxw opcodes change the position of the write tap in the delay line (unlike all other delay ugens that move the read tap), and are most useful for implementing Doppler effects where the position of the listener is fixed, and the sound source is moving. The multichannel opcodes (eg. vdelayxq) allow delaying 2 or 4 variables at once (stereo or quad signals); this is much more efficient than using separate opcodes for each channel.
Notes
Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate. The minimum allowed delay is iws/2 samples. Using the same variables as input and output is allowed in these opcodes. In vdelayxw*, changing the delay time has some effects on output volume: a = 1 / (1 + dt) 2268
where a is the output gain, and dt is the change of delay time per seconds. These opcodes are best used in the double-precision version of Csound.
See Also
vdelayx, vdelayxq, vdelayxs, vdelayxw, vdelayxws
2269
vdelayxws
vdelayxws Variable delay opcodes with high quality interpolation.
Description
Variable delay opcodes with high quality interpolation.
Syntax
aout1, aout2 vdelayxws ain1, ain2, adl, imd, iws [, ist]
Initialization
imd -- max. delay time (seconds) iws -- interpolation window size (see below) ist (optional) -- skip initialization if not zero
Performance
ain1, ain2 -- input audio signals aout1, aout2 -- output audio signals adl -- delay time in seconds These opcodes use high quality (and slow) interpolation, that is much more accurate than the currently available linear and cubic interpolation. The iws parameter sets the number of input samples used for calculating one output sample (allowed values are any integer multiply of 4 in the range 4 - 1024); higher values mean better quality and slower speed. The vdelayxw opcodes change the position of the write tap in the delay line (unlike all other delay ugens that move the read tap), and are most useful for implementing Doppler effects where the position of the listener is fixed, and the sound source is moving. The multichannel opcodes (eg. vdelayxq) allow delaying 2 or 4 variables at once (stereo or quad signals); this is much more efficient than using separate opcodes for each channel.
Notes
Delay time is measured in seconds (unlike in vdelay and vdelay3), and must be a-rate. The minimum allowed delay is iws/2 samples. Using the same variables as input and output is allowed in these opcodes. In vdelayxw*, changing the delay time has some effects on output volume: a = 1 / (1 + dt) 2270
where a is the output gain, and dt is the change of delay time per seconds. These opcodes are best used in the double-precision version of Csound.
See Also
vdelayx, vdelayxq, vdelayxs, vdelayxw, vdelayxwq
2271
vdivv
vdivv Performs division between two vectorial control signals
Description
Performs division between two vectorial control signals
Syntax
vdivv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed
Performance
kelements - number of elements of the two vectors kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vdivv divides two vectorial control signals, that is, each element of ifn1 is divided by the corresponding element of ifn2. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use kdstoffset and ksrcoffset to specify vectors in any location of the tables. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If ksrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will be set to 0). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination elements will be set to 0). If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded.
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at k-rate (this means that every k-pass the vectors are divided). There's an i-rate ver2272
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Examples
Here is an example of the vdivv opcode. It uses the file vdivv.csd [examples/vdivv.csd].
2273
endin </CsInstruments> <CsScore> f 1 0 16 -7 1 15 16 f 2 0 16 -7 1 15 2 i2 i2 i1 i2 i1 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.2 0.4 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 0.2 1 0.2 2 0.01 1 2 5 3 8 0.2 1 0.01 1 2 5 10 -2 0.2 1 0.01 1 2 8 14 0 0.2 1 0.01 1 2 8 0 14 0.2 1 0.002 1 1 8 5 2 0.2 1
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2274
vdivv_i
vdivv_i Performs division between two vectorial control signals at init time.
Description
Performs division between two vectorial control signals at init time.
Syntax
vdivv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed ielements - number of elements of the two vectors idstoffset - index offset for the destination (ifn1) table (Default=0) isrcoffset - index offset for the source (ifn2) table (Default=0)
Performance
vdivv_i divides two vectorial control signals, that is, each element of ifn1 is divided by the corresponding element of ifn2. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use idstoffset and isrcoffset to specify vectors in any location of the tables. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector will not be changed for these elements).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at init time. There's an k-rate version of this opcode called vdivv. All these operators (vaddv_i,vsubv_i,vmultv_i,vdivv_i,vpowv_i,vexpv_i, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
2275
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2276
vdelayk
vdelayk k-rate variable time delay.
Description
Variable delay applied to a k-rate signal
Syntax
kout vdelayk iksig, kdel, imaxdel [, iskip, imode]
Initialization
imaxdel - maximum value of delay in seconds. iskip (optional) - Skip initialization if present and non zero. imode (optional) - if non-zero it suppresses linear interpolation. While, normally, interpolation increases the quality of a signal, it should be suppressed if using vdelay with discrete control signals, such as, for example, trigger signals.
Performance
kout - delayed output signal ksig - input signal kdel - delay time in seconds can be varied at k-rate vdelayk is similar to vdelay, but works at k-rate. It is designed to delay control signals, to be used, for example, in algorithmic composition.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2277
vecdelay
vecdelay Vectorial Control-rate Delay Paths
Description
Generate a sort of 'vectorial' delay
Syntax
vecdelay ifn, ifnIn, ifnDel, ielements, imaxdel [, iskip]
Initialization
ifn - number of the table containing the output vector ifnIn - number of the table containing the input vector ifnDel - number of the table containing a vector whose elements contain delay values in seconds ielements - number of elements of the two vectors imaxdel - Maximum value of delay in seconds. iskip (optional) - initial disposition of delay-loop data space (see reson). The default value is 0.
Performance
vecdelay is similar to vdelay, but it works at k-rate and, instead of delaying a single signal, it delays a vector. ifnIn is the input vector of signals, ifn is the output vector of signals, and ifnDel is a vector containing delay times for each element, expressed in seconds. Elements of ifnDel can be updated at k-rate. Each single delay can be different from that of the other elements, and can vary at k-rate. imaxdel sets the maximum delay allowed for all elements of ifnDel.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2278
veloc
veloc Get the velocity from a MIDI event.
Description
Get the velocity from a MIDI event.
Syntax
ival veloc [ilow] [, ihigh]
Initialization
ilow, ihigh -- low and hi ranges for mapping
Performance
Get the MIDI byte value (0 - 127) denoting the velocity of the current event.
Examples
Here is an example of the veloc opcode. It uses the file veloc.csd [examples/veloc.csd].
2279
e </CsScore> </CsoundSynthesizer>
See Also
aftouch, ampmidi, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib
Credits
Author: Barry L. Vercoe - Mike Berry MIT - Mills May 1997 Example written by Kevin Conder.
2280
vexp
vexp Performs power-of operations between a vector and a scalar
Description
Performs power-of operations between a vector and a scalar
Syntax
vexp ifn, kval, kelements [, kdstoffset] [, kverbose]
Initialization
ifn - number of the table hosting the vectorial signal to be processed
Performance
kval - scalar operand to be processed kelements - number of elements of the vector kdstoffset - index offset for the destination table (Optional, default = 0) kverbose - Selects whether or not warnings are printed (Default=0) vexp rises kval to each element contained in a vector from table ifn,starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. Note that this opcode runs at k-rate so the value of kval is processed every control period. Use with care or you will end up with very large (or small) numbers (or use vexp_i). These opcodes (vadd, vmult, vpow and vexp) perform numeric operations between a vectorial control signal (hosted by the table ifn), and a scalar signal (kval). Result is a new vector that overrides old values of ifn. All these opcodes work at k-rate. Negative values for kdstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable iele2281
Examples
Here is an example of the vexp opcode. It uses the file vexp.csd [examples/vexp.csd].
2282
e </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2283
vexp_i
vexp_i Performs power-of operations between a vector and a scalar
Description
Performs power-of operations between a vector and a scalar
Syntax
vexp_i ifn, ival, ielements[, idstoffset]
Initialization
ifn - number of the table hosting the vectorial signal to be processed ielements - number of elements of the vector ival - scalar value to be added idstoffset - index offset for the destination table
Performance
vexp_i rises kval to each element contained in a vector from table ifn, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. Negative values for idstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. This opcode runs only on initialization, there is a k-rate version of this opcode called vexp. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Examples
Here is an example of the vexp_i opcode. It uses the file vexp_i.csd [examples/vexp_i.csd].
2284
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o cigoto.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr=44100 ksmps=128 nchnls=2 instr 1 ifn1 = p4 ival = p5 ielements = p6 idstoffset = p7 kval init 25 vexp_i ifn1, ival, ielements, idstoffset endin instr 2 ;Printtable itable = p4 isize = ftlen(itable) kcount init 0 kval table kcount, itable printk2 kval if (kcount == isize) then turnoff endif kcount = kcount + 1 endin </CsInstruments> <CsScore> f 1 0 16 -7 1 16 17 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.4 0.8 1.0 1.2 1.4 1.6 0.2 1 0.01 1 2 3 4 0.2 1 0.01 1 0.5 5 -3 0.2 1 0.01 1 1.5 10 12 0.2 1
</CsScore> </CsoundSynthesizer>
See also
vadd, vmult_i, vpow_i and vexp_i.
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2285
vexpseg
vexpseg Vectorial envelope generator
Description
Generate exponential vectorial segments
Syntax
vexpseg ifnout, ielements, ifn1, idur1, ifn2 [, idur2, ifn3 [...]]
Initialization
ifnout - number of table hosting output vectorial signal ifn1 - starting vector ifn2,ifn3,etc. - vector after idurx seconds idur1 - duration in seconds of first segment. dur2, idur3, etc. - duration in seconds of subsequent segments. ielements - number of elements of vectors.
Performance
These opcodes are similar to linseg and expseg, but operate with vectorial signals instead of with scalar signals. Output is a vectorial control signal hosted by ifnout (that must be previously allocated), while each break-point of the envelope is actually a vector of values. All break-points must contain the same number of elements (ielements). All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Example
Here is an example of the vexpseg opcode. It uses the files vexpseg.csd [examples/vexpseg.csd].
2286
ksmps=10 nchnls=2 gilen init 32 gitable1 ftgen 0, 0, gilen, 10, 1 gitable2 ftgen 0, 0, gilen, 10, 1 gitable3 ftgen 0, 0, gilen, -7, 30, gilen, 35 gitable4 ftgen 0, 0, gilen, -7, 400, gilen, 450 gitable5 ftgen 0, 0, gilen, -7, 5000, gilen, 5500 instr 1 vcopy gitable2, gitable1, gilen turnoff endin instr 2 vexpseg gitable2, 16, gitable3, 2, gitable4, 2, gitable5 endin instr 3 kcount init 0 if kcount < 16 then kval table kcount, gitable2 printk 0,kval kcount = kcount +1 else turnoff endif endin </CsInstruments> <CsScore> i1 0 1 s i2 0 10 i3 0 1 i3 1 1 i3 1.5 1 i3 2 1 i3 2.5 1 i3 3 1 i3 3.5 1 i3 4 1 i3 4.5 1 </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Example by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2287
vexpv
vexpv Performs exponential operations between two vectorial control signals
Description
Performs exponential operations between two vectorial control signals
Syntax
vexpv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed
Performance
kelements - number of elements of the two vectors kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vexpv elevates each element of ifn2 to the corresponding element of ifn1. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use kdstoffset and ksrcoffset to specify vectors in any location of the tables. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If ksrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will be set to 1). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination elements will be set to 1). If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded.
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at k-rate (this means that every k-pass the vectors are processed). There's an i-rate version of this opcode called vexpv_i. 2288
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Examples
Here is an example of the vexpv opcode. It uses the file vexpv.csd [examples/vexpv.csd].
2289
<CsScore> f 1 0 16 -7 1 16 17 f 2 0 16 -7 0 16 1 i2 i2 i1 i2 i1 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.2 0.4 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 0.2 1 0.2 2 0.01 1 2 5 3 8 0.2 1 0.01 1 2 5 10 -2 0.2 1 0.01 1 2 8 14 0 0.2 1 0.002 1 2 8 0 14 0.2 1 0.002 1 1 8 5 2 0.2 1
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2290
vexpv_i
vexpv_i Performs exponential operations between two vectorial control signals at init time.
Description
Performs exponential operations between two vectorial control signals at init time.
Syntax
vexpv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed ielements - number of elements of the two vectors idstoffset - index offset for the destination (ifn1) table (Default=0) isrcoffset - index offset for the source (ifn2) table (Default=0)
Performance
vexpv_i elevates each element of ifn2 to the corresponding element of ifn1. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use idstoffset and isrcoffset to specify vectors in any location of the tables. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will be set to 1). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector elements will be set to 1).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at init time. There's an k-rate version of this opcode called vexpv. All these operators (vaddv_i,vsubv_i,vmultv_i,vdivv_i,vpowv_i,vexpv_i, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
2291
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2292
vibes
vibes Physical model related to the striking of a metal block.
Description
Audio output is a tone related to the striking of a metal block as found in a vibraphone. The method is a physical model developed from Perry Cook, but re-coded for Csound.
Syntax
ares vibes kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec
Initialization
ihrd -- the hardness of the stick used in the strike. A range of 0 to 1 is used. 0.5 is a suitable value. ipos -- where the block is hit, in the range 0 to 1. imp -- a table of the strike impulses. The file marmstk1.wav [examples/marmstk1.wav] is a suitable function from measurements and can be loaded with a GEN01 table. It is also available at ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/. ivfn -- shape of vibrato, usually a sine table, created by a function idec -- time before end of note when damping is introduced idoubles (optional) -- percentage of double strikes. Default is 40%. itriples (optional) -- percentage of triple strikes. Default is 20%.
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the vibes opcode. It uses the file vibes.csd [examples/vibes.csd], and marmstk1.wav [examples/marmstk1.wav].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o vibes.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 ksmps = 10 nchnls = 2 ; Instrument #1. instr 1 ; kamp = 20000 ; kfreq = 440 ; ihrd = 0.5 ; ipos = p4 ; imp = 1 ; kvibf = 6.0 ; kvamp = 0.05 ; ivibfn = 2 ; idec = 0.1 asig vibes 20000, 440, .5, p4 , 1, 6.0, 0.05, 2, .1 outs asig, asig endin </CsInstruments> <CsScore> ; f ; f Table #1, the "marmstk1.wav" audio file. 1 0 256 1 "marmstk1.wav" 0 0 0 Table #2, a sine wave for the vibrato. 2 0 128 10 1
See Also
marimba
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
2294
vibr
vibr Easier-to-use user-controllable vibrato.
Description
Easier-to-use user-controllable vibrato.
Syntax
kout vibr kAverageAmp, kAverageFreq, ifn
Initialization
ifn -- Number of vibrato table. It normally contains a sine or a triangle wave.
Performance
kAverageAmp -- Average amplitude value of vibrato kAverageFreq -- Average frequency value of vibrato (in cps) vibr is an easier-to-use version of vibrato. It has the same generation-engine of vibrato, but the parameters corresponding to missing input arguments are hard-coded to default values.
Examples
Here is an example of the vibr opcode. It uses the file vibr.csd [examples/vibr.csd].
2295
kvamp vibr kaverageamp, kaveragefreq, ifn ; Generate a tone including the vibrato. a1 oscili 10000+kvamp, 440, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1, a sine wave for the vibrato. 1 0 256 10 1 Table #1, a sine wave for the oscillator. 2 0 16384 10 1
See Also
jitter, jitter2, vibrato
Credits
Author: Gabriel Maldonado Example written by Kevin Conder. New in Version 4.15
2296
vibrato
vibrato Generates a natural-sounding user-controllable vibrato.
Description
Generates a natural-sounding user-controllable vibrato.
Syntax
kout vibrato kAverageAmp, kAverageFreq, kRandAmountAmp, \ kRandAmountFreq, kAmpMinRate, kAmpMaxRate, kcpsMinRate, \ kcpsMaxRate, ifn [, iphs]
Initialization
ifn -- Number of vibrato table. It normally contains a sine or a triangle wave. iphs -- (optional) Initial phase of table, expressed as a fraction of a cycle (0 to 1). A negative value will cause phase initialization to be skipped. The default value is 0.
Performance
kAverageAmp -- Average amplitude value of vibrato kAverageFreq -- Average frequency value of vibrato (in cps) kRandAmountAmp -- Amount of random amplitude deviation kRandAmountFreq -- Amount of random frequency deviation kAmpMinRate -- Minimum frequency of random amplitude deviation segments (in cps) kAmpMaxRate -- Maximum frequency of random amplitude deviation segments (in cps) kcpsMinRate -- Minimum frequency of random frequency deviation segments (in cps) kcpsMaxRate -- Maximum frequency of random frequency deviation segments (in cps) vibrato outputs a natural-sounding user-controllable vibrato. The concept is to randomly vary both frequency and amplitude of the oscillator generating the vibrato, in order to simulate the irregularities of a real vibrato. In order to have a total control of these random variations, several input arguments are present. Random variations are obtained by two separated segmented lines, the first controlling amplitude deviations, the second the frequency deviations. Average duration of each segment of each line can be shortened or enlarged by the arguments kAmpMinRate, kAmpMaxRate, kcpsMinRate, kcpsMaxRate, and the deviation from the average amplitude and frequency values can be independently adjusted by means of kRandAmountAmp and kRandAmountFreq.
Examples
Here is an example of the vibrato opcode. It uses the file vibrato.csd [examples/vibrato.csd]. 2297
See Also
jitter, jitter2, vibr
Credits
Author: Gabriel Maldonado 2298
2299
vincr
vincr Accumulates audio signals.
Description
vincr increments one audio variable with another signal, i.e. it accumulates output.
Syntax
vincr accum, aincr
Performance
accum -- audio-rate accumulator variable to be incremented aincr -- incrementing signal vincr (variable increment) and clear are intended to be used together. vincr stores the result of the sum of two audio variables into the first variable itself (which is intended to be used as an accumulator in polyphony). The accumulator is typically a global variable that is used to combine signals from several sources (different instruments or instrument instances) for further processing (for example, via a global effect that reads the accumulator) or for outputting the combined signal by some means other than one of the out opcodes (eg. via the fout opcode). After the accumulator is used, the accumulator variable should be set to zero by means of the clear opcode (or it will explode).
Examples
See the fout opcode for an example.
See Also
clear
Credits
Author: Gabriel Maldonado Italy 1999 New in Csound version 3.56
2300
vlimit
vlimit Limiting and Wrapping Vectorial Signals
Description
Limits elements of vectorial control signals.
Syntax
vlimit ifn, kmin, kmax, ielements
Initialization
ifn - number of the table hosting the vector to be processed ielements - number of elements of the vector
Performance
kmin - minimum threshold value kmax - maximum threshold value vlimit set lower and upper limits on each element of the vector they process. These opcodes are similar to limit, wrap and mirror, but operate with a vectorial signal instead of with a scalar signal. Result overrides old values of ifn1, if these are out of min/max interval. If you want to keep input vector, use vcopy opcode to copy it in another table. All these opcodes are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc. Note: bmscan not yet available on Canonical Csound
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2301
vlinseg
vlinseg Vectorial envelope generator
Description
Generate linear vectorial segments
Syntax
vlinseg ifnout, ielements, ifn1, idur1, ifn2 [, idur2, ifn3 [...]]
Initialization
ifnout - number of table hosting output vectorial signal ifn1 - starting vector ifn2,ifn3,etc. - vector after idurx seconds idur1 - duration in seconds of first segment. dur2, idur3, etc. - duration in seconds of subsequent segments. ielements - number of elements of vectors.
Performance
These opcodes are similar to linseg and expseg, but operate with vectorial signals instead of with scalar signals. Output is a vectorial control signal hosted by ifnout (that must be previously allocated), while each break-point of the envelope is actually a vector of values. All break-points must contain the same number of elements (ielements). All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Example
Here is an example of the vlinseg opcode. It uses the files vlinseg.csd [examples/vlinseg.csd].
2302
ksmps=10 nchnls=2 gilen init 32 gitable1 ftgen 0, 0, gilen, 10, 1 gitable2 ftgen 0, 0, gilen, 10, 1 gitable3 ftgen 0, 0, gilen, -7, 30, gilen, 35 gitable4 ftgen 0, 0, gilen, -7, 400, gilen, 450 gitable5 ftgen 0, 0, gilen, -7, 5000, gilen, 5500 instr 1 vcopy gitable2, gitable1, gilen turnoff endin instr 2 vlinseg gitable2, 16, gitable3, 2, gitable4, 2, gitable5 endin instr 3 kcount init 0 if kcount < 16 then kval table kcount, gitable2 printk 0,kval kcount = kcount +1 else turnoff endif endin </CsInstruments> <CsScore> i1 0 1 s i2 0 10 i3 0 1 i3 1 1 i3 1.5 1 i3 2 1 i3 2.5 1 i3 3 1 i3 3.5 1 i3 4 1 i3 4.5 1 </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Example by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2303
vlowres
vlowres A bank of filters in which the cutoff frequency can be separated under user control.
Description
A bank of filters in which the cutoff frequency can be separated under user control
Syntax
ares vlowres asig, kfco, kres, iord, ksep
Initialization
iord -- total number of filters (1 to 10)
Performance
asig -- input signal kfco -- frequency cutoff (not in Hz) ksep -- frequency cutoff separation for each filter vlowres (variable resonant lowpass filter) allows a variable response curve in resonant filters. It can be thought of as a bank of lowpass resonant filters, each with the same resonance, serially connected. The frequency cutoff of each filter can vary with the kcfo and ksep parameters.
Examples
Here is an example of the vlowres opcode. It uses the file vlowres.csd [examples/vlowres.csd].
2304
asig vco 10000, 220, 1 ; Vary the cutoff frequency from 30 to 300 Hz. kfco line 30, p3, 300 kres = 25 iord = 2 ksep = 20 ; Apply the filters. avlr vlowres asig, kfco, kres, iord, ksep ; It gets loud, so clip the output amplitude to 30,000. a1 clip avlr, 1, 30000 outs a1, a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 10 e </CsScore> </CsoundSynthesizer>
Credits
Author: Gabriel Maldonado Italy Example written by Kevin Conder. New in Csound version 3.49
2305
vmap
vmap Maps elements from a vector according to indeces contained in another vector
Description
Maps elements from a vector onto another according to the indeces of a this vector
Syntax
vmap ifn1, ifn2, ielements [,idstoffset, isrcoffset]
Initialization
ifn1 - number of the table where the vectorial signal will be copied, and which contains the mapping vector ifn2 - number of the table hosting the vectorial signal to be copied ielements - number of elements to process idstoffset - index offset for destination table (ifn1) isrcoffset - index offset for source table (ifn2)
Performance
vmap maps elements of ifn2 according to the values of table ifn1. Elements of ifn1 are treated as indexes of table ifn2, so element values of ifn1 must not exceed the length of ifn2 table otherwise a Csound will report an error. Elements of ifn1 are treated as integers, so any fractional part will be truncated. There is no interpolation performed on this operation. In practice, what happens is that the elements of ifn1 are used as indeces to ifn2, and then are replaced by the corresponding elements from ifn2. ifn1 must be different from ifn2, otherwise the results are unpredictable. Csound will produce an init error if they are not. All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc. Note: bmscan not yet available on Canonical Csound
Examples
Here is an example of the vmap opcode. It uses the file vmap.csd [examples/vmap.csd].
2306
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o vmap.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ksmps = 256 nchnls = 2 gisize = 64
gitable ftgen 0, 0, gisize, 10, 1 ;Table to be processed gimap1 ftgen 0, 0, gisize, -7, gisize-1, gisize-1, 0 ; Mapping function to reverse table gimap2 ftgen 0, 0, gisize, -5, 1, gisize-1, gisize-1 ; Mapping function for PWM gimap3 ftgen 0, 0, gisize, -7, 1, (gisize/2)-1, gisize-1, 1, 1, (gisize/2)-1, gisize-1 ; Double freque instr 1 ;Hear an oscillator using gitable asig oscil 10000, 440, gitable outs asig,asig endin instr 2 ;Reverse the table (no sound change, except for a single click vmap gimap1, gitable, gisize vcopy_i gitable, gimap1, gisize turnoff endin instr 3 ;Non-interpolated PWM (or phase waveshaping) vmap gimap2, gitable, gisize vcopy_i gitable, gimap2, gisize turnoff endin instr 4 ;Double frequency vmap gimap3, gitable, gisize vcopy_i gitable, gimap3, gisize turnoff endin </CsInstruments> <CsScore> i 1 0 8 i 2 2 1 i 3 4 1 i 4 6 1 e </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2307
vmirror
vmirror Limiting and Wrapping Vectorial Signals
Description
'Reflects' elements of vectorial control signals on thresholds.
Syntax
vmirror ifn, kmin, kmax, ielements
Initialization
ifn - number of the table hosting the vector to be processed ielements - number of elements of the vector
Performance
kmin - minimum threshold value kmax - maximum threshold value vmirror 'reflects' each element of corresponding vector if it exceeds low or high thresholds. These opcodes are similar to limit, wrap and mirror, but operate with a vectorial signal instead of with a scalar signal. Result overrides old values of ifn1, if these are out of min/max interval. If you want to keep input vector, use vcopy opcode to copy it in another table. All these opcodes are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc. Note: bmscan not yet available on Canonical Csound
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2308
vmult
vmult Multiplies a vector in a table by a scalar value.
Description
Multiplies a vector in a table by a scalar value.
Syntax
vmult ifn, kval, kelements [, kdstoffset] [, kverbose]
Initialization
ifn - number of the table hosting the vectorial signal to be processed
Performance
kval - scalar value to be multiplied kelements - number of elements of the vector kdstoffset - index offset for the destination table (Optional, default = 0) kverbose - Selects whether or not warnings are printed (Default=0) vmult multiplies each element of the vector contained in the table ifn by kval, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. Note that this opcode runs at k-rate so the value of kval is multiplied every control period. Use with care or you will end up with very large numbers (or use vmult_i). These opcodes (vadd, vmult, vpow and vexp) perform numeric operations between a vectorial control signal (hosted by the table ifn), and a scalar signal (kval). Result is a new vector that overrides old values of ifn. All these opcodes work at k-rate. Negative values for kdstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable iele2309
See also
vadd_i, vadd, vmult_i, vpow and vexp.
Example
Here is an example of the vmult opcode. It uses the file vmult-2.csd [examples/vmult-2.csd].
2310
Here is another example of the vmult opcode. It uses the file vmult.csd [examples/vmult.csd].
i1 0 4 i2 3 1 s i1 0 4 i3 3 1 s i1 0 4 </CsScore> </CsoundSynthesizer>
See also
vadd_i, vmult, vpow and vexp.
2311
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. Example by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2312
vmult_i
vmult_i Multiplies a vector in a table by a scalar value.
Description
Multiplies a vector in a table by a scalar value.
Syntax
vmult_i ifn, ival, ielements [, idstoffset]
Initialization
ifn - number of the table hosting the vectorial signal to be processed ival - scalar value to be multiplied ielements - number of elements of the vector idstoffset - index offset for the destination table
Performance
vmult_i multiplies each element of the vector contained in the table ifn by ival, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. This opcode runs only on initialization, there is a k-rate version of this opcode called vmult. Negative values for idstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Examples
Here is an example of the vmult_i opcode. It uses the file vmult_i.csd [examples/vmult_i.csd].
2313
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o cigoto.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr=44100 ksmps=128 nchnls=2 instr 1 ifn1 = p4 ival = p5 ielements = p6 idstoffset = p7 kval init 25 vmult_i ifn1, ival, ielements, idstoffset endin instr 2 ;Printtable itable = p4 isize = ftlen(itable) kcount init 0 kval table kcount, itable printk2 kval if (kcount == isize) then turnoff endif kcount = kcount + 1 endin </CsInstruments> <CsScore> f 1 0 16 -7 1 16 17 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.4 0.8 1.0 1.2 1.4 1.6 0.2 1 0.01 1 2 3 4 0.2 1 0.01 1 0.5 5 -3 0.2 1 0.01 1 1.5 10 12 0.2 1
</CsScore> </CsoundSynthesizer>
See also
vadd, vadd, vmult, vpow and vexp.
See also
vadd_i, vmult, vpow_i and vexp_i.
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. Example by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2314
vmultv
vmultv Performs mutiplication between two vectorial control signals
Description
Performs mutiplication between two vectorial control signals
Syntax
vmultv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed
Performance
kelements - number of elements of the two vectors kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vmultv multiplies two vectorial control signals, that is, each element of the first vector is processed (only) with the corresponding element of the other vector. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The Result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use kdstoffset and ksrcoffset to specify vectors in any location of the tables. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If ksrcoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector will not be changed for these elements). If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded.
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at k-rate (this means that every k-pass the vectors are multiplied). There's an i-rate 2315
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Examples
Here is an example of the vmultv opcode. It uses the file vmultv.csd [examples/vmultv.csd].
2316
</CsInstruments> <CsScore> f 1 0 16 -7 1 16 17 f 2 0 16 -7 1 16 2 i2 i2 i1 i2 i1 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.2 0.4 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 0.2 1 0.2 2 0.01 1 2 5 3 8 0.2 1 0.01 1 2 5 10 -2 0.2 1 0.01 1 2 8 14 0 0.2 1 0.01 1 2 8 0 14 0.2 1 0.002 1 1 8 5 2 0.2 1
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2317
vmultv_i
vmultv_i Performs mutiplication between two vectorial control signals at init time.
Description
Performs mutiplication between two vectorial control signals at init time.
Syntax
vmultv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed ielements - number of elements of the two vectors idstoffset - index offset for the destination (ifn1) table (Default=0) isrcoffset - index offset for the source (ifn2) table (Default=0)
Performance
vmultv_i multiplies two vectorial control signals, that is, each element of the first vector is processed (only) with the corresponding element of the other vector. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use idstoffset and isrcoffset to specify vectors in any location of the tables. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector will not be changed for these elements).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at init time. There's an k-rate version of this opcode called vmultv. All these operators (vaddv_i,vsubv_i,vmultv_i,vdivv_i,vpowv_i,vexpv_i, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
2318
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2319
voice
voice An emulation of a human voice.
Description
An emulation of a human voice.
Syntax
ares voice kamp, kfreq, kphoneme, kform, kvibf, kvamp, ifn, ivfn
Initialization
ifn, ivfn -- two table numbers containing the carrier waveform and the vibrato waveform. The files impuls20.aiff [examples/impuls20.aiff], ahh.aiff [examples/ahh.aiff], eee.aiff [examples/eee.aiff], or ooo.aiff [examples/ooo.aiff] are suitable for the first of these, and a sine wave for the second. These files are available from ftp://ftp.cs.bath.ac.uk/pub/dream/documentation/sounds/modelling/.
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. It can be varied in performance. kphoneme -- an integer in the range 0 to 16, which select the formants for the sounds: eee, ihh, ehh, aaa, ahh, aww, ohh, uhh, uuu, ooo, rrr, lll, mmm, nnn, nng, ngg. At present the phonemes fff, sss, thh, shh, xxx, hee, hoo, hah, bbb, ddd, jjj, ggg, vvv, zzz, thz, zhh are not available (!) kform -- Gain on the phoneme. values 0.0 to 1.2 recommended. kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 2320
Examples
Here is an example of the voice opcode. It uses the file voice.csd [examples/voice.csd], and impuls20.aiff [examples/impuls20.aiff].
Credits
Author: John ffitch (after Perry Cook) 2321
University of Bath, Codemist Ltd. Bath, UK Example written by Kevin Conder. New in Csound version 3.47
2322
vosim
vosim Simple vocal simulation based on glottal pulses with formant characteristics.
Description
This opcode produces a simple vocal simulation based on glottal pulses with formant characteristics. Output is a series of sound events, where each event is composed of a burst of squared sine pulses followed by silence. The VOSIM (VOcal SIMulation) synthesis method was developed by Kaegi and Tempelaars in the 1970's.
Syntax
ar vosim kamp, kFund, kForm, kDecay, kPulseCount, kPulseFactor, ifn [, iskip]
Intialization
ifn - a sound table, normally containing half a period of a sinewave, squared (see notes below). iskip - (optional) Skip initialization, for tied notes.
Performance
ar - output signal. Note that the output is usually unipolar - positive only. kamp - output amplitude, the peak amplitude of the first pulse in each burst. kFund - fundamental pitch, in Herz. Each event is 1/kFund seconds long. kForm - formant center frequency. Length of each pulse in the burst is 1/kForm seconds. kDecay - a dampening factor from pulse to pulse. This is subtracted from amplitude on each new pulse. kPulseCount - number of pulses in the burst part of each event. kPulseFactor - the pulse width is multiplied by this value at each new pulse. This results in formant sweeping. If factor is < 1.0, the formant sweeps up, if > 1.0 each new pulse is longer, so the formant sweeps down. The final pitch of the formant is kForm * pow(kPulseFactor, kPulseCount) The output of vosim is a series of sound events, where each each event is composed of a burst of squared sine pulses followed by silence. The total duration of the events determines fundamental frequency. The length of each single pulse in the squared-sine bursts produce a formant frequency band. The width of the formant is determined by rate of silence to pulses (see below). The final result is also shaped by the dampening factor from pulse to pulse. A small practical problem in using this opcode is that no GEN function will create a squared sine wave out of the box. Something like the following can be used to create the appropriate table from the score.
; use GEN09 to create half a sine in table 17 f 17 time size 9 0.5 1 0
2323
; square each point in table #p4. This should be run as init-only, just once in the performance instr 101 index tableng p4 index = index - 1 loop: ; start from last point
ival table index, p4 ival = ival * ival tableiw ival, index, p4 index = index - 1 if index < 0 igoto endloop igoto loop endloop: endin
Parameter Limits
The count of pulses multiplied by pulse width should fit in the event length (1/kFund). If this is not fulfilled, the algorithm does not break, we just do not start any pulses that would outlast the event. This might introduce a silence at end of event even if none was intended. In consequence, kForm should be higher than kFund, otherwise only silence is output. Vosim was created to emulate voice sounds using a model of glottal pulse. Rich sounds can be created by combining several instances of vosim with different parameters. One drawback is that the signal is not band-limited. But as the authors point out, attenuation of high-pitch components is -60 dB at 6 times the fundamental frequency. The signal can also be changed by changing the source signal in the lookup table. The technique has historical interest, and can produce rich sound very cheaply (each sample requires only a table lookup and a single multiplication for attenuation). As stated, formant bandwidth depends on the ratio between pulse burst and silence in an event. But this is not an independent parameter: The fundamental decides event length, and formant center defines the pulse length. It is therefore impossible to guarantee a specific burst/silence ratio, since the burst length has to be an integer multiple of pulse length. The decay of pulses can be used to smooth the transition from N to N+/-1 pulses, but there will still be steps in the spectral profile of output. The example code below shows one approach to this. All input parameters are k-rate. The input parameters are only used to set up each new event (or grain). Event amplitude is fixed for each event at initialization. In normal parameter ranges, when ksmps <500, the k-rate parameters are updated more often than events are created. In any case, no wide-band noise will be injected in the system due to k-rate inputs being updated less often than they are read, but some other artefacts could be created. The opcode should behave reasonably in the face of all user inputs. Some details: a. kFund < 0: This is forced to positive - no point in "reversed" events. b. kFund == 0: This leads to "infinite" length event, ie a pulse burst followed by very long indefinite silence. c. kForm == 0: This leads to infinite length pulse, so no pulses are generated (i.e. silence). d. kForm < 0: Table is read backward. If table is symmetric, kform and -kform should give bit-identical outputs. 2324
e. kPulseFactor == 0: Second pulse onwards is zero. See (c). f. kPulseFactor < 0: Pulses alternately read table forward and reversed. With asymmetric pulse table there may be some use for negative kForm or negative kPulseFactor.
Examples
Here is an example of the vosim opcode. It uses the file vosim.csd [examples/vosim.csd].
according to platform audio I/O only the line below: output any platform
;################################################# ; By Rasmus Ekman 2008 ; Square each point in table #p4. This should only be run once in the performance. instr 10 index tableng p4 index = index - 1 loop: ival table index, p4 ival = ival * ival tableiw ival, index, p4 index = index - 1 if index < 0 igoto endloop igoto loop endloop: endin ;################################################# ; Main vosim instrument. Sweeps from a fund1/form1 to fund2/form2, ; trying for narrowest formant bandwidth (still quite wide by the looks of it) ; p4: amp ; p5, p6: fund beg-end ; p7, p8: form beg-end ; p9: amp decay (ignored) ; p10: pulse count (ignored - calc internally) ; p11: pulse length mod ; p12: skip (for tied events) ; p13: don't fade out (if followed by tied note) instr 1 kamp init p4 ; freq start, end kfund line p5, p3, p6 ; formant start, end kform line p7, p3, p8 ; Try for constant ratio burst/silence, and narrowest formant bandwidth kPulseCount = (kform / kfund) ;init p10 ; Attempt to smooth steps between format bandwidths, ; increasing decay before we are forced to a lower pulse count ; start from last point
2325
kDecay = kPulseCount/(kform % kfund) ; init p9 if (kDecay * kPulseCount) > kamp then kDecay = kamp / kPulseCount endif kDecay = 0.3 * kDecay kPulseFactor init p11 ; ar vosim kamp, kFund, kForm, kDecay, kPulseCount, kPulseFactor, ifn [, iskip] ar1 vosim kamp, kfund, kform, kDecay, kPulseCount, kPulseFactor, 17, p12
; scale amplitude for 16-bit files, with quick fade out amp init 20000 if (p13 != 0) goto nofade amp linseg 20000, p3-.02, 20000, .02, 0 nofade: out ar1 * amp endin </CsInstruments> <CsScore> f1 0 32768 9 1 1 0 ; sine wave f17 0 32768 9 0.5 1 0 ; half sine wave i10 0 0 17 ; init run only, square table 17 ; Vosim score ; Picking some formants from the table in Csound manual ; p4=amp ; tenor a -> e i1 0 .5 .5 i1 . . .3 i1 . . .2 i1 . . .15 fund 280 . . . 240 . . . 210 . . . 180 . . . 250 . . . 270 . . . form 650 1080 2650 2900 650 1080 2650 2900 400 800 2600 2800 650 1080 2650 2900 290 1870 2800 3250 400 1700 2600 3200 400 800 2600 2800 650 1080 2650 2900 290 1870 2800 3250 350 600 2700 2900 decay pulses pulsemod [skip] nofade .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 .03 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 1 . . . 1 . . . 1 . . . 1 . . . 1 . . . 0 . . . 1 . . . 1 . . . 1 . . . 1 . . . 1 . . . 1 . . . 0 . . .
; tenor a -> o i1 0.6 .2 .5 300 i1 . . .3 . i1 . . .2 . i1 . . .15 . ; tenor o -> aah i1 .8 .3 .5 210 i1 . . .3 . i1 . . .2 . i1 . . .15 . ; tenor aa -> i i1 1.1 .2 .5 180 i1 . . .3 . i1 . . .2 . i1 . . .15 . ; tenor i -> u i1 1.3 .3 .5 250 i1 . . .3 . i1 . . .2 . i1 . . .15 . e
</CsScore> </CsoundSynthesizer>
See also
fof, fof2
Credits
Author: Rasmus Ekman March 2008 2326
2327
vphaseseg
vphaseseg Allows one-dimensional HVS (Hyper-Vectorial Synthesis).
Description
vphaseseg allows one-dimensional HVS (Hyper-Vectorial Synthesis).
Syntax
vphaseseg kphase, ioutab, ielems, itab1,idist1,itab2 \ [,idist2,itab3, ... ,idistN-1,itabN]
Initialization
ioutab - number of output table. ielem - number of elements to process itab1,...,itabN - breakpoint table numbers idist1,...,idistN-1 - distances between breakpoints in percentage values
Performance
kphase - phase pointer vphaseseg returns the coordinates of section points of an N-dimensional space path. The coordinates of section points are stored into an output table. The number of dimensions of the N-dimensional space is determined by the ielem argument that is equal to N and can be set to any number. To define the path, user have to provide a set of points of the N-dimensional space, called break-points. Coordinates of each break-point must be contained by a different table. The number of coordinates to insert in each breakpoint table must obviously equal to ielem argument. There can be any number of break-point tables filled by the user. Hyper-Vectorial Synthesis actually deals with two kinds of spaces. The first space is the N-dimensional space in which the path is defined, this space is called time-variant parameter space (or SPACE A). The path belonging to this space is covered by moving a point into the second space that normally has a number of dimensions smaller than the first. Actually, the point in motion is the projection of corresponding point of the N-dimensional space (could also be considered a section of the path). The second space is called user-pointer-motion space (or SPACE B) and, in the case of vphaseseg opcode, has only ONE DIMENSION. Space B is covered by means of kphase argument (that is a sort of path pointer), and its range is 0 to 1. The output corresponding to current pointer value is stored in ioutab table, whose data can be afterwards used to control any syntesis parameters. In vphaseseg, each break-point is separated from the other by a distance expressed in percentage, where all the path length is equal to the sum of all distances. So distances between breakpoints can be different, differently from kinds of HVS in which space B has more than one dimension, in these cases distance between break-points MUST be THE SAME for all intervals.
See Also
2328
Credits
Author: Gabriel Maldonado New in version 5.06
2329
vport
vport Vectorial Control-rate Delay Paths
Description
Generate a sort of 'vectorial' portamento
Syntax
vport ifn, khtime, ielements [, ifnInit]
Initialization
ifn - number of the table containing the output vector ielements - number of elements of the two vectors ifnInit (optional) - number of the table containing a vector whose elements contain intial portamento values.
Performance
vport is similar to port, but operates with vectorial signals, istead of with scalar signals. Each vector element is treated as an indipendent control signal. Input vector input and output vectors are placed in the same table and output vector overrides input vector. If you want to keep input vector, use vcopy opcode to copy it in another table.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2330
vpow
vpow Raises each element of a vector to a scalar power
Description
Raises each element of a vector to a scalar power
Syntax
vpow ifn, kval, kelements [, kdstoffset] [, kverbose]
Initialization
ifn - number of the table hosting the vectorial signal to be processed
Performance
kval - scalar value to which the elements of ifn will be raised kelements - number of elements of the vector kdstoffset - index offset for the destination table (Optional, default = 0) kverbose - Selects whether or not warnings are printed (Default=0) vpow raises each element of the vector contained in the table ifn to the power of kval, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. Note that this opcode runs at k-rate so the value of kval is processed every control period. Use with care or you will end up with very large (or small) numbers (or use vpow_i). These opcodes (vadd, vmult, vpow and vexp) perform numeric operations between a vectorial control signal (hosted by the table ifn), and a scalar signal (kval). Result is a new vector that overrides old values of ifn. All these opcodes work at k-rate. Negative values for kdstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable iele2331
Examples
Here is an example of the vpow opcode. It uses the file vpow.csd [examples/vpow.csd].
2332
e </CsScore> </CsoundSynthesizer>
See also
vadd_i, vmult, vpow and vexp.
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2333
vpow_i
vpow_i Raises each element of a vector to a scalar power
Description
Raises each element of a vector to a scalar power
Syntax
vpow_i ifn, ival, ielements [, idstoffset]
Initialization
ifn - number of the table hosting the vectorial signal to be processed ielements - number of elements of the vector ival - scalar value to which the elements of ifn will be raised idstoffset - index offset for the destination table
Performance
vpow_i elevates each element of the vector contained in the table ifn to the power of ival, starting from table index idstoffset. This enables you to process a specific section of a table by specifying the offset and the number of elements to be processed. Offset is counted starting from 0, so if no offset is specified (or set to 0), the table will be modified from the beginning. This opcode runs only on initialization, there is a k-rate version of this opcode called vpow. Negative values for idstoffset are valid. Elements from the vector that are outside the table, will be discarded, and they will not wrap around the table. In all these opcodes, the resulting vectors are stored in ifn, overriding the intial vectors. If you want to keep initial vector, use vcopy or vcopy_i to copy it in another table. All these operators are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2, etc. They can also be useful in conjunction with the spectral opcodes pvsftw and pvsftr.
Examples
Here is an example of the vpow_i opcode. It uses the file vpow_i.csd [examples/vpow_i.csd].
2334
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o cigoto.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr=44100 ksmps=128 nchnls=2 instr 1 ifn1 = p4 ival = p5 ielements = p6 idstoffset = p7 kval init 25 vpow_i ifn1, ival, ielements, idstoffset endin instr 2 ;Printtable itable = p4 isize = ftlen(itable) kcount init 0 kval table kcount, itable printk2 kval if (kcount == isize) then turnoff endif kcount = kcount + 1 endin </CsInstruments> <CsScore> f 1 0 16 -7 1 16 17 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.4 0.8 1.0 1.2 1.4 1.6 0.2 1 0.01 1 2 3 4 0.2 1 0.01 1 0.5 5 -3 0.2 1 0.01 1 1.5 10 12 0.2 1
</CsScore> </CsoundSynthesizer>
See also
vadd_i, vmult_i, vpow and vexp_i.
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2335
vpowv
vpowv Performs power-of operations between two vectorial control signals
Description
Performs power-of operations between two vectorial control signals
Syntax
vpowv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed
Performance
kelements - number of elements of the two vectors kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vpowv raises each element of ifn1 to the corresponding element of ifn2. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use kdstoffset and ksrcoffset to specify vectors in any location of the tables. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If ksrcoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector will not be changed for these elements). If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded.
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at k-rate (this means that every k-pass the vectors are processed). There's an i-rate version of this opcode called vpowv_i. 2336
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Examples
Here is an example of the vpowv opcode. It uses the file vpowv.csd [examples/vpowv.csd].
2337
<CsScore> f 1 0 16 -7 1 16 17 f 2 0 16 -7 1 16 2 i2 i2 i1 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.2 0.4 0.8 1.0 1.2 1.4 1.6 1.8 2.0 0.2 1 0.2 2 0.01 1 0.2 1 0.01 1 0.2 1 0.01 1 0.2 1 0.01 1 0.2 1
2 5 3 8 2 5 10 -2 2 8 14 0 2 8 0 14
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2338
vpowv_i
vpowv_i Performs power-of operations between two vectorial control signals at init time.
Description
Performs power-of operations between two vectorial control signals at init time.
Syntax
vpowv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed ielements - number of elements of the two vectors idstoffset - index offset for the destination (ifn1) table isrcoffset - index offset for the source (ifn2) table
Performance
vpowv_i raises each element of ifn1 to the corresponding element of ifn2. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use idstoffset and isrcoffset to specify vectors in any location of the tables. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 1 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 1 (i.e. the destination vector will not be changed for these elements).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at init time. There's an k-rate version of this opcode called vpowv. All these operators (vaddv_i,vsubv_i,vmultv_i,vdivv_i,vpowv_i,vexpv_i, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
2339
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2340
vpvoc
vpvoc Implements signal reconstruction using an fft-based phase vocoder and an extra envelope.
Description
Implements signal reconstruction using an fft-based phase vocoder and an extra envelope.
Syntax
ares vpvoc ktimpnt, kfmod, ifile [, ispecwp] [, ifn]
Initialization
ifile -- the pvoc number (n in pvoc.n) or the name in quotes of the analysis file made using pvanal. (See pvoc.) ispecwp (optional, default=0) -- if non-zero, attempts to preserve the spectral envelope while its frequency content is varied by kfmod. The default value is zero. ifn (optional, default=0) -- optional function table containing control information for vpvoc. If ifn = 0, control is derived internally from a previous tableseg or tablexseg unit. Default is 0. (New in Csound version 3.59)
Performance
ktimpnt -- The passage of time, in seconds, through the analysis file. ktimpnt must always be positive, but can move forwards or backwards in time, be stationary or discontinuous, as a pointer into the analysis file. kfmod -- a control-rate transposition factor: a value of 1 incurs no transposition, 1.5 transposes up a perfect fifth, and .5 down an octave. This implementation of pvoc was orignally written by Dan Ellis. It is based in part on the system of Mark Dolson, but the pre-analysis concept is new. The spectral extraction and amplitude gating (new in Csound version 3.56) were added by Richard Karpen based on functions in SoundHack by Tom Erbe. vpvoc is identical to pvoc except that it takes the result of a previous tableseg or tablexseg and uses the resulting function table (passed internally to the vpvoc), as an envelope over the magnitudes of the analysis data channels. Optionally, a table specified by ifn may be used. The result is spectral enveloping. The function size used in the tableseg should be framesize/2, where framesize is the number of bins in the phase vocoder analysis file that is being used by the vpvoc. Each location in the table will be used to scale a single analysis bin. By using different functions for ifn1, ifn2, etc.. in the tableseg, the spectral envelope becomes a dynamically changing one. See also tableseg and tablexseg.
Examples
The following example, using vpvoc, shows the use of functions such as
2341
f 1 0 256 5 .001 128 1 128 .001 f 2 0 256 5 1 128 .001 128 1 f 3 0 256 7 1 256 1
ktime apv
0, p3, 3 ; time pointer, in seconds, into file 1, p3*0.5, 2, p3*0.5, 3 ktime, 1, "pvoc.file"
The result would be a time-varying spectral envelope applied to the phase vocoder analysis data. Since this amplifies or attenuates the amount of signal at the frequencies that are paired with the amplitudes which are scaled by these functions, it has the effect of applying very accurate filters to the signal. In this example the first table would have the effect of a band-pass filter, gradually be band-rejected over half the note's duration, and then go towards no modification of the magnitudes over the second half.
See Also
pvoc
Credits
Authors: Dan Ellis and Richard Karpen Seattle, WA USA 1997 New in version 3.44
2342
vrandh
vrandh Generates a vector of random numbers stored into a table, holding the values for a period of time.
Description
Generates a vector of random numbers stored into a table, holding the values for a period of time. Generates a sort of 'vectorial band-limited noise'.
Syntax
vrandh ifn, krange, kcps, ielements [, idstoffset] [, iseed] [, isize] [, ioffset]
Initialization
ifn - number of the table where the vectorial signal will be generated ielements - number of elements of the vector idstoffset - (optional, default=0) -- index offset for the destination table iseed (optional, default=0.5) -- seed value for the recursive pseudo-random formula. A value between 0 and +1 will produce an initial output of kamp * iseed. A negative value will cause seed re-initialization to be skipped. A value greater than 1 will seed from system time, this is the best option to generate a different random sequence for each run. isize (optional, default=0) -- if zero, a 16 bit number is generated. If non-zero, a 31-bit random number is generated. Default is 0. ioffset - (optional, default=0) -- a base value added to the random result.
Performance
krange - range of random elements (from -krange to krange) kcps - rate of generated elements in cycles per seconds This opcode is similar to randh, but operates on vectors instead of with scalar values. Though the argument isize defaults to 0, thus using a 16-bit random number generator, using the newer 31-bit algorithm is recommended, as this will produce a random sequence with a longer period (more random numbers before the sequence starts repeating). The output is a vector contained in ifn (that must be previously allocated). All these operators are designed to be used together with other opocdes that operate with vector such as bmscan, adsynt etc. Note: bmscan not yet available on Canonical Csound
Examples
2343
Here is an example of the vrandh opcode. It uses the file vrandh.csd [examples/vrandh.csd].
kfreq1 table 3, gitab kfreq2 table 4, gitab kfreq3 table 5, gitab ;Change the frequency of three oscillators according to the random values aosc1 oscili 4000, kfreq1, 1 aosc2 oscili 2000, kfreq2, 1 aosc3 oscili 4000, kfreq3, 1 outs aosc1+aosc2, aosc3+aosc2 endin </CsInstruments> <CsScore> f 1 0 1024 10 1 ; krange kcps i 1 0 5 100 1 300 i 1 5 5 300 1 400 i 1 10 5 100 2 1000 i 1 15 5 400 4 1000 i 1 20 5 1000 8 2000 i 1 25 5 250 16 300 e </CsScore> </CsoundSynthesizer>
ioffset
See also
vrandi, randh
2344
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2345
vrandi
vrandi Generate a sort of 'vectorial band-limited noise'
Description
Generate a sort of 'vectorial band-limited noise'
Syntax
vrandi ifn, krange, kcps, ielements [, idstoffset] [, iseed] [, isize] [, ioffset]
Initialization
ifn - number of the table where the vectorial signal will be generated ielements - number of elements to process idstoffset - (optional, default=0) -- index offset for the destination table iseed (optional, default=0.5) -- seed value for the recursive pseudo-random formula. A value between 0 and +1 will produce an initial output of kamp * iseed. A negative value will cause seed re-initialization to be skipped. A value greater than 1 will seed from system time, this is the best option to generate a different random sequence for each run. isize (optional, default=0) -- if zero, a 16 bit number is generated. If non-zero, a 31-bit random number is generated. Default is 0. ioffset - (optional, default=0) -- a base value added to the random result.
Performance
krange - range of random elements (from -krange to krange) kcps - rate of generated elements in cycles per seconds This opcode is similar to randi, but operates on vectors instead of with scalar values. Though argument isize defaults to 0, thus using a 16-bit random number generator, using the newer 31-bit algorithm is recommended, as this will produce a random sequence with a longer period (more random numbers before the sequence starts repeating). The output is a vector contained in ifn (that must be previously allocated). All these operators are designed to be used together with other opocdes that operate with vector such as bmscan, adsynt etc. Note: bmscan not yet available on Canonical Csound
Examples
Here is an example of the vrandi opcode. It uses the file vrandi.csd [examples/vrandi.csd]. 2346
idstoffset 3,
iseed 2,
See also
vrandh, randi
Credits
Written by Gabriel Maldonado. 2347
2348
vstaudio, vstaudiog
vstaudio VST audio output.
Syntax
aout1,aout2 vstaudio instance, [ain1, ain2] aout1,aout2 vstaudiog instance, [ain1, ain2]
Description
vstaudio and vstaudiog are used for sending and receiving audio from a VST plugin. vstaudio is used within an instrument definition that contains a vstmidiout or vstnote opcode. It outputs audio for only that one instrument. Any audio remaining in the plugin after the end of the note, for example a reverb tail, will be cut off and should be dealt with using a damping envelope. vstaudiog (vstaudio global) is used in a separate instrument to process audio from any number of VST notes or MIDI events that share the same VST plugin instance (instance). The vstaudiog instrument must be numbered higher than all the instruments receiving notes or MIDI data, and the note controlling the vstplug instrument must have an indefinite duration, or at least a duration as long as the VST plugin is active.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes.
Performance
aout1, aout2 - the audio output received from the plugin. ain1, ain2 - the audio input sent to the plugin.
Examples
Here is an example of the use of the vstaudio opcode. It uses the file vst4cs.csd [examples/vst4cs.csd].
2349
; Load the Pianoteq into memory. vstinit "C:\\Program Files\\Steinberg\\VstPlugins\\Pianoteq 3.0 Trial\\Pianoteq ; Print information about the Pianoteq, such as parameter names and numbers. vstinfo gipianoteq ; Open the Pianoteq's GUI. vstedit gipianoteq ; Send notes from the score to the Pianoteq. instr 1 ; MIDI channels are numbered starting at 0. ; p3 always contains the duration of the note. ; p4 contains the MIDI key number (pitch), ; p5 contains the MIDI velocity number (loudness), init 0 vstnote gipianoteq, imidichannel, p4, p5, p3 endin ; Send parameter changes to the Pianoteq. instr 2 ; p4 is the parameter number. ; p5 is the parameter value. vstparamset gipianoteq, p4, p5 endin ; Send audio from the Pianoteq to the output. instr 3 init 0 vstaudio gipianoteq, ablankinput, ablankinput outs aleft, aright endin
imidichannel
</CsInstruments> <CsScore> ; Turn on the instrument that receives audio from the Pianoteq indefinitely. i 3 0 -1 ; Send parameter changes to Pianoteq before sending any notes. ; NOTE: All parameters must be between 0.0 and 1.0. ; Length of piano strings: i 2 0 1 33 0.5 ; Hammer noise: i 2 0 1 25 0.1 ; Send a C major 7th arpeggio to the Pianoteq. i 1 1 10 60 76 i 1 2 10 64 73 i 1 3 10 67 70 i 1 4 10 71 67 ; End the performance, leaving some time ; for the Pianoteq to finish sending out its audio, ; or for the user to play with the Pianoteq virtual keyboard. e 20 </CsScore> </CsoundSynthesizer>
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2350
vstbankload
vstbankload Loads parameter banks to a VST plugin.
Syntax
vstbankload instance, ipath
Description
vstbankload is used for loading parameter banks to a VST plugin.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes. ipath - the full pathname of the parameter bank (.fxb file).
Examples
Example 682. Example for vstbankload
/* orc */ sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 gihandle1 vstinit "c:/vstplugins/cheeze/cheeze machine.dll",1 instr 4 vstbankload gihandle1,"c:/vstplugins/cheeze/chengo'scheese.fxb" vstinfo gihandle1 endin /* sco */ i 3 0 21 i4 1 1 57 32
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2351
vstedit
vstedit Opens the GUI editor widow for a VST plugin.
Syntax
vstedit instance
Description
vstedit opens the custom GUI editor widow for a VST plugin. Note that not all VST plugins have custom GUI editors. It may be necessary to use the --displays command-line option to ensure that Csound handles events from the editor window and displays it properly.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes.
Examples
Here is an example of the use of the vstedit opcode. It uses the file vst4cs.csd [examples/vst4cs.csd].
<CsoundSynthesizer> <CsOptions> ; Credits: Adapted by Michael Gogins ; from code by David Horowitz and Lian Cheung. ; The "--displays" option is required in order for ; the Pianoteq GUI to dispatch events and display properly. -m3 --displays -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 20 nchnls = 2 ; Load the Pianoteq into memory. gipianoteq vstinit "C:\\Program Files\\Steinberg\\VstPlugins\\Pianoteq 3.0 Trial\\Pianoteq ; Print information about the Pianoteq, such as parameter names and numbers. vstinfo gipianoteq ; Open the Pianoteq's GUI. vstedit gipianoteq ; Send notes from the score to the Pianoteq. instr 1 ; MIDI channels are numbered starting at 0. ; p3 always contains the duration of the note. ; p4 contains the MIDI key number (pitch), ; p5 contains the MIDI velocity number (loudness), init 0 vstnote gipianoteq, imidichannel, p4, p5, p3 endin ; Send parameter changes to the Pianoteq.
imidichannel
2352
instr 2 ; p4 is the parameter number. ; p5 is the parameter value. vstparamset gipianoteq, p4, p5 endin ; Send audio from the Pianoteq to the output. instr 3 init 0 vstaudio gipianoteq, ablankinput, ablankinput outs aleft, aright endin
</CsInstruments> <CsScore> ; Turn on the instrument that receives audio from the Pianoteq indefinitely. i 3 0 -1 ; Send parameter changes to Pianoteq before sending any notes. ; NOTE: All parameters must be between 0.0 and 1.0. ; Length of piano strings: i 2 0 1 33 0.5 ; Hammer noise: i 2 0 1 25 0.1 ; Send a C major 7th arpeggio to the Pianoteq. i 1 1 10 60 76 i 1 2 10 64 73 i 1 3 10 67 70 i 1 4 10 71 67 ; End the performance, leaving some time ; for the Pianoteq to finish sending out its audio, ; or for the user to play with the Pianoteq virtual keyboard. e 20 </CsScore> </CsoundSynthesizer>
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2353
vstinit
vstinit Load a VST plugin into memory for use with the other vst4cs opcodes.
Syntax
instance vstinit ilibrarypath [,iverbose]
Description
vstinit is used to load a VST plugin into memory for use with the other vst4cs opcodes. Both VST effects and instruments (synthesizers) can be used.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes. ilibrarypath - the full path to the vst plugin shared library (DLL, on Windows). Remember to use '/' instead of '\' as separator. iverbose - show plugin information and parameters when loading.
Examples
Here is an example of the use of the vstinit opcode. It uses the file vst4cs.csd [examples/vst4cs.csd].
<CsoundSynthesizer> <CsOptions> ; Credits: Adapted by Michael Gogins ; from code by David Horowitz and Lian Cheung. ; The "--displays" option is required in order for ; the Pianoteq GUI to dispatch events and display properly. -m3 --displays -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 20 nchnls = 2 ; Load the Pianoteq into memory. gipianoteq vstinit "C:\\Program Files\\Steinberg\\VstPlugins\\Pianoteq 3.0 Trial\\Pianoteq ; Print information about the Pianoteq, such as parameter names and numbers. vstinfo gipianoteq ; Open the Pianoteq's GUI. vstedit gipianoteq ; Send notes from the score to the Pianoteq. instr 1 ; MIDI channels are numbered starting at 0. ; p3 always contains the duration of the note. ; p4 contains the MIDI key number (pitch), ; p5 contains the MIDI velocity number (loudness),
2354
imidichannel
; Send parameter changes to the Pianoteq. instr 2 ; p4 is the parameter number. ; p5 is the parameter value. vstparamset gipianoteq, p4, p5 endin ; Send audio from the Pianoteq to the output. instr 3 init 0 vstaudio gipianoteq, ablankinput, ablankinput outs aleft, aright endin
</CsInstruments> <CsScore> ; Turn on the instrument that receives audio from the Pianoteq indefinitely. i 3 0 -1 ; Send parameter changes to Pianoteq before sending any notes. ; NOTE: All parameters must be between 0.0 and 1.0. ; Length of piano strings: i 2 0 1 33 0.5 ; Hammer noise: i 2 0 1 25 0.1 ; Send a C major 7th arpeggio to the Pianoteq. i 1 1 10 60 76 i 1 2 10 64 73 i 1 3 10 67 70 i 1 4 10 71 67 ; End the performance, leaving some time ; for the Pianoteq to finish sending out its audio, ; or for the user to play with the Pianoteq virtual keyboard. e 20 </CsScore> </CsoundSynthesizer>
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2355
vstinfo
vstinfo Displays the parameters and the programs of a VST plugin.
Syntax
vstinfo instance
Description
vstinfo displays the parameters and the programs of a VST plugin. Note: The verbose flag in vstinit gives the same information as vstinfo. vstinfo is useful after loading parameter banks, or when the plugin changes parameters dynamically.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes.
Examples
Here is an example of the use of the vstinfo opcode. It uses the file vst4cs.csd [examples/vst4cs.csd].
<CsoundSynthesizer> <CsOptions> ; Credits: Adapted by Michael Gogins ; from code by David Horowitz and Lian Cheung. ; The "--displays" option is required in order for ; the Pianoteq GUI to dispatch events and display properly. -m3 --displays -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 20 nchnls = 2 ; Load the Pianoteq into memory. gipianoteq vstinit "C:\\Program Files\\Steinberg\\VstPlugins\\Pianoteq 3.0 Trial\\Pianoteq ; Print information about the Pianoteq, such as parameter names and numbers. vstinfo gipianoteq ; Open the Pianoteq's GUI. vstedit gipianoteq ; Send notes from the score to the Pianoteq. instr 1 ; MIDI channels are numbered starting at 0. ; p3 always contains the duration of the note. ; p4 contains the MIDI key number (pitch), ; p5 contains the MIDI velocity number (loudness), init 0 vstnote gipianoteq, imidichannel, p4, p5, p3 endin
imidichannel
2356
; Send parameter changes to the Pianoteq. instr 2 ; p4 is the parameter number. ; p5 is the parameter value. vstparamset gipianoteq, p4, p5 endin ; Send audio from the Pianoteq to the output. instr 3 init 0 vstaudio gipianoteq, ablankinput, ablankinput outs aleft, aright endin
</CsInstruments> <CsScore> ; Turn on the instrument that receives audio from the Pianoteq indefinitely. i 3 0 -1 ; Send parameter changes to Pianoteq before sending any notes. ; NOTE: All parameters must be between 0.0 and 1.0. ; Length of piano strings: i 2 0 1 33 0.5 ; Hammer noise: i 2 0 1 25 0.1 ; Send a C major 7th arpeggio to the Pianoteq. i 1 1 10 60 76 i 1 2 10 64 73 i 1 3 10 67 70 i 1 4 10 71 67 ; End the performance, leaving some time ; for the Pianoteq to finish sending out its audio, ; or for the user to play with the Pianoteq virtual keyboard. e 20 </CsScore> </CsoundSynthesizer>
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2357
vstmidiout
vstmidiout Sends MIDI information to a VST plugin.
Syntax
vstmidiout instance, kstatus, kchan, kdata1, kdata2
Description
vstmidiout is used for sending MIDI information to a VST plugin.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes.
Performance
kstatus - the type of midi message to be sent. Currently noteon (144), note off (128), Control Change (176), Program change (192), Aftertouch (208) and Pitch Bend (224) are supported. kchan - the MIDI channel transmitted on. kdata1, kdata2 - the MIDI data pair, which varies depending on kstatus. e.g. note/velocity for note on and note off, Controller number/value for control change.
Examples
Example 686. Example for vstmidiout
/* orc */ sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 gihandle1 vstinit "c:/vstplugins/cheeze/cheeze machine.dll",1 instr 3 ain1 = 0 ab1, ab2 vstaudio gihandle1, ain1, ain1 outs ab1, ab2 endin instr 4 vstmidiout gihandle1,144,1,p4,p5 endin
2358
i4 18 3 72 100 e
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2359
vstnote
vstnote Sends a MIDI note with definite duration to a VST plugin.
Syntax
vstnote instance, kchan, knote, kveloc, kdur
Description
vstnote sends a MIDI note with definite duration to a VST plugin.
Initialization
instance - the number which identifies the plugin generated by vstinit.
Performance
kchan - The MIDI channel to trasnmit the note on. Note that MIDI channels are numbered starting from 0. knote - The MIDI note number to send. kveloc - The MIDI note's velocity. kdur - The MIDI note's duration in seconds. Note: Be sure the instrument containing vstnote is not finished before the duration of the note, otherwise you'll have a 'hung' note.
Examples
Here is an example of the use of the vstnote opcode. It uses the file vst4cs.csd [examples/vst4cs.csd].
<CsoundSynthesizer> <CsOptions> ; Credits: Adapted by Michael Gogins ; from code by David Horowitz and Lian Cheung. ; The "--displays" option is required in order for ; the Pianoteq GUI to dispatch events and display properly. -m3 --displays -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 20 nchnls = 2 ; Load the Pianoteq into memory. gipianoteq vstinit "C:\\Program Files\\Steinberg\\VstPlugins\\Pianoteq 3.0 Trial\\Pianoteq
2360
; Print information about the Pianoteq, such as parameter names and numbers. vstinfo gipianoteq ; Open the Pianoteq's GUI. vstedit gipianoteq ; Send notes from the score to the Pianoteq. instr 1 ; MIDI channels are numbered starting at 0. ; p3 always contains the duration of the note. ; p4 contains the MIDI key number (pitch), ; p5 contains the MIDI velocity number (loudness), init 0 vstnote gipianoteq, imidichannel, p4, p5, p3 endin ; Send parameter changes to the Pianoteq. instr 2 ; p4 is the parameter number. ; p5 is the parameter value. vstparamset gipianoteq, p4, p5 endin ; Send audio from the Pianoteq to the output. instr 3 init 0 vstaudio gipianoteq, ablankinput, ablankinput outs aleft, aright endin
imidichannel
</CsInstruments> <CsScore> ; Turn on the instrument that receives audio from the Pianoteq indefinitely. i 3 0 -1 ; Send parameter changes to Pianoteq before sending any notes. ; NOTE: All parameters must be between 0.0 and 1.0. ; Length of piano strings: i 2 0 1 33 0.5 ; Hammer noise: i 2 0 1 25 0.1 ; Send a C major 7th arpeggio to the Pianoteq. i 1 1 10 60 76 i 1 2 10 64 73 i 1 3 10 67 70 i 1 4 10 71 67 ; End the performance, leaving some time ; for the Pianoteq to finish sending out its audio, ; or for the user to play with the Pianoteq virtual keyboard. e 20 </CsScore> </CsoundSynthesizer>
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2361
vstparamset,vstparamget
vstparamset Used for parameter comunication to and from a VST plugin.
Syntax
vstparamset instance, kparam, kvalue kvalue vstparamget instance, kparam
Description
vstparamset and vstparamget are used for parameter comunication to and from a VST plugin.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes.
Performance
kparam - The number of the parameter to set or get. kvalue - the value to set, or the the value returned by the plugin. Parameters vary according to the plugin. To find out what parameters are available, use the verbose option when loading the plugin with vstinit. Note that the VST protocol specifies that all parameter values must lie between 0.0 and 1.0, inclusive.
Examples
Here is an example of the use of the vstparamset opcode. It uses the file vst4cs.csd [examples/vst4cs.csd].
<CsoundSynthesizer> <CsOptions> ; Credits: Adapted by Michael Gogins ; from code by David Horowitz and Lian Cheung. ; The "--displays" option is required in order for ; the Pianoteq GUI to dispatch events and display properly. -m3 --displays -odac </CsOptions> <CsInstruments> sr = 44100 ksmps = 20 nchnls = 2 ; Load the Pianoteq into memory. gipianoteq vstinit "C:\\Program Files\\Steinberg\\VstPlugins\\Pianoteq 3.0 Trial\\Pianoteq ; Print information about the Pianoteq, such as parameter names and numbers.
2362
vstinfo
gipianoteq
; Open the Pianoteq's GUI. vstedit gipianoteq ; Send notes from the score to the Pianoteq. instr 1 ; MIDI channels are numbered starting at 0. ; p3 always contains the duration of the note. ; p4 contains the MIDI key number (pitch), ; p5 contains the MIDI velocity number (loudness), init 0 vstnote gipianoteq, imidichannel, p4, p5, p3 endin ; Send parameter changes to the Pianoteq. instr 2 ; p4 is the parameter number. ; p5 is the parameter value. vstparamset gipianoteq, p4, p5 endin ; Send audio from the Pianoteq to the output. instr 3 init 0 vstaudio gipianoteq, ablankinput, ablankinput outs aleft, aright endin
imidichannel
</CsInstruments> <CsScore> ; Turn on the instrument that receives audio from the Pianoteq indefinitely. i 3 0 -1 ; Send parameter changes to Pianoteq before sending any notes. ; NOTE: All parameters must be between 0.0 and 1.0. ; Length of piano strings: i 2 0 1 33 0.5 ; Hammer noise: i 2 0 1 25 0.1 ; Send a C major 7th arpeggio to the Pianoteq. i 1 1 10 60 76 i 1 2 10 64 73 i 1 3 10 67 70 i 1 4 10 71 67 ; End the performance, leaving some time ; for the Pianoteq to finish sending out its audio, ; or for the user to play with the Pianoteq virtual keyboard. e 20 </CsScore> </CsoundSynthesizer>
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2363
vstprogset
vstprogset Loads parameter banks to a VST plugin.
Syntax
vstprogset instance, kprogram
Description
vstprogset sets one of the programs in an .fxb bank.
Initialization
instance - the number which identifies the plugin, to be passed to other vst4cs opcodes. kprogram - the number of the program to set.
Examples
Example 689. Usage of vstprogset
/* orc */ sr = 44100 kr = 4410 ksmps = 10 nchnls = 2 giHandle1 vstinit "c:/vstplugins/cheeze/cheeze machine.dll",1 instr 4 vstbankload gihandle1,"c:/vstplugins/cheeze/chengo'scheese.fxb" vstprogset gihandle1, 4 vstinfo gihandle1 endin
/* sco */ i 3 0 21 i4 1 1 57 32 e
Credits
By: Andrs Cabrera and Michael Gogins Uses code from Hermann Seib's VSTHost and Thomas Grill's vst~ object. VST is a trademark of Steinberg Media Technologies GmbH. VST Plug-In Technology by Steinberg.
2364
vsubv
vsubv Performs subtraction between two vectorial control signals
Description
Performs subtraction between two vectorial control signals
Syntax
vsubv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed
Performance
kelements - number of elements of the two vectors kdstoffset - index offset for the destination (ifn1) table (Default=0) ksrcoffset - index offset for the source (ifn2) table (Default=0) kverbose - Selects whether or not warnings are printed (Default=0) vsubv subtracts two vectorial control signals, that is, each element of ifn2 is subrtacted from the corresponding element of ifn1. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use kdstoffset and ksrcoffset to specify vectors in any location of the tables. Negative values for kdstoffset and ksrcoffset are acceptable. If kdstoffset is negative, the out of range section of the vector will be discarded. If ksrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination vector will not be changed for these elements). If the optional kverbose argument is different to 0, the opcode will print warning messages every k-pass if table lengths are exceeded.
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at k-rate (this means that every k-pass the vectors are subtracted). There's an i-rate 2365
Note
Please note that the elements argument has changed in version 5.03 from i-rate to k-rate. This will change the opcode's behavior in the unusual cases where the i-rate variable ielements is changed inside the instrument, for example in:
instr 1 ielements = 10 vadd 1, 1, ielements ielements = 20 vadd 2, 1, ielements turnoff endin
All these operators (vaddv,vsubv,vmultv,vdivv,vpowv,vexpv, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
Examples
Here is an example of the vsubv opcode. It uses the file vsubv.csd [examples/vsubv.csd].
2366
endin </CsInstruments> <CsScore> f 1 0 16 -7 1 15 16 f 2 0 16 -7 1 15 2 i2 i2 i1 i2 i1 i2 i1 i2 i1 i2 i1 i2 e 0.0 0.2 0.4 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 0.2 1 0.2 2 0.01 1 2 5 3 8 0.2 1 0.01 1 2 5 10 -2 0.2 1 0.01 1 2 8 14 0 0.2 1 0.01 1 2 8 0 14 0.2 1 0.002 1 1 8 5 2 0.2 1
</CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2367
vsubv_i
vsubv_i Performs subtraction between two vectorial control signals at init time.
Description
Performs subtraction between two vectorial control signals at init time.
Syntax
vsubv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
Initialization
ifn1 - number of the table hosting the first vector to be processed ifn2 - number of the table hosting the second vector to be processed ielements - number of elements of the two vectors idstoffset - index offset for the destination (ifn1) table (Default=0) isrcoffset - index offset for the source (ifn2) table (Default=0)
Performance
vsubv_i subtracts two vectorial control signals, that is, each element of ifn2 is subrtacted from the corresponding element of ifn1. Each vectorial signal is hosted by a table (ifn1 and ifn2). The number of elements contained in both vectors must be the same. The result is a new vectorial control signal that overrides old values of ifn1. If you want to keep the old ifn1 vector, use vcopy_i opcode to copy it in another table. You can use idstoffset and isrcoffset to specify vectors in any location of the tables. Negative values for idstoffset and isrcoffset are acceptable. If idstoffset is negative, the out of range section of the vector will be discarded. If isrcoffset is negative, the out of range elements will be assumed to be 0 (i.e. the destination elements will not be changed). If elements for the destination vector are beyond the size of the table (including guard point), these elements are discarded (i.e. elements do not wrap around the tables). If elements for the source vector are beyond the table length, these elements are taken as 0 (i.e. the destination vector will not be changed for these elements).
Warning
Using the same table as source and destination table in versions earlier than 5.04, might produce unexpected behavior, so use with care. This opcode works at init time. There's an k-rate version of this opcode called vsubv. All these operators (vaddv_i,vsubv_i,vmultv_i,vdivv_i,vpowv_i,vexpv_i, vcopy and vmap) are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc.
2368
Credits
Written by Gabriel Maldonado. Optional arguments added by Andres Cabrera and Istvan Varga. New in Csound 5 (Previously available only on CsoundAV)
2369
vtable1k
vtable1k Read a vector (several scalars simultaneously) from a table.
Description
This opcode reads vectors from tables at k-rate.
Syntax
vtable1k kfn,kout1 [, kout2, kout3, .... , koutN ]
Performance
kfn - table number kout1...koutN - output vector elements vtable1k is a reduced version of vtablek, it only allows to access the first vector (it is equivalent to vtablek with kndx = zero, but a bit faster). It is useful to easily and quickly convert a set of values stored in a table into a set of k-rate variables to be used in normal opocodes, instead of using individual table opcodes for each value.
Note
vtable1k is an unusual opcode as it produces its output on the right side arguments of the opcode.
Examples
Here is an example of the vtable1k opcode. It uses the files vtable1k.csd [examples/vtable1k.csd].
FLpanel "This Panel contains a Slider Bank",500,400 FLslidBnk "mod1@mod2@mod3@amp@freq1@freq2@freq3@freqPo", giElem, giOutTab, 360, 600, 100, 10 FLpanel_end
2370
FLrun instr 1 kout1 kout2 kout3 kout4 kout5 kout6 kout7 kout8 init init init init init init init init 0 0 0 0 0 0 0 0
vtable1k giOutTab, kout1 , kout2, kout3, kout4, kout5 , kout6, kout7, kout8 kmodindex1= 2 * db(kout1 * 80 ) kmodindex2= 2 * db(kout2 * 80 ) kmodindex3= 2 * db(kout3 * 80 ) kamp = 50 * db(kout4 * 70 ) kfreq1 = 1.1 * octave(kout5 * 10) kfreq2 = 1.1 * octave(kout6 * 10) kfreq3 = 1.1 * octave(kout7 * 10) kfreq4 = 30 * octave(kout8 * 8) amod1 oscili kmodindex1, kfreq1, giSine amod2 oscili kmodindex2, kfreq2, giSine amod3 oscili kmodindex3, kfreq3, giSine aout oscili kamp, kfreq4+amod1+amod2+amod3, giSine outs aout, aout endin </CsInstruments> <CsScore> i1 0 3600 f0 3600 </CsScore> </CsoundSynthesizer>
See Also
vtablek
Credits
Written by Gabriel Maldonado. New in Csound 5.06
2371
vtablei
vtablei Read vectors (from tables -or arrays of vectors).
Description
This opcode reads vectors from tables.
Syntax
vtablei indx, ifn, interp, ixmode, iout1 [, iout2, iout3, .... , ioutN ]
Initialization
indx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). ifn - table number iout1...ioutN - output vector elements ixmode - index data mode. The default value is 0. == 0 index is treated as a raw table location, == 1 index is normalized (0 to 1). interp - vtable (vector table) family of opcodes allows the user to switch beetween interpolated or noninterpolated output by means of the interp argument.
Performance
This opcode is useful in all cases in which one needs to access sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (iout1 , iout2, iout3, .... ioutN). vtable (vector table) family of opcodes allows the user to switch beetween interpolated or noninterpolated output by means of the interp argument. Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtable, in order to correct eventual out-of-range values.
Note
Notice that vtablei's output arguments are placed at the right of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq).
2372
Examples
Here is an example of the vtablei opcode. It uses the files vtablei.csd [examples/vtablei.csd]
gindx init 0 instr 1 kindex init 0 ktrig metro 0.5 if ktrig = 0 goto noevent event "i", 2, 0, 0.5, kindex kindex = kindex + 1 noevent: endin instr 2 iout1 init 0 iout2 init 0 iout3 init 0 iout4 init 0 indx = p4 vtablei indx, 1, 1, 0, iout1,iout2, iout3, iout4 print iout1, iout2, iout3, iout4 turnoff endin </CsInstruments> <CsScore> f 1 0 32 10 1 i 1 0 20 </CsScore> </CsoundSynthesizer>
See also
vtablea, vtablek, vtabi, vtablewi, vtabwi,
Credits
Example written by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2373
vtablek
vtablek Read vectors (from tables -or arrays of vectors).
Description
This opcode reads vectors from tables at k-rate.
Syntax
vtablek kndx, kfn, kinterp, ixmode, kout1 [, kout2, kout3, .... , koutN ]
Initialization
ixmode - index data mode. The default value is 0. == 0 index is treated as a raw table location, == 1 index is normalized (0 to 1). kinterp - switch beetween interpolated or non-interpolated output. 0 -> non-interpolation , non-zero -> interpolation activated
Performance
kndx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). kfn - table number kout1...koutN - output vector elements This opcode is useful in all cases in which one needs to access sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (kout1 , kout2, kout3, .... koutN). vtablek allows the user to switch beetween interpolated or non-interpolated output at k-rate by means of kinterp argument. vtablek allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtable, in order to correct eventual out-of-range values.
Note
Notice that vtablek's output arguments are placed at the left of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output argu2374
Examples
Here is an example of the vtablek opcode. It uses the files vtablek.csd [examples/vtablek.csd].
gkindx init -1 instr 1 kindex init 0 ktrig metro 0.5 if ktrig = 0 goto noevent gkindx = gkindx + 1 noevent: endin instr 2 kout1 init 0 kout2 init 0 kout3 init 0 kout4 init 0 vtablek gkindx, 1, 1, 0, kout1,kout2, kout3, kout4 printk2 kout1 printk2 kout2 printk2 kout3 printk2 kout4 endin </CsInstruments> <CsScore> f 1 0 32 10 1 i 1 0 20 i 2 0 20 </CsScore> </CsoundSynthesizer>
See also
vtablea, vtablei, vtabk, vtablewk, vtabwk,
Credits
Written by Gabriel Maldonado. Example written by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2375
vtablea
vtablea Read vectors (from tables -or arrays of vectors).
Description
This opcode reads vectors from tables at a-rate.
Syntax
vtablea andx, kfn, kinterp, ixmode, aout1 [, aout2, aout3, .... , aoutN ]
Initialization
ixmode - index data mode. The default value is 0. == 0 index is treated as a raw table location, == 1 index is normalized (0 to 1).
Performance
andx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). kfn - table number kinterp - switch beetween interpolated or non-interpolated output. 0 -> non-interpolation , non-zero -> interpolation activated aout1...aoutN - output vector elements This opcode is useful in all cases in which one needs to access sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (aout1 , aout2, aout3, .... aoutN). vtablea allows the user to switch beetween interpolated or non-interpolated output at k-rate by means of kinterp argument. vtablea allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtablea, in order to correct eventual out-of-range values.
Note
Notice that vtablea's output arguments are placed at the right of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output 2376
See also
vtablek, vtablei, vtaba, vtablewa, vtabwa,
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2377
vtablewi
vtablewi Write vectors (to tables -or arrays of vectors).
Description
This opcode writes vectors to tables at init time.
Syntax
vtablewi indx, ifn, ixmode, inarg1 [, inarg2, inarg3 , .... , inargN ]
Initialization
indx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). ifn - table number ixmode - index data mode. The default value is 0. == 0 index is treated as a raw table location, == 1 index is normalized (0 to 1). inarg1...inargN - output vector elements
Performance
This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (inarg1 , inarg2, inarg3, .... inargN). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtablewi, in order to correct eventual out-of-range values.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2378
vtablewk
vtablewk Write vectors (to tables -or arrays of vectors).
Description
This opcode writes vectors to tables at k-rate.
Syntax
vtablewk kndx, kfn, ixmode, kinarg1 [, kinarg2, kinarg3 , .... , kinargN ]
Initialization
ixmode - index data mode. The default value is 0. == 0 index is treated as a raw table location, == 1 index is normalized (0 to 1).
Performance
kndx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). kfn - table number kinarg1...kinargN - output vector elements This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (kinarg1 , kinarg2, kinarg3, .... kinargN). vtablewk allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtablewk, in order to correct eventual out-of-range values.
Examples
Here is an example of the vtablewk opcode. It uses the files vtablewk.csd [examples/vtablewk.csd].
2379
<CsInstruments> sr=44100 kr=441 ksmps=100 nchnls=2 instr 1 ilen = ftlen (1) knew1 oscil 10000, 440, 3 knew2 oscil 15000, 440, 3, 0.5 kindex phasor 0.3 asig oscil 1, sr/ilen , 1 vtablewk kindex*ilen, 1, 0, knew1, knew2 out asig,asig endin </CsInstruments> <CsScore> f1 0 262144 -1 "beats.aiff" 0 4 0 f2 0 262144 2 0 f3 0 1024 10 1 i1 0 10 </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Example written by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2380
vtablewa
vtablewa Write vectors (to tables -or arrays of vectors).
Description
This opcode writes vectors to tables at a-rate.
Syntax
vtablewa andx, kfn, ixmode, ainarg1 [, ainarg2, ainarg3 , .... , ainargN ]
Initialization
ixmode - index data mode. The default value is 0. == 0 index is treated as a raw table location, == 1 index is normalized (0 to 1).
Performance
andx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). kfn - table number ainarg1...ainargN - input vector elements This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (ainarg1 , ainarg2, ainarg3, .... ainargN). vtablewa allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtablewa, in order to correct eventual out-of-range values.
Examples
Here is an example of the vtablewa opcode. It uses the files vtablewa.csd [examples/vtablewa.csd].
2381
-odac -b441 -B441 </CsOptions> <CsInstruments> sr=44100 kr=4410 ksmps=10 nchnls=2 instr 1 vcopy ar random 0, 1 vtablewa ar out ar,ar endin </CsInstruments> <CsScore> f1 0 262144 -1 "beats.wav" 0 4 0 f2 0 262144 2 0 i1 0 4 i2 3 1 s i1 0 4 i3 3 1 s i1 0 4 </CsScore> </CsoundSynthesizer>
Credits
Written by Gabriel Maldonado. Example written by Andres Cabrera. New in Csound 5 (Previously available only on CsoundAV)
2382
vtabi
vtabi Read vectors (from tables -or arrays of vectors).
Description
This opcode reads vectors from tables.
Syntax
vtabi indx, ifn, iout1 [, iout2, iout3, .... , ioutN ]
Initialization
indx - Index into f-table, either a positive number range matching the table length ifn - table number iout1...ioutN - output vector elements
Performance
This opcode is useful in all cases in which one needs to access sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (iout1 , iout2, iout3, .... ioutN). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtable, in order to correct eventual out-of-range values. Notice that vtabi output arguments are placed at the left of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq). The vtab family is similar to vtable, but is much faster because interpolation is not available, table number cannot be changed after initialization, and only raw indexing is supported.
Note
Notice that vtabi's output arguments are placed at the right of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq).
Examples
For an example of the vtabi opcode usage, see vtablei.
See also
2383
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2384
vtabk
vtabk Read vectors (from tables -or arrays of vectors).
Description
This opcode reads vectors from tables at k-rate.
Syntax
vtabk kndx, ifn, kout1 [, kout2, kout3, .... , koutN ]
Initialization
ifn - table number
Performance
kndx - Index into f-table, either a positive number range matching the table length kout1...koutN - output vector elements This opcode is useful in all cases in which one needs to access sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.) . The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (kout1 , kout2, kout3, .... koutN). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtable, in order to correct eventual out-of-range values. Notice that vtabk output arguments are placed at the left of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq). The vtab family is similar to vtable, but is much faster because interpolation is not available, table number cannot be changed after initialization, and only raw indexing is supported.
Note
Notice that vtabk's output arguments are placed at the right of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq).
Examples
For an example of the vtabk opcode usage, see vtablek.
See also
2385
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2386
vtaba
vtaba Read vectors (from tables -or arrays of vectors).
Description
This opcode reads vectors from tables at a-rate.
Syntax
vtaba andx, ifn, aout1 [, aout2, aout3, .... , aoutN ]
Initialization
ifn - table number
Performance
andx - Index into f-table, either a positive number range matching the table length aout1...aoutN - output vector elements This opcode is useful in all cases in which one needs to access sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (aout1 , aout2, aout3, .... aoutN). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtaba, in order to correct eventual out-of-range values. Notice that vtaba output arguments are placed at the left of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq). The vtab family is similar to the vtable family, but is much faster because interpolation is not available, table number cannot be changed after initialization, and only raw indexing is supported.
Note
Notice that vtaba's output arguments are placed at the right of the opcode name, differently from usual (this style is already used in other opcodes using undefined lists of output arguments such as fin or trigseq).
Examples
The usage of vtaba is similar to vtablek.
See also
2387
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2388
vtabwi
vtabwi Write vectors (to tables -or arrays of vectors).
Description
This opcode writes vectors to tables at init time.
Syntax
vtabwi indx, ifn, inarg1 [, inarg2, inarg3 , .... , inargN ]
Initialization
indx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). ifn - table number inarg1...inargN - output vector elements
Performance
This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (inarg1 , inarg2, inarg3, .... inargN). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtabwi, in order to correct eventual out-of-range values.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2389
vtabwk
vtabwk Write vectors (to tables -or arrays of vectors).
Description
This opcode writes vectors to tables at a-rate.
Syntax
vtabwk kndx, ifn, kinarg1 [, kinarg2, kinarg3 , .... , kinargN ]
Initialization
ifn - table number
Performance
kndx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). kinarg1...kinargN - input vector elements This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.) . The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (kinarg1 , kinarg2, kinarg3, .... kinargN). vtabwk allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtabwk, in order to correct eventual out-of-range values.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2390
vtabwa
vtabwa Write vectors (to tables -or arrays of vectors).
Description
This opcode writes vectors to tables at a-rate.
Syntax
vtabwa andx, ifn, ainarg1 [, ainarg2, ainarg3 , .... , ainargN ]
Initialization
ifn - table number
Performance
andx - Index into f-table, either a positive number range matching the table length (ixmode = 0) or a 0 to 1 range (ixmode != 0). ainarg1...ainargN - input vector elements This opcode is useful in all cases in which one needs to write sets of values associated to unique indexes (for example, multi-channel samples, STFT bin frames, spectral formants, p-field based scores etc.). The number of elements of each vector (length of the vector) is determined by the number of optional arguments on the right (ainarg1 , ainarg2, ainarg3, .... ainargN). vtabwa allows also to switch the table number at k-rate (but this is possible only when vector frames of each used table have the same number of elements, otherwise unpredictable results could occurr), as well as to choose indexing style (raw or normalized, see also ixmode argument of table opcode ). Notice that no wrap nor limit mode is implemented. So, if an index attempt to access to a zone not allocated by the table, Csound will probably crash. However this drawback can be easily avoided by using wrap or limit opcodes applied to indexes before using vtabwa, in order to correct eventual out-of-range values.
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2391
vwrap
vwrap Limiting and Wrapping Vectorial Signals
Description
Wraps elements of vectorial control signals.
Syntax
vwrap ifn, kmin, kmax, ielements
Initialization
ifn - number of the table hosting the vector to be processed ielements - number of elements of the vector
Performance
kmin - minimum threshold value kmax - maximum threshold value vwrap wraps around each element of corresponding vector if it exceeds low or high thresholds. These opcodes are similar to limit, wrap and mirror, but operate with a vectorial signal instead of with a scalar signal. Result overrides old values of ifn1, if these are out of min/max interval. If you want to keep input vector, use vcopy opcode to copy it in another table. All these opcodes are designed to be used together with other opcodes that operate with vectorial signals such as bmscan, vcella, adsynt, adsynt2 etc. Note: bmscan not yet available on Canonical Csound
Credits
Written by Gabriel Maldonado. New in Csound 5 (Previously available only on CsoundAV)
2392
waveset
waveset A simple time stretch by repeating cycles.
Description
A simple time stretch by repeating cycles.
Syntax
ares waveset ain, krep [, ilen]
Initialization
ilen (optional, default=0) -- the length (in samples) of the audio signal. If ilen is set to 0, it defaults to half the given note length (p3).
Performance
ain -- the input audio signal. krep -- the number of times the cycle is repeated. The input is read and each complete cycle (two zero-crossings) is repeated krep times. There is an internal buffer as the output is clearly slower that the input. Some care is taken if the buffer is too short, but there may be strange effects.
Examples
Here is an example of the waveset opcode. It uses the file waveset.csd [examples/waveset.csd], and beats.wav [examples/beats.wav].
2393
; Instrument #1 - play an audio file. instr 1 asig soundin "beats.wav" out asig endin ; Instrument #2 - stretch the audio file with waveset. instr 2 asig soundin "beats.wav" a1 waveset asig, 2 out a1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for two seconds. 1 0 2 Play Instrument #2 for four seconds. 2 3 4
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch February 2001 Example written by Kevin Conder. New in version 4.11
2394
weibull
weibull Weibull distribution random number generator (positive values only).
Description
Weibull distribution random number generator (positive values only). This is an x-class noise generator
Syntax
ares weibull ksigma, ktau ires weibull ksigma, ktau kres weibull ksigma, ktau
Performance
ksigma -- scales the spread of the distribution. ktau -- if greater than one, numbers near ksigma are favored. If smaller than one, small values are favored. If t equals 1, the distribution is exponential. Outputs only positive numbers. For more detailed explanation of these distributions, see: 1. C. Dodge - T.A. Jerse 1985. Computer music. Schirmer books. pp.265 - 286 2. D. Lorrain. A panoply of stochastic cannons. In C. Roads, ed. 1989. Music machine . Cambridge, Massachusetts: MIT press, pp. 351 - 379.
Examples
Here is an example of the weibull opcode. It uses the file weibull.csd [examples/weibull.csd].
2395
ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Generate a random number in a Weibull distribution. ; ksigma = 1 ; ktau = 1 i1 weibull 1, 1 print i1 endin ; Instrument #2. instr 2 ; Generate a random number in a Weibull distribution. ; ksigma = 1 ; ktau = 1 seed 0 i1 weibull 1, 1 print i1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 1 1
</CsScore> </CsoundSynthesizer>
See Also
seed, betarand, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, poisson, trirand, unirand
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Example written by Kevin Conder.
2396
wgbow
wgbow Creates a tone similar to a bowed string.
Description
Audio output is a tone similar to a bowed string, using a physical model developed from Perry Cook, but re-coded for Csound.
Syntax
ares wgbow kamp, kfreq, kpres, krat, kvibf, kvamp, ifn [, iminfreq]
Initialization
ifn -- table of shape of vibrato, usually a sine table, created by a function iminfreq (optional) -- lowest frequency at which the instrument will play. If it is omitted it is taken to be the same as the initial kfreq. If iminfreq is negative, initialization will be skipped.
Performance
A note is played on a string-like instrument, with the arguments as below. kamp -- amplitude of note. kfreq -- frequency of note played. kpres -- a parameter controlling the pressure of the bow on the string. Values should be about 3. The useful range is approximately 1 to 5. krat -- the position of the bow along the string. Usual playing is about 0.127236. The suggested range is 0.025 to 0.23. kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the wgbow opcode. It uses the file wgbow.csd [examples/wgbow.csd].
2397
-odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o wgbow.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 31129.60 kfreq = 440 kpres = 3.0 krat = 0.127236 kvibf = 6.12723 ifn = 1 ; Create an amplitude envelope for the vibrato. kv linseg 0, 0.5, 0, 1, 1, p3-0.5, 1 kvamp = kv * 0.01 a1 wgbow kamp, kfreq, kpres, krat, kvibf, kvamp, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 128 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
2398
wgbowedbar
wgbowedbar A physical model of a bowed bar.
Description
A physical model of a bowed bar, belonging to the Perry Cook family of waveguide instruments.
Syntax
ares wgbowedbar kamp, kfreq, kpos, kbowpres, kgain [, iconst] [, itvel] \ [, ibowpos] [, ilow]
Initialization
iconst (optional, default=0) -- an integration constant. Default is zero. itvel (optional, default=0) -- either 0 or 1. When itvel = 0, the bow velocity follows an ADSR style trajectory. When itvel = 1, the value of the bow velocity decays in an exponentially. ibowpos (optional, default=0) -- the position on the bow, which affects the bow velocity trajectory. ilow (optional, default=0) -- lowest frequency required
Performance
kamp -- amplitude of signal kfreq -- frequency of signal kpos -- position of the bow on the bar, in the range 0 to 1 kbowpres -- pressure of the bow (as in wgbowed) kgain -- gain of filter. A value of about 0.809 is suggested.
Examples
Here is an example of the wgbowedbar opcode. It uses the file wgbowedbar.csd [examples/wgbowedbar.csd].
2399
; -o wgbowedbar.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; ; ; ; ; ; instr 1 pos bowpress gain intr trackvel bowpos kb kp kc a1 = = = = = = [0, 1] [1, 10] [0.8, 1] [0,1] [0, 1] [0, 1]
line 0.5, p3, 0.1 line 0.6, p3, 0.7 line 1, p3, 1 wgbowedbar p4, cpspch(p5), kb, kp, 0.995, p6, 0 out a1 endin
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 4.07
2400
wgbrass
wgbrass Creates a tone related to a brass instrument.
Description
Audio output is a tone related to a brass instrument, using a physical model developed from Perry Cook, but re-coded for Csound.
Syntax
ares wgbrass kamp, kfreq, ktens, iatt, kvibf, kvamp, ifn [, iminfreq]
Initialization
iatt -- time taken to reach full pressure ifn -- table of shape of vibrato, usually a sine table, created by a function iminfreq -- lowest frequency at which the instrument will play. If it is omitted it is taken to be the same as the initial kfreq. If iminfreq is negative, initialization will be skipped.
Performance
A note is played on a brass-like instrument, with the arguments as below. kamp -- Amplitude of note. kfreq -- Frequency of note played. ktens -- lip tension of the player. Suggested value is about 0.4 kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
NOTE
This is rather poor, and at present uncontrolled. Needs revision, and possibly more parameters.
Examples
Here is an example of the wgbrass opcode. It uses the file wgbrass.csd [examples/wgbrass.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o wgbrass.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 ksmps = 10 nchnls = 1 0dbfs = 1 ; Instrument #1. instr 1 kamp = 0.7 kfreq = p4 ktens = p5 iatt = p6 kvibf = p7 ifn = 1 ; Create an amplitude envelope for the vibrato. kvamp line 0, p3, 0.5 a1 wgbrass kamp, kfreq, ktens, iatt, kvibf, kvamp, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 1024 10 1 ; i 1 0 4 i 1 4 4 i 1 8 4 e freq 440 440 880 tens 0.4 0.4 0.4 att 0.1 0.01 0.1 vibf 6.137 0.137 6.137
</CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
2402
wgclar
wgclar Creates a tone similar to a clarinet.
Description
Audio output is a tone similar to a clarinet, using a physical model developed from Perry Cook, but recoded for Csound.
Syntax
ares wgclar kamp, kfreq, kstiff, iatt, idetk, kngain, kvibf, kvamp, ifn \ [, iminfreq]
Initialization
iatt -- time in seconds to reach full blowing pressure. 0.1 seems to correspond to reasonable playing. A longer time gives a definite initial wind sound. idetk -- time in seconds taken to stop blowing. 0.1 is a smooth ending ifn -- table of shape of vibrato, usually a sine table, created by a function iminfreq (optional) -- lowest frequency at which the instrument will play. If it is omitted it is taken to be the same as the initial kfreq. If iminfreq is negative, initialization will be skipped.
Performance
A note is played on a clarinet-like instrument, with the arguments as below. kamp -- Amplitude of note. kfreq -- Frequency of note played. kstiff -- a stiffness parameter for the reed. Values should be negative, and about -0.3. The useful range is approximately -0.44 to -0.18. kngain -- amplitude of the noise component, about 0 to 0.5 kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the wgclar opcode. It uses the file wgclar.csd [examples/wgclar.csd].
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o wgclar.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp init 31129.60 kfreq = 440 kstiff = -0.3 iatt = 0.1 idetk = 0.1 kngain = 0.2 kvibf = 5.735 kvamp = 0.1 ifn = 1 a1 wgclar kamp, kfreq, kstiff, iatt, idetk, kngain, kvibf, kvamp, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for one second. i 1 0 1 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
2404
wgflute
wgflute Creates a tone similar to a flute.
Description
Audio output is a tone similar to a flute, using a physical model developed from Perry Cook, but recoded for Csound.
Syntax
ares wgflute kamp, kfreq, kjet, iatt, idetk, kngain, kvibf, kvamp, ifn \ [, iminfreq] [, ijetrf] [, iendrf]
Initialization
iatt -- time in seconds to reach full blowing pressure. 0.1 seems to correspond to reasonable playing. idetk -- time in seconds taken to stop blowing. 0.1 is a smooth ending ifn -- table of shape of vibrato, usually a sine table, created by a function iminfreq (optional) -- lowest frequency at which the instrument will play. If it is omitted it is taken to be the same as the initial kfreq. If iminfreq is negative, initialization will be skipped. ijetrf (optional, default=0.5) -- amount of reflection in the breath jet that powers the flute. Default value is 0.5. iendrf (optional, default=0.5) -- reflection coefficient of the breath jet. Default value is 0.5. Both ijetrf and iendrf are used in the calculation of the pressure differential.
Performance
kamp -- Amplitude of note. kfreq -- Frequency of note played. While it can be varied in performance, I have not tried it. kjet -- a parameter controlling the air jet. Values should be positive, and about 0.3. The useful range is approximately 0.08 to 0.56. kngain -- amplitude of the noise component, about 0 to 0.5 kvibf -- frequency of vibrato in Hertz. Suggested range is 0 to 12 kvamp -- amplitude of the vibrato
Examples
Here is an example of the wgflute opcode. It uses the file wgflute.csd [examples/wgflute.csd].
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o wgflute.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 31129.60 kfreq = 440 kjet = 0.32 iatt = 0.1 idetk = 0.1 kngain = 0.15 kvibf = 5.925 kvamp = 0.05 ifn = 1 a1 wgflute kamp, kfreq, kjet, iatt, idetk, kngain, kvibf, kvamp, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
2406
wgpluck
wgpluck A high fidelity simulation of a plucked string.
Description
A high fidelity simulation of a plucked string, using interpolating delay-lines.
Syntax
ares wgpluck icps, iamp, kpick, iplk, idamp, ifilt, axcite
Initialization
icps -- frequency of plucked string iamp -- amplitude of string pluck iplk -- point along the string, where it is plucked, in the range of 0 to 1. 0 = no pluck idamp -- damping of the note. This controls the overall decay of the string. The greater the value of idamp, the faster the decay. Negative values will cause an increase in output over time. ifilt -- control the attenuation of the filter at the bridge. Higher values cause the higher harmonics to decay faster.
Performance
kpick -- proportion of the way along the point to sample the output. axcite -- a signal which excites the string. A string of frequency icps is plucked with amplitude iamp at point iplk. The decay of the virtual string is controlled by idamp and ifilt which simulate the bridge. The oscillation is sampled at the point kpick, and excited by the signal axcite.
Examples
The following example produces a moderately long note with rapidly decaying upper partials. It uses the file wgpluck.csd [examples/wgpluck.csd].
2407
; -o wgpluck.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 icps = 220 iamp = 20000 kpick = 0.5 iplk = 0 idamp = 10 ifilt = 1000 axcite oscil 1, 1, 1 apluck wgpluck icps, iamp, kpick, iplk, idamp, ifilt, axcite out apluck endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
The following example produces a shorter, brighter note. It uses the file wgpluck_brighter.csd [examples/wgpluck_brighter.csd].
Example 704. An example of the wgpluck opcode with a shorter, brighter note.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o wgpluck_brighter.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 icps = 220 iamp = 20000 kpick = 0.5 iplk = 0 idamp = 30 ifilt = 10 axcite oscil 1, 1, 1 apluck wgpluck icps, iamp, kpick, iplk, idamp, ifilt, axcite out apluck
2408
endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Author: Michael A. Casey M.I.T. Cambridge, Mass. 1997 New in Version 3.47
2409
wgpluck2
wgpluck2 Physical model of the plucked string.
Description
wgpluck2 is an implementation of the physical model of the plucked string, with control over the pluck point, the pickup point and the filter. Based on the Karplus-Strong algorithm.
Syntax
ares wgpluck2 iplk, kamp, icps, kpick, krefl
Initialization
iplk -- The point of pluck is iplk, which is a fraction of the way up the string (0 to 1). A pluck point of zero means no initial pluck. icps -- The string plays at icps pitch.
Performance
kamp -- Amplitude of note. kpick -- Proportion of the way along the string to sample the output. krefl -- the coefficient of reflection, indicating the lossiness and the rate of decay. It must be strictly between 0 and 1 (it will complain about both 0 and 1).
Examples
Here is an example of the wgpluck2 opcode. It uses the file wgpluck2.csd [examples/wgpluck2.csd].
2410
; Instrument #1. instr 1 iplk = 0.75 kamp = 30000 icps = 220 kpick = 0.75 krefl = 0.5 apluck wgpluck2 iplk, kamp, icps, kpick, krefl out apluck endin </CsInstruments> <CsScore> ; Play Instrument #1 for two seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
repluck
Credits
Author: John ffitch (after Perry Cook) University of Bath, Codemist Ltd. Bath, UK New in Csound version 3.47
2411
wguide1
wguide1 A simple waveguide model consisting of one delay-line and one first-order lowpass filter.
Description
A simple waveguide model consisting of one delay-line and one first-order lowpass filter.
Syntax
ares wguide1 asig, xfreq, kcutoff, kfeedback
Performance
asig -- the input of excitation noise. xfreq -- the frequency (i.e. the inverse of delay time) Changed to x-rate in Csound version 3.59. kcutoff -- the filter cutoff frequency in Hz. kfeedback -- the feedback factor. wguide1 is the most elemental waveguide model, consisting of one delay-line and one first-order lowpass filter. Implementing waveguide algorithms as opcodes, instead of orc instruments, allows the user to set kr different than sr, allowing better performance particulary when using real-time.
wguide1.
Examples
Here is an example of the wguide1 opcode. It uses the file wguide1.csd [examples/wguide1.csd].
2412
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out Audio in No messages -odac -iadc -d ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o wguide1.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1 - a simple noise waveform. instr 1 ; Generate some noise. asig noise 20000, 0.5 out asig endin ; Instrument #2 - a waveguide example. instr 2 ; Generate some noise. asig noise 20000, 0.5 ; Run it through a wave-guide model. kfreq init 200 kcutoff init 3000 kfeedback init 0.8 awg1 wguide1 asig, kfreq, kcutoff, kfeedback out awg1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for 2 seconds. 1 0 2 Play Instrument #2 for 2 seconds. 2 2 2
</CsScore> </CsoundSynthesizer>
See Also
wguide2
Credits
Author: Gabriel Maldonado Italy October 1998 Example written by Kevin Conder. New in Csound version 3.49 2413
wguide2
wguide2 A model of beaten plate consisting of two parallel delay-lines and two first-order lowpass filters.
Description
A model of beaten plate consisting of two parallel delay-lines and two first-order lowpass filters.
Syntax
ares wguide2 asig, xfreq1, xfreq2, kcutoff1, kcutoff2, \ kfeedback1, kfeedback2
Performance
asig -- the input of excitation noise xfreq1, xfreq2 -- the frequency (i.e. the inverse of delay time) Changed to x-rate in Csound version 3.59. kcutoff1, kcutoff2 -- the filter cutoff frequency in Hz. kfeedback1, kfeedback2 -- the feedback factor wguide2 is a model of beaten plate consisting of two parallel delay-lines and two first-order lowpass filters. The two feedback lines are mixed and sent to the delay again each cycle. Implementing waveguide algorithms as opcodes, instead of orc instruments, allows the user to set kr different than sr, allowing better performance particulary when using real-time.
2414
wguide2.
Note
As a rule of thumb, to avoid making wguide2 unstable, the sum of the two feedback values should be below 0.5.
Examples
Here is an example of the wguide2 opcode. It uses the file wguide2.csd [examples/wguide2.csd].
2415
line 50, 10, 100 oscil 3000, afrq, 1 expon 1,10,0.000001 = aenv*asig wguide2 aexc, 500, 1200, 777, 1500, 0.2, 0.25 out ares,asig
See Also
wguide1
Credits
Author: Gabriel Maldonado Italy October 1998 New in Csound version 3.49 Example written by John ffitch
2416
wiiconnect
wiiconnect Reads data from a number of external Nintendo Wiimote controllers.
Description
Opens and at control-rate polls up to four external Nintendo Wiimote controllers.
Syntax
kres wiiconnect [itimeout, imaxnum]
Initialization
itimeout -- integer number of seconds the system should wait for all Wiimotes to be connected. If not given it defaults to 10 seconds. imaxnum -- maximum number of Wiimotes to locate. If not given it defaults to 4. Initially each Wiimote has its numeric allocation indicated by lighting one of the four LEDs.
Performance
Note
Please note that these opcodes are currently only supported on Linux. Every control cycle each Wiimote is poled for its status and position. These values are read by the wiidata opcode. The result returned is 1 in most cases, but will be zero if a Wiimote disconnects,
Example
Here is an example of the wii opcodes. It uses the file wii.csd [examples/wii.csd].
2417
#define WII_BATTERY #define WII_RUMBLE #define WII_SET_LEDS gkcnt init 1 instr 1 i1 wiiconnect 3,1
wiirange $WII_PITCH., -20, 0 kb wiidata $WII_BATTERY. kt wiidata $WII_B. ka wiidata $WII_A. kra wiidata $WII_R_A. gka wiidata $WII_PITCH. gkp wiidata $WII_ROLL. ; If the B (trigger) button is pressed then activate a note if (kt==0) goto ee event "i", 2, 0, 5 gkcnt = gkcnt + 1 wiisend $WII_SET_LEDS., gkcnt ee: if (ka==0) goto ff wiisend $WII_RUMBLE., 1 ff: if (kra==0) goto gg wiisend $WII_RUMBLE., 0 gg: printk2 kb endin instr 2 a1 oscil outs endin ampdbfs(gka), 440+gkp, 1 a1, a1
See Also
wiidata, wiirange, wiisend
Credits
Author: John ffitch Codemist Ltd 2009 New in version 5.11
2418
wiidata
wiidata Reads data fields from a number of external Nintendo Wiimote controllers.
Description
Reads data fields from upto four external Nintendo Wiimote controllers.
Syntax
kres wiidata kcontrol[, knum]
Initialization
This opcode must be used in conjuction with a running wiiconnect opcode.
Performance
Note
Please note that these opcodes are currently only supported on Linux. kcontrol -- the code for which control to read knum -- the number of the which Wiimote to access, which defaults to the first one. On each access a particular data item of the Wiimote is read. The currently implemented controls are given below, together with the macro name defined in the file wii_mac: 0 (WII_BUTTONS): returns a bit pattern for all buttons that were pressed. 1 (WII_TWO): returns 1 if the button has just been pressed, or 0 otherwise. 2 (WII_ONE): as above. 3 (WII_B): as above. 4 (WII_A): as above. 5 (WII_MINUS): as above. 8 (WII_HOME): as above. 9 (WII_LEFT): as above. 10 (WII_RIGHT): as above. 11 (WII_DOWN): as above. 12 (WII_UP): as above. 13 (WII_PLUS): as above. 2419
If the control number is 100 more than one of these button codes then the current state of the button is returned. Macros with names like WII_S_TWO etc are defined for this. If the control number is 200 more than one of these button codes then the return value is 1 if the button i held and 0 otherwise. Macros with names like WII_H_TWO etc are defined for this. If the control number is 300 more than one of these button codes then the value is 1 if the button has just been released, and 0 otherwise. Macros with names like WII_R_TWO etc are defined for this. 20 (WII_PITCH): The pitch of the Wiimote. The value is in degrees between -90 and +90, unless modified by a wiirange call. 21 (WII_ROLL): The roll of the Wiimote. The value is in degrees between -90 and +90, unless modified by a wiirange call. 23 (WII_FORCE_X): The force applied to the Wiimote in the three axes. 24 (WII_FORCE_Y): 25 (WII_FORCE_Z): 26 (WII_FORCE_TOTAL): The total magnitude of the force applied to the Wiimote. 27 (WII_BATTERY): The percent of the battery that remains. 28 (WII_NUNCHUK_ANG): The angle of the nunchuk joystick in degrees. 29 (WII_NUNCHUK_MAG): The magnitude of the nunchuk joystick from neutral. 30 (WII_NUNCHUK_PITCH): The pitch of the nunchuk in degrees, in range -90 to +90 unless modified by a wiirange call. 31 (WII_NUNCHUK_ROLL): The roll of the nunchuk in degrees, in range -90 to +90 unless modified by a wiirange call. 33 (WII_NUNCHUK_Z): The state of the nunchuk Z button. 34 (WII_NUNCHUK_C): The state of the nunchuk C button. 35 (WII_IR1_X): The infrared pointing of the Wiimote. 36 (WII_IR1_Y): 37 (WII_IR1_Z):
Examples
See the example for wiiconnect.
See Also
wiiconnect, wiirange, wiisend,
Credits
Author: John ffitch 2420
2421
wiirange
wiirange Sets scaling and range limits for certain Wiimote fields.
Description
Sets scaling and range limits for certain Wiimote fields.
Syntax
wiirange icontrol, iminimum, imaximum[, inum]
Initialization
This opcode must be used in conjuction with a running wiiconnect opcode. icontrol -- which control is to be scaled. This must be one of 20 (WII_PITCH), 21 (WII_ROLL), 30 (WII_NUNCHUK_PITCH), 31 (WII_NUNCHUK_ROLL). iminimum -- minimun value for control. imaximum -- maximum value for control.
Note
Please note that these opcodes are currently only supported on Linux.
Examples
See the example for wiiconnect.
See Also
wiiconnect, wiidata, wiisend,
Credits
Author: John ffitch Codemist Ltd 2009 New in version 5.11
2422
wiisend
wiisend Sends data to one of a number of external Nintendo Wiimote controllers.
Description
Sends data to one of a number of external Nintendo Wiimote controllers.
Syntax
kres wiisend kcontrol, kvalue[, knum]
Initialization
This opcode must be used in conjuction with a running wiiconnect opcode.
Performance
Note
Please note that these opcodes are currently only supported on Linux. kcontrol -- the code for which control to write. kvalue -- the value to write to the control. knum -- the number of the which Wiimote to access, which defaults to the first one (zero). On each access a particular data item of the Wiimote is written. The currently implemented controls are given below, together with the macro name defined in the file wii_mac: 3 (WII_RUMBLE): starts or stops the Wiimote rumbling, depending on the value of kvalue (0 to stop, 1 to start). 4 (WII_SET_LEDS): set the four LED lights on the Wiimote to the binary representation of kvalue.
Examples
See the example for wiiconnect.
See Also
wiiconnect, wiidata, wiirange,
Credits
Author: John ffitch Codemist Ltd 2009 2423
2424
wrap
wrap Wraps-around the signal that exceeds the low and high thresholds.
Description
Wraps-around the signal that exceeds the low and high thresholds.
Syntax
ares wrap asig, klow, khigh ires wrap isig, ilow, ihigh kres wrap ksig, klow, khigh
Initialization
isig -- input signal ilow -- low threshold ihigh -- high threshold
Performance
xsig -- input signal klow -- low threshold khigh -- high threshold wrap wraps-around the signal that exceeds the low and high thresholds. This opcode is useful in several situations, such as table indexing or for clipping and modeling a-rate, irate or k-rate signals. wrap is also useful for wrap-around of table data when the maximum index is not a power of two (see table and tablei). Another use of wrap is in cyclical event repeating, with arbitrary cycle length.
See Also
limit, mirror
Credits
Author: Gabriel Maldonado Italy New in Csound version 3.49
2425
wterrain
wterrain A simple wave-terrain synthesis opcode.
Description
A simple wave-terrain synthesis opcode.
Syntax
aout wterrain kamp, kpch, k_xcenter, k_ycenter, k_xradius, k_yradius, \ itabx, itaby
Initialization
itabx, itaby -- The two tables that define the terrain.
Performance
The output is the result of drawing an ellipse with axes k_xradius and k_yradius centered at (k_xcenter, k_ycenter), and traversing it at frequency kpch.
Examples
Here is an example of the wterrain opcode. It uses the file wterrain.csd [examples/wterrain.csd].
2426
</CsScore> </CsoundSynthesizer>
Credits
Author: Matthew Gillard New in version 4.19
2427
xadsr
xadsr Calculates the classical ADSR envelope.
Description
Calculates the classical ADSR envelope
Syntax
ares xadsr iatt, idec, islev, irel [, idel] kres xadsr iatt, idec, islev, irel [, idel]
Initialization
iatt -- duration of attack phase idec -- duration of decay islev -- level for sustain phase irel -- duration of release phase idel -- period of zero before the envelope starts
Performance
The envelope generated is the range 0 to 1 and may need to be scaled further, depending on the amplitude required. If using 0dbfs = 1, scaling down will probably be required since playing more than one note might result in clipping. If not using 0dbfs, scaling to a large amplitude (e.g. 32000) might be required. The envelope may be described as:
2428
Picture of an ADSR envelope. The length of the sustain is calculated from the length of the note. This means xadsr is not suitable for use with MIDI events, use mxadsr instead. The opcode xadsr is identical to adsr except it uses exponential, rather than linear, line segments. xadsr is new in Csound version 3.51.
See Also
adsr, madsr, mxadsr
Credits
Author: John ffitch
2429
xin
xin Passes variables to a user-defined opcode block,
Description
The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument. The types of input and output variables are defined by the parameters intypes and outtypes.
Notes
xin and xout should be called only once, and xin should precede xout, otherwise an init error and deactivation of the current instrument may occur. These opcodes actually run only at i-time. Performance time copying is done by the user opcode call. This means that skipping xin or xout with kgoto has no effect, while skipping with igoto affects both init and performance time operation.
Syntax
xinarg1 [, xinarg2] ... [xinargN] xin
Performance
xinarg1, xinarg2, ... - input arguments. The number and type of variables must agree with the userdefined opcode's intypes declaration. However, xin does not check for incorrect use of init-time and control-rate variables. The syntax of a user-defined opcode block is as follows:
opcode name, outtypes, intypes xinarg1 [, xinarg2] [, xinarg3] ... [xinargN] xin [setksmps iksmps] ... the rest of the instrument's code. xout xoutarg1 [, xoutarg2] [, xoutarg3] ... [xoutargN] endop
The new opcode can then be used with the usual syntax: [xinarg1] [, xinarg2] ... [xinargN] name [xoutarg1] [, xoutarg2] ... [xoutargN] [, iksmps]
Examples
See the example for the opcode opcode. 2430
See Also
endop, opcode, setksmps, xout
Credits
Author: Istvan Varga, 2002; based on code by Matt J. Ingalls New in version 4.22
2431
xout
xout Retrieves variables from a user-defined opcode block,
Description
The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument. The types of input and output variables are defined by the parameters intypes and outtypes.
Notes
xin and xout should be called only once, and xin should precede xout, otherwise an init error and deactivation of the current instrument may occur. These opcodes actually run only at i-time. Performance time copying is done by the user opcode call. This means that skipping xin or xout with kgoto has no effect, while skipping with igoto affects both init and performance time operation.
Syntax
xout xoutarg1 [, xoutarg2] ... [, xoutargN]
Performance
xoutarg1, xoutarg2, ... - output arguments. The number and type of variables must agree with the userdefined opcode's outtypes declaration. However, xout does not check for incorrect use of init-time and control-rate variables. The syntax of a user-defined opcode block is as follows:
opcode name, outtypes, intypes xinarg1 [, xinarg2] [, xinarg3] ... [xinargN] xin [setksmps iksmps] ... the rest of the instrument's code. xout xoutarg1 [, xoutarg2] [, xoutarg3] ... [xoutargN] endop
The new opcode can then be used with the usual syntax: [xinarg1] [, xinarg2] ... [xinargN] name [xoutarg1] [, xoutarg2] ... [xoutargN] [, iksmps]
Examples
See the example for the opcode opcode. 2432
See Also
endop, opcode, setksmps, xin
Credits
Author: Istvan Varga, 2002; based on code by Matt J. Ingalls New in version 4.22
2433
xscanmap
xscanmap Allows the position and velocity of a node in a scanned process to be read.
Description
Allows the position and velocity of a node in a scanned process to be read.
Syntax
kpos, kvel xscanmap iscan, kamp, kvamp [, iwhich]
Initialization
iscan -- which scan process to read iwhich (optional) -- which node to sense. The default is 0.
Performance
kamp -- amount to amplify the kpos value. kvamp -- amount to amplify the kvel value. The internal state of a node is read. This includes its position and velocity. They are amplified by the kamp and kvamp values.
Credits
Author: John ffitch New in version 4.20
2434
xscansmap
xscansmap Allows the position and velocity of a node in a scanned process to be read.
Description
Allows the position and velocity of a node in a scanned process to be read.
Syntax
xscansmap kpos, kvel, iscan, kamp, kvamp [, iwhich]
Initialization
iscan -- which scan process to read iwhich (optional) -- which node to sense. The default is 0.
Performance
kpos -- the node's position. kvel -- the node's velocity. kamp -- amount to amplify the kpos value. kvamp -- amount to amplify the kvel value. The internal state of a node is read. This includes its position and velocity. They are amplified by the kamp and kvamp values.
Credits
New in version 4.21 November 2002. Thanks to Rasmus Ekman for pointing this opcode out.
2435
xscans
xscans Fast scanned synthesis waveform and the wavetable generator.
Description
Experimental version of scans. Allows much larger matrices and is faster and smaller but removes some (unused?) flexibility. If liked, it will replace the older opcode as it is syntax compatible but extended.
Syntax
ares xscans kamp, kfreq, ifntraj, id [, iorder]
Initialization
ifntraj -- table containing the scanning trajectory. This is a series of numbers that contains addresses of masses. The order of these addresses is used as the scan path. It should not contain values greater than the number of masses, or negative numbers. See the introduction to the scanned synthesis section. id -- If positive, the ID of the opcode. This will be used to point the scanning opcode to the proper waveform maker. If this value is negative, the absolute of this value is the wavetable on which to write the waveshape. That wavetable can be used later from an other opcode to generate sound. The initial contents of this table will be destroyed. iorder (optional, default=0) -- order of interpolation used internally. It can take any value in the range 1 to 4, and defaults to 4, which is quartic interpolation. The setting of 2 is quadratic and 1 is linear. The higher numbers are slower, but not necessarily better.
Performance
kamp -- output amplitude. Note that the resulting amplitude is also dependent on instantaneous value in the wavetable. This number is effectively the scaling factor of the wavetable. kfreq -- frequency of the scan rate
Matrix Format
The new matrix format is a list of connections, one per line linking point x to point y. There is no weight given to the link; it is assumed to be unity. The list is preceded by the line <MATRIX> and ends with a </MATRIX> line For example, a circular string of 8 would be coded as
<MATRIX> 0 1 1 0 1 2 2 1 2 3 3 2 3 4 4 3 4 5 5 4
2436
5 6 6 5 6 7 7 6 0 7 </MATRIX>
Credits
Written by John ffitch. New in version 4.20
Examples
For an example, see the documentation on scans.
See Also
scans, xscanu
2437
xscanu
xscanu Compute the waveform and the wavetable for use in scanned synthesis.
Description
Experimental version of scanu. Allows much larger matrices and is faster and smaller but removes some (unused?) flexibility. If liked, it will replace the older opcode as it is syntax compatible but extended.
Syntax
xscanu init, irate, ifnvel, ifnmass, ifnstif, ifncentr, ifndamp, kmass, \ kstif, kcentr, kdamp, ileft, iright, kpos, kstrngth, ain, idisp, id
Initialization
init -- the initial position of the masses. If this is a negative number, then the absolute of init signifies the table to use as a hammer shape. If init > 0, the length of it should be the same as the intended mass number, otherwise it can be anything. irate -- update rate. ifnvel -- the ftable that contains the initial velocity for each mass. It should have the same size as the intended mass number. ifnmass -- ftable that contains the mass of each mass. It should have the same size as the intended mass number. ifnstif - either an ftable that contains the spring stiffness of each connection. It should have the same size as the square of the intended mass number. The data ordering is a row after row dump of the connection matrix of the system. or a string giving the name of a file in the MATRIX format ifncentr -- ftable that contains the centering force of each mass. It should have the same size as the intended mass number. ifndamp -- the ftable that contains the damping factor of each mass. It should have the same size as the intended mass number. ileft -- If init < 0, the position of the left hammer (ileft = 0 is hit at leftmost, ileft = 1 is hit at rightmost). iright -- If init < 0, the position of the right hammer (iright = 0 is hit at leftmost, iright = 1 is hit at rightmost). idisp -- If 0, no display of the masses is provided. id -- If positive, the ID of the opcode. This will be used to point the scanning opcode to the proper waveform maker. If this value is negative, the absolute of this value is the wavetable on which to write the waveshape. That wavetable can be used later from an other opcode to generate sound. The initial con2438
Performance
kmass -- scales the masses kstif -- scales the spring stiffness kcentr -- scales the centering force kdamp -- scales the damping kpos -- position of an active hammer along the string (kpos = 0 is leftmost, kpos = 1 is rightmost). The shape of the hammer is determined by init and the power it pushes with is kstrngth. kstrngth -- power that the active hammer uses ain -- audio input that adds to the velocity of the masses. Amplitude should not be too great.
Matrix Format
The new matrix format is a list of connections, one per line linking point x to point y. There is no weight given to the link; it is assumed to be unity. The list is proceeded by the line <MATRIX> and ends with a </MATRIX> line For example, a circular string of 8 would be coded as
<MATRIX> 0 1 1 0 1 2 2 1 2 3 3 2 3 4 4 3 4 5 5 4 5 6 6 5 6 7 7 6 0 7 </MATRIX>
Credits
Written by John ffitch. New in version 4.20
Examples
For an example, see the documentation on scans.
See Also
2439
scanu, xscans
2440
xtratim
xtratim Extend the duration of real-time generated events.
Description
Extend the duration of real-time generated events and handle their extra life (Usually for usage along with release instead of linenr, linsegr, etc).
Syntax
xtratim iextradur
Initialization
iextradur -- additional duration of current instrument instance
Performance
xtratim extends current MIDI-activated note duration by iextradur seconds after the corresponding noteoff message has deactivated the current note itself. It is usually used in conjunction with release. This opcode has no output arguments. This opcode is useful for implementing complex release-oriented envelopes, whose duration is not known when the envelope starts (e.g. for real-time MIDI generated events).
Examples
Here is a simple example of the xtratim opcode. It uses the file xtratim.csd [examples/xtratim.csd].
2441
instr 1 inum notnum icps cpsmidi iamp ampmidi 4000 ; ;------- complex envelope block -----xtratim 1 ;extra-time, i.e. release dur krel init 0 krel release ;outputs release-stage flag (0 or 1 values) if (krel == 1) kgoto rel ;if in release-stage goto release section ; ;************ attack and sustain section *********** kmp1 linseg 0, .03, 1, .05, 1, .07, 0, .08, .5, 4, 1, 50, 1 kmp = kmp1*iamp kgoto done ; ;--------- release section -------rel: kmp2 linseg 1, .3, .2, .7, 0 kmp = kmp1*kmp2*iamp done: ;-----a1 oscili kmp, icps, gisin outs a1, a1 endin </CsInstruments> <CsScore> f 0 3600 ;dummy table to wait for realtime MIDI events e </CsScore> </CsoundSynthesizer>
Here is a more elaborate example of the xtratim opcode. It uses the file xtratim-2.csd [examples/ xtratim-2.csd].
;;; simple two oscil, two envelope synth instr 1 kcps ivel kamp kamp ; frequency cpsmidib ; initial velocity (noteon) veloc ; master volume ctrl7 1, 7, 0, 127 = kamp * ivel
2442
; parameters for aenv1 = 0.03 = 1 = 0.25 = 1 ; parameters for aenv2 = 0.06 = 2 = 0.5 = 2
; extra (release) time allocated xtratim (irel1>irel2 ? irel1 : irel2) ; krel is used to trigger envelope release krel init 0 krel release ; if noteoff received, krel == 1, otherwise krel == 0 if (krel == 1) kgoto rel atmp1 atmp2 aenv1 aenv2 ; attack, linseg linseg = atmp1 = atmp2 kgoto decay, sustain segments 0, iatt1, 1, idec1, isus1 , 1, isus1 0, iatt2, 1, idec2, isus2 , 1, isus2 done
; release segment rel: atmp3 atmp4 aenv1 aenv2 done: aosc1 aosc2 aosc1 aosc2 linseg 1, irel1, 0, 1, 0 linseg 1, irel2, 0, 1, 0 = atmp1 * atmp3 ;to go from the current value (in case = atmp2 * atmp4 ;the attack hasn't finished) to the release. ; control oscillator amplitude using envelopes oscil aenv1, kcps, gisin oscil aenv2, kcps * 1.5, gisin = aosc1 * kamp = aosc2 * kamp ; send aosc1 to left channel, aosc2 to right, ; release times are noticably different outs endin </CsInstruments> <CsScore> f 0 3600 ;dummy table to wait for realtime MIDI events </CsScore> </CsoundSynthesizer> aosc1, aosc2
See Also
linenr, release
Credits
Author: Gabriel Maldonado Italy Examples by Gabriel Maldonado and Jonathan Murphy New in Csound version 3.47
2443
xyin
xyin Sense the cursor position in an output window
Description
Sense the cursor position in an output window. When xyin is called the position of the mouse within the output window is used to reply to the request. This simple mechanism does mean that only one xyin can be used accurately at once. The position of the mouse is reported in the output window.
Syntax
kx, ky xyin iprd, ixmin, ixmax, iymin, iymax [, ixinit] [, iyinit]
Initialization
iprd -- period of cursor sensing (in seconds). Typically .1 seconds. xmin, xmax, ymin, ymax -- edge values for the x-y coordinates of a cursor in the input window. ixinit, iyinit (optional) -- initial x-y coordinates reported; the default values are 0,0. If these values are not within the given min-max range, they will be coerced into that range.
Performance
xyin samples the cursor x-y position in an input window every iprd seconds. Output values are repeated (not interpolated) at the k-rate, and remain fixed until a new change is registered in the window. There may be any number of input windows. This unit is useful for real-time control, but continuous motion should be avoided if iprd is unusually small.
Note
Depending on your platform and distribution, you might need to enable displays using the -displays command line flag.
Examples
Here is an example of the xyin opcode. It uses the file xyin.csd [examples/xyin.csd].
2444
; -o xyin.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 ksmps = 10 nchnls = 2 ; Instrument #1. instr 1 ; Print and capture values every 0.1 seconds. iprd = 0.1 ; The x values are from 1 to 30. ixmin = 1 ixmax = 30 ; The y values are from 1 to 30. iymin = 1 iymax = 30 ; The initial values for X and Y are both 15. ixinit = 15 iyinit = 15 ; Get the values kx and ky using the xyin opcode. kx, ky xyin iprd, ixmin, ixmax, iymin, iymax, ixinit, iyinit ; Print out the values of kx and ky. printks "kx=%f, ky=%f\\n", iprd, kx, ky ; Play an oscillator, use the x values for amplitude and ; the y values for frequency. kamp = kx * 1000 kcps = ky * 220 a1 poscil kamp, kcps, 1 outs a1, a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; Play Instrument #1 for 30 seconds. i 1 0 30 e </CsScore> </CsoundSynthesizer>
As the values of kx and ky change, they will be printed out like this:
kx=8.612036, ky=22.677933 kx=10.765685, ky=15.644135
Credits
Example written by Kevin Conder.
2445
zacl
zacl Clears one or more variables in the za space.
Description
Clears one or more variables in the za space.
Syntax
zacl kfirst, klast
Performance
kfirst -- first zk or za location in the range to clear. klast -- last zk or za location in the range to clear. zacl clears one or more variables in the za space. This is useful for those variables which are used as accumulators for mixing a-rate signals at each cycle, but which must be cleared before the next set of calculations.
Examples
Here is an example of the zacl opcode. It uses the file zacl.csd [examples/zacl.csd].
2446
endin ; Instrument #2 -- generates audio output. instr 2 ; Read za variable #1. a1 zar 1 ; Generate the audio output. out a1 ; Clear the za variables, get them ready for ; another pass. zacl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zamod, zar, zaw, zawm, ziw, ziwm
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2447
zakinit
zakinit Establishes zak space.
Description
Establishes zak space. Must be called only once.
Syntax
zakinit isizea, isizek
Initialization
isizea -- the number of audio rate locations for a-rate patching. Each location is actually an array which is ksmps long. isizek -- the number of locations to reserve for floats in the zk space. These can be written and read at iand k-rates.
Performance
At least one location each is always allocated for both za and zk spaces. There can be thousands or tens of thousands za and zk ranges, but most pieces probably only need a few dozen for patching signals. These patching locations are referred to by number in the other zak opcodes. To run zakinit only once, put it outside any instrument definition, in the orchestra file header, after sr, kr, ksmps, and nchnls.
Note
Zak channels count from 0, so if you define 1 channel, the only valid channel is channel 0.
Examples
Here is an example of the zakinit opcode. It uses the file zakinit.csd [examples/zakinit.csd].
2448
sr = 44100 ksmps = 4410 nchnls = 1 ; Initialize the ZAK space. ; Create 3 a-rate variables and 5 k-rate variables. zakinit 2, 3 instr 1 ;a simple waveform. ; Generate a simple sine waveform. asin oscil 20000, 440, 1 ; Send the sine waveform to za variable #1. zaw asin, 1 endin instr 2 ;generates audio output. ; Read za variable #1. a1 zar 1 ; Generate audio output. out a1 ; Clear the za variables, get them ready for ; another pass. zacl 0, 3 endin instr 3 ;increments k-type channels k0 zkr 0 k1 zkr 1 k2 zkr 2 zkw k0+1, 0 zkw k1+5, 1 zkw k2+10, 2 endin instr 4 ;displays values from k-type channels k0 zkr 0 k1 zkr 1 k2 zkr 2 ; The total count for k0 is 30, since there are 10 ; control blocks per second and intruments 3 and 4 ; are on for 3 seconds. printf "k0 = %i\n",k0, k0 printf "k1 = %i\n",k1, k1 printf "k2 = %i\n",k2, k2 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 i 1 0 1 i 2 0 1 i 3 0 3 i 4 0 3 e </CsScore> </CsoundSynthesizer>
Credits
Author: Robin Whittle Australia May 1997
2449
2450
zamod
zamod Modulates one a-rate signal by a second one.
Description
Modulates one a-rate signal by a second one.
Syntax
ares zamod asig, kzamod
Performance
asig -- the input signal kzamod -- controls which za variable is used for modulation. A positive value means additive modulation, a negative value means multiplicative modulation. A value of 0 means no change to asig. zamod modulates one a-rate signal by a second one, which comes from a za variable. The location of the modulating variable is controlled by the i-rate or k-rate variable kzamod. This is the a-rate version of zkmod.
Examples
Here is an example of the zamod opcode. It uses the file zamod.csd [examples/zamod.csd].
2451
zaw asig, 1 endin ; Instrument #2 -- generates audio output. instr 2 ; Generate a simple sine wave. asin oscil 1, 440, 1 ; Modify the sine wave, multiply its amplitude by ; za variable #1. a1 zamod asin, -1 ; Generate the audio output. out a1 ; Clear the za variables, prepare them for ; another pass. zacl 0, 2 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for 2 seconds. 1 0 2 Play Instrument #2 for 2 seconds. 2 0 2
</CsScore> </CsoundSynthesizer>
See Also
zacl, ziw, ziwm
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2452
zar
zir Reads from a location in za space at a-rate.
Description
Reads from a location in za space at a-rate.
Syntax
ares zar kndx
Performance
kndx -- points to the za location to be read. zar reads the array of floats at kndx in za space, which are ksmps number of a-rate floats to be processed in a k cycle.
Examples
Here is an example of the zar opcode. It uses the file zar.csd [examples/zar.csd].
2453
; Read za variable #1. a1 zar 1 ; Generate audio output. out a1 ; Clear the za variables, get them ready for ; another pass. zacl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zarg, zir, zkr
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2454
zarg
zarg Reads from a location in za space at a-rate, adds some gain.
Description
Reads from a location in za space at a-rate, adds some gain.
Syntax
ares zarg kndx, kgain
Initialization
kndx -- points to the za location to be read. kgain -- multiplier for the a-rate signal.
Performance
zarg reads the array of floats at kndx in za space, which are ksmps number of a-rate floats to be processed in a k cycle. zarg also multiplies the a-rate signal by a k-rate value kgain.
Examples
Here is an example of the zarg opcode. It uses the file zarg.csd [examples/zarg.csd].
2455
; Send the sine waveform to za variable #1. zaw asin, 1 endin ; Instrument #2 -- generates audio output. instr 2 ; Read za variable #1, multiply its amplitude by 20,000. a1 zarg 1, 20000 ; Generate audio output. out a1 ; Clear the za variables, get them ready for ; another pass. zacl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zar, zir, zkr
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2456
zaw
zaw Writes to a za variable at a-rate without mixing.
Description
Writes to a za variable at a-rate without mixing.
Syntax
zaw asig, kndx
Performance
asig -- value to be written to the za location. kndx -- points to the zk or za location to which to write. zaw writes asig into the za variable specified by kndx. These opcodes are fast, and always check that the index is within the range of zk or za space. If not, an error is reported, 0 is returned, and no writing takes place.
Examples
Here is an example of the zaw opcode. It uses the file zaw.csd [examples/zaw.csd].
2457
zaw asin, 1 endin ; Instrument #2 -- generates audio output. instr 2 ; Read za variable #1. a1 zar 1 ; Generate the audio output. out a1 ; Clear the za variables, get them ready for ; another pass. zacl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zawm, ziw, ziwm, zkw, zkwm
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2458
zawm
zawm Writes to a za variable at a-rate with mixing.
Description
Writes to a za variable at a-rate with mixing.
Syntax
zawm asig, kndx [, imix]
Initialization
imix (optional, default=1) -- indicates if mixing should occur.
Performance
asig -- value to be written to the za location. kndx -- points to the zk or za location to which to write. These opcodes are fast, and always check that the index is within the range of zk or za space. If not, an error is reported, 0 is returned, and no writing takes place. zawm is a mixing opcode, it adds the signal to the current value of the variable. If no imix is specified, mixing always occurs. imix = 0 will cause overwriting like ziw, zkw, and zaw. Any other value will cause mixing. Caution: When using the mixing opcodes ziwm, zkwm, and zawm, care must be taken that the variables mixed to, are zeroed at the end (or start) of each k- or a-cycle. Continuing to add signals to them, can cause their values can drift to astronomical figures. One approach would be to establish certain ranges of zk or za variables to be used for mixing, then use zkcl or zacl to clear those ranges.
Examples
Here is an example of the zawm opcode. It uses the file zawm.csd [examples/zawm.csd].
2459
</CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Initialize the ZAK space. ; Create 1 a-rate variable and 1 k-rate variable. zakinit 1, 1 ; Instrument #1 -- a basic instrument. instr 1 ; Generate a simple sine waveform. asin oscil 15000, 440, 1 ; Mix the sine waveform with za variable #1. zawm asin, 1 endin ; Instrument #2 -- another basic instrument. instr 2 ; Generate another waveform with a different frequency. asin oscil 15000, 880, 1 ; Mix this sine waveform with za variable #1. zawm asin, 1 endin ; Instrument #3 -- generates audio output. instr 3 ; Read za variable #1, containing both waveforms. a1 zar 1 ; Generate the audio output. out a1 ; Clear the za variables, get them ready for ; another pass. zacl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1 Play Instrument #3 for one second. 3 0 1
</CsScore> </CsoundSynthesizer>
See Also
zaw, ziw, ziwm, zkw, zkwm
Credits
Author: Robin Whittle Australia May 1997 2460
2461
zfilter2
zfilter2 Performs filtering using a transposed form-II digital filter lattice with radial pole-shearing and angular pole-warping.
Description
General purpose custom filter with time-varying pole control. The filter coefficients implement the following difference equation: (1)*y(n) = b0*x[n] + b1*x[n-1] +...+ bM*x[n-M] - a1*y[n-1] -...- aN*y[n-N]
the system function for which is represented by: B(Z) b0 + b1*Z-1 + ... + bM*Z-M H(Z) = ---- = -------------------------A(Z) 1 + a1*Z-1 + ... + aN*Z-N
Syntax
ares zfilter2 asig, kdamp, kfreq, iM, iN, ib0, ib1, ..., ibM, \ ia1,ia2, ..., iaN
Initialization
At initialization the number of zeros and poles of the filter are specified along with the corresponding zero and pole coefficients. The coefficients must be obtained by an external filter-design application such as Matlab and specified directly or loaded into a table via GEN01. With zfilter2, the roots of the characteristic polynomials are solved at initialization so that the pole-control operations can be implemented efficiently.
Performance
The filter2 opcodes perform filtering using a transposed form-II digital filter lattice with no time-varying control. zfilter2 uses the additional operations of radial pole-shearing and angular pole-warping in the Z plane. Pole shearing increases the magnitude of poles along radial lines in the Z-plane. This has the affect of altering filter ring times. The k-rate variable kdamp is the damping parameter. Positive values (0.01 to 0.99) increase the ring-time of the filter (hi-Q), negative values (-0.01 to -0.99) decrease the ring-time of the filter, (lo-Q). Pole warping changes the frequency of poles by moving them along angular paths in the Z plane. This operation leaves the shape of the magnitude response unchanged but alters the frequencies by a constant factor (preserving 0 and p). The k-rate variable kfreq determines the frequency warp factor. Positive values (0.01 to 0.99) increase frequencies toward p and negative values (-0.01 to -0.99) decrease frequencies toward 0. 2462
Since filter2 implements generalized recursive filters, it can be used to specify a large range of general DSP algorithms. For example, a digital waveguide can be implemented for musical instrument modeling using a pair of delayr and delayw opcodes in conjunction with the filter2 opcode.
Examples
A controllable second-order IIR filter operating on an a-rate signal:
a1 zfilter2 asig, kdamp, kfreq, 1, 2, 1, ia1, ia2 ;; controllable a-rate IIR filter
See Also
filter2
Credits
Author: Michael A. Casey M.I.T. Cambridge, Mass. 1997 New in Version 3.47
2463
zir
zir Reads from a location in zk space at i-rate.
Description
Reads from a location in zk space at i-rate.
Syntax
ir zir indx
Initialization
indx -- points to the zk location to be read.
Performance
zir reads the signal at indx location in zk space.
Examples
Here is an example of the zir opcode. It uses the file zir.csd [examples/zir.csd].
2464
i1 zir 1 ; Print out the value of zk variable #1. print i1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zar, zarg, zkr
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2465
ziw
ziw Writes to a zk variable at i-rate without mixing.
Description
Writes to a zk variable at i-rate without mixing.
Syntax
ziw isig, indx
Initialization
isig -- initializes the value of the zk location. indx -- points to the zk or za location to which to write.
Performance
ziw writes isig into the zk variable specified by indx. These opcodes are fast, and always check that the index is within the range of zk or za space. If not, an error is reported, 0 is returned, and no writing takes place.
Examples
Here is an example of the ziw opcode. It uses the file ziw.csd [examples/ziw.csd].
2466
; Set zk variable #1 to 64.182. ziw 64.182, 1 endin ; Instrument #2 -- prints out zk variable #1. instr 2 ; Read zk variable #1 at i-rate. i1 zir 1 ; Print out the value of zk variable #1. print i1 endin </CsInstruments> <CsScore> ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zaw, zawm, ziwm, zkw, zkwm
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2467
ziwm
ziwm Writes to a zk variable to an i-rate variable with mixing.
Description
Writes to a zk variable to an i-rate variable with mixing.
Syntax
ziwm isig, indx [, imix]
Initialization
isig -- initializes the value of the zk location. indx -- points to the zk location location to which to write. imix (optional, default=1) -- indicates if mixing should occur.
Performance
ziwm is a mixing opcode, it adds the signal to the current value of the variable. If no imix is specified, mixing always occurs. imix = 0 will cause overwriting like ziw, zkw, and zaw. Any other value will cause mixing. Caution: When using the mixing opcodes ziwm, zkwm, and zawm, care must be taken that the variables mixed to, are zeroed at the end (or start) of each k- or a-cycle. Continuing to add signals to them, can cause their values can drift to astronomical figures. One approach would be to establish certain ranges of zk or za variables to be used for mixing, then use zkcl or zacl to clear those ranges.
Examples
Here is an example of the ziwm opcode. It uses the file ziwm.csd [examples/ziwm.csd].
2468
sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Initialize the ZAK space. ; Create 1 a-rate variable and 1 k-rate variable. zakinit 1, 1 ; Instrument #1 -- a simple instrument. instr 1 ; Add 20.5 to zk variable #1. ziwm 20.5, 1 endin ; Instrument #2 -- another simple instrument. instr 2 ; Add 15.25 to zk variable #1. ziwm 15.25, 1 endin ; Instrument #3 -- prints out zk variable #1. instr 3 ; Read zk variable #1 at i-rate. i1 zir 1 ; Print out the value of zk variable #1. ; It should be 35.75 (20.5 + 15.25) print i1 endin </CsInstruments> <CsScore> ; i ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1 Play Instrument #3 for one second. 3 0 1
</CsScore> </CsoundSynthesizer>
See Also
zaw, zawm, ziw, zkw, zkwm
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2469
zkcl
zkcl Clears one or more variables in the zk space.
Description
Clears one or more variables in the zk space.
Syntax
zkcl kfirst, klast
Performance
ksig -- the input signal kfirst -- first zk or za location in the range to clear. klast -- last zk or za location in the range to clear. zkcl clears one or more variables in the zk space. This is useful for those variables which are used as accumulators for mixing k-rate signals at each cycle, but which must be cleared before the next set of calculations.
Examples
Here is an example of the zkcl opcode. It uses the file zkcl.csd [examples/zkcl.csd].
2470
; Add the linear signal to zk variable #1. zkw kline, 1 endin ; Instrument #2 -- generates audio output. instr 2 ; Read zk variable #1. kfreq zkr 1 ; Use the value of zk variable #1 to vary ; the frequency of a sine waveform. a1 oscil 20000, kfreq, 1 ; Generate the audio output. out a1 ; Clear the zk variables, get them ready for ; another pass. zkcl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for three seconds. 1 0 3 Play Instrument #2 for three seconds. 2 0 3
</CsScore> </CsoundSynthesizer>
See Also
zacl, zkwm, zkw, zkmod, zkr
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2471
zkmod
zkmod Facilitates the modulation of one signal by another.
Description
Facilitates the modulation of one signal by another.
Syntax
kres zkmod ksig, kzkmod
Performance
ksig -- the input signal kzkmod -- controls which zk variable is used for modulation. A positive value means additive modulation, a negative value means multiplicative modulation. A value of 0 means no change to ksig. kzkmod can be i-rate or k-rate zkmod facilitates the modulation of one signal by another, where the modulating signal comes from a zk variable. Either additive or mulitiplicative modulation can be specified.
Examples
Here is an example of the zkmod opcode. It uses the file zkmod.csd [examples/zkmod.csd].
2472
zkw kline, 1 endin ; Instrument #2 -- generates audio output. instr 2 ; Create a k-rate signal modulated the jitter opcode. kamp init 20 kcpsmin init 40 kcpsmax init 60 kjtr jitter kamp, kcpsmin, kcpsmax ; Get the frequency values from zk variable #1. kfreq zkr 1 ; Add the the frequency values in zk variable #1 to ; the jitter signal. kjfreq zkmod kjtr, 1 ; Use a simple sine waveform for the left speaker. aleft oscil 20000, kfreq, 1 ; Use a sine waveform with jitter for the right speaker. aright oscil 20000, kjfreq, 1 ; Generate the audio output. outs aleft, aright ; Clear the zk variables, prepare them for ; another pass. zkcl 0, 2 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for 2 seconds. 1 0 2 Play Instrument #2 for 2 seconds. 2 0 2
</CsScore> </CsoundSynthesizer>
See Also
zamod, zkcl, zkr, zkwm, zkw
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2473
zkr
zkr Reads from a location in zk space at k-rate.
Description
Reads from a location in zk space at k-rate.
Syntax
kres zkr kndx
Initialization
kndx -- points to the zk location to be read.
Performance
zkr reads the array of floats at kndx in zk space.
Examples
Here is an example of the zkr opcode. It uses the file zkr.csd [examples/zkr.csd].
2474
; Instrument #2 -- generates audio output. instr 2 ; Read zk variable #1. kfreq zkr 1 ; Use the value of zk variable #1 to vary ; the frequency of a sine waveform. a1 oscil 20000, kfreq, 1 ; Generate the audio output. out a1 ; Clear the zk variables, get them ready for ; another pass. zkcl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for one second. 1 0 1 Play Instrument #2 for one second. 2 0 1
</CsScore> </CsoundSynthesizer>
See Also
zar, zarg, zir, zkcl, zkmod, zkwm, zkw
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2475
zkw
zkw Writes to a zk variable at k-rate without mixing.
Description
Writes to a zk variable at k-rate without mixing.
Syntax
zkw ksig, kndx
Performance
ksig -- value to be written to the zk location. kndx -- points to the zk or za location to which to write. zkw writes ksig into the zk variable specified by kndx.
Examples
Here is an example of the zkw opcode. It uses the file zkw.csd [examples/zkw.csd].
2476
instr 2 ; Read zk variable #1. kfreq zkr 1 ; Use the value of zk variable #1 to vary ; the frequency of a sine waveform. a1 oscil 20000, kfreq, 1 ; Generate the audio output. out a1 ; Clear the zk variables, get them ready for ; another pass. zkcl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i e Play Instrument #1 for two seconds. 1 0 2 Play Instrument #2 for two seconds. 2 0 2
</CsScore> </CsoundSynthesizer>
See Also
zaw, zawm, ziw, ziwm, zkr, zkwm
Credits
Author: Robin Whittle Australia May 1997 New in version 3.45 Example written by Kevin Conder.
2477
zkwm
zkwm Writes to a zk variable at k-rate with mixing.
Description
Writes to a zk variable at k-rate with mixing.
Syntax
zkwm ksig, kndx [, imix]
Initialization
imix (optional, default=1) -- indicates if mixing should occur.
Performance
ksig -- value to be written to the zk location. kndx -- points to the zk or za location to which to write. zkwm is a mixing opcode, it adds the signal to the current value of the variable. If no imix is specified, mixing always occurs. imix = 0 will cause overwriting like ziw, zkw, and zaw. Any other value will cause mixing. Caution: When using the mixing opcodes ziwm, zkwm, and zawm, care must be taken that the variables mixed to, are zeroed at the end (or start) of each k- or a-cycle. Continuing to add signals to them, can cause their values can drift to astronomical figures. One approach would be to establish certain ranges of zk or za variables to be used for mixing, then use zkcl or zacl to clear those ranges.
Examples
Here is an example of the zkwm opcode. It uses the file zkwm.csd [examples/zkwm.csd].
2478
sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Initialize the ZAK space. ; Create 1 a-rate variable and 1 k-rate variable. zakinit 1, 1 ; Instrument #1 -- a basic instrument. instr 1 ; Generate a k-rate signal. ; The signal goes from 30 to 20,000 then back to 30. kramp linseg 30, p3/2, 20000, p3/2, 30 ; Mix the signal into the zk variable #1. zkwm kramp, 1 endin ; Instrument #2 -- another basic instrument. instr 2 ; Generate another k-rate signal. ; This is a low frequency oscillator. klfo lfo 3500, 2 ; Mix this signal into the zk variable #1. zkwm klfo, 1 endin ; Instrument #3 -- generates audio output. instr 3 ; Read zk variable #1, containing a mix of both signals. kamp zkr 1 ; Create a sine waveform. Its amplitude will vary ; according to the values in zk variable #1. a1 oscil kamp, 880, 1 ; Generate the audio output. out a1 ; Clear the zk variable, get it ready for ; another pass. zkcl 0, 1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; i ; i ; i e Play Instrument #1 for 5 seconds. 1 0 5 Play Instrument #2 for 5 seconds. 2 0 5 Play Instrument #3 for 5 seconds. 3 0 5
</CsScore> </CsoundSynthesizer>
See Also
zaw, zawm, ziw, ziwm, zkcl, zkw, zkr
Credits
Author: Robin Whittle Australia 2479
2480
2481
Description
This causes score time to be advanced by a specified amount without producing sound samples.
Syntax
a p1 p2 p3
Performance
p1 p2 p3 p4 p5 p6 . . Carries no meaning. Usually zero. Action time, in beats, at which advance is to begin. Number of beats to advance without producing sound. | | These carry no meaning. |
Special Considerations
This statement allows the beat count within a score section to be advanced without generating intervening sound samples. This can be of use when a score section is incomplete (the beginning or middle is missing) and the user does not wish to generate and listen to a lot of silence. p2, action time, and p3, number of beats, are treated as in i statements, with respect to sorting and modification by t statements. An a statement will be temporarily inserted in the score by the Score Extract feature when the extracted segment begins later than the start of a Section. The purpose of this is to preserve the beat count and time count of the original score for the benefit of the peak amplitude messages which are reported on the user console. Whenever an a statement is encountered by a performing orchestra, its presence and effect will be reported on the user's console.
2482
b Statement
b Statement This statement resets the clock.
Description
This statement resets the clock.
Syntax
b p1
Performance
p1 -- Specifies how the clock is to be set.
Special Considerations
p1 is the number of beats by which p2 values of subsequent i statements are modified. If p1 is positive, the clock is reset forward, and subsequent notes appear later, the number of beats specified by p1 being added to the note's p2. If p1 is negative, the clock is reset backward, and subsequent notes appear earlier, the number of beats specified by p1 being subtracted from the note's p2. There is no cumulative affect. The clock is reset with each b statement. If p1 = 0, the clock is returned to its original position, and subsequent notes appear at their specified p2.
Examples
i1 i1 b 5 i2 i2 b -1 i3 i3 b 0 i4 0 10 1 2 3 5.5 10 2 888 1 1 2 1 200 440 480 3.1415 1.1111 7 ; set the clock "forward" ; start time = 6 ; start time = 7 ; set the clock back ; start time = 2 ; start time = 4.5 ; reset clock to normal ; start time = 10
Credits
Explanation suggested and example provided by Paul Winkler. (Csound Version 4.07)
2483
e Statement
e statement This statement may be used to mark the end of the last section of the score.
Description
This statement may be used to mark the end of the last section of the score.
Syntax
e [time]
Performance
The first p-field time is optional and if present determines the end time (length in beats) of the final section of the score. This time must be after the end of the last event otherwise it will have no effect. "Always on" instruments will end at the given time. Extending the section in this way is useful to avoid prematurely cutting off reverb tails or other effects.
Special Considerations
The e statement is contextually identical to an s statement. Additionally, the e statement terminates all signal generation (including indefinite performance) and closes all input and output files. If an e statement occurs before the end of a score, all subsequent score lines will be ignored. The e statement is optional in a score file yet to be sorted. If a score file has no e statement, then Sort processing will supply one.
2484
Description
This causes a GEN subroutine to place values in a stored function table for use by instruments.
Syntax
f p1 p2 p3 p4 p5 ... PMAX
Performance
p1 -- Table number by which the stored function will be known. A negative number requests that the table be destroyed. p2 -- Action time of function generation (or destruction) in beats. p3 -- Size of function table (i.e. number of points) Must be a power of 2, or a power-of-2 plus 1 if this number is positive. Maximum table size is 16777216 (224) points. p4 -- Number of the GEN routine to be called (see GEN ROUTINES). A negative value will cause rescaling to be omitted. p5 ... PMAX -- Parameters whose meaning is determined by the particular GEN routine.
Special Considerations
Function tables are arrays of floating-point values. You can create a simple sine wave using the line: f 1 0 1024 10 1 This table uses GEN10 to fill the table. Historically, due to older platform constraints, Csound could only accept tables whose size was a power of two. This limitation has been removed in recent versions, and you can freely create tables of any size. However, to create a table whose size is not a power of two (or power of two plus one), you must specify the size as a negative number.
Note
Not all opcodes accept tables whose size is not a power of two, since they may depend on this for internal optimization. For arrays whose length is a power of 2, space allocation always provides for 2n points plus an additional guard point. The guard point value, used during interpolated lookup, can be automatically set to reflect the table's purpose: If size is an exact power of 2, the guard point will be a copy of the first point; this is appropriate for interpolated wrap-around lookup as in oscili, etc., and should even be used for non-interpolating oscil for safe consistency. If size is set to 2 n + 1, the guard point value automatically extends the contour of table values; this is appropriate for single-scan functions such in envplx, oscil1, 2485
oscil1i, etc. The size of the table is used as a code to tell Csound how to fill this guard-point. If the size is exactly power-of-two, then the guard point contains a copy of the first point on the table. If the size is powerof-two plus one, Csound will extend the contour of the function stored in the table for one extra point. Table space is allocated in primary memory, along with instrument data space. The maximum table number used to be 200. This has been changed to be limited by memory only. (Currently there is an internal soft limit of 300, this is automatically extended as required.) An existing function table can be removed by an f statement containing a negative p1 and an appropriate action time. A function table can also be removed by the generation of another table with the same p1. Functions are not automatically erased at the end of a score section. p2 action time is treated in the same way as in i statements with respect to sorting and modification by t statements. If an f statement and an i statement have the same p2, the sorter gives the f statement precedence so that the function table will be available during note initialization.
Warning
The maximum number of p-fields accepted in the score is determined by PMAX (a compilation time varible). PMAX is currently set to 1000. This may discard values entered when using GEN02. To overcome this, use GEN23 or GEN28 to read the values from a file. An f 0 statement (zero p1, positive p2) may be used to create an action time with no associated action. Such time markers are useful for padding out a score section (see s statement) and for letting Csound run from realtime events only (e.g. using only MIDI input without score events). The time given is the number of seconds Csound will run. If you want Csound to run for 10 hours, use: f0 36000 The simplest way to fill a table (f1) with 0's is: f1 0 xx 2 0 where xx = table size. The simplest way to fill a table (f1) with *any* single value is: f1 0 xx -7 yy xx yy where xx = table size and yy = any single value In both of the above examples, table size (p3) must be a power of 2 or power-of-2 plus 1.
See also
GEN ROUTINES
Credits
Updated August 2002 thanks to a note from Rasmus Ekman. There is no longer a hard limit of 200 function tables.
2486
Description
This statement calls for an instrument to be made active at a specific time and for a certain duration. The parameter field values are passed to that instrument prior to its initialization, and remain valid throughout its Performance.
Syntax
i p1 p2 p3 p4 ...
Initialization
p1 -- Instrument number, usually a non-negative integer. An optional fractional part can provide an additional tag for specifying ties between particular notes of consecutive clusters. A negative p1 (including tag) can be used to turn off a particular held note. p2 -- Starting time in arbitrary units called beats. p3 -- Duration time in beats (usually positive). A negative value will initiate a held note (see also ihold). A negative value can also be used for 'always on' instruments like reverberation. These notes are not terminated by s statements A zero value will invoke an initialization pass without performance (see also instr). p4 ... -- Parameters whose significance is determined by the instrument.
Performance
Beats are evaluated as seconds, unless there is a t statement in this score section or a -t flag in the command-line. Starting or action times are relative to the beginning of a section ( see s statement), which is assigned time 0. Note statements within a section may be placed in any order. Before being sent to an orchestra, unordered score statements must first be processed by Sorter, which will reorder them by ascending p2 value. Notes with the same p2 value will be ordered by ascending p1; if the same p1, then by ascending p3. Notes may be stacked, i.e., a single instrument can perform any number of notes simultaneously. (The necessary copies of the instrument's data space will be allocated dynamically by the orchestra loader.) Each note will normally turn off when its p3 duration has expired, or on receipt of a MIDI noteoff signal. An instrument can modify its own duration either by changing its p3 value during note initialization, or by prolonging itself through the action of a linenr or xtratim unit. An instrument may be turned on and left to perform indefinitely either by giving it a negative p3 or by including an ihold in its i-time code. If a held note is active, an i statement with matching p1 will not cause a new allocation but will take over the data space of the held note. The new pfields (including p3) will now be in effect, and an i-time pass will be executed in which the units can either be newly initialized or allowed to continue as required for a tied note (see tigoto). A held note may be succeeded either 2487
by another held note or by a note of finite duration. A held note will continue to perform across section endings (see s statement). It is halted only by turnoff or by an i statement with negative matching p1 or by an e statement. It is possible to have multiple instances (usually, but not necessarily, notes of different pitches) of the same instrument, held simultaneously, via negative p3 values. The instrument can then be fed new parameters from the score. This is useful for avoiding long hard-coded linsegs, and can be accomplished by adding a decimal part to the instrument number. For example, to hold three copies of instrument 10 in a simple chord:
0 0 0
-1 -1 -1
Subsequent i statements can refer to the same sounding note instances, and if the instrument definition is done properly, the new p-fields can be used to alter the character of the notes in progress. For example, to bend the previous chord up an octave and release it:
1 1 1
1 1 1
Tip
When turning off notes, bear in mind that i 1.1 == i 1.10 and i 1.1 != i 1.01. The maximum number of decimal places that can be used depends on the precision Csound was compiled with (See Csound Double (64-bit) vs. Float (32-bit)) The instrument definition has to take this into account, however, especially if clicks are to be avoided (see the example below). Note that the decimal instrument number notation cannot be used in conjunction with real-time MIDI. In this case, the instrument would be monophonic while a note was held. Notes being tied to previous instances of the same instrument, should skip most initialization by means of tigoto, except for the values entered in score. For example, all table reading opcodes in the instrument, should usually be skipped, as they store their phase internally. If this is suddenly changed, there will be audible clicks in the output. Note that many opcodes (such as delay and reverb) are prepared for optional initialization. To use this feature, the tival opcode is suitable. Therefore, they need not be hidden by a tigoto jump. Beginning with Csound version 3.53, strings are recognized in p-fields for opcodes that accept them (convolve, adsyn, diskin, etc.). There may be only one string per score line. You can also turnoff notes from the score by using a negative number for the instrument (p1). This is equivalent to using the turnoff2 opcode. When a note is turned off from the score, it is allowed to release (if xtratim or opcodes with release section like linenr are used) and only notes with the same fractional part are turned off. Also, only the last instance of the instrument will be turned off, so there have to be as many negative instrument numbers as positive ones for all notes to be turned off.
i 1.1
300
8.00
2488
1 1 1
notice that p-fields after p2 will be ignored if instrument number is negative -1.1 3 1 4.00 -1.2 4 51 4.04 -1.3 5 1 4.07 -1.3 6 10 4.09
Special Considerations
The maximum instrument number used to be 200. This has been changed to be limited by memory only (currently there is an internal soft limit of 200; this is automatically extended as required).
Examples
Here is an instrument which can find out whether it is tied to a previous note (tival returns 1), and whether it is held (negative p3). Attack and release are handled accordingly:
instr 10 icps iportime iamp0 iamp1 iamp2 itie if itie iamp0 nofadein: if p3 iamp2 init init init init init tival == 1 init < 0 init cpspch(p4) abs(p3)/7 p5 p5 p5 igoto nofadein 0 igoto nofadeout 0 ; Get target pitch from score event ; Portamento time dep on note length ; Set default amps
nofadeout: ; Now do amp from the set values: kamp linseg iamp0, .03, iamp1, abs(p3)-.03, iamp2 ; Skip rest of initialization on tied note: tigoto tieskip kcps kcps kpw ar init port oscil vco icps icps, iportime, icps ; Init pitch for untied note ; Drift towards target pitch
.4, rnd(1), 1, rnd(.7) ; A simple triangle-saw oscil kamp, kcps, 3, kpw+.5, 1, 1/icps
; (Used in testing - one may set ipch to cpspch(p4+2) ; and view output spectrum) ; ar oscil kamp, kcps, 1 out tieskip: endin ar ; Skip some initialization on tied note
f1
0 8192 10 1
; Sine
2489
0 0 0 1 1 1 2 2 2
-1 -1 -1 -1 -1 -1 1 1 1
10000
Credits
Additional text (Csound Version 4.07) explaining tied notes, edited by Rasmus Ekman from a note by David Kirsh, posted to the Csound mailing list. Example instrument by Rasmus Ekman. Updated August 2002 thanks to a note from Rasmus Ekman. There is no longer a hard limit of 200 instruments.
2490
Description
Sets a named mark in the score, which can be used by an n statement.
Syntax
m p1
Initialization
p1 -- Name of mark.
Performance
This can be helpful in setting a up verse and chorus structure in the score. Names may contain letters and numerals. For example, the following score:
m foo i1 0 1 i1 1 1.5 i1 2.5 2 s i1 0 10 s n foo e
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April, 1998 2491
2492
n Statement
n Repeats a section.
Description
Repeats a section from the referenced m statement.
Syntax
n p1
Initialization
p1 -- Name of mark to repeat.
Performance
This can be helpful in setting a up verse and chorus structure in the score. Names may contain letters and numerals. For example, the following score:
m foo i1 0 1 i1 1 1.5 i1 2.5 2 s i1 0 10 s n foo e
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April 1998 2493
2494
q Statement
q statement This statement may be used to quiet an instrument.
Description
This statement may be used to quiet an instrument.
Syntax
q p1 p2 p3
Performance
p1 -- Instrument number to mute/unmute. p2 -- Action time in beats. p3 -- determines whether the instrument is muted/unmuted. The value of 0 means the instrument is muted, other values mean it is unmuted. Note that this does not affect instruments that are already running at time p2. It blocks any attempt to start one afterwards.
2495
Description
Starts a repeated section, which lasts until the next s, r or e statement.
Syntax
r p1 p2
Initialization
p1 -- Number of times to repeat the section. p2 -- Macro(name) to advance with each repetition (optional).
Performance
In order that the sections may be more flexible than simple editing, the macro named p2 is given the value of 1 for the first time through the section, 2 for the second, and 3 for the third. This can be used to change p-field parameters, or ignored.
Warning
Because of serious problems of interaction with macro expansion, sections must start and end in the same file, and not in a macro.
Examples
Here is an example of the r statement. It uses the file r.sco [examples/r.csd].
2496
kreps = p4 ; The score's p5 parameter has our note's frequency. kcps = p5 ; Print the number of repeats. printks "Repeated %i time(s).\\n", 1, kreps ; Generate a nice beep. a1 oscil 20000, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 ; We'll repeat this section 6 times. Each time it ; is repeated, its macro REPS_MACRO is incremented. r6 REPS_MACRO ; ; ; i i i i Play Instrument #1. p4 = the r statement's macro, REPS_MACRO. p5 = the frequency in cycles per second. 1 00.10 00.10 $REPS_MACRO 1760 1 00.30 00.10 $REPS_MACRO 880 1 00.50 00.10 $REPS_MACRO 440 1 00.70 00.10 $REPS_MACRO 220
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK April, 1998 New in Csound version 3.48 Example written by Kevin Conder
2497
s Statement
s Marks the end of a section.
Description
The s statement marks the end of a section.
Syntax
s [time]
Initialization
The first p-field time is optional and if present determines the end time (length in beats) of the section. This time must be after the end of the last event in the section otherwise it will have no effect. This can be used to create a pause before the beginning of the next section or to allow "always on" instruments such as effects to play by themselves for some length of time.
Performance
Sorting of the i statement, f statement and a statement by action time is done section by section. Time warping for the t statement is done section by section. All action times within a section are relative to its beginning. A section statement establishes a new relative time of 0, but has no other reinitializing effects (e.g. stored function tables are preserved across section boundaries). A section is considered complete when all action times and finite durations have been satisfied (i.e., the "length" of a section is determined by the last occurring action or turn-off). A section can be extended by the use of an f0 statement or by supplying the optional p1 value to the s statement. A section ending automatically invokes a purge of inactive instrument and data spaces.
Note
Since score statements are processed section by section, the amount of memory required depends on the maximum number of score statements in a section. Memory allocation is dynamic, and the user will be informed as extra memory blocks are requested during score processing. For the end of the final section of a score, the s statement is optional; the e statement may be used instead.
2498
Description
This statement sets the tempo and specifies the accelerations and decelerations for the current section. This is done by converting beats into seconds.
Syntax
t p1 p2 p3 p4 ... (unlimited)
Initialization
p1 -- Must be zero. p2 -- Initial tempo on beats per minute. p3, p5, p7,... -- Times in beats (in non-decreasing order). p4, p6, p8,... -- Tempi for the referenced beat times.
Performance
Time and Tempo-for-that-time are given as ordered couples that define points on a "tempo vs. time" graph. (The time-axis here is in beats so is not necessarily linear.) The beat-rate of a Section can be thought of as a movement from point to point on that graph: motion between two points of equal height signifies constant tempo, while motion between two points of unequal height will cause an accelarando or ritardando accordingly. The graph can contain discontinuities: two points given equal times but different tempi will cause an immediate tempo change. Motion between different tempos over non-zero time is inverse linear. That is, an accelerando between two tempos M1 and M2 proceeds by linear interpolation of the single-beat durations from 60/M1 to 60/M2. The first tempo given must be for beat 0. A tempo, once assigned, will remain in effect from that time-point unless influenced by a succeeding tempo, i.e. the last specified tempo will be held to the end of the section. A t statement applies only to the score section in which it appears. Only one t statement is meaningful in a section; it can be placed anywhere within that section. If a score section contains no t statement, then beats are interpreted as seconds (i.e. with an implicit t 0 60 statement). N.B. If the CSound command includes a -t flag, the interpreted tempo of all score t statements will be overridden by the command-line tempo.
2499
v Statement
v Provides for locally variable time warping of score events.
Description
The v statement provides for locally variable time warping of score events.
Syntax
v p1
Initialization
p1 -- Time warp factor (must be positive).
Performance
The v statement takes effect with the following i statement, and remains in effect until the next v statement, s statement, or e statement.
Examples
The value of p1 is used as a multiplier for the start times (p2) of subsequent i statements.
i1 v2 i1
0 1 1 1
; note1 ; note2
In this example, the second note occurs two beats after the first note, and is twice as long. Although the v statement is similar to the t statement, the v statement is local in operation. That is, v affects only the following notes, and its effect may be cancelled or changed by another v statement. Carried values are unaffected by the v statement (see Carry).
i1 v2 i1 i1 v1 i1 i1 e
0 1 1 . 2 . 3 . 4 .
In this example, note3 and note5 occur simultaneously, while note4 actually occurs before note3, that is, at its original place. Durations are unaffected.
2500
i1 v2 i. i.
0 1 + . . .
2501
x Statement
x Skip the rest of the current section.
Description
This statement may be used to skip the rest of the current section.
Syntax
x anything
Initialization
All pfields are ignored.
2502
{ Statement
{ Begins a non-sectional, nestable loop.
Description
The { and } statements can be used to repeat a group of score statements. These loops do not constitute independent score sections and thus may repeat events within the same section. Multiple loops may overlap in time or be nested within each other.
Syntax
{ p1 p2
Initialization
p1 -- Number of times to repeat the loop. p2 -- A macro name that is automatically defined at the beginning of the loop and whose value is advanced with each repetition (optional). The initial value is zero and the final value is (p1 - 1).
Performance
The { statement is used in conjunction with the } statement to define repeating groups of other score events. A score loop begins with the { statement which defines the number of repetitions and a unique macro name that will contain the current loop counter. The body of a loop can contain any number of other events (including sectional breaks) and is terminated by a } statement on its own line. The } statement takes no parameters. The use of the term "loop" here does not imply any sort of temporal succession to the loop iterations. In other words, the p2 values of the events inside of the loop are not automatically incremented by the length of the loop in each repetition. This is actually an advantage since it allows groups of simulataneous events to be easily defined as well. The loop macro can be used along with score expressions to increase the start times of events or to vary the events in any other way desired for each iteration. The macro is incremented by one for each repetition. Note that unlike the r statement, the value of the macro the first time through the loop is zero (0), not one (1). Therefore the final value is one less than the number of repetitions. Score loops are a very powerful tool. While similar to the section repeat facility (the r statement), their chief advantage is that the score events in successive iterations of the loop are not separated by a section termination. Thus, it is possible to create multiple loops that overlap in time. Loops also can be nested within each other to a depth of 39 levels.
Warning
Because of serious problems of interaction with macro expansion, loops must start and end in the same file, and not in a macro.
Examples
Here are some examples of the { and } statements. 2503
is interpreted as
i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 i1 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75 0.2 . . 0.2 . . 0.2 . . 0.2 . . 220 440 880 220 440 880 220 440 880 220 440 880
is interpreted as
i1 i1 i1 i1 i1 i1 i1 i1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 100 200 300 400 500 600 700 800
Here is a full example of the { and } statements. It uses the file leftbrace.csd [examples/leftbrace.csd].
Example 731. An example of nested loops to create several inharmonic sine clusters.
<CsoundSynthesizer> <CsOptions>
2504
; Select audio/midi flags here according to platform ; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o abs.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> nchnls = 2 gaReverbSend init 0 ; a simple instr 1 idur iamp ifreq aenv aosc endin ; global reverb instrument instr 2 al, ar reverbsc gaReverbSend, gaReverbSend, 0.85, 12000 outs gaReverbSend+al, gaReverbSend+ar clear gaReverbSend endin </CsInstruments> <CsScore> f1 0 4096 10 1 { 4 CNT { 8 PARTIAL ; start time i1 } } i2 0 6 e </CsScore> </CsoundSynthesizer> [0.5 * $CNT.] sine wave partial = = = linseg oscili vincr p3 p4 p5 0.0, 0.1*idur, iamp, 0.6*idur, iamp, 0.3*idur, 0.0 aenv, ifreq, 1 gaReverbSend, aosc
frequency
Credits
Author: Gabriel Maldonado New in Csound version 3.52 (?). (Fixed in version 5.08).
2505
} Statement
} Ends a non-sectional, nestable loop.
Description
The { and } statements can be used to repeat a group of score statements. These loops do not constitute independent score sections and thus may repeat events within the same section. Multiple loops may overlap in time or be nested within each other.
Syntax
}
Initialization
All pfields are ignored.
Performance
The } statement is used in conjunction with the { statement to define repeating groups of other score events. A score loop begins with the { statement which defines the number of repetitions and a unique macro name that will contain the current loop counter. The body of a loop can contain any number of other events (including sectional breaks) and is terminated by a } statement on its own line. The } statement takes no parameters. See the documentation for the { statement for further details.
Examples
See the examples in the entry for the { statement.
Credits
Author: Gabriel Maldonado New in Csound version 3.52 (?). (Fixed in version 5.08).
GEN Routines
GEN routines are used as data generators for function tables. When a function table is created using the f score statement the GEN function is given as its fourth argument. A negative GEN number implies that the function is not rescaled, and maintains its original values.
Sine/Cosine Generators:
GEN09 - Composite waveforms made up of weighted sums of simple sinusoids.
2506
GEN10 - Composite waveforms made up of weighted sums of simple sinusoids. GEN11 - Additive set of cosine partials. GEN19 - Composite waveforms made up of weighted sums of simple sinusoids. GEN30 - Generates harmonic partials by analyzing an existing table. GEN33 - Generate composite waveforms by mixing simple sinusoids. GEN34 - Generate composite waveforms by mixing simple sinusoids.
2508
2509
GEN01
GEN01 Transfers data from a soundfile into a function table.
Description
This subroutine transfers data from a soundfile into a function table.
Syntax
f# time size 1 filcod skiptime format channel
Performance
size -- number of points in the table. Ordinarily a power of 2 or a power-of-2 plus 1 (see f statement); the maximum tablesize is 16777216 (224) points. The allocation of table memory can be deferred by setting this parameter to 0; the size allocated is then the number of points in the file (probably not a powerof-2), and the table is not usable by normal oscillators, but it is usable by a loscil unit. The soundfile can also be mono or stereo. filcod -- integer or character-string denoting the source soundfile name. An integer denotes the file soundin.filcod ; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the file is sought first in the current directory, then in that given by the environment variable SSDIR (if defined) then by SFDIR. See also soundin. skiptime -- begin reading at skiptime seconds into the file. channel -- channel number to read in. 0 denotes read all channels. format -- specifies the audio data-file format: 1 - 8-bit signed character 4 - 16-bit short integers 2 - 8-bit A-law bytes 5 - 32-bit long integers 3 - 8-bit U-law bytes 6 - 32-bit floats
If format = 0 the sample format is taken from the soundfile header, or by default from the CSound -o command-line flag.
Note
Reading stops at end-of-file or when the table is full. Table locations not filled will contain zeros. If p4 is positive, the table will be post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped.
2510
Examples
Here is a simple example of the GEN01 routine. It uses the files gen01.csd [examples/gen01.csd], and beats.wav [examples/beats.wav]. It uses the audio file beats.wav, here is its diagram:
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 1 ifn = 1 ibas = 1 ; Play the audio sample stored in Table #1. a1 loscil kamp, kcps, ifn, ibas out a1 endin </CsInstruments> <CsScore> ; Table #1: read an audio file (using GEN01). f 1 0 131072 1 "beats.wav" 0 4 0 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here is another example of the GEN01 routine. Csound will automatically compute the tablesize because we have set it to 0. This example uses the files gen01computed.csd [examples/gen01computed.csd], and beats.wav [examples/beats.wav].
2511
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o gen01computed.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 1 ifn = 1 ibas = 1 ; Play the audio sample stored in Table #1. a1 loscil kamp, kcps, ifn, ibas out a1 endin </CsInstruments> <CsScore> ; Table #1: an audio file (using GEN01). ; Since our table size is 0, Csound will compute it. f 1 0 0 1 "beats.wav" 0 0 0 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Examples written by Kevin Conder December 2002. Thanks goes to Kanata Motohashi for fixing mistakes in the examples. September 2003. Thanks goes to Dr. Richard Boulanger for pointing out the references to the AIFF file format. GEN01 also works with WAV files.
2512
GEN02
GEN02 Transfers data from immediate pfields into a function table.
Description
This subroutine transfers data from immediate pfields into a function table.
Syntax
f # time size 2 v1 v2 v3 ...
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The maximum tablesize is 16777216 (224) points. v1, v2, v3, etc. -- values to be copied directly into the table space. The number of values is limited by the compile-time variable PMAX, which controls the maximum pfields (currently 1000). The values copied may include the table guard point; any table locations not filled will contain zeros.
Note
If p4 (the GEN routine number is positive, the table will be post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped. You will usually want to use -2 with this GEN function, so that your values are not normalized.
Examples
Here is a simple example of the GEN02 routine. It uses the files gen02.csd [examples/gen02.csd]. It places 12 values plus an explicit wrap-around guard value into a table of size next-highest power of 2. Rescaling is inhibited. Here is its diagram:
according to platform audio I/O only the line below: output any platform
2513
sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kamp tablei kndx, ifn, ixmode ; Create a sine wave, use the Table #1 values to control ; the amplitude. This creates a sound with a long attack. a1 oscil kamp*30000, 440, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: an envelope with a long attack (using GEN02). 1 0 16 2 0 1 2 3 4 5 6 7 8 9 10 11 0 Table #2, a sine wave. 2 0 16384 10 1
See Also
GEN17
Credits
December 2002. Thanks to Rasmus Ekman, corrected the limit of the PMAX variable.
2514
GEN03
GEN03 Generates a stored function table by evaluating a polynomial.
Description
This subroutine generates a stored function table by evaluating a polynomial in x over a fixed interval and with specified coefficients.
Syntax
f # time size 3 xval1 xval2 c0 c1 c2 ... cn
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1. xval1, xval2 -- left and right values of the x interval over which the polynomial is defined (xval1 < xval2). These will produce the 1st stored value and the (power-of-2 plus l)th stored value respectively in the generated function table. c0, c1, c2, ..., cn -- coefficients of the nth-order polynomial C0 + C1x + C2x2 + . . . + Cnxn Coefficients may be positive or negative real numbers; a zero denotes a missing term in the polynomial. The coefficient list begins in p7, providing a current upper limit of 144 terms.
Note
The defined segment [fn(xval1), fn(xval2)] is evenly distributed. Thus a 512-point table over the interval [-1,1] will have its origin at location 257 (at the start of the 2nd half). Provided the extended guard point is requested, both fn(-1) and fn(1) will exist in the table. GEN03 is useful in conjunction with table or tablei for audio waveshaping (sound modification by non-linear distortion). Coefficients to produce a particular formant from a sinusoidal lookup index of known amplitude can be determined at preprocessing time using algorithms such as Chebyshev formulae. See also GEN13.
Examples
Here is a simple example of the GEN03 routine. It uses the files gen03.csd [examples/gen03.csd]. It fills a table with a 4th order polynomial function over the x-interval -1 to 1. The origin will be at the offset position 512. The function is post-normalized. Here is its diagram:
2515
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kamp table kndx, ifn, ixmode ; Create a sine wave, use the Table #1 values to control ; the amplitude. a1 oscil kamp*30000, 440, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a polynomial function (using GEN03). 1 0 1025 3 -1 1 5 4 3 2 2 1 Table #2, a sine wave. 2 0 16384 10 1
See Also
GEN13, GEN14, and GEN15.
2516
GEN04
GEN04 Generates a normalizing function.
Description
This subroutine generates a normalizing function by examining the contents of an existing table.
Syntax
f # time size 4 source# sourcemode
Initialization
size -- number of points in the table. Should be power-of-2 plus 1. Must not exceed (except by 1) the size of the source table being examined; limited to just half that size if the sourcemode is of type offset (see below). source # -- table number of stored function to be examined. sourcemode -- a coded value, specifying how the source table is to be scanned to obtain the normalizing function. Zero indicates that the source is to be scanned from left to right. Non-zero indicates that the source has a bipolar structure; scanning will begin at the mid-point and progress outwards, looking at pairs of points equidistant from the center.
Note
The normalizing function derives from the progressive absolute maxima of the source table being scanned. The new table is created left-to-right, with stored values equal to 1/(absolute maximum so far scanned). Stored values will thus begin with 1/(first value scanned), then get progressively smaller as new maxima are encountered. For a source table which is normalized (values <= 1), the derived values will range from 1/(first value scanned) down to 1. If the first value scanned is zero, that inverse will be set to 1. The normalizing function from GEN04 is not itself normalized. GEN04 is useful for scaling a table-derived signal so that it has a consistent peak amplitude. A particular application occurs in waveshaping when the carrier (or indexing) signal is less than full amplitude.
Examples
f 2 0 512 4 1 1
This creates a normalizing function for use in connection with the GEN03 table 1 example. Midpoint bipolar offset is specified. 2517
GEN05
GEN05 Constructs functions from segments of exponential curves.
Description
Constructs functions from segments of exponential curves.
Syntax
f # time size 5 a n1 b n2 c ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). a, b, c, etc. -- ordinate values, in odd-numbered pfields p5, p7, p9, . . . These must be nonzero and must be alike in sign. n1, n2, etc. -- length of segment (no. of storage locations), in even-numbered pfields. Cannot be negative, but a zero is meaningful for specifying discontinuous waveforms (e.g. in the example below). The sum n1 + n2 + .... will normally equal size for fully specified functions. If the sum is smaller, the function locations not included will be set to zero; if the sum is greater, only the first size locations will be stored.
Note
If p4 is positive, functions are post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped. Discrete-point linear interpolation implies an increase or decrease along a segment by equal differences between adjacent locations; exponential interpolation implies that the progression is by equal ratio. In both forms the interpolation from a to b is such as to assume that the value b will be attained in the n + 1th location. For discontinuous functions, and for the segment encompassing the end location, this value will not actually be reached, although it may eventually appear as a result of final scaling.
Examples
Here is a simple example of the GEN05 routine. It uses the files gen05.csd [examples/gen05.csd]. It will create a nice percussive amplitude envelope. Here is its diagram:
2518
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kamp table kndx, ifn, ixmode ; Create a sine wave, use the Table #1 values to control ; the amplitude. This creates a nice percussive sound. a1 oscil kamp*30000, 440, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a percussive envelope (using GEN05). 1 0 64 5 1 2 120 60 1 1 0.001 1 Table #2, a sine wave. 2 0 16384 10 1
See Also
GEN06, GEN07, and GEN08
Credits
Example written by Kevin Conder
2519
GEN06
GEN06 Generates a function comprised of segments of cubic polynomials.
Description
This subroutine will generate a function comprised of segments of cubic polynomials, spanning specified points just three at a time.
Syntax
f # time size 6 a n1 b n2 c n3 d ...
Initialization
size -- number of points in the table. Must be a power off or power-of-2 plus 1 (see f statement). a, c, e, ... -- local maxima or minima of successive segments, depending on the relation of these points to adjacent inflexions. May be either positive or negative. b, d, f, ... -- ordinate values of points of inflexion at the ends of successive curved segments. May be positive or negative. n1, n2, n3 ... -- number of stored values between specified points. Cannot be negative, but a zero is meaningful for specifying discontinuities. The sum n1 + n2 + ... will normally equal size for fully specified functions. (for details, see GEN05).
Note
GEN06 constructs a stored function from segments of cubic polynomial functions. Segments link ordinate values in groups of 3: point of inflexion, maximum/minimum, point of inflexion. The first complete segment encompasses b, c, d and has length n2 + n3, the next encompasses d, e, f and has length n4 + n5, etc. The first segment (a, b with length n1) is partial with only one inflexion; the last segment may be partial too. Although the inflexion points b, d, f ... each figure in two segments (to the left and right), the slope of the two segments remains independent at that common point (i.e. the 1st derivative will likely be discontinuous). When a, c, e... are alternately maximum and minimum, the inflexion joins will be relatively smooth; for successive maxima or successive minima the inflexions will be comb-like.
Examples
Here is a simple example of the GEN06 routine. It uses the files gen06.csd [examples/gen06.csd]. It creates a curve running 0 to 1 to -1, with a minimum, maximum and minimum at these values respectively. Inflexions are at .5 and 0 and are relatively smooth. Here is its diagram:
2520
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kval table kndx, ifn, ixmode ; Generate a sine waveform, use our Table #1 value to ; vary its frequency by 100 Hz from its base frequency. ibasefreq = 440 kfreq = kval * 100 a1 oscil 20000, ibasefreq + kfreq, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a curve (using GEN06). 1 0 65 6 0 16 0.5 16 1 16 0 16 -1 Table #2, a sine wave. 2 0 16384 10 1
See Also
GEN05, GEN07, and GEN08
2521
GEN07
GEN07 Constructs functions from segments of straight lines.
Description
Constructs functions from segments of straight lines.
Syntax
f # time size 7 a n1 b n2 c ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). a, b, c, etc. -- ordinate values, in odd-numbered pfields p5, p7, p9, . . . n1, n2, etc. -- length of segment (no. of storage locations), in even-numbered pfields. Cannot be negative, but a zero is meaningful for specifying discontinuous waveforms (e.g. in the example below). The sum n1 + n2 + .... will normally equal size for fully specified functions. If the sum is smaller, the function locations not included will be set to zero; if the sum is greater, only the first size locations will be stored.
Note
If p4 is positive, functions are post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped. Discrete-point linear interpolation implies an increase or decrease along a segment by equal differences between adjacent locations; exponential interpolation implies that the progression is by equal ratio. In both forms the interpolation from a to b is such as to assume that the value b will be attained in the n + 1th location. For discontinuous functions, and for the segment encompassing the end location, this value will not actually be reached, although it may eventually appear as a result of final scaling.
Examples
Here is a simple example of the GEN07 routine. It uses the file gen07.csd [examples/gen07.csd]. It will create a single-cycle sawtooth whose discontinuity is mid-way in the stored function. Here is its diagram:
2522
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 440 ifn = 1 ; Play the sine wave stored in Table #1. a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1: a sawtooth wave (using GEN07). f 1 0 256 7 0 128 1 0 -1 128 0 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
GEN05, GEN06, and GEN08
2523
GEN08
GEN08 Generate a piecewise cubic spline curve.
Description
This subroutine will generate a piecewise cubic spline curve, the smoothest possible through all specified points.
Syntax
f # time size 8 a n1 b n2 c n3 d ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). a, b, c, etc. -- ordinate values of the function. n1, n2, n3 ... -- length of each segment measured in stored values. May not be zero, but may be fractional. A particular segment may or may not actually store any values; stored values will be generated at integral points from the beginning of the function. The sum n1 + n2 + ... will normally equal size for fully specified functions.
Note
GEN08 constructs a stored table from segments of cubic polynomial functions. Each segment runs between two specified points but depends as well on their neighbors on each side. Neighboring segments will agree in both value and slope at their common point. (The common slope is that of a parabola through that point and its two neighbors). The slope at the two ends of the function is constrained to be zero (flat). Hint: to make a discontinuity in slope or value in the function as stored, arrange a series of points in the interval between two stored values; likewise for a non-zero boundary slope.
Examples
Here is a simple example of the GEN08 routine. It uses the file gen08.csd [examples/gen08.csd]. It will create a curve with a smooth hump in the middle, going briefly negative outside the hump then flat at its ends. Here is its diagram:
2524
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kval table kndx, ifn, ixmode ; Generate a sine waveform, use our Table #1 value to ; vary its frequency by 100 Hz from its base frequency. ibasefreq = 440 kfreq = kval * 100 a1 oscil 20000, ibasefreq + kfreq, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a curve with a smooth hump (using GEN08). 1 0 65 8 0 16 0 16 1 16 0 16 0 Table #2, a sine wave. 2 0 16384 10 1
See Also
GEN05, GEN06, and GEN07
2525
GEN09
GEN09 Generate composite waveforms made up of weighted sums of simple sinusoids.
Description
These subroutines generate composite waveforms made up of weighted sums of simple sinusoids. The specification of each contributing partial requires 3 p-fields using GEN09.
Syntax
f # time size 9 pna stra phsa pnb strb phsb ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). pna, pnb, etc. -- partial no. (relative to a fundamental that would occupy size locations per cycle) of sinusoid a, sinusoid b, etc. Must be positive, but need not be a whole number, i.e., non-harmonic partials are permitted. Partials may be in any order. stra, strb, etc. -- strength of partials pna, pnb, etc. These are relative strengths, since the composite waveform may be rescaled later. Negative values are permitted and imply a 180 degree phase shift. phsa, phsb, etc. -- initial phase of partials pna, pnb, etc., expressed in degrees (0-360).
Note
These subroutines generate stored functions as sums of sinusoids of different frequencies. The two major restrictions on GEN10 that the partials be harmonic and in phase do not apply to GEN09 or GEN19. In each case the composite wave, once drawn, is then rescaled to unity if p4 was positive. A negative p4 will cause rescaling to be skipped.
Examples
Here is a simple example of the GEN09 routine. It uses the file gen09.csd [examples/gen09.csd]. It will generate a cosine wave, a sine wave with an initial phase of 90 degrees. Here is its diagram:
2526
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o gen09.wav -W ;;; for file </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 440 ifn = 1 ; Play the waveform stored in Table #1. a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1: a cosine wave (using GEN09). ; This is a sine wave with an initial phase of 90 degrees. f 1 0 16384 9 1 1 90 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Here is another example of the GEN09 routine. It uses the file gen09square.csd [examples/ gen09square.csd]. It combines partials l, 3 and 9 in the relative strengths in which they are found in a square wave, except that partial 9 is upside down. It will be rescaled, here is its diagram:
2527
sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 440 ifn = 1 ; Play the waveform stored in Table #1. a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1: an approximation of a square wave (using GEN09). f 1 0 16384 9 1 3 0 3 1 0 9 0.3333 180 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
GEN10, GEN19
Credits
The simple example was written by Kevin Conder.
2528
GEN10
GEN10 Generate composite waveforms made up of weighted sums of simple sinusoids.
Description
These subroutines generate composite waveforms made up of weighted sums of simple sinusoids. The specification of each contributing partial requires 1 pfield using GEN10.
Syntax
f # time size 10 str1 str2 str3 str4 ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). str1, str2, str3, etc. -- relative strengths of the fixed harmonic partial numbers 1,2,3, etc., beginning in p5. Partials not required should be given a strength of zero.
Note
These subroutines generate stored functions as sums of sinusoids of different frequencies. The two major restrictions on GEN10 that the partials be harmonic and in phase do not apply to GEN09 or GEN19. In each case the composite wave, once drawn, is then rescaled to unity if p4 was positive. A negative p4 will cause rescaling to be skipped.
Examples
Here is a simple example of the GEN10 routine. It uses the file gen10.csd [examples/gen10.csd]. It will generate a simple sine wave. Here is its diagram:
2529
; Audio out Audio in -odac -iadc ;;;RT audio I/O ; For Non-realtime ouput leave only the line below: ; -o gen10.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 440 ifn = 1 ; Play the sine wave stored in Table #1. a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple sine wave (using GEN10). f 1 0 16384 10 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
GEN09, GEN11, and GEN19.
Credits
Example written by Kevin Conder
2530
GEN11
GEN11 Generates an additive set of cosine partials.
Description
This subroutine generates an additive set of cosine partials, in the manner of Csound generators buzz and gbuzz.
Syntax
f # time size 11 nh [lh] [r]
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). nh -- number of harmonics requested. Must be positive. lh(optional) -- lowest harmonic partial present. Can be positive, zero or negative. The set of partials can begin at any partial number and proceeds upwards; if lh is negative, all partials below zero will reflect in zero to produce positive partials without phase change (since cosine is an even function), and will add constructively to any positive partials in the set. The default value is 1 r(optional) -- multiplier in an amplitude coefficient series. This is a power series: if the lhth partial has a strength coefficient of A the (lh + n)th partial will have a coefficient of A * rn, i.e. strength values trace an exponential curve. r may be positive, zero or negative, and is not restricted to integers. The default value is 1.
Note
This subroutine is a non-time-varying version of the CSound buzzand gbuzz generators, and is similarly useful as a complex sound source in subtractive synthesis. With lh and r present it parallels gbuzz; with both absent or equal to 1 it reduces to the simpler buzz (i.e. nh equal-strength harmonic partials beginning with the fundamental). Sampling the stored waveform with an oscillator is more efficient than using the dynamic buzz units. However, the spectral content is invariant and care is necessary, lest the higher partials exceed the Nyquist during sampling to produce fold-over.
Examples
Here is a simple example of the GEN11 routine. It uses the file gen11.csd [examples/gen11.csd]. It will generate a simple cosine wave. Here is its diagram:
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 440 ifn = 1 ; Play the cosine wave stored in Table #1. a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1: a simple cosine wave (using GEN11). f 1 0 16384 11 1 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
GEN10
Credits
Example written by Kevin Conder
2532
GEN12
GEN12 Generates the log of a modified Bessel function of the second kind.
Description
This generates the log of a modified Bessel function of the second kind, order 0, suitable for use in amplitude-modulated FM.
Syntax
f # time size 12 xint
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1. xint -- specifies the x interval [0 to +xint] over which the function is defined.
Note
This subroutine draws the natural log of a modified Bessel function of the second kind, order 0 (commonly written as I subscript 0), over the x-interval requested. The call should have rescaling inhibited. The function is useful as an amplitude scaling factor in cycle-synchronous amplitudemodulated FM. (See Palamin & Palamin, J. Audio Eng. Soc., 36/9, Sept. 1988, pp.671-684.) The algorithm is interesting because it permits the normally symmetric FM spectrum to be made asymmetric around a frequency other than the carrier, and is thereby useful for formant positioning. By using a table lookup index of I(r - 1/r), where I is the FM modulation index and r is an exponential parameter affecting partial strengths, the Palamin algorithm becomes relatively efficient, requiring only oscil's, table lookups, and a single exp call.
Examples
Here is a simple example of the GEN12 routine. It uses the file gen12.csd [examples/gen12.csd]. It generates the function ln(I0(x)) from 0 to 20. Here is its diagram:
2533
See the sections Real-time Audio and Command Line Flags for more information on using command line flags.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here ; Audio out Audio in -odac -iadc ;;;RT ; For Non-realtime ouput leave ; -o gen12.wav -W ;;; for file </CsOptions> <CsInstruments>
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kamp tablei kndx, ifn, ixmode ; Create a sine wave, use the Table #1 values to control ; the amplitude. This creates a sound with a long attack. a1 oscil kamp*30000, 440, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a modified Bessel function (using GEN12). 1 0 2049 12 20 Table #2, a sine wave. 2 0 16384 10 1
Credits
Example written by Kevin Conder
2534
GEN13
GEN13 Stores a polynomial whose coefficients derive from the Chebyshev polynomials of the first kind.
Description
Uses Chebyshev coefficients to generate stored polynomial functions which, under waveshaping, can be used to split a sinusoid into harmonic partials having a pre-definable spectrum.
Syntax
f # time size 13 xint xamp h0 h1 h2 ...
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1. xint -- provides the left and right values [-xint, +xint] of the x interval over which the polynomial is to be drawn. These subroutines both call GEN03 to draw their functions; the p5 value here is therefor expanded to a negative-positive p5, p6 pair before GEN03 is actually called. The normal value is 1. xamp -- amplitude scaling factor of the sinusoid input that is expected to produce the following spectrum. h0, h1, h2, etc. -- relative strength of partials 0 (DC), 1 (fundamental), 2 ... that will result when a sinusoid of amplitude xamp * int(size/2)/xint is waveshaped using this function table. These values thus describe a frequency spectrum associated with a particular factor xamp of the input signal. GEN13 is the function generator normally employed in standard waveshaping. It stores a polynomial whose coefficients derive from the Chebyshev polynomials of the first kind, so that a driving sinusoid of strength xamp will exhibit the specified spectrum at output. Note that the evolution of this spectrum is generally not linear with varying xamp. However, it is bandlimited (the only partials to appear will be those specified at generation time); and the partials will tend to occur and to develop in ascending order (the lower partials dominating at low xamp, and the spectral richness increasing for higher values of xamp). A negative hn value implies a 180 degree phase shift of that partial; the requested full-amplitude spectrum will not be affected by this shift, although the evolution of several of its component partials may be. The pattern +,+,-,-,+,+,... for h0,h1,h2... will minimize the normalization problem for low xamp values (see above), but does not necessarily provide the smoothest pattern of evolution.
Examples
Here is a simple example of the GEN13 routine. It uses the file gen13.csd [examples/gen13.csd]. It creates a function which, under waveshaping, will split a sinusoid into 3 odd-harmonic partials of relative strength 5:3:1. Here is its diagram: 2535
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kval table kndx, ifn, ixmode ; Generate a sine waveform, use our Table #1 value to ; vary its frequency by 100 Hz from its base frequency. ibasefreq = 440 kfreq = kval * 100 a1 oscil 20000, ibasefreq + kfreq, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a polynomial function (using GEN13). 1 0 1025 13 1 1 0 5 0 3 0 1 Table #2, a sine wave. 2 0 16384 10 1
See Also
GEN03, GEN14, and GEN15.
2536
GEN14
GEN14 Stores a polynomial whose coefficients derive from Chebyshevs of the second kind.
Description
Uses Chebyshev coefficients to generate stored polynomial functions which, under waveshaping, can be used to split a sinusoid into harmonic partials having a pre-definable spectrum.
Syntax
f # time size 14 xint xamp h0 h1 h2 ...
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1. xint -- provides the left and right values [-xint, +xint] of the x interval over which the polynomial is to be drawn. These subroutines both call GEN03 to draw their functions; the p5 value here is therefore expanded to a negative-positive p5, p6 pair before GEN03 is actually called. The normal value is 1. xamp -- amplitude scaling factor of the sinusoid input that is expected to produce the following spectrum. h0, h1, h2, etc. -- relative strength of partials 0 (DC), 1 (fundamental), 2 ... that will result when a sinusoid of amplitude xamp * int(size/2)/xint is waveshaped using this function table. These values thus describe a frequency spectrum associated with a particular factor xamp of the input signal.
Note
GEN13 is the function generator normally employed in standard waveshaping. It stores a polynomial whose coefficients derive from the Chebyshev polynomials of the first kind, so that a driving sinusoid of strength xamp will exhibit the specified spectrum at output. Note that the evolution of this spectrum is generally not linear with varying xamp. However, it is bandlimited (the only partials to appear will be those specified at generation time); and the partials will tend to occur and to develop in ascending order (the lower partials dominating at low xamp, and the spectral richness increasing for higher values of xamp). A negative hn value implies a 180 degree phase shift of that partial; the requested full-amplitude spectrum will not be affected by this shift, although the evolution of several of its component partials may be. The pattern +,+,-,-,+,+,... for h0,h1,h2... will minimize the normalization problem for low xamp values (see above), but does not necessarily provide the smoothest pattern of evolution. GEN14 stores a polynomial whose coefficients derive from Chebyshevs of the second 2537
kind.
Examples
Here is a simple example of the GEN14 routine. It uses the file gen14.csd [examples/gen14.csd]. It creates a function which, under waveshaping, will split a sinusoid into 3 odd-harmonic partials of relative strength 5:3:1. Here is its diagram:
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kval table kndx, ifn, ixmode ; Generate a sine waveform, use our Table #1 value to ; vary its frequency by 100 Hz from its base frequency. ibasefreq = 440 kfreq = kval * 100 a1 oscil 20000, ibasefreq + kfreq, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: a polynomial function (using GEN14). 1 0 1025 14 1 1 0 5 0 3 0 1 Table #2, a sine wave. 2 0 16384 10 1
2538
</CsScore> </CsoundSynthesizer>
See Also
GEN03, GEN13, and GEN15.
Credits
Example written by Kevin Conder
2539
GEN15
GEN15 Creates two tables of stored polynomial functions.
Description
This subroutine creates two tables of stored polynomial functions, suitable for use in phase quadrature operations.
Syntax
f # time size 15 xint xamp h0 phs0 h1 phs1 h2 phs2 ...
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1. xint -- provides the left and right values [-xint, +xint] of the x interval over which the polynomial is to be drawn. This subroutine will eventually call GEN03 to draw both functions; this p5 value is therefor expanded to a negative-positive p5, p6 pair before GEN03 is actually called. The normal value is 1. xamp -- amplitude scaling factor of the sinusoid input that is expected to produce the following spectrum. h0, h1, h2, ... hn -- relative strength of partials 0 (DC), 1 (fundamental), 2 ... that will result when a sinusoid of amplitude xamp * int(size/2)/xint is waveshaped using this function table. These values thus describe a frequency spectrum associated with a particular factor xamp of the input signal. phs0, phs1, ... -- phase in degrees of desired harmonics h0, h1, ... when the two functions of GEN15 are used with phase quadrature.
Note
GEN15 creates two tables of equal size, labeled f # and f # + 1. Table # will contain a Chebyshev function of the first kind, drawn using GEN03 with partial strengths h0cos(phs0), h1cos(phs1), ... Table #+1 will contain a Chebyshev function of the 2nd kind by calling GEN14 with partials h1sin(phs1), h2sin(phs2),... (note the harmonic displacement). The two tables can be used in conjunction in a waveshaping network that exploits phase quadrature.
See Also
GEN03, GEN13, and GEN14.
2540
GEN16
GEN16 Creates a table from a starting value to an ending value.
Description
Creates a table from beg value to end value of dur steps.
Syntax
f # time size 16 beg dur type end
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1. beg -- starting value dur -- number of segments type -- if 0, a straight line is produced. If non-zero, then GEN16 creates the following curve, for dur steps: beg + (end - beg) * (1 - exp( i*type/(dur-1) )) / (1 - exp(type))
end -- value after dur segments Here are some examples of the curves generated for different values of type:
2541
Note
If type > 0, there is a slowly rising (concave) or slowly decaying (convex) curve, while if itype < 0, the curve is fast rising (convex) or fast decaying (concave). See also transeg.
according to platform audio I/O only the line below: output any platform
Credits
2542
Author: John ffitch University of Bath, Codemist. Ltd. Bath, UK October, 2000 New in Csound version 4.09
2543
GEN17
GEN17 Creates a step function from given x-y pairs.
Description
This subroutine creates a step function from given x-y pairs.
Syntax
f # time size 17 x1 a x2 b x3 c ...
Initialization
size -- number of points in the table. Must be a power of 2 or a power-of-2 plus 1 (see f statement). The normal value is power-of-2 plus 1. x1, x2, x3, etc. -- x-ordinate values, in ascending order, 0 first. a, b, c, etc. -- y-values at those x-ordinates, held until the next x-ordinate.
Note
This subroutine creates a step function of x-y pairs whose y-values are held to the right. The right-most y-value is then held to the end of the table. The function is useful for mapping one set of data values onto another, such as MIDI note numbers onto sampled sound ftable numbers ( see loscil).
Examples
f 1 0 128 -17 0 1 12 2 24 3 36 4 48 5 60 6 72 7 84 8
This describes a step function with 8 successively increasing levels, each 12 locations wide except the last which extends its value to the end of the table. Rescaling is inhibited. Indexing into this table with a MIDI note-number would retrieve a different value every octave up to the eighth, above which the value returned would remain the same.
See Also
GEN02
2544
GEN18
GEN18 Writes composite waveforms made up of pre-existing waveforms.
Description
Writes composite waveforms made up of pre-existing waveforms. Each contributing waveform requires 4 pfields and can overlap with other waveforms.
Syntax
f # time size 18 fna ampa starta finisha fnb ampb startb finishb ...
Initialization
size -- number of points in the table. Must be a power-of-2 plus 1 (see f statement). fna, fnb, etc. -- pre-existing table number to be written into the table. ampa, ampb, etc. -- strength of wavefoms. These are relative strengths, since the composite waveform may be rescaled later. Negative values are permitted and imply a 180 degree phase shift. starta, startb, etc. -- where to start writing the fn into the table. finisha, finishb, etc. -- where to stop writing the fn into the table.
Examples
f 1 f 2 0 0 4096 1025 10 18 1 1
512
513
1025
Deprecated Names
GEN18 was called GEN22 in version 4.18. The name was changed due to a conflict with DirectCsound.
Credits
Author: William Pete Moss University of Texas at Austin Austin, Texas USA January 2002 New in version 4.18, changed in version 4.19
2545
GEN19
GEN19 Generate composite waveforms made up of weighted sums of simple sinusoids.
Description
These subroutines generate composite waveforms made up of weighted sums of simple sinusoids. The specification of each contributing partial requires 4 p-fields using GEN19.
Syntax
f # time size 19 pna stra phsa dcoa pnb strb phsb dcob ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). pna, pnb, etc. -- partial no. (relative to a fundamental that would occupy size locations per cycle) of sinusoid a, sinusoid b, etc. Must be positive, but need not be a whole number, i.e., non-harmonic partials are permitted. Partials may be in any order. stra, strb, etc. -- strength of partials pna, pnb, etc. These are relative strengths, since the composite waveform may be rescaled later. Negative values are permitted and imply a 180 degree phase shift. phsa, phsb, etc. -- initial phase of partials pna, pnb, etc., expressed in degrees. dcoa, dcob, etc. -- DC offset of partials pna, pnb, etc. This is applied after strength scaling, i.e. a value of 2 will lift a 2-strength sinusoid from range [-2,2] to range [0,4] (before later rescaling).
Note
These subroutines generate stored functions as sums of sinusoids of different frequencies. The two major restrictions on GEN10 that the partials be harmonic and in phase do not apply to GEN09 or GEN19. In each case the composite wave, once drawn, is then rescaled to unity if p4 was positive. A negative p4 will cause rescaling to be skipped.
Examples
Here is a simple example of the GEN19 routine. It uses the file gen19.csd [examples/gen19.csd]. It will generate a nice bell curve, here is its diagram:
2546
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 ; Create an index over the length of our entire note. kcps init 1/p3 kndx phasor kcps ; Read Table #1 with our index. ifn = 1 ixmode = 1 kval table kndx, ifn, ixmode ; Generate a sine waveform, use our Table #1 value to ; vary its frequency by 100 Hz from its base frequency. ibasefreq = 440 kfreq = kval * 100 a1 oscil 20000, ibasefreq + kfreq, 2 out a1 endin </CsInstruments> <CsScore> ; f ; f Table #1: 1 0 16384 Table #2, 2 0 16384 a bell curve (using GEN19). -19 1 1 260 1 a sine wave. 10 1
See Also
GEN09 and GEN10
Credits
Example written by Kevin Conder
2547
GEN20
GEN20 Generates functions of different windows.
Description
This subroutine generates functions of different windows. These windows are usually used for spectrum analysis or for grain envelopes.
Syntax
f # time size 20 window max [opt]
Initialization
size -- number of points in the table. Must be a power of 2 ( + 1). window -- Type of window to generate: 1 = Hamming 2 = Hanning 3 = Bartlett ( triangle) 4 = Blackman ( 3-term) 5 = Blackman - Harris ( 4-term) 6 = Gaussian 7 = Kaiser 8 = Rectangle 9 = Sync max -- For negative p4 this will be the absolute value at window peak point. If p4 is positive or p4 is negative and p6 is missing the table will be post-rescaled to a maximum value of 1. opt -- Optional argument required by the Gaussian window and the Kaiser window.
Examples
f 1 0 1024 20 5
This creates a function which contains a 4 - term Blackman - Harris window with maximum value of 1.
2548
1024
-20
456
This creates a function that contains a Hanning window with a maximum value of 456.
1024
-20
This creates a function that contains a Hamming window with a maximum value of 1.
1024
20
This creates a function that contains a Kaiser window with a maximum value of 1. The extra argument specifies how "open" the window is, for example a value of 0 results in a rectangular window and a value of 10 in a Hamming like window.
1024
20
This creates a function that contains a Gaussian window with a maximum value of 1. The extra argument specifies how broad the window is, as the standard deviation of the curve; in this example the s.d. is 2. The default value is 1. For diagrams, see Window Functions
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Author: John ffitch University of Bath/Codemist Ltd. Bath, UK New in Csound version 3.2 Optional argument to Gaussian added in 5.10
2549
GEN21
GEN21 Generates tables of different random distributions.
Description
This generates tables of different random distributions. (See also betarand, bexprnd, cauchy, exprand, gauss, linrand, pcauchy, poisson, trirand, unirand, and weibull)
Syntax
f # time size 21 type level [arg1 [arg2]]
Initialization
time and size are the usual GEN function arguments. level defines the amplitude. Note that GEN21 is not self-normalizing as are most other GEN functions. type defines the distribution to be used as follow: 1 = Uniform (positive numbers only) 2 = Linear (positive numbers only) 3 = Triangular (positive and negative numbers) 4 = Exponential (positive numbers only) 5 = Biexponential (positive and negative numbers) 6 = Gaussian (positive and negative numbers) 7 = Cauchy (positive and negative numbers) 8 = Positive Cauchy (positive numbers only) 9 = Beta (positive numbers only) 10 = Weibull (positive numbers only) 11 = Poisson (positive numbers only) Of all these cases only 9 (Beta) and 10 (Weibull) need extra arguments. Beta needs two arguments and Weibull one. If type = 6, the random numbers in the ftable follow a normal distribution centered around 0.0 (mu = 0.0) with a variance (sigma) of level / 3.83. Thus more than 99.99% of the random values generated are in the range -level to +level. The default value for level is 1 (sigma = 0.261). If a mean value different of 0.0 is desired, this mean value has to be added to the generated numbers.
Examples
2550
f1 f1 f1 f1 f1
0 0 0 0 0
21 21 21 21 21
1 6 6 5.745 9 1 1 2 10 1 2
; ; ; ; ;
Uniform (white noise) Gaussian (mu=0.0, sigma=1/3.83=0.261) Gaussian (mu=0.0, sigma=5.745/3.83=1.5) Beta (note that level precedes arguments) Weibull
All of the above additions were designed by the author between May and December 1994, under the supervision of Dr. Richard Boulanger.
Credits
Author: Paris Smaragdis MIT, Cambridge 1995 Author: John ffitch University of Bath/Codemist Ltd. Bath, UK Precisions about mu and sigma added by Franois Pinot after a discussion with Joachim Heintz on the Csound List, December 2010. New in Csound version 3.2
2551
GEN22
GEN22 Deprecated.
Description
Deprecated as of version 4.19. Use the GEN18 routine instead.
2552
GEN23
GEN23 Reads numeric values from a text file.
Description
This subroutine reads numeric values from an external ASCII file.
Syntax
f # time size -23 "filename.txt"
Initialization
"filename.txt" -- numeric values contained in "filename.txt" (which indicates the complete pathname of the character file to be read), can be separated by spaces, tabs, newline characters or commas. Also, words that contains non-numeric characters can be used as comments since they are ignored. size -- number of points in the table. Must be a power of 2 , power of 2 + 1, or zero. If size = 0, table size is determined by the number of numeric values in filename.txt. (New in Csound version 3.57)
Note
All characters following ';' or '#' (comment) are ignored until next line (numbers too).
Credits
Author: Gabriel Maldonado Italy February, 1998 New in Csound version 3.47. Comments starting with '#' are ignored from Csound version 5.12.
2553
GEN24
GEN24 Reads numeric values from another allocated function-table and rescales them.
Description
This subroutine reads numeric values from another allocated function-table and rescales them according to the max and min values given by the user.
Syntax
f # time size -24 ftable min max
Initialization
#, time, size -- the usual GEN parameters. See f statement. ftable -- ftable must be an already allocated table with the same size as this function. min, max -- the rescaling range.
Note
This GEN is useful, for example, to eliminate the starting offset in exponential segments allowing a real starting from zero.
Credits
Author: Gabriel Maldonado New in Csound version 4.16
2554
GEN25
GEN25 Construct functions from segments of exponential curves in breakpoint fashion.
Description
These subroutines are used to construct functions from segments of exponential curves in breakpoint fashion.
Syntax
f # time size 25 x1 y1 x2 y2 x3 ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). x1, x2, x3, etc. -- locations in table at which to attain the following y value. Must be in increasing order. If the last value is less than size, then the rest will be set to zero. Should not be negative but can be zero. y1, y2, y3,, etc. -- Breakpoint values attained at the location specified by the preceding x value. These must be non-zero and must be alike in sign.
Note
If p4 is positive, functions are post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped.
See Also
f statement, GEN27
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK New in Csound version 3.49
2555
GEN27
GEN27 Construct functions from segments of straight lines in breakpoint fashion.
Description
Construct functions from segments of straight lines in breakpoint fashion.
Syntax
f # time size 27 x1 y1 x2 y2 x3 ...
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). x1, x2, x3, etc. -- locations in table at which to attain the following y value. Must be in increasing order. If the last value is less than size, then the rest will be set to zero. Should not be negative but can be zero. y1, y2, y3,, etc. -- Breakpoint values attained at the location specified by the preceding x value.
Note
If p4 is positive, functions are post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped.
Examples
f 1 0 257 27 0 0 100 1 200 -1 256 0
This describes a function which begins at 0, rises to 1 at the 100th table location, falls to -1, by the 200th location, and returns to 0 by the end of the table. The interpolation is linear.
See Also
f statement, GEN25
Credits
Author: John ffitch University of Bath/Codemist Ltd. Bath, UK New in Csound version 3.49
2556
GEN28
GEN28 Reads a text file which contains a time-tagged trajectory.
Description
This function generator reads a text file which contains sets of three values representing the xy coordinates and a time-tag for when the signal should be placed at that location, allowing the user to define a time-tagged trajectory. The file format is in the form: time1 time2 time3 X1 X2 X3 Y1 Y2 Y3
The configuration of the xy coordinates in space places the signal in the following way: a1 is -1, 1 a2 is 1, 1 a3 is -1, -1 a4 is 1, -1 This assumes a loudspeaker set up as a1 is left front, a2 is right front, a3 is left back, a4 is right back. Values greater than 1 will result in sounds being attenuated as if in the distance. GEN28 creates values to 10 milliseconds of resolution.
Syntax
f # time size 28 ifilcod
Initialization
size -- number of points in the table. Must be 0. GEN28 takes 0 as the size and automatically allocates memory. ifilcod -- character-string denoting the source file name. A character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the named file is sought in the current directory.
Examples
f1 0 0 28 "move"
2557
Since GEN28 creates values to 10 milliseconds of resolution, there will be 500 values created by interpolating X1 to X2 to X3 and so on, and Y1 to Y2 to Y3 and so on, over the appropriate number of values that are stored in the function table. The sound will begin in the left front, over 1 second it will move to the right front, over another second it move further into the distance but still in the right front, then in just 1/10th of a second it moves to the left rear, a bit distant. Finally over the last .9 seconds the sound will move to the right rear, moderately distant, and it comes to rest between the two left channels (due west!), quite distant.
Credits
Author: Richard Karpen Seattle, Wash 1998 New in Csound version 3.48
2558
GEN30
GEN30 Generates harmonic partials by analyzing an existing table.
Description
Extracts a range of harmonic partials from an existing waveform.
Syntax
f # time size 30 src minh maxh [ref_sr] [interp]
Performance
src -- source ftable minh -- lowest harmonic number maxh -- highest harmonic number ref_sr (optional) -- maxh is scaled by (sr / ref_sr). The default value of ref_sr is sr. If ref_sr is zero or negative, it is now ignored. interp (optional) -- if non-zero, allows changing the amplitude of the lowest and highest harmonic partial depending on the fractional part of minh and maxh. For example, if maxh is 11.3 then the 12th harmonic partial is added with 0.3 amplitude. This parameter is zero by default. GEN30 does not support tables with an extended guard point (ie. table size = power of two + 1). Although such tables will work both for input and output, when reading source table(s), the guard point is ignored, and when writing the output table, guard point is simply copied from the first sample (table index = 0). The reason of this limitation is that GEN30 uses FFT, which requires power of two table size. GEN32 allows using linear interpolation for resampling and phase shifting, which makes it possible to use any table size (however, for partials calculated with FFT, the power of two limitation still exists).
Credits
Author: Istvan Varga New in version 4.16
2559
GEN31
GEN31 Mixes any waveform specified in an existing table.
Description
This routine is similar to GEN09, but allows mixing any waveform specified in an existing table.
Syntax
f # time size 31 src pna stra phsa pnb strb phsb ...
Performance
src -- source table number pna, pnb, ... -- partial number, must be a positive integer stra, strb, ... -- amplitude scale phsa, phsb, ... -- start phase (0 to 1) GEN31 does not support tables with an extended guard point (ie. table size = power of two + 1). Although such tables will work both for input and output, when reading source table(s), the guard point is ignored, and when writing the output table, guard point is simply copied from the first sample (table index = 0). The reason of this limitation is that GEN31 uses FFT, which requires power of two table size. GEN32 allows using linear interpolation for resampling and phase shifting, which makes it possible to use any table size (however, for partials calculated with FFT, the power of two limitation still exists).
Credits
Author: Istvan Varga New in version 4.15
2560
GEN32
GEN32 Mixes any waveform, resampled with either FFT or linear interpolation.
Description
This routine is similar to GEN31, but allows specifying source ftable for each partial. Tables can be resampled either with FFT, or linear interpolation.
Syntax
f # time size 32 srca pna stra phsa srcb pnb strb phsb ...
Performance
srca, srcb -- source table number. A negative value can be used to read the table with linear interpolation (by default, the source waveform is transposed and phase shifted using FFT); this is less accurate, but faster, and allows non-integer and negative partial numbers. pna, pnb, ... -- partial number, must be a positive integer if source table number is positive (i.e. resample with FFT). stra, strb, ... -- amplitude scale phsa, phsb, ... -- start phase (0 to 1)
Examples
itmp ftgen 1, 0, 16384, 7, 1, 16384, -1 ; sawtooth itmp ftgen 2, 0, 8192, 10, 1 ; sine ; mix tables itmp ftgen 5, 0, 4096, -32, -2, 1.5, 1.0, 0.25, 1, 2, 0.5, 0, \ 1, 3, -0.25, 0.5 ; window itmp ftgen 6, 0, 16384, 20, 3, 1 ; generate band-limited waveforms inote = 0 loop0: icps = 440 * exp(log(2) * (inote - 69) / 12) ; one table for inumh = sr / (2 * icps) ; each MIDI note number ift = int(inote + 256.5) itmp ftgen ift, 0, 4096, -30, 5, 1, inumh inote = inote + 1 if (inote < 127.5) igoto loop0 instr 1 kcps kft kft a1 a1 expon 20, p3, 16000 = int(256.5 + 69 + 12 * log(kcps / 440) / log(2)) = (kft > 383 ? 383 : kft) phasor kcps tableikt a1, kft, 1, 0, 1 out a1 * 10000 endin instr 2
2561
expon 20, p3, 16000 = int(256.5 + 69 + 12 * log(kcps / 440) / log(2)) = (kft > 383 ? 383 : kft) limit 10 / kcps, 0.1, 1 grain2 kcps, 0.02, kgdur, 30, kft, 6, -0.5 out a1 * 2000 endin
---------score: ---------t 0 60 i 1 0 10 i 2 12 10 e
Credits
Author: Rasmus Ekman Programmer: Istvan Varga New in version 4.17
2562
GEN33
GEN33 Generate composite waveforms by mixing simple sinusoids.
Description
These routines generate composite waveforms by mixing simple sinusoids, similarly to GEN09, but the parameters of the partials are specified in an already existing table, which makes it possible to calculate any number of partials in the orchestra. The difference between GEN33 and GEN34 is that GEN33 uses inverse FFT to generate output, while GEN34 is based on the algorithm used in oscils opcode. GEN33 allows integer partials only, and does not support power of two plus 1 table size, but may be significantly faster with a large number of partials. On the other hand, with GEN34, it is possible to use non-integer partial numbers and extended guard point, and this routine may be faster if there is only a small number of partials (note that GEN34 is also several times faster than GEN09, although the latter may be more accurate).
Syntax
f # time size 33 src nh scl [fmode]
Initialization
size -- number of points in the table. Must be power of two and at least 4. src -- source table number. This table contains the parameters of each partial in the following format: stra, pna, phsa, strb, pnb, phsb, ... the parameters are: stra, strb, etc.: relative strength of partials. The actual amplitude depends on the value of scl, or normalization (if enabled). pna, pnb, etc.: partial number, or frequency, depending on fmode (see below); zero and negative values are allowed, however, if the absolute value of the partial number exceeds (size / 2), the partial will not be rendered. With GEN33, partial number is rounded to the nearest integer. phsa, phsb, etc.: initial phase, in the range 0 to 1. Table length (not including the guard point) should be at least 3 * nh. If the table is too short, the number of partials (nh) is reduced to (table length) / 3, rounded towards zero. nh -- number of partials. Zero or negative values are allowed, and result in an empty table (silence). The actual number may be reduced if the source table (src) is too short, or some partials have too high frequency. scl -- amplitude scale. fmode (optional, default = 0) -- a non-zero value can be used to set frequency in Hz instead of partial numbers in the source table. The sample rate is assumed to be fmode if it is positive, or -(sr * fmode) if 2563
Examples
; partials 1, 4, 7, 10, 13, 16, etc. with base frequency of 400 Hz ibsfrq = 400 ; estimate number of partials inumh = int(1.5 + sr * 0.5 / (3 * ibsfrq)) ; source table length isrcln = int(0.5 + exp(log(2) * int(1.01 + log(inumh * 3) / log(2)))) ; create empty source table itmp ftgen 1, 0, isrcln, -2, 0 ifpos = 0 ifrq = ibsfrq inumh = 0 l1: tableiw ibsfrq / ifrq, ifpos, 1 ; amplitude tableiw ifrq, ifpos + 1, 1 ; frequency tableiw 0, ifpos + 2, 1 ; phase ifpos = ifpos + 3 ifrq = ifrq + ibsfrq * 3 inumh = inumh + 1 if (ifrq < (sr * 0.5)) igoto l1 ; store output in ftable 2 (size = 262144) itmp ftgen 2, 0, 262144, -33, 1, inumh, 1, -1
See Also
GEN09, GEN34
Credits
Programmer: Istvan Varga March 2002 New in version 4.19
2564
GEN34
GEN34 Generate composite waveforms by mixing simple sinusoids.
Description
These routines generate composite waveforms by mixing simple sinusoids, similarly to GEN09, but the parameters of the partials are specified in an already existing table, which makes it possible to calculate any number of partials in the orchestra. The difference between GEN33 and GEN34 is that GEN33 uses inverse FFT to generate output, while GEN34 is based on the algorithm used in oscils opcode. GEN33 allows integer partials only, and does not support power of two plus 1 table size, but may be significantly faster with a large number of partials. On the other hand, with GEN34, it is possible to use non-integer partial numbers and extended guard point, and this routine may be faster if there is only a small number of partials (note that GEN34 is also several times faster than GEN09, although the latter may be more accurate).
Syntax
f # time size 34 src nh scl [fmode]
Initialization
size -- number of points in the table. Must be power of two or a power of two plus 1. src -- source table number. This table contains the parameters of each partial in the following format: stra, pna, phsa, strb, pnb, phsb, ... the parameters are: stra, strb, etc.: relative strength of partials. The actual amplitude depends on the value of scl, or normalization (if enabled). pna, pnb, etc.: partial number, or frequency, depending on fmode (see below); zero and negative values are allowed, however, if the absolute value of the partial number exceeds (size / 2), the partial will not be rendered. phsa, phsb, etc.: initial phase, in the range 0 to 1. Table length (not including the guard point) should be at least 3 * nh. If the table is too short, the number of partials (nh) is reduced to (table length) / 3, rounded towards zero. nh -- number of partials. Zero or negative values are allowed, and result in an empty table (silence). The actual number may be reduced if the source table (src) is too short, or some partials have too high frequency. scl -- amplitude scale. fmode (optional, default = 0) -- a non-zero value can be used to set frequency in Hz instead of partial numbers in the source table. The sample rate is assumed to be fmode if it is positive, or -(sr * fmode) if 2565
Examples
; partials 1, 4, 7, 10, 13, 16, etc. with base frequency of 400 Hz ibsfrq = 400 ; estimate number of partials inumh = int(1.5 + sr * 0.5 / (3 * ibsfrq)) ; source table length isrcln = int(0.5 + exp(log(2) * int(1.01 + log(inumh * 3) / log(2)))) ; create empty source table itmp ftgen 1, 0, isrcln, -2, 0 ifpos = 0 ifrq = ibsfrq inumh = 0 l1: tableiw ibsfrq / ifrq, ifpos, 1 ; amplitude tableiw ifrq, ifpos + 1, 1 ; frequency tableiw 0, ifpos + 2, 1 ; phase ifpos = ifpos + 3 ifrq = ifrq + ibsfrq * 3 inumh = inumh + 1 if (ifrq < (sr * 0.5)) igoto l1 ; store output in ftable 2 (size = 262144) itmp ftgen 2, 0, 262144, -34, 1, inumh, 1, -1
See Also
GEN09, GEN33
Credits
Programmer: Istvan Varga March 2002 New in version 4.19
2566
GEN40
GEN40 Generates a random distribution using a distribution histogram.
Description
Generates a continuous random distribution function starting from the shape of a user-defined distribution histogram.
Syntax
f # time size 40 shapetab
Performance
The shape of histogram must be stored in a previously defined table, in fact shapetab argument must be filled with the number of such table. Histogram shape can be generated with any other GEN routines. Since no interpolation is used when GEN40 processes the translation, it is suggested that the size of the table containing the histogram shape to be reasonably big, in order to obtain more precision (however after the processing the shaping-table can be destroyed in order to re-gain memory). This subroutine is designed to be used together with cuserrnd opcode (see cuserrnd for more information).
Credits
Author: Gabriel Maldonado
2567
GEN41
GEN41 Generates a random list of numerical pairs.
Description
Generates a discrete random distribution function by giving a list of numerical pairs.
Syntax
f # time size -41 value1 prob1 value2 prob2 value3 prob3 ... valueN probN
Performance
The first number of each pair is a value, and the second is the probability of that value to be chosen by a random algorithm. Even if any number can be assigned to the probability element of each pair, it is suggested to give it a percent value, in order to make it clearer for the user. This subroutine is designed to be used together with duserrnd and urd opcodes (see duserrnd for more information).
Credits
Author: Gabriel Maldonado
2568
GEN42
GEN42 Generates a random distribution of discrete ranges of values.
Description
Generates a random distribution function of discrete ranges of values by giving a list of groups of three numbers.
Syntax
f # time size -42 min1 max1 prob1 min2 max2 prob2 min3 max3 prob3 ... minN maxN probN
Performance
The first number of each group is a the minimum value of the range, the second is the maximum value and the third is the probability of that an element belonging to that range of values can be chosen by a random algorithm. Probabilities for a range should be a fraction of 1, and the sum of the probabilities for all the ranges should total 1.0. This subroutine is designed to be used together with duserrnd and urd opcodes (see duserrnd for more information). Since both duserrnd and urd do not use any interpolation, it is suggested to give a size reasonably big.
Credits
Author: Gabriel Maldonado
2569
GEN43
GEN43 Loads a PVOCEX file containing a PV analysis.
Description
This subroutine loads a PVOCEX file containing the PV analysis (amp-freq) of a soundfile and calculates the average magnitudes of all analysis frames of one or all audio channels. It then creates a table with these magnitudes for each PV bin.
Syntax
f # time size 43 filecod channel
Initialisation
size -- number of points in the table, power-of-two or power-of-two plus 1. GEN 43 does not make any distinction between these two sizes, but it requires the table to be at least the fftsize/2. PV bins cover the positive spectrum from 0Hz (table index 0) to the Nyquist (table index fftsize/2+1) in equal-size frequency increments (of size sr/fftsize). filcod -- a pvocex file (which can be generated by pvanal). channel -- audio channel number from which the magnitudes will be extracted; a 0 will average the magnitudes from all channels. Reading stops at the end of the file.
Note
if p4 is positive, the table will be post-normalised. A negative p4 will cause postnormalisation to be skipped.
Examples
f1 0 512 43 "viola.pvx" 1 f1 0 -1024 -43 "noiseprint.pvx" 0
This table can be used as a masking table for pvstencil and pvsmaska. The first example uses a 1024-point FFT phase vocoder analysis file from which the first channel is used. The second uses all channels of a 2048-point file, without post-normalisation. For noise reduction applications with pvstencil, it is easiest to skip table normalisation (negative GEN code).
Credits
Author: Victor Lazzarini
2570
GEN49
GEN49 Transfers data from an MP3 soundfile into a function table.
Description
This subroutine transfers data from an MP3 soundfile into a function table.
Syntax
f# time size 49 filcod skiptime format
Performance
size -- number of points in the table. Ordinarily a power of 2 or a power-of-2 plus 1 (see f statement); the maximum tablesize is 16777216 (224) points. The allocation of table memory can be deferred by setting this parameter to 0; the size allocated is then the number of points in the file (probably not a powerof-2), and the table is not usable by normal oscillators, but it is usable by a loscil unit. The soundfile can also be mono or stereo. filcod -- integer or character-string denoting the source soundfile name. An integer denotes the file soundin.filcod ; a character-string (in double quotes, spaces permitted) gives the filename itself, optionally a full pathname. If not a full path, the file is sought first in the current directory, then in that given by the environment variable SSDIR (if defined) then by SFDIR. See also soundin. skiptime -- begin reading at skiptime seconds into the file. format -- specifies the audio data-file format required: 1 - Mono file 2 - Stereo file 3 - First channel (left) 4 - Second channel (right)
Note
Reading stops at end-of-file or when the table is full. Table locations not filled will contain zeros. If p4 is positive, the table will be post-normalized (rescaled to a maximum absolute value of 1 after generation). A negative p4 will cause rescaling to be skipped.
Examples
Here is a simple example of the GEN49 routine. It uses the files gen49.csd [examples/gen49.csd], and beats.mp3 [examples/beats.mp3]. It uses the MP3 file beats.mp3. 2571
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 kcps = 1 ifn = 1 ; Play the audio sample stored in Table #1. a1 oscil kamp, kcps, ifn out a1 endin </CsInstruments> <CsScore> ; Table #1: read an audio file (using GEN49). f 1 0 131072 49 "beats.mp3" 0 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
Credits
Written by John ffitch February 2009.
2572
GEN51
GEN51 This subroutine fills a table with a fully customized micro-tuning scale, in the manner of Csound opcodes cpstun, cpstuni and cpstmid.
Description
This subroutine fills a table with a fully customized micro-tuning scale, in the manner of Csound opcodes cpstun, cpstuni et cpstmid.
Syntax
f # time size -51 numgrades interval basefreq basekey tuningRatio1 tuningRatio2 .... tuningRationN
Performance
The first four parameters (i.e. p5, p6, p7 and p8) define the following generation directives: p5 (numgrades) -- the number of grades of the micro-tuning scale p6 (interval) -- the frequency range covered before repeating the grade ratios, for example 2 for one octave, 1.5 for a fifth etcetera p7 (basefreq) -- the base frequency of the scale in cps p8 (basekey) -- the integer index of the scale to which to assign basefreq unmodified The other parameters define the ratios of the scale: p9...pN (tuningRatio1...etc.) -- the tuning ratios of the scale For example, for a standard 12-grade scale with the base-frequency of 261 cps assigned to the keynumber 60, the corresponding f-statement in the score to generate the table should be:
; ; f1 0 64 -51 numgrades basefreq interval basekey 12 2 261 60 tuning-ratios 1 (eq.temp) .......
After the gen has been processed, the table f1 is filled with 64 different frequency values. The 60th element is filled with the frequency value of 261, and all other elements (preceding and subsequents) of the table are filled according to the tuning ratios Another example with a 24-grade scale with a base frequency of 440 assigned to the key-number 48, and a repetition interval of 1.5:
; ; f1 0 64 -51 numgrades basefreq interval 24 1.5 440 tuning-ratios ..... basekey 48 1 1.01 1.02 1.03 ..etc...
Credits
Author: Gabriel Maldonado 2573
GEN52
GEN52 Creates an interleaved multichannel table from the specified source tables, in the format expected by the ftconv opcode.
Description
GEN52 creates an interleaved multichannel table from the specified source tables, in the format expected by the ftconv opcode. It can also be used to extract a channel from a multichannel table and store it in a normal mono table, copy tables with skipping some samples, adding delay, or store in reverse order, etc. Three parameters must be given for each channel to be processed. fsrc declares the source f-table number. The parameter offset specifies an offset for the source file. If different to 0, the source file is not read from the beginning, but the offset number of values are skipped. The offset is used to determine the channel number to be read from interleaved f-tables, e.g. for channel 2, offset must be 1. It can also be used to set a read offset on the source table. This parameter gives absolute values, so if a skip of 20 sample frames for a 2 channel f-table is desired, offset must be set to 40. The srcchnls parameter is used to declare the number of channels in the source f-table. This parameter sets the skip size when reading the source f-table. When more than one channel (nchannels > 1) is given, source f-tables are interleaved in the newly created table. If the source f-table is finished before the destination f-table is full, the remaining values are set to 0.
Syntax Example
; f f ; f ; f ; f source tables 1 0 16384 10 1 2 0 16384 10 0 1 create 2 channel interleaved table 3 0 32768 -52 2 1 0 1 2 0 1 extract first channel from table 3 4 0 16384 -52 1 3 0 2 extract second channel from table 3 5 0 16384 -52 1 3 1 2
f # time size 52 nchannels fsrc1 offset1 srcchnls1 [fsrc2 offset2 srcchnls2 ... fsrcN offsetN srcchnlsN
Credits
Author: Istvan Varga
2574
GENtanh
"tanh" Generate a table with values on the tanh function.
Description
Creates an ftable with values of the tanh function ....
Syntax
f # time size "tanh" start end rescale
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). start, end -- first and last value to be stored. The points stored are uniformly spaced between these to the table size rescale -- if not zero the table is not rescaled
Examples
Here is a simple example of the GENtanh routine. It uses the file gentanh.csd [examples/gentanh.csd]. It will generate a simple tanh shaped output wave.
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 ifn = 2 ibas = 1 ; Play the audio sample stored in Table #1. k1 oscil 1, 10, 1 a1 oscil kamp*k1, 440, ifn out a1 endin
2575
</CsInstruments> <CsScore> ; Table #1: read an audio file (using GEN01). f 1 0 131072 "tanh" 0.1 10 0 f 2 0 8192 10 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
GENexp and GENsone.
Credits
Written by John ffitch
2576
GENexp
"exp" Generate a table with values on the exp function.
Description
Creates an ftable with values of the exp function ....
Syntax
f # time size "exp" start end rescale
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). start, end -- first and last value to be stored. The points stored are uniformly spaced between these to the table size rescale -- if not zero the table is not rescaled
Examples
Here is a simple example of the GENexp routine. It uses the file genexp.csd [examples/genexp.csd]. It will generate a simple exp shaped output wave.
according to platform audio I/O only the line below: output any platform
; Initialize the global variables. sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 ; Instrument #1. instr 1 kamp = 30000 ifn = 2 ibas = 1 ; Play the audio sample stored in Table #1. k1 oscil 1, 10, 1 a1 oscil kamp*k1, 440, ifn out a1 endin
2577
</CsInstruments> <CsScore> ; Table #1: read an audio file (using GEN01). f 1 0 131072 "exp" 0 10 0 f 2 0 8192 10 1 ; Play Instrument #1 for 2 seconds. i 1 0 2 e </CsScore> </CsoundSynthesizer>
See Also
GENexp and GENsone.
Credits
Written by Victor Lazzarini
2578
GENsone
"sone" Generate a table with values of the sone function.
Description
Creates an ftable with values of the sone function for equal power.
Syntax
f # time size "sone" start end equalpoint rescale
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). start, end -- first and last value to be stored. The points stored are uniformly spaced between these to the table size. equalpoint -- the point on the curve when the input and output values are equal. rescale -- if not zero the table is not rescaled The table is filled with the function x*POWER(x/eqlp, FL(33.0)/FL(78.0)) for x between the start and end points. This is the Sone loudness curve.
Examples
Here is a simple example of the GENsone routine. It uses the file gensone.csd [examples/gensone.csd]. It will generate a simple sone shaped output wave.
2579
; Create an amplitude envelope. kenv linseg 0, p3*0.25, 1, p3*0.75, 0 kamp tablei 16384*kenv, 2 a1 oscil 30000*kamp, kcps, 1 out a1 endin </CsInstruments> <CsScore> ; Table #1, a sine wave. f 1 0 16384 10 1 f 2 0 16384 "sone" 1 32000 32000 0 ; i ; i ; i ; i e Play Instrument 1 0 0.5 8.00 Play Instrument 1 1 0.5 8.01 Play Instrument 1 2 0.5 8.02 Play Instrument 1 3 0.5 8.03 #1 for a half-second, p4=8.00 #1 for a half-second, p4=8.01 #1 for a half-second, p4=8.02 #1 for a half-second, p4=8.03
</CsScore> </CsoundSynthesizer>
See Also
GENexp and GENtanh.
Credits
Written by Victor Lazzarini
2580
GENfarey
"farey" Fills a table with the Farey Sequence Fn of the integer n.
Description
A Farey Sequence Fn of order n is a list of fractions in their lowest terms between 0 and 1 and in ascending order. Their denominators do not exceed n. This means a fraction a/b belongs to Fn if 0 # a # b # n. The numerator and denominator of each fraction are always coprime. 0 and 1 are included in Fn as the fractions 0/1 and 1/1. For example F5 = {0/1, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1/1} Some properties of the Farey Sequence: If a/b and c/d are two successive terms of Fn, then bc - ad = 1. If a/b, c/d, e/f are three successive terms of Fn, then: c/d = (a+e) / (b+f). In this case c/d is called the mediant fraction between a/b and e/f. If n > 1, then no two successive terms ofFn have the same denominator. The length of any Farey Sequence Fn is determined by |Fn| = 1 + SUM over n (phi(m)) where phi(m) is Euler's totient function, which gives the number of integers # m that are coprime to m. Some values for the length of Fn given n: n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2581 Fn 2 3 5 7 11 13 19 23 29 33 43 47 59 65 73 81 97 103 121 129
Syntax
f # time size "farey" fareynum mode
Initialization
size -- number of points in the table. Must be a power of 2 or power-of-2 plus 1 (see f statement). fareynum -- the integer n for generating Farey Sequence Fn mode -- integer to trigger a specific output to be written into the table: 0 -- outputs floating point numbers representing the elements of Fn. 1 -- outputs delta values of successive elements of Fn, useful for generating note durations for example. 2 -- outputs only the denominators of the integer ratios, useful for indexing other tables or instruments for example. 3 -- same as mode 2 but with normalised output. 4 -- same as mode 0 but with 1 added to each number, useful for generating tables for tuning opcodes, for example cps2pch.
Examples
f1 0 -23 "farey" 8 0
Generates generates Farey Sequence F8. The table contains all 23 elements of F8 as floating point numbers.
f1 0 -18 "farey" 7 1
This generates Farey Sequence F7. The table contains 18 delta values of F7, i.e. the difference between ri+1 - ri, where r is the ith element of Fn.
f1 0 -43 "farey" 11 2
This generates Farey Sequence F11. The table contains the denominators of all 43 fractions in F11.
f1 0 -43 "farey" 11 3
This generates Farey Sequence F11. The table contains the denominators of all 43 fractions in F11, each of those divided by 11, i.e. normalised.
f1 0 -18 "farey" 7 4
This generates Farey Sequence F7. The table contains all fractions of F7, same as mode 0, but this time '1' is added to each table element.
2582
Credits
Author: Georg Boenn University of Glamorgan 2010 New in Csound version 5.13
2583
In the first, the utility is invoked as part of the Csound executable, while in the second it is called as a standalone program. The second is smaller by about 200K, but the two forms are identical in function. The first is convenient in not requiring the maintenance and use of several independent programs - one program does all. When using this form, a -U flag detected in the command line will cause all subsequent flags and names to be interpreted as per the named utility; i.e. Csound generation will not occur, and the program will terminate at the end of utility processing.
Directories.
Filenames are of two kinds, source soundfiles and resultant analysis files. Each has a hierarchical naming convention, influenced by the directory from which the Utility is invoked. Source soundfiles with a full pathname (begins with dot (.), slash (/), or for ThinkC includes a colon (:)), will be sought only in the directory named. Soundfiles without a path will be sought first in the current directory, then in the directory named by the SSDIR environment variable (if defined), then in the directory named by SFDIR. An unsuccessful search will return a "cannot open" error. Resultant analysis files are written into the current directory, or to the named directory if a path is included. It is tidy to keep analysis files separate from sound files, usually in a separate directory known to the SADIR variable. Analysis is conveniently run from within the SADIR directory. When an analysis file is later invoked by a Csound generator it is sought first in the current directory, then in the directory defined by SADIR.
Soundfile Formats.
Csound can read and write audio files in a variety of formats. Write formats are described by Csound command flags. On reading, the format is determined from the soundfile header, and the data automatically converted to floating-point during internal processing. When Csound is installed on a host with local soundfile conventions (SUN, NeXT, Macintosh) it may conditionally include local packaging code which creates soundfiles not portable to other hosts. However, Csound on any host can always generate and read AIFF files, which is thus a portable format. Sampled sound libraries are typically AIFF, and the variable SSDIR usually points to a directory of such sounds. If defined, the SSDIR directory is in the search path during soundfile access. Note that some AIFF sampled sounds have an audio looping feature for sustained performance; the analysis programs will traverse any loop segment once only. For soundfiles without headers, an SR value may be supplied by the -r flag (or its default). If both the SR header and the command-line flag are present, the flag value will override the header. 2584
When sound is accessed by the audio Analysis programs, only a single channel is read. For stereo or quad files, the default is channel one; alternate channels may be obtained on request.
2585
atsa
atsa Performs ATS analysis on a soundfile.
Description
ATS analysis for use with the Csound ATS Resynthesis opcodes.
Syntax
csound -U atsa [flags] infilename outfilename
Initialization
The following flags can be set for atsa (The default values are stated in parenthesis): -b start (0.000000 seconds) -e duration (0.000000 seconds or end) -l lowest frequency (20.000000 Hertz) -H highest frequency (20000.000000 Hertz) -d frequency deviation (0.100000 of partial freq.) -c window cycles (4 cycles) -w window type (type: 1) (Options: 0=BLACKMAN, 1=BLACKMAN_H, 2=HAMMING, 3=VONHANN) -h hop size (0.250000 of window size) -m lowest magnitude (-60.000000) -t track length (3 frames) -s min. segment length (3 frames) -g min. gap length (3 frames) -T SMR threshold (30.000000 dB SPL) -S min. segment SMR (60.000000 dB SPL) -P last peak contribution (0.000000 of last peak's parameters) -M SMR contribution (0.500000) -F File Type (type: 4) (Options: 1=amp.and freq. only, 2=amp.,freq. and phase, 3=amp.,freq. and residual, 4=amp.,freq.,phase, and residual)
Parameters
ATS analysis was devised by Juan Pampin. For complete information on ATS visit: http://www-ccrma.stanford.edu/~juan/ATS.html. Analysis parameters must be carefully tuned for the Analysis Algorithm (ATSA) to properly capture the nature of the signal to be analyzed. As there are a significant number of them, ATSH offers the possibility of Saving/Loading them in a Binary File carrying the extension "*.apf". The extension is not mandatory, but recommended. A brief explanation of each Analysis Parameters follows: 1. Start (secs.): the starting time of the analysis in seconds. 2. Duration (secs.): the duration time of the analysis in seconds. A zero means the whole duration of the input sound file. 3. Lowest Frequency (Hz.): this parameter will partially determine the size of the Analysis Window to be used. To compute the size of the Analysis Window, the period of the Lowest Frequency in samples (SR / LF) is multiplied by the number of cycles of it the user wants to fit in the Analysis Window (see parameter 6). This value is rounded to the next power of two to determine the size of 2586
the FFT for the analysis. The remaining samples are zero-padded. If the signal is a single, harmonic sound, then the value of the Lowest Frequency should be its fundamental frequency or a subharmonic of it. If it is not harmonic, then its lowest significant frequency component may be a good starting value. 4. Highest Frequency (Hz.): highest frequency to be taken into account for Peak Detection. Once it is determined that no relevant information is found beyond a certain frequency, the analysis may be faster and more accurate setting the Highest Frequency parameter to that value. 5. Frequency Deviation (Ratio): frequency deviation allowed for each peak in the Peak Continuation Algorithm, as a ratio of the frequency involved. For instance, considering a peak at 440 Hz and a Deviation of .1 will produce that the Peak Continuation Algorithm will only try to find candidates for its continuation between 396 and 484 Hz (10% above and below the frequency of the peak). A small value is likely to produce more trajectories whilst a large value will reduce them, but at the cost of rendering information difficult to be further processed. 6. Number of Cycles of Lowest Frequency to fit in Analysis Window: this will also partially determine the size of the Fourier Analysis Window to be used. See Parameter 3. For single harmonic signals, it is supposed to be more than one (typically 4). 7. Hop Size (Ratio): size of the gap between one Analysis Window and the next expressed as a ratio of the Window Size. For instance, a Hop Size value of .25 will "jump" by 512 samples (Windows will overlap for a 75% of their size). This parameter will also determine the size of the analysis frames obtained. Signals that change their spectra very fast (such as Speech sounds) may need a high frame rate in order to properly track their changes. 8. Amplitude Threshold (dB): the highest amplitude value to be taken into account for Peak Detection. 9. Window Type: the shape of the smoothing function to be used for the Fourier Analysis. There are four choices available at present: Blackman, Blackman-Harris, Von Hann, and Hanning. Precise specifications about them are easily found on D.S.P. bibliography. 10 Track Length (Frames): The Peak Continuation Algorithm will "look-back" by Length frames in or. der to do its job better, preventing frequency trajectories from curving too much and loosing stability. However, a large value for this parameter will slow down the analysis significantly. 11 Minimal Segment Length (Frames): once the analysis is done, the spectral data can be further . "cleaned" up during post-processing. Trajectories shorter than this value are suppressed if their average SMR is below Minimal Segment SMR (see parameters 16 and 14). This might help to avoid nonrelevant sudden changes while keeping a high frame rate, reducing also the number of intermittent sinusoids during synthesis. 12 Minimal Gap Length (Frames): as parameter 11, this one is also used to clean up the data during . post-processing. In this case, gaps (zero amplitude values, i.e. theoretical "silence") longer than Length frames are filled up with amplitude/frequency values obtained by linear interpolation of the adjacent active frames. This parameter prevents sudden interruptions of stable trajectories while keeping a high frame rate. 13 SMR Threshold (dB SPL): also a post-processing parameter, the SMR Threshold is used to eliminate . partials with low averages. 14 Minimal Segment SMR (dB SPL): this parameter is used in combination with parameter 11. Short . segments with SMR average below this value will be removed during post-processing. 15 Last Peak Contribution (0 to 1): as explained in Parameter 10, the Peak Continuation Algorithm . "looks-back" several number of frames to do its job better. This parameter will help to weight the contribution of the first precedent peak over the others. A zero value means that all precedent peaks (to the size of Parameter 10) are equally taken in account. 2587
16 SMR Contribution (0 to 1): In addition to the proximity in frequency of the peaks, the ATS Peak . Continuation Algorithm may use psycho-acoustic information (the Signal-to-Mask-Ratio, or SMR) to improve the perceptual results. This parameter indicates how much the SMR information is used during tracking. For instance, a value of .5 makes the Peak Continuation Algorithm to use a 50% of SMR information and a 50% of Frequency Proximity information to decide which is the best candidate to continue a sinusoidal track.
Examples
The following command:
atsa -b0.1 -e1 -l100 -H10000 -w2 audiofile.wav audiofile.ats
Generates the ATS analysis file 'audiofile.ats' from the original 'audiofile.wav' file. It begins analysis from second 0.1 of the file and the analysis is performed for 1 second thereafter. The lowest frequency stored is 100 Hz and the highest is 10kHz. A Hamming window is used for each analysis frame.
2588
cvanal
cvanal Converts a soundfile into a single Fourier transform frame.
Description
Impulse Response Fourier Analysis for convolve operator
Syntax
csound -U cvanal [flags] infilename outfilename cvanal [flags] infilename outfilename
Initialization
cvanal -- converts a soundfile into a single Fourier transform frame. The output file can be used by the convolve operator to perform Fast Convolution between an input signal and the original impulse response. Analysis is conditioned by the flags below. A space is optional between the flag and its argument. -s rate -- sampling rate of the audio input file. This will over-ride the srate of the soundfile header, which otherwise applies. If neither is present, the default is 10000. -c channel -- channel number sought. If omitted, the default is to process all channels. If a value is given, only the selected channel will be processed. -b begin -- beginning time (in seconds) of the audio segment to be analyzed. The default is 0.0 -d duration -- duration (in seconds) of the audio segment to be analyzed. The default of 0.0 means to the end of the file.
Examples
cvanal asound cvfile
will analyze the soundfile "asound" to produce the file "cvfile" for the use with convolve. To use data that is not already contained in a soundfile, a soundfile converter that accepts text files may be used to create a standard audio file, e.g., the .DAT format for SOX. This is useful for implementing FIR filters. Files The output file has a special convolve header, containing details of the source audio file. The analysis data is stored as float, in rectangular (real/imaginary) form.
Note
The analysis file is not system independent! Ensure that the original impulse recording/ data is retained. If/when required, the analysis file can be recreated.
Credits
2589
Author: Greg Sullivan Based on algorithm given in Elements Of Computer Music, by F. Richard Moore.
2590
hetro
hetro Decomposes an input soundfile into component sinusoids.
Description
Hetrodyne filter analysis for the Csound adsyn generator.
Syntax
csound -U hetro [flags] infilename outfilename hetro [flags] infilename outfilename
Initialization
hetro takes an input soundfile, decomposes it into component sinusoids, and outputs a description of the components in the form of breakpoint amplitude and frequency tracks. Analysis is conditioned by the control flags below. A space is optional between flag and value. -s srate -- sampling rate of the audio input file. This will over-ride the srate of the soundfile header, which otherwise applies. If neither is present, the default is 10000. Note that for adsyn synthesis the srate of the source file and the generating orchestra need not be the same. -c channel -- channel number sought. The default is 1. -b begin -- beginning time (in seconds) of the audio segment to be analyzed. The default is 0.0 -d duration -- duration (in seconds) of the audio segment to be analyzed. The default of 0.0 means to the end of the file. Maximum length is 32.766 seconds. -f begfreq -- estimated starting frequency of the fundamental, necessary to initialize the filter analysis. The default is 100 (cps). -h partials -- number of harmonic partials sought in the audio file. Default is 10, maximum is a function of memory available. -M maxamp -- maximum amplitude summed across all concurrent tracks. The default is 32767. -m minamp -- amplitude threshold below which a single pair of amplitude/frequency tracks is considered dormant and will not contribute to output summation. Typical values: 128 (48 db down from full scale), 64 (54 db down), 32 (60 db down), 0 (no thresholding). The default threshold is 64 (54 db down). -n brkpts -- initial number of analysis breakpoints in each amplitude and frequency track, prior to thresholding (-m) and linear breakpoint consolidation. The initial points are spread evenly over the duration. The default is 256. -l cutfreq -- substitute a 3rd order Butterworth low-pass filter with cutoff frequency cutfreq (in Hz), in place of the default averaging comb filter. The default is 0 (don't use).
Performance
As of Csound 4.08, hetro can write SDIF ouput files if the output file name ends with ".sdif" or ".SDIF". See the sdif2ad utility for more information about the Csound's SDIF support.
Examples
2591
This will analyze 2.5 seconds of channel 1 of a file "audiofile.test", recorded at 44.1 kHz, beginning .5 seconds from the start, and place the result in a file "adsynfile7". We request just the first 16 harmonics of the sound, with 256 initial breakpoint values per amplitude or frequency track, and a peak summation amplitude of 24000. The fundamental is estimated to begin at 100 Hz. Amplitude thresholding is at 54 db down. The Butterworth LPF is not enabled. File Format The output file contains time-sequenced amplitude and frequency values for each partial of an additive complex audio source. The information is in the form of breakpoints (time, value, time, value, ....) using 16-bit integers in the range 0 - 32767. Time is given in milliseconds, and frequency in Hertz (cps). The breakpoint data is exclusively non-negative, and the values -1 and -2 uniquely signify the start of new amplitude and frequency tracks. A track is terminated by the value 32767. Before being written out, each track is data-reduced by amplitude thresholding and linear breakpoint consolidation. A component partial is defined by two breakpoint sets: an amplitude set, and a frequency set. Within a composite file these sets may appear in any order (amplitude, frequency, amplitude ....; or amplitude, amplitude..., then frequency, frequency,...). During adsyn resynthesis the sets are automatically paired (amplitude, frequency) from the order in which they were found. There should be an equal number of each. A legal adsyn control file could have following format:
-1 -2 -1 -2 -2 -2 -1 -1
... timeK valueK ... timeL valueL ... timeM valueM ... timeN valueN .......... .......... .......... ..........
; ; ; ;
1 1 2 2
Credits
Author: Tom Sullivan 1992 Author: John ffitch 1994 Author: Richard Dobson 2000 October 2002. Thanks to Rasmus Ekman, added a note about the SDIF format.
2592
lpanal
lpanal Performs both linear predictive and pitch-tracking analysis on a soundfile.
Description
Linear predictive analysis for the Csound Linear Predictive Coding (LPC) Resynthesis opcodes.
Syntax
csound -U lpanal [flags] infilename outfilename lpanal [flags] infilename outfilename
Initialization
lpanal performs both lpc and pitch-tracking analysis on a soundfile to produce a time-ordered sequence of frames of control information suitable for Csound resynthesis. Analysis is conditioned by the control flags below. A space is optional between the flag and its value. -a -- [alternate storage] asks lpanal to write a file with filter poles values rather than the usual filter coefficient files. When lpread / lpreson are used with pole files, automatic stabilization is performed and the filter should not get wild. (This is the default in the Windows GUI) - Changed by Marc Resibois. -s srate -- sampling rate of the audio input file. This will over-ride the srate of the soundfile header, which otherwise applies. If neither is present, the default is 10000. -c channel -- channel number sought. The default is 1. -b begin -- beginning time (in seconds) of the audio segment to be analyzed. The default is 0.0 -d duration -- duration (in seconds) of the audio segment to be analyzed. The default of 0.0 means to the end of the file. -p npoles -- number of poles for analysis. The default is 34, the maximum 50. -h hopsize -- hop size (in samples) between frames of analysis. This determines the number of frames per second (srate / hopsize) in the output control file. The analysis framesize is hopsize * 2 samples. The default is 200, the maximum 500. -C string -- text for the comments field of the lpfile header. The default is the null string. -P mincps -- lowest frequency (in Hz) of pitch tracking. -P0 means no pitch tracking. -Q maxcps -- highest frequency (in Hz) of pitch tracking. The narrower the pitch range, the more accurate the pitch estimate. The defaults are -P70, -Q200. -v verbosity -- level of terminal information during analysis. 0 = none 1 = verbose 2 = debug
2593
The default is 0.
Examples
lpanal -a -p26 -d2.5 -P100 -Q400 audiofile.test lpfil22
will analyze the first 2.5 seconds of file "audiofile.test", producing srate/200 frames per second, each containing 26-pole filter coefficients and a pitch estimate between 100 and 400 Hertz. Stabilized (-a) output will be placed in "lpfil22" in the current directory. File Format Output is a file comprised of an identifiable header plus a set of frames of floating point analysis data. Each frame contains four values of pitch and gain information, followed by npoles filter coefficients. The file is readable by Csound's lpread. lpanal is an extensive modification of Paul Lanksy's lpc analysis programs.
2594
pvanal
pvanal Converts a soundfile into a series of short-time Fourier transform frames.
Description
Fourier analysis for the Csound pvoc generator
Syntax
csound -U pvanal [flags] infilename outfilename pvanal [flags] infilename outfilename
Initialization
pvanal converts a soundfile into a series of short-time Fourier transform (STFT) frames at regular timepoints (a frequency-domain representation). The output file can be used by pvoc to generate audio fragments based on the original sample, with timescales and pitches arbitrarily and dynamically modified. Analysis is conditioned by the flags below. A space is optional between the flag and its argument. -s srate -- sampling rate of the audio input file. This will over-ride the srate of the soundfile header, which otherwise applies. If neither is present, the default is 10000. -c channel -- channel number sought. The default is 1. -b begin -- beginning time (in seconds) of the audio segment to be analyzed. The default is 0.0 -d duration -- duration (in seconds) of the audio segment to be analyzed. The default of 0.0 means to the end of the file. -n frmsiz -- STFT frame size, the number of samples in each Fourier analysis frame. Must be a power of two, in the range 16 to 16384. For clean results, a frame must be larger than the longest pitch period of the sample. However, very long frames result in temporal "smearing" or reverberation. The bandwidth of each STFT bin is determined by sampling rate / frame size. The default framesize is the smallest power of two that corresponds to more than 20 milliseconds of the source (e.g. 256 points at 10 kHz sampling, giving a 25.6 ms frame). -w windfact -- Window overlap factor. This controls the number of Fourier transform frames per second. Csound's pvoc will interpolate between frames, but too few frames will generate audible distortion; too many frames will result in a huge analysis file. A good compromise for windfact is 4, meaning that each input point occurs in 4 output windows, or conversely that the offset between successive STFT frames is framesize/4. The default value is 4. Do not use this flag with -h. 2595
-h hopsize -- STFT frame offset. Converse of above, specifying the increment in samples between successive frames of analysis (see also lpanal). Do not use with -w. -H -- Use a Hamming window instead of the default von Hann window. -K -- Use a Kaiser window instead of the default von Hann window. The Kaiser parameter default is 6.8, but can be set with the -B option. -B beta -- Set the beta parameter for any Kaiser window used to the floating point value beta.
Examples
pvanal asound pvfile
will analyze the soundfile "asound" using the default frmsiz and windfact to produce the file "pvfile" suitable for use with pvoc. Files The output file has a special pvoc header containing details of the source audio file, the analysis frame rate and overlap. Frames of analysis data are stored as float, with the magnitude and frequency (in Hz) for the first N/2 + 1 Fourier bins of each frame in turn. Frequency encodes the phase increment in such a way that for strong harmonics it gives a good indication of the true frequency. For low amplitude or rapidly moving harmonics it is less meaningful. Diagnostics Prints total number of frames, and frames completed every 20th frame.
Credits
Author: Dan Ellis MIT Media Lab Cambridge, Massachussetts 1990
2596
sndinfo
sndinfo Displays information about a soundfile.
Description
Get basic information about one or more soundfiles.
Syntax
csound -U sndinfo [options] soundfilenames ... sndinfo [options] soundfilenames ...
Initialization
sndinfo will attempt to find each named file, open it for reading, read in the soundfile header, then print a report on the basic information it finds. The order of search across soundfile directories is as described above. If the file is of type AIFF, some further details are listed first. There are two option types: 1. -i or -i1 will print instrument information, which includes looping. The option continues until a -i0 option. 2. The other option is -b which prints the broadcast information for WAV files. It can similarly be negated with -b0.
Examples
csound -U sndinfo test Bosendorfer/"BOSEN mf A0 st" foo foo2
where the environment variables SFDIR = /u/bv/sound, and SSDIR = /so/bv/Samples, might produce the following:
util SNDINFO: /u/bv/sound/test: srate 22050, monaural, 16 bit shorts, 1.10 seconds headersiz 1024, datasiz 48500 (24250 sample frames)
/so/bv/Samples/Bosendorfer/BOSEN mf A0 st: AIFF, 197586 stereo samples, base Frq 261.6 (MIDI 60), AIFF soundfile, looping with modes 1, 0 srate 44100, stereo, 16 bit shorts, 4.48 seconds headersiz 402, datasiz 790344 (197586 sample frames)
The following utilities exist for file conversion: HET_EXPORT: Exports a .het (produced by HETRO) to a comma separated text file. HET_IMPORT: Generates a .het (in the format produced by HETRO) from a comma separated text file for usage with the adsyn generator. PVLOOK: View formatted text output of STFT analysis files. PV_EXPORT: Converts a file generated by PVANAL to a text file. PV_IMPORT: Converts a text file (in the format generated by PV_EXPORT) to a PVANAL format file to be used with the pvoc opcode. SDIF2AD: Converts SDIF files to files usable by adsynt. SRCONV: Converts the sample rate of an audio file.
2598
dnoise
dnoise Reduces noise in a file.
Description
This is a noise reduction scheme using frequency-domain noise-gating.
Syntax
dnoise [flags] -i noise_ref_file -o output_soundfile input_soundfile
Initialization
Dnoise specific flags: (no flag) input soundfile to be denoised -i fname input reference noise soundfile -o fname output soundfile -N fnum # of bandpass filters (default: 1024) -w fovlp filter overlap factor: {0,1,(2),3} DON'T USE -w AND -M -M awlen analysis window length (default: N-1 unless -w is specified) -L swlen synthesis window length (default: M) -D dfac decimation factor (default: M/8) -b btim begin time in noise reference soundfile (default: 0) -B smpst starting sample in noise reference soundfile (default: 0) -e etim end time in noise reference soundfile (default: end of file) -E smpend final sample in noise reference soundfile (default: end of file) -t thr threshold above noise reference in dB (default: 30) -S gfact sharpness of noise-gate turnoff, range: 1 to 5 (default: 1) -n numfrm number of FFT frames to average over (default: 5) -m mingain minimum gain of noise-gate when off in dB (default: -40) Soundfile format options: -A AIFF format output -W WAV format output
2599
-J IRCAM format output -h skip soundfile header (not valid for AIFF/WAV output) -8 8-bit unsigned char sound samples -c 8-bit signed_char sound samples -a alaw sound samples -u ulaw sound samples -s short_int sound samples -l long_int sound samples -f float sound samples. Floats also supported for WAV files. (New in Csound 3.47.) Additional options: -R verbose - print status info -H [N] print a heartbeat character at each soundfile write. -- fname output to log file fname -V verbose - print status info
Note
DNOISE also looks at the environment variable SFOUTYP to determine soundfile output format. The -i flag is used for a reference noise file (normally created from a short section of the denoised file, where only noise is audible). The input soundfile to be denoised can be given anywhere on the command line, without a flag.
Performance
This is a noise reduction scheme using frequency-domain noise-gating. This should work best in the case of high signal-to-noise with hiss-type noise. The algorithm is that suggested by Moorer & Berger in Linear-Phase Bandsplitting: Theory and Applications presented at the 76th Convention 1984 October 8-11 New York of the Audio Engineering Society (preprint #2132) except that it uses the Weighted Overlap-Add formulation for short-time Fourier analysis-synthesis in place of the recursive formulation suggested by Moorer & Berger. The gain in each frequency bin is computed independently according to gain = g0 + (1-g0) * [avg / (avg + th*th*nref)] ^ sh where avg and nref are the mean squared signal and noise respectively for the bin in question. (This is slightly different than in Moorer & Berger.)
2600
The critical parameters th and g0 are specified in dB and internally converted to decimal values. The nref values are computed at the start of the program on the basis of a noise_soundfile (specified in the command line) which contains noise without signal. The avg values are computed over a rectangular window of m FFT frames looking both ahead and behind the current time. This corresponds to a temporal extent of m*D/R (which is typically (m*N/8)/R). The default settings of N, M, and D should be appropriate for most uses. A higher sample rate than 16 Khz might indicate a higher N.
Credits
Author: Mark Dolson August 26, 1989 Author: John ffitch December 30, 2000 Updated by Rasmus Ekman on March 11, 2002.
2601
het_export
het_export Converts a .het file to a comma separated text file.
Syntax
het_export het_file cstext_file csound -U het_export het_file cstext_file
Initialization
het_file - Name of the input .het file. cstext_file - Name of the output comma-separated text file. The het_export utility generates a comma-separated text file for manual editing of a .het file produced by the HETRO utility. It can be used in combination with het_import to produce data for the adsyn generator.
Credits
Author: John ffitch 1995
2602
het_import
het_import Converts a comma-separated text file to a .het file.
Syntax
het_import cstext_file het_file csound -U het_import cstext_file het_file
Initialization
cstext_file - Name of the input comma-separated text file. het_file - Name of the output .het file. The het_import utility generates a .het file usable with the adsyn generator. It can be used in combination with het_export to modify sound analysis made by the HETRO utility.
Credits
Author: John ffitch 1995
2603
pvlook
pvlook View formatted text output of STFT analysis files.
Description
View formatted text output of STFT analysis files created with pvanal.
Syntax
csound -U pvlook [flags] infilename pvlook [flags] infilename
Initialization
pvlook reads a file, and frequency and amplitude trajectories for each of the analysis bins, in readable text form. The file is assumed to be an STFT analysis file created by pvanal. By default, the entire file is processed. -bb n -- begin at analysis bin number n, numbered from 1. Default is 1. -eb n -- end at analysis bin number n. Defaults to the highest. -bf n -- begin at analysis frame number n, numbered from 1. Defaults to 1. -ef n -- end at analysis frame number n. Defaults to the highest. -i -- prints values as integers. Defaults to floating point.
Examples
$ csound -U pvlook test.pv Using csound.txt Csound Version 3.57 (Aug 3 1999) util PVLOOK: ; Bins in Analysis: 513 ; First Bin Shown: 1 ; Number of Bins Shown: 513 ; Frames in Analysis: 1184 ; First Frame Shown: 1 ; Number of Data Frames Shown: 1184 Bin 1 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 Freqs.0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 87.891 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
2604
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 -87.891 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 87.891 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
2605
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 Bin 1 0.252 0.248 0.245 0.251 0.249 0.246 0.250 0.251 0.246 0.249 0.252 0.245 0.248 0.252 0.246 0.248 0.251 0.248 0.247 0.252 0.248 0.245 0.252 0.249 0.245 0.251 0.249 0.245 0.249 0.250 0.245 0.248 0.251 0.245 0.248 0.251 0.245 0.247 0.251 0.246 0.247 0.250 0.248 0.245 0.251 0.248 0.245 0.251 0.248 0.245 0.250 0.249 0.178 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 Amps. 0.251 0.247 0.246 0.252 0.248 0.245 0.253 0.248 0.246 0.252 0.249 0.246 0.250 0.250 0.245 0.249 0.251 0.244 0.249 0.251 0.245 0.249 0.251 0.247 0.247 0.252 0.247 0.245 0.252 0.247 0.245 0.251 0.248 0.245 0.250 0.249 0.245 0.249 0.250 0.244 0.249 0.251 0.245 0.248 0.250 0.246 0.247 0.250 0.247 0.246 0.251 0.247 0.008 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.180 0.250 0.244 0.250 0.250 0.245 0.249 0.251 0.247 0.247 0.252 0.247 0.247 0.253 0.247 0.247 0.252 0.248 0.246 0.250 0.250 0.245 0.250 0.250 0.244 0.250 0.250 0.245 0.249 0.251 0.246 0.247 0.251 0.246 0.246 0.252 0.246 0.246 0.251 0.247 0.246 0.250 0.248 0.245 0.249 0.250 0.244 0.250 0.250 0.245 0.249 0.250 0.246 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.066 0.248 0.246 0.251 0.249 0.245 0.252 0.249 0.245 0.251 0.249 0.246 0.249 0.251 0.246 0.248 0.252 0.246 0.248 0.252 0.246 0.248 0.251 0.247 0.247 0.251 0.249 0.245 0.251 0.249 0.245 0.251 0.249 0.245 0.249 0.250 0.246 0.248 0.251 0.245 0.247 0.251 0.245 0.247 0.250 0.246 0.246 0.250 0.248 0.246 0.251 0.249 0.245 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.252 0.244 0.249 0.252 0.246 0.249 0.252 0.247 0.247 0.252 0.248 0.246 0.253 0.248 0.246 0.251 0.248 0.246 0.250 0.250 0.245 0.249 0.251 0.244 0.249 0.251 0.245 0.248 0.251 0.247 0.247 0.251 0.248 0.245 0.251 0.247 0.245 0.251 0.248 0.245 0.250 0.249 0.245 0.249 0.250 0.245 0.248 0.251 0.245 0.248 0.250 0.246 0.247 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.248 0.245 0.250 0.250 0.245 0.251 0.251 0.244 0.250 0.251 0.246 0.249 0.251 0.247 0.248 0.252 0.247 0.247 0.253 0.247 0.247 0.251 0.248 0.246 0.250 0.250 0.245 0.250 0.250 0.244 0.250 0.250 0.245 0.249 0.250 0.246 0.247 0.251 0.246 0.246 0.251 0.247 0.246 0.251 0.247 0.246 0.250 0.249 0.245 0.250 0.249 0.244 0.249 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.245 0.248 0.253 0.247 0.248 0.252 0.249 0.247 0.252 0.249 0.245 0.252 0.249 0.244 0.251 0.250 0.245 0.250 0.251 0.246 0.248 0.252 0.246 0.247 0.252 0.246 0.247 0.251 0.247 0.247 0.251 0.249 0.245 0.251 0.249 0.245 0.250 0.249 0.245 0.249 0.250 0.246 0.248 0.251 0.246 0.247 0.251 0.245 0.247 0.251 0.246 0.246 0.250 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.246 0.250 0.251 0.245 0.249 0.252 0.245 0.249 0.252 0.246 0.249 0.252 0.247 0.246 0.252 0.248 0.245 0.252 0.248 0.245 0.252 0.248 0.245 0.249 0.250 0.245 0.248 0.251 0.245 0.248 0.252 0.246 0.248 0.251 0.247 0.247 0.250 0.248 0.245 0.251 0.248 0.245 0.251 0.248 0.246 0.250 0.249 0.245 0.248 0.250 0.245 0.248 0.251 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.246 0.254 0.247 0.246 0.252 0.249 0.246 0.250 0.251 0.245 0.250 0.251 0.245 0.250 0.251 0.246 0.249 0.251 0.247 0.247 0.252 0.247 0.246 0.252 0.247 0.246 0.251 0.247 0.246 0.250 0.249 0.245 0.249 0.251 0.244 0.249 0.250 0.245 0.248 0.250 0.246 0.247 0.251 0.247 0.246 0.251 0.247 0.246 0.251 0.247 0.246 0.250 0.287 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.249 0.251 0.246 0.247 0.253 0.246 0.248 0.253 0.247 0.248 0.252 0.248 0.246 0.251 0.250 0.245 0.251 0.250 0.245 0.251 0.249 0.245 0.249 0.251 0.246 0.248 0.252 0.246 0.246 0.252 0.246 0.247 0.251 0.247 0.246 0.250 0.249 0.245 0.250 0.249 0.245 0.250 0.249 0.245 0.249 0.249 0.246 0.248 0.250 0.246 0.247 0.251 0.331 0.000 0.000 0.000 0.000 0.000 0.000 0.000
2606
0.000 0.000 0.000 0.000 0.000 0.000 0.140 3.292 3.296 3.292 3.294 3.292 3.295 3.292 3.291 3.296 3.288 3.294 3.294 3.290 3.294 3.292 3.293 3.292 3.293 3.293 3.289 3.295 3.291 3.290 3.294 3.290 3.292 3.291 3.292 3.291 3.290 3.294 3.288 3.291 3.293 3.288 3.293 3.291 3.290 3.291 3.290 3.292 3.288 3.293 3.290 3.288 3.293 3.288 3.290 3.291 3.289 3.290 3.289
0.000 0.000 0.000 0.000 0.000 0.000 1.265 3.291 3.297 3.293 3.291 3.297 3.290 3.293 3.294 3.291 3.293 3.291 3.295 3.290 3.292 3.294 3.288 3.295 3.292 3.290 3.293 3.291 3.292 3.290 3.293 3.292 3.289 3.295 3.290 3.291 3.294 3.290 3.291 3.291 3.292 3.290 3.290 3.293 3.288 3.292 3.292 3.288 3.293 3.290 3.290 3.290 3.290 3.290 3.288 3.293 3.289 3.289 3.292
0.000 0.000 0.000 0.000 0.000 0.000 2.766 3.297 3.292 3.294 3.293 3.294 3.294 3.290 3.296 3.291 3.292 3.296 3.289 3.293 3.293 3.291 3.292 3.291 3.294 3.289 3.293 3.293 3.289 3.295 3.291 3.291 3.293 3.291 3.292 3.290 3.293 3.290 3.290 3.294 3.288 3.291 3.292 3.289 3.292 3.291 3.292 3.289 3.291 3.292 3.287 3.293 3.290 3.288 3.292 3.289 3.290 3.289 3.291
0.000 0.000 0.000 0.000 0.000 0.000 3.289 3.295 3.295 3.290 3.297 3.292 3.292 3.296 3.291 3.293 3.292 3.293 3.292 3.291 3.295 3.289 3.293 3.294 3.289 3.294 3.292 3.292 3.291 3.292 3.293 3.289 3.294 3.291 3.289 3.295 3.290 3.291 3.292 3.291 3.291 3.290 3.293 3.289 3.291 3.293 3.288 3.292 3.291 3.289 3.291 3.291 3.291 3.288 3.292 3.291 3.287 3.292 3.289
0.000 0.000 0.000 0.000 0.000 0.000 3.296 3.294 3.292 3.295 3.292 3.295 3.292 3.296 3.293 3.290 3.297 3.291 3.292 3.295 3.291 3.293 3.292 3.293 3.291 3.291 3.295 3.288 3.294 3.293 3.289 3.294 3.291 3.292 3.291 3.292 3.292 3.289 3.294 3.290 3.290 3.294 3.289 3.291 3.291 3.291 3.291 3.290 3.292 3.288 3.291 3.292 3.287 3.292 3.290 3.290 3.290 3.290 3.291
0.000 0.000 0.000 0.000 0.000 0.000 3.293 3.296 3.290 3.295 3.295 3.290 3.297 3.292 3.293 3.294 3.292 3.294 3.291 3.296 3.292 3.291 3.296 3.289 3.293 3.293 3.291 3.292 3.291 3.294 3.290 3.293 3.293 3.288 3.294 3.291 3.290 3.293 3.290 3.291 3.290 3.293 3.291 3.289 3.294 3.288 3.291 3.292 3.288 3.291 3.290 3.291 3.289 3.290 3.292 3.287 3.292 3.290 3.288
0.000 0.000 0.000 0.000 0.000 0.000 3.296 3.291 3.295 3.292 3.294 3.292 3.293 3.295 3.290 3.296 3.293 3.291 3.296 3.291 3.293 3.293 3.293 3.292 3.290 3.295 3.289 3.291 3.294 3.289 3.293 3.292 3.291 3.292 3.291 3.293 3.289 3.293 3.292 3.288 3.294 3.290 3.290 3.292 3.290 3.291 3.290 3.293 3.289 3.290 3.293 3.288 3.291 3.291 3.289 3.291 3.290 3.291
0.000 0.000 0.000 0.000 0.000 0.000 3.296 3.292 3.293 3.296 3.288 3.295 3.293 3.291 3.295 3.292 3.294 3.292 3.294 3.294 3.290 3.296 3.291 3.291 3.295 3.290 3.292 3.291 3.292 3.291 3.291 3.294 3.289 3.293 3.293 3.289 3.293 3.291 3.291 3.291 3.291 3.292 3.289 3.293 3.290 3.289 3.293 3.289 3.290 3.291 3.290 3.290 3.289 3.292 3.288 3.290 3.292 3.287
0.000 0.000 0.000 0.000 0.000 0.000 3.290 3.294 3.294 3.293 3.293 3.292 3.295 3.290 3.294 3.295 3.289 3.296 3.292 3.291 3.294 3.292 3.294 3.290 3.294 3.292 3.290 3.295 3.289 3.292 3.294 3.290 3.292 3.291 3.292 3.290 3.291 3.293 3.288 3.293 3.291 3.289 3.293 3.290 3.291 3.290 3.291 3.291 3.288 3.293 3.288 3.289 3.292 3.288 3.291 3.290 3.290 3.289
0.000 0.000 0.000 0.000 0.000 0.000 3.293 3.291 3.297 3.291 3.293 3.295 3.290 3.294 3.293 3.293 3.292 3.292 3.295 3.289 3.295 3.293 3.289 3.295 3.290 3.292 3.292 3.291 3.292 3.290 3.295 3.290 3.291 3.295 3.288 3.292 3.292 3.290 3.291 3.291 3.292 3.289 3.292 3.292 3.288 3.293 3.290 3.289 3.292 3.289 3.290 3.289 3.291 3.289 3.289 3.293 3.287 3.290
etc...
Credits
Author: Richard Karpen Seattle, Wash 1993 (New in Csound version 3.57)
2607
pv_export
pv_export Converts a .pvx file to a comma separated text file.
Syntax
pv_export pv_file cstext_file csound -U pv_export pv_file cstext_file
Initialization
pv_file - Name of the input .pvx file. cstext_file - Name of the output comma-separated text file. The pv_export utility generates a comma-separated text file for manual editing of a .pvx file produced by the PVANAL utility. It can be used in combination with pv_import to produce data for the pvoc generator.
Credits
Author: John ffitch 1995
2608
pv_import
pv_import Converts a comma-separated text file to a .pvx file.
Syntax
pv_import cstext_file pv_file csound -U pv_import cstext_file pv_file
Initialization
cstext_file - Name of the input comma-separated text file. pv_file - Name of the output .pvx file. The pv_import utility generates a .pvx file usable with the pvoc generator. It can be used in combination with pv_export to modify sound analysis made by the PVANAL utility.
Credits
Author: John ffitch 1995
2609
sdif2ad
sdif2ad Converts SDIF files to files usable by adsyn.
Description
Convert files Sound Description Interchange Format (SDIF) to the format usable by Csound's adsyn opcode. As of Csound version 4.10, sdif2ad was available only as a standalone program for Windows console and DOS.
Syntax
sdif2ad [flags] infilename outfilename
Initialization
Flags: -sN -- apply amplitude scale factor N -pN -- keep only the first N partials. Limited to 1024 partials. The source partial track indices are used directly to select internal storage. As these can be arbitrary values, the maximum of 1024 partials may not be realized in all cases. -r -- byte-reverse output file data. The byte-reverse option is there to facilitate transfer across platforms, as Csound's adsyn file format is not portable. If the filename passed to hetro has the extension .sdif, data will be written in SDIF format as 1TRC frames of additive synthesis data. The utility program sdif2ad can be used to convert any SDIF file containing a stream of 1TRC data to the Csound adsyn format. sdif2ad allows the user to limit the number of partials retained, and to apply an amplitude scaling factor. This is often necessary, as the SDIF specification does not, as of the release of sdif2ad, require amplitudes to be within a particular range. sdif2ad reports information about the file to the console, including the frequency range. The main advantages of SDIF over the adsyn format, for Csound users, is that SDIF files are fully portable across platforms (data is big-endian), and do not have the duration limit of 32.76 seconds imposed by the 16 bit adsyn format. This limit is necessarily imposed by sdif2ad. Eventually, SDIF reading will be incorporated directly into adsyn, thus enabling files of any length (subject to system memory limits) to be analysed and processed. Users should remember that the SDIF formats are still under development. While the 1TRC format is now fairly well established, it can still change. For detailed information on the Sound Description Interchange Format, refer to the CNMAT website: http://cnmat.CNMAT.Berkeley.EDU/SDIF Some other SDIF resources (including a viewer) are available via the NC_DREAM website: http://www.bath.ac.uk/~masjpf/NCD/dreamhome.html
Credits
Author: Richard Dobson Somerset, England 2610
2611
srconv
srconv Converts the sample rate of an audio file.
Description
Converts the sample rate of an audio file at sample rate Rin to a sample rate of Rout. Optionally the ratio (Rin / Rout) may be linearly time-varying according to a set of (time, ratio) pairs in an auxiliary file.
Syntax
srconv [flags] infile
Initialization
Flags: -P num = pitch transposition ratio (srate / r) [don't specify both P and r] -P num = pitch transposition ratio (srate / r) [don't specify both P and r] -Q num =quality factor (1, 2, 3, or 4: default = 2) -i filnam = auxiliary breakpoints file (no breakpoint by default. i.e. No ratio change) -r num = output sample rate (must be specified) -o fnam = sound output filename -A = create an AIFF format output soundfile -J = create an IRCAM format output soundfile -W = create a WAV format output soundfile -h = no header on output soundfile -c = 8-bit signed_char sound samples -a = alaw sound samples -8 = 8-bit unsigned_char sound samples -u = ulaw sound samples -s = short_int sound samples -l = long_int sound samples -f = float sound samples -r N = orchestra srate override -K = Do not generate PEAK chunks -R = continually rewrite header while writing soundfile (WAV/AIFF) 2612
-H# = print a heartbeat style 1, 2 or 3 at each soundfile write -N = notify (ring the bell) when score or miditrack is done -- fnam = log output to file This program performs arbitrary sample-rate conversion with high fidelity. The method is to step through the input at the desired sampling increment, and to compute the output points as appropriately weighted averages of the surrounding input points. There are two cases to consider: 1. sample rates are in a small-integer ratio - weights are obtained from table. 2. sample rates are in a large-integer ratio - weights are linearly interpolated from table. Calculate increment: if decimating, then window is impulse response of low-pass filter with cutoff frequency at half of output sample rate; if interpolating, then window is impulse response of lowpass filter with cutoff frequency at half of input sample rate.
Credits
Author: Mark Dolson August 26, 1989 Author: John ffitch December 30, 2000
Other Csound Utilities (CS, CSB64ENC, ENVEXT, EXTRACTOR, MAKECSD, MIXER, SCALE)
The following miscellaneous utilities are available: CS: Starts Csound with a set of options that can be controlled by environment variables, and input and output files determined by the specified filename stem. CSB64ENC: Converts a binary file to a Base64 enconded text file. ENVEXT: Extract the envelope of a file to a text list. EXTRACTOR: Extract a section of audio from an audio file. MAKECSD: Creates a CSD file from the specified input files. MIXER: Mixes together a number of soundfiles. SCALE: Scale the amplitude of a sound file.
2613
cs
cs Starts Csound with a set of options that can be controlled by environment variables, and input and output files determined by the specified filename stem.
Description
Starts Csound with a set of options that can be controlled by environment variables, and input and output files determined by the specified filename stem.
Syntax
cs [-OPTIONS] <name> [CSOUND OPTIONS ... ]
Initialization
Flags: - OPTIONS = OPTIONS is a sequence of alphabetic characters that can be used for selecting the Csound executable to be run, as well as the command line flags (see below). There is a default for the option 'r' (selects real-time output), but it can be overridden. <name> = this is the filename stem for selecting input files; it may contain a path. Files that have .csd, .orc, or .sco extension are searched, and either a CSD or an orc/sco pair that matches <name> the best are selected. MIDI files with a .mid extension are also searched, and if one that matches <name> at least as close as the CSD or orc/sco pair, it is used with the -F flag.
NOTE
The MIDI file is not used if any -M or -F flag is specified by the user - new in version 4.24.0) Unless there is any option (-n or -o) related to audio output, an output file name with the appropriate extension is automatically generated (based on the name of selected input files and format options). The output file is always written to the current directory.
NOTE
file name extensions are not case sensitive. [CSOUND OPTIONS ... ] = any number of additional options for Csound that are simply copied to the final command line to be executed. The command line that is executed is generated from four parts: 1. Csound executable (possibly with options). This is exactly one of the following (the last one has the highest precedence): a built-in default the value of the CSOUND environment variable environment variables with a name in the format of CSOUND_x where x is an uppercase letter se2614
lected by characters of the -OPTIONS string. Thus, if the -dcba option is used, and the environment variables CSOUND_B and CSOUND_C are defined, the value of CSOUND_B will take effect. 2. Any number of option lists, added in the following order: either some built-in defaults, or the value of the CSFLAGS environment variable if it is defined. environment variables with a name in the format of CSFLAGS_x where x is an uppercase letter selected by characters of the -OPTIONS string. Thus, if the -dcba option is used, and the environment variables CSFLAGS_A and CSFLAGS_C are defined as '-M 1 -o dac' and '-m231 -H0', respectively, the string '-m231 -H0 -M 1 -o dac' will be added. 3. The explicit options of [CSOUND OPTIONS ... ]. 4. Any options and file names generated from <name>.
NOTE
Quoted options that contain spaces are allowed.
Examples
Assuming the following environment variables:
CSOUND CSOUND_D CSOUND_R = csoundfltk.exe -W = csound64.exe -J = csoundfltk.exe -h
CSFLAGS = -d -m135 -H1 -s CSFLAGS_D = -f CSFLAGS_R = -m0 -H0 -o dac1 -M "MIDI Yoke NT:
cs foob => csoundfltk.exe -W -d -m135 -H1 -s -o foobar.wav foobar.csd cs -r imp -i adc => csoundfltk.exe -h -d -m135 -H1 -s -m0 -H0 -o dac1 -M "MIDI Yoke NT: 1" \ -b 200 -B 6000 -i adc \ ImproSculpt2_share.csd cs -d im im.csd => csound64.exe -J -d -m135 -H1 -s -f -o im.sf
\ \
cs piano => csoundfltk.exe -W -d -m135 -H1 -s -F piano.mid -o piano.wav \ piano.csd cs piano2 => csoundfltk.exe -W -d -m135 -H1 -s -F piano2.mid -o piano2.wav \ piano.csd
2615
Credits
Author: Istvan Varga Jan 2003
2616
csb64enc
csb64enc Converts a binary file to a Base64 encoded text file.
Description
The csb64enc utility generates a Base64 encoded text file from a binary file, such as a standard MIDI file (.mid) or any type of audio file. It is useful to convert a file in the format accepted by the <CsFileB> section of a csd file, to include the file within it.
Syntax
csb64enc [OPTIONS ... ] infile1 [ infile2 [ ... ]]
Initialization
Flags: - w n = set line width of the output file to n (default: 72) - o fname = output file name (default: stdout)
Examples
csb64enc -w 78 -o file.txt file.mid
This command produces a Base64 encoded text file from the standard MIDI file file.mid. This file can now be pasted within a csd file's <CsFileB> section.
See also
makecsd
Credits
Author: Istvan Varga Jan 2003
2617
envext
envext Extracts the envelope of a file to a text file.
Syntax
envext [-flags] soundfile csound -U envext [-flags] soundfile
Initialization
soundfile - Name of the input soundfile. The following flags are available for envext (The default values are stated in parenthesis): -o fnam Name of output filename (newenv) -w size (in seconds) of analysis window (0.25) The envext utility generates a text file containing time and amplitude pairs by finding the absolute peak within each window.
Example
Using the command (while in the manual directory):
csound -U envext examples/mary.wav
will produce the a text file containing the following: 0.000 0.000 0.250 0.500 0.750 1.249 1.499 1.530 1.872 2.056 2.294 2.570 2.761 3.077 3.251 3.500 0.000 0.000 0.000 0.000 0.000 0.170 0.269 0.307 0.263 0.304 0.241 0.216 0.178 0.011 0.001 0.000
Which shows the time for the peak amplitude within each measured window.
Credits
Author: John ffitch 1995
2618
extractor
extractor Extract a section of audio from an audio file.
Description
Extract a section of audio, by time or sample, from an existing sound file.
Syntax
extractor [OPTIONS ... ] infile
Initialization
Flags: -S integer = Start the extract at the given sample number. -Z integer = End the extract at the given sample number. - Q integer = Extract given number of samples. -T fpnum = Start the extract at the given time in seconds. -E fpnum = End the extract at the given time in seconds. -D fpnum = Extract given time in seconds. -v = Verbose mode. -R = Continually rewrite the header while writing soundfile (WAV/AIFF). -H integer = Show a "heart-beat" to indicate progress, in style 1, 2 or 3. -N = Alert call (usually ringing the bell) when finished. -v = Verbose mode. -o fname = output file name (default: test.wav)
Examples
The default values are
extractor -S 0 -Z end-of-file -otest
For example
extractor -S 10234 -D 2.13 in.aiff -o out.wav
This creates a new sound file taken from sample 10234 and lasting 2.13 seconds.
Credits
2619
2620
makecsd
makecsd Creates a CSD file from the specified input files.
Description
Creates a CSD file from the specified input files. The first input file that has a .orc extension (case is not significant) is put to the <CsInstruments> section, and the first input file that has a .sco extension becomes <CsScore>. Any remaining files are Base64 encoded and added as <CsFileB> tags. An empty <CsOptions> section is always added. Some text filtering is performed on the orchestra and score file: newlines are converted to the native format of the system on which makecsd is being run. blank lines are removed from the beginning and end of files. any trailing whitespace is removed from the end of lines. optionally, tabs can be expanded to spaces with an user specified tabstop size.
Syntax
makecsd [OPTIONS ... ] infile1 [ infile2 [ ... ]]
Initialization
Flags: - t n = expand tabs to spaces using tabstop size n (default: disabled). This applies only to the orchestra and score file. - w n = set Base64 line width to n (default: 72). Note: the orchestra and score are not wrapped. - o fname = output file name (default: stdout)
Examples
makecsd -t 6 -w 78 -o file.csd file.mid file.orc file.sco sample.aif
This creates a CSD from file.orc and file.sco (tabs are expanded to spaces assuming a tabstop size of 6 characters), and file.mid and sample.aif are added as <CsFileB> tags containing Base64 encoded data with a line width of 78 characters. The output file is file.csd.
Credits
Author: Istvan Varga Jan 2003
2621
mixer
mixer Mixes together a number of soundfiles.
Description
Mixes together a number of soundfiles, starting at different times and with individual channel selection from the input files.
Syntax
mixer [OPTIONS ... ] infile [[OPTIONS... ] infile] ...
Initialization
Flags: -A = Generate an AIFF output file. -W = Generate an WAV output file. -h = Generate an output file with no header. -c = Generate 8-bit signed_char sound samples. -a = Generate alaw sound samples. -u = Generate ulaw sound samples. -s = Generate short integer sound samples. -l = Generate long (32 bit) integer sound samples. -f = Generate floating point samples. -F arg = Specifies the gain to be applied to the following input file. If arg is a floating point number that gain is applied uniformly to the input. Alternatively it could be a file name which specifies a breakpoint file for varying the gain for different periods. -S integer = Indicate at which sample to start to mix in the next input file. -T fpnum = Indicate at which time (in seconds) to start to mix in the next input file. -1 = Mix in channel 1 from next sound file. -2 = Mix in channel 2 from next sound file. -3 = Mix in channel 3 from next sound file. -4 = Mix in channel 4 from next sound file. -^ intx inty = Mix in channel x from next sound file as channel y in the output. -v = Verbose mode. -R = Continually rewrite the header while writing soundfile (WAV/AIFF). 2622
-H integer = Show a "heart-beat" to indicate progress, in style 1, 2 or 3. -N = Alert call (usually ringing the bell) when finished. -o fname = output file name (default: test.wav)
Examples
The default values are
mixer -s -otest -F 1.0 -S 0
For example
mixer -F 0.96 in1.wav -S 300 -2 in2.aiff -S 300 -^4 1 in3.wav -o out.wav
This creates a new sound file with a constant gain of 0.96 from in1.wav with the second channel of in2.aiff mixed in after 300 samples and channel 4 of in3.wav outpout as channel 1 after 300 samples.
Credits
Author: John ffitch 1994
2623
scale
scale Scale the amplitude of a sound file.
Description
Takes a sound file and scales it by applying a gain, either constant or variable. The scale can be specified as a multiplier, a maximum or a percentage of 0db.
Syntax
scale [OPTIONS ... ] infile
Initialization
Flags: -A = Generate an AIFF outout file. -W = Generate an WAV outout file. -h = Generate an outout file with no header. -c = Generate 8-bit signed_char sound samples. -a = Generate alaw sound samples. -u = Generate ulaw sound samples. -s = Generate short integer sound samples. -l = Generate long (32 bit) integer sound samples. -f = Generate floating point samples. -F arg = Specifies the gain to be applied. If arg is a floating point number that gain is applied uniformly to the input. Alternatively it could be a file name which specifies a breakpoint file for varying the gain for different periods. -M fpnum = Scales the input so the maximum absolute displacement is the value given. -P fpnum = Scales the input so the maximum absolute displacement is the pencentage given of 0db. -R = Continually rewrite the header while writing soundfile (WAV/AIFF). -H integer = Show a "heart-beat" to indicate progress, in style 1, 2 or 3. -N = Alert call (usually ringing the bell) when finished. -o fname = output file name (default: test.wav)
Examples
2624
This creates a new sound file with a constant gain of 0.96. It is particularly useful if the input file is in floating point format.
Credits
Author: John ffitch 1994
Credits
Dan Ellis MIT Media Lab Cambridge, Massachussetts
2625
Cscore
Cscore is an API (application programming interface) for generating and manipulating numeric score files. It is a part of the larger Csound API and includes a number of functions that can be called by a user-designed program written in the C language. Cscore can be invoked either as a standalone score preprocessor, or as part of a Csound performance by including the -C flag in its arguments:
cscore [scorefilein] [> scorefileout]
The available API functions augment the C language library functions; they can read either standard numeric scores or pre-sorted score files, can massage and expand the data in various ways, then make it available for performance by a Csound orchestra. The user-written control program is written in C, and is compiled and linked to the Csound library (or the csound commandline program) by the user. It is not essential to know the C language well to write this program, since the function calls have a simple syntax, and are powerful enough to do most of the complicated work. Additional power can come from C later as the need arises. The following sections explain all of the steps needed to make use of Cscore: Events, Lists, and Operations - Explains the syntax of Cscore functions and data structures. Writing a Cscore Control Program - Illustrates by example how to write your own control program. Compiling a Cscore Program - Outlines the steps for compiling and linking with the Csound library. More Advanced Examples - Addresses advanced issues such as multiple input scores and the details of running Cscore inside of a Csound performance.
Cscore
follows:
typedef struct { CSHDR h; char *strarg; char op; short pcnt; MYFLT p2orig; MYFLT p3orig; MYFLT p[1]; } EVENT;
MYFLT is either the C type float or double depending on how your copy of the Csound library was compiled. You should just declare any floating-point variables as MYFLT in your user program for compatibility. Any Cscore function that creates, reads, or copies an event will return a pointer to the storage structure holding the event data. The event pointer can be used to access any component of the structure, in the form of e->op or e->p[n]. Each newly stored event will give rise to a new pointer, and a sequence of new events will generate a sequence of distinct pointers that must themselves be stored. Groups of event pointers are stored in an event list, which has its own structure:
typedef struct { CSHDR h; int nslots; int nevents; EVENT *e[1]; } EVLIST;
/* max events in this event list */ /* number of events present */ /* array of event pointers e0, e1, e2.. */
Any Cscore function that creates or modifies a list will return a pointer to the new list. The list pointer can be used to access any of its component event pointers, in the form of a->e[n]. Event pointers and list pointers are thus primary tools for manipulating the data of a score file. Pointers and lists of pointers can be copied and reordered without modifying the data values they refer to. This means that notes and phrases can be copied and manipulated from a high level of control. Alternatively, the data within an event or group of events can be modified without changing the event or list pointers. The Cscore API functions enable scores to be created and manipulated in this way. With Csound 5, the names of all of the Cscore API functions have changed to be more explicit. In addition, each function now requires a pointer to a CSOUND object as its first argument. The structure of the CSOUND object is unimportant (and indeed cannot be modified in a user program). How to obtain this CSOUND pointer will be shown in the next section. The Cscore functions and data structures are available in the cscore.h header file, which you must include in your program code before you can you use them. The names of the Cscore functions specify whether they operate on single events or event lists. In the following summary of available function calls, some simple naming conventions are used:
The symbol cs is a pointer to a CSOUND object (CSOUND *); The symbols e, f are pointers to events (notes); The symbols a, b are pointers to lists (arrays) of such events; The symbol n is an integer parameter of type int; "..." indicates a string parameter (either a constant or variable of type char *); The symbol fp is a score input stream file pointer (FILE *); calling syntax description
2627
Cscore
-------------/* Functions for working with single events */ e = cscoreCreateEvent(cs, n); e = cscoreDefineEvent(cs, "..."); e = cscoreCopyEvent(cs, f); e = cscoreGetEvent(cs); cscorePutEvent(cs, e); cscorePutString(cs, "..."); write the /* Functions for working with event lists */ a = cscoreListCreate(cs, n); a = cscoreListAppendEvent(cs, a, e); a = cscoreListAppendStringEvent(cs, a, "..."); a = cscoreListCopy(cs, b); a = cscoreListCopyEvents(cs, b); a = cscoreListGetSection(cs); a = cscoreListGetNext(cs, nbeats); a = cscoreListGetUntil(cs, beatno); a = cscoreListSeparateF(cs, b); a = cscoreListSeparateTWF(cs, b); a = cscoreListAppendList(cs, a, b); a = cscoreListConcatenate(cs, a, b); cscoreListSort(cs, a); n = cscoreListCount(cs, a); a = cscoreListExtractInstruments(cs, b, "..."); a = cscoreListExtractTime(cs, b, from, to); cscoreListPut(cs, a); cscoreListPlay(cs, a); /* Functions for reclaiming memory */ cscoreFreeEvent(cs, e); cscoreListFree(cs, a); cscoreListFreeEvents(cs, a);
----------create a blank event with n pfields defines an event as per the character string ... make a new copy of event f read the next event in the score input file write event e to the score output file string-defined event to score output
create an empty event list with n slots append event e to list a append a string-defined event to list a; copy the list b (but not the events) copy the events of b, making a new list read all events from score input, up to next s or e read next nbeats beats from score input (nbeats is MYFL read all events from score input up to beat beatno (MYF separate the f statements from list b into list a separate the t,w & f statements from list b into list a append the list b onto the list a concatenate (append) the list b onto the list a (same a sort the list a into chronological order by p[2] returns the number of events in list a extract notes of instruments ... (no new events) extract notes of time-span, creating new events (from a write the events of list a to the score output file send events of list a to the Csound orchestra for immediate performance (or print events if no orchestra) release the space of event e release the space of list a (but not the events) release the events of list a, and the list space
/* Functions for working with multiple input score files */ fp = cscoreFileGetCurrent(cs); get the currently active input scorefile pointer (initially finds the command-line input scorefile point fp = cscoreFileOpen(cs, "filename"); open another input scorefile (maximum of 5) cscoreFileSetCurrent(cs, fp); make fp the currently active scorefile pointer cscoreFileClose(cs, fp); close the scorefile relating to FILE *fp
calling syntax description -----------------------e = createv(n); create a blank event with n pfields e = defev("..."); defines an event as per the character string ... e = copyev(f); make a new copy of event f e = getev(); read the next event in the score input file putev(e); write event e to the score output file putstr("..."); write the string-defined event to score output a = lcreat(n); create an empty event list with n slots int n; a = lappev(a,e); append event e to list a a = lappstrev(a,"..."); append a string-defined event to list a; a = lcopy(b); copy the list b (but not the events) a = lcopyev(b); copy the events of b, making a new list a = lget(); read all events from score input, up to next s or e a = lgetnext(nbeats); read next nbeats beats from score input float nbeats; a = lgetuntil(beatno); read all events from score input up to beat beatno float beatno; a = lsepf(b); separate the f statements from list b into list a a = lseptwf(b); separate the t,w & f statements from list b into list a a = lcat(a,b); concatenate (append) the list b onto the list a lsort(a); sort the list a into chronological order by p[2] a = lxins(b,"..."); extract notes of instruments ... (no new events) a = lxtimev(b,from,to); extract notes of time-span, creating new events float from, to; lput(a); write the events of list a to the score output file lplay(a); send events of list a to the Csound orchestra for immediate performance (or print events if no orchestra) relev(e); release the space of event e
2628
Cscore
release the space of list a (but not the events) release the events of list a, and the list space get the currently active input scorefile pointer (initially finds the command-line input scorefile pointer) fp = filopen("filename"); open another input scorefile (maximum of 5) setcurfp(fp); make fp the currently active scorefile pointer filclose(fp); close the scorefile relating to FILE *fp
*/
The include statement will define the event and list structures and all of the Cscore API functions for the program. The name of the user function needs to be cscore if it will be linked with the standard main program in cscormai.c or linked as the internal Cscore routine for a personal Csound executable. This cscore() function receives one argument from cscormai.c or Csound -- CSOUND *cs -- which is a pointer to a Csound object. The pointer cs must be passed as the first parameter to every Cscore API function that the program calls. The following C program will read from a standard numeric score, up to (but not including) the first s or e statement, then write that data (unaltered) as output.
#include "cscore.h" void cscore(CSOUND *cs) { EVLIST *a; a = cscoreListGetSection(cs); cscoreListPut(cs, a); cscorePutString(cs, "e"); }
/* /* /* /*
a is allowed to point to an event list */ read events in, return the list pointer */ write these events out (unchanged) */ write the string e to output */
After execution of cscoreListGetSection(), the variable a points to a list of event addresses, each of which points to a stored event. We have used that same pointer to enable another list function -- cscoreListPut() -- to access and write out all of the events that were read. If we now define another symbol e to be an event pointer, then the statement
e = a->e[4];
will set it to the contents of the 4th slot in the EVLIST structure, a. The contents is a pointer to an event, which is itself comprised of an array of parameter field values. Thus the term e->p[5] will mean the value of parameter field 5 of the 4th event in the EVLIST denoted by a. The program below will multiply the value of that pfield by 2 before writing it out.
2629
Cscore
#include "cscore.h" void cscore(CSOUND *cs) { EVENT *e; EVLIST *a; a = cscoreListGetSection(cs); e = a->e[4]; e->p[5] *= 2; cscoreListPut(cs, a); cscorePutString(cs, "e"); }
/* a pointer to an event /* /* /* /* /*
*/
read a score as a list of events */ point to event 4 in event list a */ find pfield 5, multiply its value by 2 */ write out the list of events */ add a "score end" statement */
Now consider the following score, in which p[5] contains frequency in Hz.
f f i i i e
1 2 1 1 1
0 0 1 4 7
257 257 3 0 3 0 3 0
If this score were given to the preceding main program, the resulting output would look like this:
f f i i i e
1 2 1 1 1
0 0 1 4 7
257 257 3 0 3 0 3 0
10 1 7 0 300 1 212 .8 440 10000 512 10000 ; p[5] has become 512 instead of 256. 880 10000
Note that the 4th event is in fact the second note of the score. So far we have not distinguished between notes and function table setup in a numeric score. Both can be classed as events. Also note that our 4th event has been stored in e[4] of the structure. For compatibility with Csound pfield notation, we will ignore p[0] and e[0] of the event and list structures, storing p1 in p[1], event 1 in e[1], etc. The Cscore functions all adopt this convention. As an extension to the above, we could decide to use the same pointers a and e to examine each of the events in the list. Note that e was not set to the numeral 4, but to the location of the 4th slot in the list. To inspect p5 of the previous event in the list, we need only redefine e with the assignment
e = a->e[3];
and reference the 5th slot of the pfield array using the expression
e->p[5]
More generally, we can use an integer variable as an index to the array e[], and access each event in sequence by using a loop and incrementing the index. The number of events stored in an EVLIST is contained in the nevents member of the struct.
int index;
2630
Cscore
The above example starts with e[1] and increases the index each time through the loop (index++) until it is greater than a->nevents, the index of the last event in the list. The statements inside the for loop do execute a final time when index equals a->nevents. In the following program we will use the same input score. This time we will separate the ftable statements from the note statements. We will next write the three note-events stored in the list a to the output, then create a second score section consisting of the original pitch set and a transposed version of itself. This will bring about an octave doubling. Here, our index to the array is n and we increment n as part of a for block which iterates nevents times, allowing one statement to act upon the same pfield of each successive event.
#include "cscore.h" void cscore(CSOUND *cs) { EVENT *e, *f; EVLIST *a, *b; int n; a = cscoreListGetSection(cs); b = cscoreListSeparateF(cs, a); cscoreListPut(cs, b); cscoreListFreeEvents(cs, b); e = cscoreDefineEvent(cs, "t 0 120"); cscorePutEvent(cs, e); cscoreListPut(cs, a); cscorePutString(cs, "s"); cscorePutEvent(cs, e); b = cscoreListCopyEvents(cs, a); for (n = 1; n <= b->nevents; n++) { f = b->e[n]; f->p[5] *= 0.5; } a = cscoreListAppendList(cs, a, b); cscoreListPut(cs, a); cscorePutString(cs, "e"); } /* /* /* /* /* /* /* /* /* /* /* read score into event list "a" */ separate f statements */ write f statements out to score */ and release the spaces used */ define event for tempo statement */ write tempo statement to score */ write the notes */ section end */ write tempo statement again */ make a copy of the notes in "a" */ iterate the following lines nevents times: */
/* transpose pitch down one octave */ /* now add these notes to original pitches */
f f t i i i s t i i i i i i e
1 2 0 1 1 1 0 1 1 1 1 1 1
10 1 7 0 300 1 212 .8 440 10000 256 10000 880 10000 440 256 880 220 128 440 10000 10000 10000 10000 10000 10000
2631
Cscore
If the output is only being written to a file, then the unsorted order of the events is not a problem. The output is written to a file (or standard output) whenever the function cscoreListPut() is used. However, if this program were to be called during a Csound performance and the function cscoreListPlay() replaced cscoreListPut(), then the events would be sent to the orchestra instead of to a file and they should then be sorted beforehand by calling the function cscoreListSort(). The details of score output and playing when using Cscore from within Csound are described in the next section. Next we extend the above program by using the for loop to look at p[5] and p[6]. In the original score p[6] denotes amplitude. To create a diminuendo in the added lower octave, which is independent from the original set of notes, a variable called dim will be used.
#include "cscore.h" void cscore(CSOUND *cs) { EVENT *e, *f; EVLIST *a, *b; int n, dim; a = cscoreListGetSection(cs); b = cscoreListSeparateF(cs, a); cscoreListPut(cs, b); cscoreListFreeEvents(cs, b); e = cscoreDefineEvent(cs, "t 0 120"); cscorePutEvent(cs, e); cscoreListPut(cs, a); cscorePutString(cs, "s"); cscorePutEvent(cs, e); b = cscoreListCopyEvents(cs, a); dim = 0; for (n = 1; n <= b->nevents; n++) { f = b->e[n]; f->p[6] -= dim; f->p[5] *= 0.5; dim += 2000; } a = cscoreListAppendList(cs, a, b); cscoreListPut(cs, a); cscorePutString(cs, "e"); }
/* subtract current value of dim */ /* transpose pitch down one octave */ /* increase dim for each note */ /* now add these notes to original pitches */
Using the same input score again, the output from this program is:
f f t i i i s t i i i i i i e
1 2 0 1 1 1 0 1 1 1 1 1 1
10 1 7 0 300 1 212 .8 440 10000 256 10000 880 10000 440 256 880 220 128 440 10000 10000 10000 10000 8000 6000 ; Three original notes at ; beats 1,4 and 7 with no dim. ; three notes transposed down one octave ; also at beats 1,4 and 7 with dim.
In the following program the same three-note sequence will be repeated at various time intervals. The starting time of each group is determined by the values of the array cue. This time the dim will occur for each group of notes rather than each note. Note the position of the statement which increments the variable dim outside the inner for loop. 2632
Cscore
#include "cscore.h" int cue[3] = {0,10,17}; void cscore(CSOUND *cs) { EVENT *e, *f; EVLIST *a, *b; int n, dim, cuecount;
a = cscoreListGetSection(cs); b = cscoreListSeparateF(cs, a); cscoreListPut(cs, b); cscoreListFreeEvents(cs, b); e = cscoreDefineEvent(cs, "t 0 120"); cscorePutEvent(cs, e); dim = 0; for (cuecount = 0; cuecount <= 2; cuecount++) /* elements of cue are numbered 0, 1, 2 */ { for (n = 1; n <= a->nevents; n++) { f = a->e[n]; f->p[6] -= dim; f->p[2] += cue[cuecount]; /* add values of cue */ } printf("; diagnostic: cue = %d\n", cue[cuecount]); dim += 2000; cscoreListPut(cs, a); } cscorePutString(cs, "e"); }
Here the inner for loop looks at the events of list a (the notes) and the outer for loop looks at each repetition of the events of list a (the pitch group "cues"). This program also demonstrates a useful troubleshooting device with the printf function. The semi-colon is first in the character string to produce a comment statement in the resulting score file. In this case the value of cue is being printed in the output to insure that the program is taking the proper array member at the proper time. When output data is wrong or error messages are encountered, the printf function can help to pinpoint the problem. Using the same input file, the C program above will generate the following score. Can you determine why the last set of notes starts at the wrong time and how to correct the problem?
f f t ; i i i ; i i i ; i i i e
1 0 257 10 1 2 0 257 7 0 300 1 212 .8 0 120 diagnostic: cue = 0 1 1 3 0 440 10000 1 4 3 0 256 10000 1 7 3 0 880 10000 diagnostic: cue = 10 1 11 3 0 440 8000 1 14 3 0 256 8000 1 17 3 0 880 8000 diagnostic: cue = 17 1 28 3 0 440 4000 1 31 3 0 256 4000 1 34 3 0 880 4000
Cscore
or
csound
Before trying to compile your own Cscore program, you will most likely want to obtain a copy of the Csound source code. Either download the latest source distribution for your platform or check out a copy of the csound5 module from Sourceforge CVS. There are several files in the sources that will help you. Within the examples/cscore/ directory are a number of examples of Cscore control programs, including all of the examples contained in this manual. And in the frontends/cscore/ directory are the two files cscoremain.c and cscore.c. cscoremain.c contains a simple main function that performs all of the initialization that a standalone Cscore program needs to do before it calls your control function. This main stub initializes Csound, reads the commandline arguments, opens the input and output score files, and then calls a function cscore(). As described above, it is expected that you will write the cscore() function and provide it in another file. The file frontends/cscore/cscore.c shows the simplest example of a cscore() function that reads in a score of any length and writes it to the output unchanged. So, to create a standalone program, write a control program as shown in the previous section. Let's assume that you saved this program in a file named mycscore.c. Next, you need to compile and link this program with the Csound library and cscoremain.c in order to create an exectuable by following the set of directions below that apply to your operating system. It will be helpful to already have some familiarity with the C compiler on your computer since the information below cannot be complete for all possible systems.
It is possible that on some Unix systems, the C compiler will be named cc or something else other than gcc.
Windows
Csound is usually compiled on Windows using the MinGW environment that makes GCC -- the same compiler used on Linux -- available using a Unix-like command shell (MSYS). Since pre-compiled libraries for Csound on Windows are built in this way, you may need to use MinGW as well to link to them. If you have built Csound using another compiler, then you should be able to build Cscore with that compiler as well. 2634
Cscore
Compiling standalone Cscore programs using MinGW should be similar to the procedure for Linux above with library and header paths changed appropriately for where Csound is installed on the Windows system. (Please feel free to contribute more detailed instructions here as the editor has been unable to test Cscore on a Windows machine).
OS X
The following commands assume that you have copied your file mycscore.c into the same directory as cscoremain.c and that you have opened a terminal to that same directory. In addition, the Apple-supplied developer tools (including the GCC compiler) should be installed on your system and you should have previously installed a binary distribution of Csound that placed the CsoundLib framework into / Library/Frameworks. Use this command compile and link. (You may get a warning about "multiple definitions of symbol _cscore").
MacOS 9
You will need CodeWarrior or some other development environment installed on your computer (MPW may work). Download the source code distribution for OS 9 (it will have a name like Csound5.05_OS9_src.smi.bin). If using CodeWarrior, find and open the project file "Cscore5.cw8.mcp" in the folder "Csound5.04-OS9-source:macintosh:Csound5Library:". This project file is configured to use the source files cscore.c and cscoremain_MacOS9.c from the csound5 source tree and the Csound5Lib shared library produced by compiling Csound with the "Csound5.cw8.mcp" project file. You should substitute your own Cscore program file for cscore.c and either compile Csound5Lib first or substitute a copy of the library in the project from the binary distribution of Csound for OS 9. The file cscoremain_MacOS9.c contains specialized code for configuring CodeWarrior's SIOUX console library and allows commandline arguments to be entered before the program is run. Once you have the proper files included in the project window, click the "Make" button and CodeWarrior should produce an application named Cscore. When you run this application, it first displays a window allowing you to type in the arguments to the main function. You only need to type in the filename or pathname to the input score -- do not type in "cscore". The input file should be in the same folder as the application or else you will need to type a full or relative pathname to the file. Output will be displayed in the console window. You can use the Save command from the File menu before quitting if you wish. Alternatively, in the commandline dialog, you can choose to redirect the output to a file by clicking on the File button on the right side of the dialog. (Note that the console window can only display about 32,000 characters, so writing to a file is necessary for long scores).
Cscore
Csound system, then substitute your own cscore() function for the one in the file Top/cscore_internal.c, and rebuild Csound. The resulting executable is your own special Csound, usable as above. The -C flag will invoke your Cscore program after the input score is sorted into score.srt. The details of what happens when you run Csound with the -C flag are given in the next section. Csound 5 also provides an additional way to run your own Cscore program from within Csound. Using the API, a host application can set a Cscore callback function, which is a function that Csound will call instead of using the built-in cscore() function. One advantage of this approach is that it is not necessary to recompile the entirety of Csound. Another benefit is that the host application can select at runtime from more than one Cscore function to designate as the callback. The disadvantage is that you need to write a host application. A simple approach to using a Cscore callback via the API would be to modify the standard Csound main program -- which is a simple Csound host -- contained in the file frontends/csound/csound_main.c. Adding a call to csoundSetCscoreCallback() after the call to csoundCreate() but before the call to csoundCompile() should do the job. Recompiling this file and linking to an existing Csound library will make a commandline version of Csound that works similarly to the one described above. Don't forget to use the -C flag.
2636
Cscore
#include "cscore.h" /* CSCORE_SWITCH.C */ cscore(CSOUND* cs) /* callable from either Csound or standalone cscore */ { EVLIST *a, *b; FILE *fp1, *fp2; /* declare two scorefile stream pointers */ fp1 = cscoreFileGetCurrent(cs); /* this is the command-line score */ fp2 = cscoreFileOpen(cs, "score2.srt"); /* this is an additional score file */ a = cscoreListGetSection(cs); /* read section from score 1 */ cscoreListPut(cs, a); /* write it out as is */ cscorePutString(cs, "s"); cscoreFileSetCurrent(cs, fp2); b = cscoreListGetSection(cs); /* read section from score 2 */ cscoreListPut(cs, b); /* write it out as is */ cscorePutString(cs, "s"); cscoreListFreeEvents(cs, a); /* optional to reclaim space */ cscoreListFreeEvents(cs, b); cscoreFileSetCurrent(cs, fp1); a = cscoreListGetSection(cs); /* read next section from score 1 */ cscoreListPut(cs, a); /* write it out */ cscorePutString(cs, "s"); cscoreFileSetCurrent(cs, fp2); b = cscoreListGetSection(cs); /* read next sect from score 2 */ cscoreListPut(cs, b); /* write it out */ cscorePutString(cs, "e"); }
Finally, we show how to take a literal, uninterpreted score file and imbue it with some expressive timing changes. The theory of composer-related metric pulses has been investigated at length by Manfred Clynes, and the following is in the spirit of his work. The strategy here is to first create an array of new onset times for every possible sixteenth-note onset, then to index into it so as to adjust the start and duration of each note of the input score to the interpreted time-points. This also shows how a Csound orchestra can be invoked repeatedly from a run-time score generator.
#include "cscore.h"
/*
CSCORE_PULSE.C
*/
/* program to apply interpretive durational pulse to */ /* an existing score in 3/4 time, first beats on 0, 3, 6 ... */ static float four[4] = { 1.05, 0.97, 1.03, 0.95 }; static float three[3] = { 1.03, 1.05, .92 }; /* pulse width for 4's */ /* pulse width for 3's */
cscore(CSOUND* cs) /* This example should be called from Csound */ { EVLIST *a, *b; EVENT *e, **ep; float pulse16[4*4*4*4*3*4]; /* 16th-note array, 3/4 time, 256 measures */ float acc16, acc1,inc1, acc3,inc3, acc12,inc12, acc48,inc48, acc192,inc192; float *p = pulse16; int n16, n1, n3, n12, n48, n192; /* fill the array with interpreted ontimes */ for (acc192=0.,n192=0; n192<4; acc192+=192.*inc192,n192++) for (acc48=acc192,inc192=four[n192],n48=0; n48<4; acc48+=48.*inc48,n48++) for (acc12=acc48,inc48=inc192*four[n48],n12=0;n12<4; acc12+=12.*inc12,n12++) for (acc3=acc12,inc12=inc48*four[n12],n3=0; n3<4; acc3+=3.*inc3,n3++) for (acc1=acc3,inc3=inc12*four[n3],n1=0; n1<3; acc1+=inc1,n1++) for (acc16=acc1,inc1=inc3*three[n1],n16=0; n16<4; acc16+=.25*inc1*four[n16],n16++) *p++ = acc16; /* for (p = pulse16, n1 = 48; n1--; p += 4) /* show vals & diffs */ /* printf("%g %g %g %g %g %g %g %g\n", *p, *(p+1), *(p+2), *(p+3), /* *(p+1)-*p, *(p+2)-*(p+1), *(p+3)-*(p+2), *(p+4)-*(p+3)); */ a = cscoreListGetSection(cs); b = cscoreListSeparateTWF(cs, a); cscoreListPlay(cs, b); a = cscoreListAppendStringEvent(cs, a, "s"); /* /* /* /* read sect from tempo-warped score */ separate warp & fn statements */ and send these to performance */ append a sect statement to note list */
2637
Cscore
cscoreListPlay(cs, a); /* play the note-list without interpretation */ for (ep = &a->e[1], n1 = a->nevents; n1--; ) { /* now pulse-modifiy it */ e = *ep++; if (e->op == 'i') { e->p[2] = pulse16[(int)(4. * e->p2orig)]; e->p[3] = pulse16[(int)(4. * (e->p2orig + e->p3orig))] - e->p[2]; } } cscoreListPlay(cs, a); } /* now play modified list */
2638
Beats
Beats is an alternative score language that is aimed at specifying simple scores in standard western tunings and rhythms. Beats can be invoked via the CsScore component of a standard .csd score with bin="beats" or as stand-alone program which generates a standard numeric score. As a stand-alone the program reads standard input and writes to standard output. The beats language is very simple, having only 5 kinds of statement, and only one of them has any complexity. In general the introductory word for each statement type is case insensitive, so "QUIT", "quit", "QuIt"... are all the same. Comments can be introduced in either ANSI C89 format or C++ (that is either /* ... */ or // to the end of line) or Csound's semicolo. QUIT Causes beats to exit. For flexibility the command END is also accepted for the identical action. BEATS=integer Sets the number of beats per minute for the following score until the end or until it is reset. The default value is 60bpm. The token BPS is also acceptable instead of BEATS. PERMEASURE=integer Sets the number of beats in a bar. The default value is 4. BAR Start a new bar. BAR integer Start the bar whose number is given. i integer attributes Specified a note event for the numbered instrument. The attributes may be any of a pitch, duration or dynamic, or a positioning of the note to a beat or measure, and can be in any order. Pitches are specified with a conventional note name (English form) in upper case optionally followed by a #, x (for double sharp), b (for flat) or bb (for double flat). A note of Z is a rest (think zzzz). All notes except rests must be followed by an octave number, with A4 being international A (440Hz). Pitches are passed to Csound in Hertz in the parameter p4, and are twelve tone equal temprament. Durations are coded in lower case with the initial letter of the name. ed Dotted eighth note (three quarters of a beat) et Triplet eighth note (third of a beat) e Eighth note (half a beat) hd Dotted half note (three beats) 2639
Beats
ht Triplet half note (one and a third beats) h Half note (two beats) qd Dotted quarter note (one and a half beats) qt Triplet quarter note (two thirds of a beat) q Quarter note (one beat) sd Dotted sixteenth note (Three eighths of a beat) st Triplet sixteenth note (sixth of a beat) s Sixteenth note (quarter of a beat) th Thirty-second note (an eighth of a beat) w Whole note (four beats) Durations can be added together by giving more that one duration. To make this more intuitive a + sign can be used instead of white space. The dynamics are written in conventional notation, that is fff, ff, f, mf, mp, p, pp, ppp. These are passed to the instrument as p5 as 0 for fff, and one less dB for each step below. The default dynamic is fortissimo. If any of these attributes is missing it carried forward from the previous note, with beat position being incremented to the end of the previous note. In addition an event can be directed to a particular measure with an m attribute or a particular beat with a b. The opening of Bach's Goldberg variation number 3 can be coded as:
; Bach - Goldberg Variations - Variato 3 ; by Brian Baughn 3-14-05 ; [email protected] beats = 120 permeasure = 6 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 m1 b1 B4 mp qd+s C5 s D5 C5 D5 E5 A4 qd+s B4 s C5 B4 C5 D5 m2 b1 G4 G5 A5 G5 F#5 G5 A5 m3 b1.5 D5 C5 B4 A4 qd qd+e s
e s
2640
Beats
i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 i101 quit m4 b1
B4 C5 B4 A4 B4 G4 E5 D5 C5 F#5 A5 B4 G5 G5 F#5 Z B5 A5 D5
e s
q e q e e e e q e
// Z is a rest (zzzzz..)
2641
Extending Csound
Adding Unit Generators
If the existing Csound unit generators do not suit your needs, it is relatively easy to extend Csound by writing new unit generators in C or C++. The translator, loader, and run-time monitor will treat your module just like any other, provided you follow some conventions. Historically, this has been done with builtin unit generators, that is, with code that is statically linked with the rest of the Csound executable. Today, the preferred method is to create plugin unit generators. These are dynamic link libraries (DLLs) on Windows, and loadable modules (shared libraries that are dlopened) on Linux. Csound searches for and loads these plugins at run time on the path defined in OPCODEDIR. You can also load plugin opcodes from the command line using the --opcode-lib flag. The advantage of this method, of course, is that plugins created by any developer at any time can be used with already existing versions of Csound.
/* newgen.h
define a structure */
/* Declares Csound structures and functions. */ #include "csoundCore.h" typedef struct { OPDS h; /* required header */ MYFLT *result, *istrt, *incr, *itime, *icontin; /* addr outarg, inargs */ MYFLT curval, vincr; /* private dataspace */ long countdown; /* ditto */ } RMP; /* newgen.c - init and perf code */ /* Declares Csound structures and functions. */ #include "csoundCore.h" /* Declares RMP structure. */ #include "newgen.h" int rampset (CSOUND *csound, RMP * p) { if (*p->icontin == FL(0.0)) p->curval = *p->istrt; p->vincr = *p->incr / csound->esr; p->countdown = *p->itime * csound->esr; return OK; } int ramp (CSOUND *csound, RMP * p) { MYFLT *rsltp = p->result; int nn = csound->ksmps; do { *rsltp++ = p->curval; if (--p->countdown > 0) /* at note initialization: */ /* optionally get new start value */ /* set s-rate increment per sec. */ /* counter for itime seconds */
/* during note performance: */ /* init an output array pointer */ /* array size from orchestra */ /* copy current value to output */ /* for the first itime seconds, */
2642
Extending Csound
Now we add this module to the translator table in entry1.c, under the opcode name rampt:
#include "newgen.h" int rampset(CSOUND *, RMP *), ramp(CSOUND *, RMP *); /* opname dsblksiz S(RMP), 5, thread outypes "a", intypes iopadr kopadr aopadr */ },
{ "rampt",
"iiio",
Finally you must relink Csound with the new module. Add the name of the C file to the Sources list in the SConstruct file:
libCsound-
Run scons just as you would for any other Csound build, and the new module will be built into your Csound. The above actions have added a new generator to the Csound language. It is an audio-rate linear ramp function which modifies an input value at a user-defined slope for some period. A ramp can optionally continue from the previous note's last value. The Csound manual entry would look like:
ar rampt istart, islope, itime [, icontin]
istart -- beginning value of an audio-rate linear ramp. Optionally overridden by a continue flag. islope -- slope of ramp, expressed as the y-interval change per second. itime -- ramp time in seconds, after which the value is held for the remainder of the note. icontin (optional) -- continue flag. If zero, ramping will proceed from input istart . If non-zero, ramping will proceed from the last value of the previous note. The default value is zero. The file newgen.h includes a one-line list of output and input parameters. These are the ports through which the new generator will communicate with the other generators in an instrument. Communication is by address, not value, and this is a list of pointers to values of type MYFLT (which is double if the macro USE_DOUBLE is defined, and float otherwise). There are no restrictions on names, but the input-output argument types are further defined by character strings in entry1.c (inargs, outargs). Inarg types are commonly x, a, k, and i, in the normal Csound manual conventions; also available are o (optional, defaulting to 0), p (optional, defaulting to 1). Outarg types include a, k, i and s (asig or ksig). It is important that all listed argument names be assigned a corresponding argument type in entry1.c. 2643
Extending Csound
Also, i-type args are valid only at initialization time, and other-type args are available only at perf time. Subsequent lines in the RMP structure declare the work space needed to keep the code re-entrant. These enable the module to be used multiple times in multiple instrument copies while preserving all data. The file newgen.c contains two subroutines, each called with a pointer to the Csound instance and a pointer to the uniquely allocated RMP structure and its data. The subroutines can be of three types: note initialization, k-rate signal generation, a-rate signal generation. A module normally requires two of these: initialization, and either k-rate or a-rate subroutines which become inserted in various threaded lists of runnable tasks when an instrument is activated. The thread-types appear in entry1.c in two forms: isub, ksub and asub names; and a threading index which is the sum of isub=1, ksub=2, asub=4. The code itself may reference (but should only read) public members of the CSOUND structure defined in csoundCore.h, the most useful of which are:
Function tables
To access stored function tables, special help is available. The newly defined structure should include a pointer
FUNC *ftp;
where MYFLT *ifuncno is an i-type input argument containing the ftable number. The stored table is then at ftp->ftable, and other data such as length, phase masks, cps-to-incr converters, are also accessed from this pointer. See the FUNC structure in csoundCore.h, the csoundFTFind() code in fgens.c, and the code for oscset() and koscil() in OOps/ugens2.c.
Additional Space
Sometimes the space requirement of a module is too large to be part of a structure (upper limit 65279 bytes, due to the unsigned short dsblksiz parameter and reserved codes >= 0xFF00), or it is dependent on an i-arg value which is not known until initialization. Additional space can be dynamically allocated and properly managed by including the line
AUXCH auxch;
in the defined structure (*p), then using the following style of code in the init module:
2644
Extending Csound
The address of this auxiliary space is kept in a chain of such spaces belonging to this instrument, and is automatically managed while the instrument is being duplicated or garbage-collected during performance. The assignment
void *auxp = p->auxch.auxp;
will find the allocated space for init-time and perf-time use. See the LINSEG structure in ugens1.h and the code for lsgset() and klnseg() in OOps/ugens1.c.
File Sharing
When accessing an external file often, or doing it from multiple places, it is often efficient to read the entire file into memory. This is accomplished by including the line
MEMFIL *mfp;
in the defined structure (*p), then using the following style of code in the init module:
p->mfp = csound->ldmemfile(csound, filname);
where char *filname is a string name of the file requested. The data read will be found between
(char *) p->mfp->beginp; and (char *) p->mfp->endp;
Loaded files do not belong to a particular instrument, but are automatically shared for multiple access. See the ADSYN structure in ugens3.h and the code for adset() and adsyn() in OOps/ugens3.c.
String arguments
To permit a string input argument (MYFLT *ifilnam, say) in our defined structure (*p), assign it the argtype S in entry1.c, and include the following code in the init module:
strcpy(filename, (char*) p->ifilnam);
See the code for adset() in OOps/ugens3.c, lprdset() in OOps/ugens5.c, and pvset() in OOps/ugens8.c.
2645
Extending Csound
2.
#include "csdl.h"
3. Add your OENTRY records and unit generator registration functions at the bottom of your C file. Example (but you can have as many unit generators in one plugin as you like):
#define S sizeof static OENTRY localops[] = { { { "rampt", S(RMP), 5, "a", "iiio", };
},
/* * The following macro from csdl.h defines * the "csound_opcode_init()" opcode registration * function for the localops table. */ LINKAGE
4. Add your plugin as a new target in the plugin opcodes section of the SConstruct build file:
pluginEnvironment.SharedLibrary('newgen', Split('''Opcodes/newgen.c Opcodes/another_file_used_by_newgen.c Opcodes/yet_another_file_used_by_newgen.c'''))
OENTRY
Reference
The OENTRY structure (see lowing public fields:
H/csoundCore.h, Engine/entry1.c,
and
Engine/rdorch.c)
dsblksiz
There are two types of opcodes, polymorphic and non-polymorphic. For non-polymorphic opcodes, the dsblksiz flag specifies the size of the opcode structure in bytes, and arguments are always passed to the opcode at the same rate. Polymorphic opcodes can accept arguments at different rates, and those arguments are actually dispatched to other opcodes as determined by the dsblksiz flag and the following naming convention (note: the following list is not complete, see Engine/entry1.c for all possible special dsblksiz codes):
0xffff
The type of the first output argument determines which unit generator function is actually called: XXX -> XXX.a, XXX.i, or XXX.k. The types of the first two input arguments determine which unit generator function is actually called: XXX -> XXX.aa, XXX.ak, XXX.ka, or XXX.kk, as in the oscil unit generator. Refers to one input argument of type a or k, as in the peak unit generator.
0xfffe
0xfffd thread
Specifies the rate(s) at which the unit generator's functions are called, as follows:
Table 22. Rate at which ugens are called according to thread parameter
2646
Extending Csound
0 1 2 3 4 5 7
outypes
Lists the return values of the unit generator functions, if any. The types allowed are (note: the following list is not complete, see Engine/entry1.c for all possible output types):
a-rate vector
k-rate f-rate
multiple a-rate output arguments Lists the arguments the unit generator functions take, if any. The types allowed are (note: the following list is not complete, see Engine/entry1.c for all possible input types):
intypes
scalar scalar vector scalar or a-rate vector streaming pvoc fsig type
String
Begins an indefinite list of i-rate arguments (any count) Begins an indefinite list of arguments (any rate, any count) Begins an indefinite list of (optional a-, k-, i-, or S-rate)-rate arguments (any odd count) Begins an indefinite list of i-rate arguments (any odd count) Optional k-rate, defaulting to 0 Optional i-rate, defaulting to 0 Optional i-rate, defaulting to 1 2647
Extending Csound
q V v j h y z Z
Optional i-rate, defaulting to 10 Optional k-rate, defaulting to 0.5 Optional i-rate, defaulting to 0.5 Optional i-rate, defaulting to -1 Optional i-rate, defaulting to 127 Begins an indefinite list of a-rate arguments (any count) Begins an indefinite list of k-rate arguments (any count) Begins an indefinite list of alternating k-rate and arate arguments (kaka...) (any count) The address of the unit generator function (of type that is called at i-time, or NULL for no function. The address of the unit generator function (of type that is called at k-rate, or NULL for no function. The address of the unit generator function (of type that is called at a-rate, or NULL for no function.
int (*SUBR)(CSOUND *, void *))
iopadr
kopadr
aopadr
2648
Table of Contents
Opcode Quick Reference ......................................................................................... 2651
2650
Orchestra Syntax:Macros.
#define NAME # replacement text # #define NAME(a' b' c') # replacement text # $NAME #ifdef NAME .... #else .... #end #ifndef NAME .... #else .... #end #include "filename" #undef NAME
2651
ares poscil3 kamp, kcps, ifn [, iphs] kres poscil3 kamp, kcps, ifn [, iphs] kout vibr kAverageAmp, kAverageFreq, ifn kout vibrato kAverageAmp, kAverageFreq, kRandAmountAmp, \ kRandAmountFreq, kAmpMinRate, kAmpMaxRate, kcpsMinRate, \ kcpsMaxRate, ifn [, iphs]
a2 a2 a2 a2 a2 a2
crossfm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] crossfmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] crosspm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] crosspmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] crossfmpm xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2] crossfmpmi xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]
ares fmb3 kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn ares fmbell kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn ares fmmetal kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn ares fmpercfl kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, \ ifn3, ifn4, ivfn ares fmrhode kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, \ ifn3, ifn4, ivfn ares fmvoice kamp, kfreq, kvowel, ktilt, kvibamt, kvibrate, ifn1, \ ifn2, ifn3, ifn4, ivibfn ares fmwurlie kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \ ifn4, ivfn ares foscil xamp, kcps, xcar, xmod, kndx, ifn [, iphs] ares foscili xamp, kcps, xcar, xmod, kndx, ifn [, iphs]
2653
ares [, ac] sndwarp xamp, xtimewarp, xresample, ifn1, ibeg, iwsize, \ irandw, ioverlap, ifn2, itimemode ar1, ar2 [,ac1] [, ac2] sndwarpst xamp, xtimewarp, xresample, ifn1, \ ibeg, iwsize, irandw, ioverlap, ifn2, itimemode asig syncgrain kamp, kfreq, kpitch, kgrsize, kprate, ifun1, \ ifun2, iolaps asig syncloop kamp, kfreq, kpitch, kgrsize, kprate, klstart, \ klend, ifun1, ifun2, iolaps[,istart, iskip] ar vosim kamp, kFund, kForm, kDecay, kPulseCount, kPulseFactor, ifn [, iskip]
2654
ares rspline xrangeMin, xrangeMax, kcpsMin, kcpsMax kres rspline krangeMin, krangeMax, kcpsMin, kcpsMax kscl scale kinput, kmax, kmin ares transeg ia, idur, itype, ib [, idur2] [, itype] [, ic] ... kres transeg ia, idur, itype, ib [, idur2] [, itype] [, ic] ... ares transegr ia, idur, itype, ib [, idur2] [, itype] [, ic] ... kres transegr ia, idur, itype, ib [, idur2] [, itype] [, ic] ...
ares mandol kamp, kfreq, kpluck, kdetune, kgain, ksize, ifn [, iminfreq] ares marimba kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec \ [, idoubles] [, itriples]
2655
ares moog kamp, kfreq, kfiltq, kfiltrate, kvibf, kvamp, iafn, iwfn, ivfn ax, ay, az planet kmass1, kmass2, ksep, ix, iy, iz, ivx, ivy, ivz, idelta \ [, ifriction] [, iskip] ares prepiano ifreq, iNS, iD, iK, \ iT30,iB, kbcl, kbcr, imass, ifreq, iinit, ipos, ivel, isfreq, \ isspread[, irattles, irubbers] al,ar prepiano ifreq, iNS, iD, iK, \ iT30,iB, kbcl, kbcr, imass, ifreq, iinit, ipos, ivel, isfreq, \ isspread[, irattles, irubbers] ares sandpaper iamp, idettack [, inum] [, idamp] [, imaxshake] ares sekere iamp, idettack [, inum] [, idamp] [, imaxshake] ares shaker kamp, kfreq, kbeans, kdamp, ktimes [, idecay] ares sleighbells kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \ [, ifreq1] [, ifreq2] ares stix iamp, idettack [, inum] [, idamp] [, imaxshake] ares tambourine kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \ [, ifreq1] [, ifreq2] ares vibes kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec ares voice kamp, kfreq, kphoneme, kform, kvibf, kvamp, ifn, ivfn
Signal Generators:Phasors.
ares phasor xcps [, iphs] kres phasor kcps [, iphs] ares phasorbnk xcps, kndx, icnt [, iphs] kres phasorbnk kcps, kndx, icnt [, iphs] aphase, asyncout syncphasor xcps, asyncin, [, iphs]
2656
kout jitter2 ktotamp, kamp1, kcps1, kamp2, kcps2, kamp3, kcps3 ares linrand krange ires linrand krange kres linrand krange ares noise xamp, kbeta ares pcauchy kalpha ires pcauchy kalpha kres pcauchy kalpha ares pinkish xin [, imethod] [, inumbands] [, iseed] [, iskip] ares poisson klambda ires poisson klambda kres poisson klambda ares rand xamp [, iseed] [, isel] [, ioffset] kres rand xamp [, iseed] [, isel] [, ioffset] ares randh xamp, xcps [, iseed] [, isize] [, ioffset] kres randh kamp, kcps [, iseed] [, isize] [, ioffset] ares randi xamp, xcps [, iseed] [, isize] [, ioffset] kres randi kamp, kcps [, iseed] [, isize] [, ioffset] ares random kmin, kmax ires random imin, imax kres random kmin, kmax ares randomh kmin, kmax, acps kres randomh kmin, kmax, kcps ares randomi kmin, kmax, acps kres randomi kmin, kmax, kcps ax rnd31 kscl, krpow [, iseed] ix rnd31 iscl, irpow [, iseed] kx rnd31 kscl, krpow [, iseed] seed ival kout trandom ktrig, kmin, kmax ares trirand krange ires trirand krange kres trirand krange ares unirand krange ires unirand krange kres unirand krange ax urandom [imin, imax] ix urandom [imin, imax] kx urandom [imin, imax] aout = urd(ktableNum) iout = urd(itableNum) kout = urd(ktableNum) ares weibull ksigma, ktau ires weibull ksigma, ktau kres weibull ksigma, ktau
2657
asig flooper2 kamp, kpitch, kloopstart, kloopend, kcrossfade, ifn \ [, istart, imode, ifenv, iskip] aleft, aright fluidAllOut fluidCCi iEngineNumber, iChannelNumber, iControllerNumber, iValue fluidCCk iEngineNumber, iChannelNumber, iControllerNumber, kValue fluidControl ienginenum, kstatus, kchannel, kdata1, kdata2 ienginenum fluidEngine [iReverbEnabled] [, iChorusEnabled] [,iNumChannels] [, iPolyphony] isfnum fluidLoad soundfont, ienginenum[, ilistpresets] fluidNote ienginenum, ichannelnum, imidikey, imidivel aleft, aright fluidOut ienginenum fluidProgramSelect ienginenum, ichannelnum, isfnum, ibanknum, ipresetnum fluidSetInterpMethod ienginenum, ichannelnum, iInterpMethod ar1 [,ar2] loscil xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \ [, imod2] [, ibeg2] [, iend2] ar1 [,ar2] loscil3 xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \ [, imod2] [, ibeg2] [, iend2] ar1 [, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \ ar15, ar16] loscilx xamp, kcps, ifn \ [, iwsize, ibas, istrt, imod1, ibeg1, iend1] ares lphasor xtrns [, ilps] [, ilpe] [, imode] [, istrt] [, istor] ares lposcil kamp, kfreqratio, kloop, kend, ifn [, iphs] ares lposcil3 kamp, kfreqratio, kloop, kend, ifn [, iphs] ar lposcila aamp, kfreqratio, kloop, kend, ift [,iphs] ar1, ar2 lposcilsa aamp, kfreqratio, kloop, kend, ift [,iphs] ar1, ar2 lposcilsa2 aamp, kfreqratio, kloop, kend, ift [,iphs] sfilist ifilhandle ar1, ar2 sfinstr ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset] ar1, ar2 sfinstr3 ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset] ares sfinstr3m ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset] ares sfinstrm ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \ [, iflag] [, ioffset] ir sfload "filename" ar1, ar2 sflooper ivel, inotenum, kamp, kpitch, ipreindex, kloopstart, kloopend, kcrossfade, ifn \ [, istart, imode, ifenv, iskip] sfpassign istartindex, ifilhandle[, imsgs] ar1, ar2 sfplay ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv] ar1, ar2 sfplay3 ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv] ares sfplay3m ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]
2658
ares sfplaym ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv] sfplist ifilhandle ir sfpreset iprog, ibank, ifilhandle, ipreindex asig, krec sndloop ain, kpitch, ktrig, idur, ifad ares waveset ain, krep [, ilen]
2659
dumpk2 ksig1, ksig2, ifilname, iformat, iprd dumpk3 ksig1, ksig2, ksig3, ifilname, iformat, iprd dumpk4 ksig1, ksig2, ksig3, ksig4, ifilname, iformat, iprd ficlose ihandle ficlose Sfilename fin ifilename, iskipframes, iformat, ain1 [, ain2] [, ain3] [,...] fini ifilename, iskipframes, iformat, in1 [, in2] [, in3] [, ...] fink ifilename, iskipframes, iformat, kin1 [, kin2] [, kin3] [,...] ihandle fiopen ifilename, imode fout ifilename, iformat, aout1 [, aout2, aout3,...,aoutN] fouti ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN] foutir ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN] foutk ifilename, iformat, kout1 [, kout2, kout3,....,koutN] fprintks "filename", "string", [, kval1] [, kval2] [...] fprints "filename", "string" [, ival1] [, ival2] [...] kres readk ifilname, iformat, iprd kr1, kr2 readk2 ifilname, iformat, iprd kr1, kr2, kr3 readk3 ifilname, iformat, iprd kr1, kr2, kr3, kr4 readk4 ifilname, iformat, iprd
2660
inrg kstart, ain1 [,ain2, ain3, ..., ainN] ar1, ar2 ins kvalue invalue "channel name" Sname invalue "channel name" ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, \ ar13, ar14, ar15, ar16 inx inz ksig1 ar1, ar2 mp3in ifilcod, iskptim, iformat, iskipinit, ibufsize ar1[, ar2[, ar3[, ... a24]]] soundin ifilcod [, iskptim] [, iformat] \ [, iskipinit] [, ibufsize]
2661
outq4 asig outrg kstart, aout1 [,aout2, aout3, ..., aoutN] outs asig1, asig2 outs1 asig outs2 asig outvalue "channel name", kvalue outvalue "channel name", "string" outx asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, \ asig9, asig10, asig11, asig12, asig13, asig14, asig15, asig16 outz ksig1 soundout soundouts asig1, ifilcod [, iformat] asigl, asigr, ifilcod [, iformat]
chnmix aval, Sname itype, imode, ictltype, idflt, imin, imax chnparams ival kval aval Sval chnrecv chnrecv chnrecv chnrecv Sname Sname Sname Sname Sname Sname Sname Sname Sname Sname Sname Sname
setksmps iksmps xinarg1 [, xinarg2] ... [xinargN] xin xout xoutarg1 [, xoutarg2] ... [, xoutargN]
2662
print iarg [, iarg1] [, iarg2] [...] printf_i Sfmt, itrig, [iarg1[, iarg2[, ... ]]] printf Sfmt, ktrig, [xarg1[, xarg2[, ... ]]] printk itime, kval [, ispace] printk2 kvar [, inumspaces] printks "string", itime [, kval1] [, kval2] [...] prints "string" [, kval1] [, kval2] [...]
2663
ftmorf kftndx, iftfn, iresfn ar1 [, ar2] [, ar3] [, ar4] pconvolve ain, ifilcod [, ipartitionsize, ichannel]
Signal Modifiers:Delay.
ares delay asig, idlt [, iskip] ares delay1 asig [, iskip] kr delayk kr vdel_k ksig, idel[, imode] ksig, kdel, imdel[, imode]
ares delayr idlt [, iskip] delayw asig ares deltap kdlt ares deltap3 xdlt ares deltapi xdlt ares deltapn xnumsamps aout deltapx adel, iwsize deltapxw ain, adel, iwsize ares multitap asig [, itime1] [, igain1] [, itime2] [, igain2] [...] ares vdelay asig, adel, imaxdel [, iskip] ares vdelay3 asig, adel, imaxdel [, iskip] aout vdelayx ain, adl, imd, iws [, ist] aout1, aout2, aout3, aout4 vdelayxq ain1, ain2, ain3, ain4, adl, imd, iws [, ist] aout1, aout2 vdelayxs ain1, ain2, adl, imd, iws [, ist] aout vdelayxw ain, adl, imd, iws [, ist] aout1, aout2, aout3, aout4 vdelayxwq ain1, ain2, ain3, ain4, adl, \ imd, iws [, ist] aout1, aout2 vdelayxws ain1, ain2, adl, imd, iws [, ist]
2664
[, ar, as, at, au, av [, abk, al, am, an, ao, ap, aq]]] aw, ax, ay, az bformenc asig, kalpha, kbeta, kord0, kord1 aw, ax, ay, az, ar, as, at, au, av bformenc asig, kalpha, kbeta, \ kord0, kord1 , kord2 aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq bformenc \ asig, kalpha, kbeta, kord0, kord1, kord2, kord3 aw, ax, ay, az bformenc1 asig, kalpha, kbeta aw, ax, ay, az, ar, as, at, au, av bformenc1 asig, kalpha, kbeta aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq bformenc1 \ asig, kalpha, kbeta aleft, aright hrtfer asig, kaz, kelev, HRTFcompact aleft, aright hrtfmove asrc, kAz, kElev, ifilel, ifiler [, imode, ifade, isr] aleft, aright hrtfmove2 asrc, kAz, kElev, ifilel, ifiler [,ioverlap, iradius, isr] aleft, aright hrtfstat asrc, iAz, iElev, ifilel, ifiler [,iradius, isr] a1, a2 locsend a1, a2, a3, a4 locsend a1, a2 locsig asig, kdegree, kdistance, kreverbsend a1, a2, a3, a4 locsig asig, kdegree, kdistance, kreverbsend a1, a2, a3, a4 pan asig, kx, ky, ifn [, imode] [, ioffset] a1, a2 pan2 asig, xp [, imode] a1, a2, a3, a4 space asig, ifn, ktime, kreverbsend, kx, ky
aW, aX, aY, aZ spat3d ain, kX, kY, kZ, idist, ift, imode, imdel, iovr [, istor] aW, aX, aY, aZ spat3di ain, iX, iY, iZ, idist, ift, imode [, istor] spat3dt ioutft, iX, iY, iZ, idist, ift, imode, irlen [, iftnocl] k1 spdist ifn, ktime, kx, ky a1, a2, a3, a4 spsend ar1, ..., ar16 vbap16 asig, kazim [, kelev] [, kspread] ar1, ..., ar16 vbap16move asig, idur, ispread, ifldnum, ifld1 \ [, ifld2] [...] ar1, ar2, ar3, ar4 vbap4 asig, kazim [, kelev] [, kspread] ar1, ar2, ar3, ar4 vbap4move asig, idur, ispread, ifldnum, ifld1 \ [, ifld2] [...] ar1, ..., ar8 vbap8 asig, kazim [, kelev] [, kspread] ar1, ..., ar8 vbap8move asig, idur, ispread, ifldnum, ifld1 \ [, ifld2] [...] vbaplsinit idim, ilsnum [, idir1] [, idir2] [...] [, idir32] vbapz inumchnls, istartndx, asig, kazim [, kelev] [, kspread] vbapzmove inumchnls, istartndx, asig, idur, ispread, ifldnum, ifld1, \ ifld2, [...]
Signal Modifiers:Reverberation.
a1, a2 babo asig, ksrcx, ksrcy, ksrcz, irx, iry, irz [, idiff] [, ifno]
2665
ares comb asig, krvt, ilpt [, iskip] [, insmps] aoutL, aoutR freeverb ainL, ainR, kRoomSize, kHFDamp[, iSRate[, iSkip]] ares nestedap asig, imode, imaxdel, idel1, igain1 [, idel2] [, igain2] \ [, idel3] [, igain3] [, istor] ares nreverb asig, ktime, khdif [, iskip] [,inumCombs] [, ifnCombs] \ [, inumAlpas] [, ifnAlpas] ares reverb asig, krvt [, iskip] ares reverb2 asig, ktime, khdif [, iskip] [,inumCombs] \ [, ifnCombs] [, inumAlpas] [, ifnAlpas] aoutL, aoutR reverbsc ainL, ainR, kfblvl, kfco[, israte[, ipitchm[, iskip]]] ares valpass asig, krvt, xlpt, imaxlpt [, iskip] [, insmps] ares vcomb asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]
2666
2667
ares bqrez asig, xfco, xres [, imode] [, iskip] ares lowpass2 asig, kcf, kq [, iskip] ares lowres asig, kcutoff, kresonance [, iskip] ares lowresx asig, kcutoff, kresonance [, inumlayer] [, iskip] ares lpf18 asig, kfco, kres, kdist asig moogladder ain, kcf, kres[, istor] ares moogvcf asig, xfco, xres [,iscale, iskip] ares moogvcf2 asig, xfco, xres [,iscale, iskip] ares reson asig, kcf, kbw [, iscl] [, iskip] ares resonr asig, kcf, kbw [, iscl] [, iskip] ares resonx asig, kcf, kbw [, inumlayer] [, iscl] [, iskip] ares resony asig, kbf, kbw, inum, ksep [, isepmode] [, iscl] [, iskip] ares resonz asig, kcf, kbw [, iscl] [, iskip] ares rezzy asig, xfco, xres [, imode, iskip] ahp,alp,abp,abr statevar ain, kcf, kq [, iosamps, istor] alow, ahigh, aband svfilter asig, kcf, kq [, iscl]
ares tbvcf asig, xfco, xres, kdist, kasym [, iskip] ares vlowres asig, kfco, kres, iord, ksep
2668
ares filter2 asig, iM, iN, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN kres filter2 ksig, iM, iN, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN asig fofilter ain, kcf, kris, kdec[, istor] ar1, ar2 hilbert asig ares nlfilt ain, ka, kb, kd, kC, kL ares pareq asig, kc, kv, kq [, imode] [, iskip] ar rbjeq asig, kfco, klvl, kQ, kS[, imode] ares zfilter2 asig, kdamp, kfreq, iM, iN, ib0, ib1, ..., ibM, \ ia1,ia2, ..., iaN
Signal Modifiers:Waveguides.
ares wguide1 asig, xfreq, kcutoff, kfeedback ares wguide2 asig, xfreq1, xfreq2, kcutoff1, kcutoff2, \ kfeedback1, kfeedback2
Signal Modifiers:Waveshaping.
aout chebyshevpoly ain, k0 [, k1 [, k2 [...]]] aout pdclip ain, kWidth, kCenter [, ibipolar [, ifullscale]] aout pdhalf ain, kShapeAmount [, ibipolar [, ifullscale]] aout pdhalfy ain, kShapeAmount [, ibipolar [, ifullscale]] aout powershape ain, kShapeAmount [, ifullscale]
2669
(a != b ? v1 : v2)
Instrument Control:Invocation.
event "scorechar", kinsnum, kdelay, kdur, [, kp4] [, kp5] [, ...] event "scorechar", "insname", kdelay, kdur, [, kp4] [, kp5] [, ...] event_i "scorechar", iinsnum, idelay, idur, [, ip4] [, ip5] [, ...] event_i "scorechar", "insname", idelay, idur, [, ip4] [, ip5] [, ...] mute insnum [, iswitch] mute "insname" [, iswitch] remove insnum schedkwhen ktrigger, kmintim, kmaxnum, kinsnum, kwhen, kdur \ [, ip4] [, ip5] [...] schedkwhen ktrigger, kmintim, kmaxnum, "insname", kwhen, kdur \ [, ip4] [, ip5] [...] schedkwhennamed ktrigger, kmintim, kmaxnum, "name", kwhen, kdur \ [, ip4] [, ip5] [...] schedule insnum, iwhen, idur [, ip4] [, ip5] [...] schedule "insname", iwhen, idur [, ip4] [, ip5] [...] schedwhen ktrigger, kinsnum, kwhen, kdur [, ip4] [, ip5] [...] schedwhen ktrigger, "insname", kwhen, kdur [, ip4] [, ip5] [...] scoreline Sin, ktrig
2670
scoreline_i Sin
igoto label kgoto label loop_ge loop_ge loop_gt loop_gt loop_le loop_le loop_lt loop_lt indx, idecr, imin, label kndx, kdecr, kmin, label indx, idecr, imin, label kndx, kdecr, kmin, label indx, incr, imax, label kndx, kncr, kmax, label indx, incr, imax, label kndx, kncr, kmax, label
2671
miditempo
p5gconnect kres p5gdata kcontrol icount pcount kres peak asig kres peak ksig ivalue pindex ipfieldIndex koct, kamp pitch asig, iupdte, ilo, ihi, idbthresh [, ifrqs] [, iconf] \ [, istrt] [, iocts] [, iq] [, inptls] [, irolloff] [, iskip] kcps, krms pitchamdf asig, imincps, imaxcps [, icps] [, imedi] \ [, idowns] [, iexcps] [, irmsmedi]
2672
kcps, kamp ptrack asig, ihopsize[,ipeaks] rewindscore kres rms asig [, ihp] [, iskip] kres[, kkeydown] sensekey ktrig_out seqtime ktime_unit, kstart, kloop, kinitndx, kfn_times ktrig_out seqtime2 ktrig_in, ktime_unit, kstart, kloop, kinitndx, kfn_times setctrl inum, ival, itype setscorepos ipos
splitrig ktrig, kndx, imaxtics, ifn, kout1 [,kout2,...,koutN] ktemp tempest kin, iprd, imindur, imemdur, ihp, ithresh, ihtim, ixfdbak, \ istartempo, ifn [, idisprd] [, itweek] tempo ktempo, istartempo kres tempoval ktrig timedseq ktimpnt, ifn, kp1 [,kp2, kp3, ...,kpN]
kout trigger ksig, kthreshold, kmode trigseq ktrig_in, kstart, kloop, kinitndx, kfn_values, kout1 [, kout2] [...] kres wiiconnect [itimeout, imaxnum] kres wiidata kcontrol[, knum] wiirange icontrol, iminimum, imaximum[, inum] kres wiisend kcontrol, kvalue[, knum] kx, ky xyin iprd, ixmin, ixmax, iymin, iymax [, ixinit] [, iyinit]
Instrument Control:Stacks.
xval1, [xval2, ... , xval31] pop ival1, [ival2, ... , ival31] pop fsig pop_f push push xval1, [xval2, ... , xval31] ival1, [ival2, ... , ival31] fsig iStackSize
push_f stack
2673
Table Control.
ftfree ifno, iwhen gir ftgen ifn, itime, isize, igen, iarga [, iargb ] [...] ifno ftgentmp ip1, ip2dummy, isize, igen, iarga, iargb, ... sndload Sfname[, ifmt[, ichns[, isr[, ibas[, iamp[, istrt [, ilpmod[, ilps[, ilpe]]]]]]]]] \
2674
tb14_init ifn tb15_init ifn iout = tb0(iIndex) kout = tb0(kIndex) iout = tb1(iIndex) kout = tb1(kIndex) iout = tb2(iIndex) kout = tb2(kIndex) iout = tb3(iIndex) kout = tb3(kIndex) iout = tb4(iIndex) kout = tb4(kIndex) iout = tb5(iIndex) kout = tb5(kIndex) iout = tb6(iIndex) kout = tb6(kIndex) iout = tb7(iIndex) kout = tb7(kIndex) iout = tb8(iIndex) kout = tb8(kIndex) iout = tb9(iIndex) kout = tb9(kIndex) iout = tb10(iIndex) kout = tb10(kIndex) iout = tb11(iIndex) kout = tb11(kIndex) iout = tb12(iIndex) kout = tb12(kIndex) iout = tb13(iIndex) kout = tb13(kIndex) iout = tb14(iIndex) kout = tb14(kIndex) iout = tb15(iIndex) kout = tb15(kIndex)
2675
ares tablera kfn, kstart, koff tablew asig, andx, ifn [, ixmode] [, ixoff] [, iwgmode] tablew isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode] tablew ksig, kndx, ifn [, ixmode] [, ixoff] [, iwgmode] kstart tablewa kfn, asig, koff tablewkt asig, andx, kfn [, ixmode] [, ixoff] [, iwgmode] tablewkt ksig, kndx, kfn [, ixmode] [, ixoff] [, iwgmode] kout tabmorph kindex, kweightpoint, ktabnum1, ktabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ...,ifnN] aout tabmorpha aindex, aweightpoint, atabnum1, atabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ... ifnN] aout tabmorphak aindex, kweightpoint, ktabnum1, ktabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ... ifnN] kout tabmorphi kindex, kweightpoint, ktabnum1, ktabnum2, \ ifn1, ifn2 [, ifn3, ifn4, ..., ifnN] tabplay tabrec ktrig, knumtics, kfn, kout1 [,kout2,..., koutN] ktrig_start, ktrig_stop, knumtics, kfn, kin1 [,kin2,...,kinN]
FLTK:Containers.
FLgroup "label", iwidth, iheight, ix, iy [, iborder] [, image] FLgroupEnd FLpack iwidth, iheight, ix, iy, itype, ispace, iborder FLpackEnd FLpanel "label", iwidth, iheight [, ix] [, iy] [, iborder] [, ikbdcapture] [, iclose] FLpanelEnd FLscroll iwidth, iheight [, ix] [, iy] FLscrollEnd FLtabs iwidth, iheight, ix, iy FLtabsEnd
FLTK:Valuators.
kout, ihandle FLcount "label", imin, imax, istep1, istep2, itype, \ iwidth, iheight, ix, iy, iopcode [, kp1] [, kp2] [, kp3] [...] [, kpN] koutx, kouty, ihandlex, ihandley FLjoy "label", iminx, imaxx, iminy, \ imaxy, iexpx, iexpy, idispx, idispy, iwidth, iheight, ix, iy kout, ihandle FLknob "label", imin, imax, iexp, itype, idisp, iwidth, \ ix, iy [, icursorsize] kout, ihandle FLroller "label", imin, imax, istep, iexp, itype, idisp, \ iwidth, iheight, ix, iy kout, ihandle FLslider "label", imin, imax, iexp, itype, idisp, iwidth, \ iheight, ix, iy
2676
kout, ihandle FLtext "label", imin, imax, istep, itype, iwidth, \ iheight, ix, iy
FLTK:Other.
ihandle FLbox "label", itype, ifont, isize, iwidth, iheight, ix, iy [, image] kout, ihandle FLbutBank itype, inumx, inumy, iwidth, iheight, ix, iy, \ iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN] kout, ihandle FLbutton "label", ion, ioff, itype, iwidth, iheight, ix, \ iy, iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN] ihandle FLcloseButton "label", iwidth, iheight, ix, iy ihandle FLexecButton "command", iwidth, iheight, ix, iy inumsnap FLgetsnap index [, igroup] ihandle FLhvsBox inumlinesX, inumlinesY, iwidth, iheight, ix, iy [, image] FLhvsBox kx, ky, ihandle kascii FLkeyIn [ifn] FLloadsnap "filename" [, igroup] kx, ky, kb1, kb2, kb3 FLmouse [imode] FLprintk itime, kval, idisp FLprintk2 kval, idisp FLrun FLsavesnap "filename" [, igroup] inumsnap, inumval FLsetsnap index [, ifn, igroup] FLsetSnapGroup igroup FLsetVal ktrig, kvalue, ihandle FLsetVal_i ivalue, ihandle FLslidBnk "names", inumsliders [, ioutable] [, iwidth] [, iheight] [, ix] \ [, iy] [, itypetable] [, iexptable] [, istart_index] [, iminmaxtable] FLslidBnk2 "names", inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index] FLslidBnk2Set ihandle, ifn [, istartIndex, istartSlid, inumSlid] FLslidBnk2Setk ktrig, ihandle, ifn [, istartIndex, istartSlid, inumSlid]
ihandle FLslidBnkGetHandle FLslidBnkSet ihandle, ifn [, istartIndex, istartSlid, inumSlid] FLslidBnkSetk FLupdate ihandle FLvalue "label", iwidth, iheight, ix, iy FLvkeybd "keyboard.map", iwidth, iheight, ix, iy FLvslidBnk "names", inumsliders [, ioutable] [, iwidth] [, iheight] [, ix] \ [, iy] [, itypetable] [, iexptable] [, istart_index] [, iminmaxtable] ktrig, ihandle, ifn [, istartIndex, istartSlid, inumSlid]
2677
FLvslidBnk2 "names", inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index] koutx, kouty, kinside FLxyin ioutx_min, ioutx_max, iouty_min, iouty_max, \ iwindx_min, iwindx_max, iwindy_min, iwindy_max [, iexpx, iexpy, ioutx, iouty] vphaseseg kphase, ioutab, ielems, itab1,idist1,itab2 \ [,idist2,itab3, ... ,idistN-1,itabN]
FLTK:Appearance.
FLcolor ired, igreen, iblue [, ired2, igreen2, iblue2] FLcolor2 ired, igreen, iblue FLhide ihandle FLlabel isize, ifont, ialign, ired, igreen, iblue FLsetAlign ialign, ihandle FLsetBox itype, ihandle FLsetColor ired, igreen, iblue, ihandle FLsetColor2 ired, igreen, iblue, ihandle FLsetFont ifont, ihandle FLsetPosition ix, iy, ihandle FLsetSize iwidth, iheight, ihandle FLsetText "itext", ihandle FLsetTextColor ired, iblue, igreen, ihandle FLsetTextSize isize, ihandle FLsetTextType itype, ihandle FLshow ihandle
2678
a || b a ^ b
log(x) (no rate restriction) log10(x) (no rate restriction) logbtwo(x) powoftwo(x) (init-rate or control-rate args only) (init-rate or control-rate args only)
round(x) (init-, control-, or audio-rate arg allowed) sqrt(x) (no rate restriction)
db(x) dbamp(x) dbfsamp(x) (init-rate or control-rate args only) (init-rate or control-rate args only)
Pitch Converters:Functions.
cent(x) cpsmidinn (MidiNoteNumber) cpsoct (oct) cpspch (pch) octave(x) octcps (cps) (init- or control-rate args only) (init- or control-rate args only) (init- or control-rate args only)
2680
Real-time MIDI:Input.
kaft aftouch [imin] [, imax] ival chanctrl ichnl, ictlno [, ilow] [, ihigh] kval chanctrl ichnl, ictlno [, ilow] [, ihigh] idest ctrl14 ichan, ictlno1, ictlno2, imin, imax [, ifn] kdest ctrl14 ichan, ictlno1, ictlno2, kmin, kmax [, ifn] idest ctrl21 ichan, ictlno1, ictlno2, ictlno3, imin, imax [, ifn] kdest ctrl21 ichan, ictlno1, ictlno2, ictlno3, kmin, kmax [, ifn] idest ctrl7 ichan, ictlno, imin, imax [, ifn] kdest ctrl7 ichan, ictlno, kmin, kmax [, ifn] adest ctrl7 ichan, ictlno, kmin, kmax [, ifn] [, icutoff] ctrlinit ichnl, ictlno1, ival1 [, ictlno2] [, ival2] [, ictlno3] \ [, ival3] [,...ival32] initc14 ichan, ictlno1, ictlno2, ivalue initc21 ichan, ictlno1, ictlno2, ictlno3, ivalue initc7 ichan, ictlno, ivalue massign ichnl, insnum[, ireset] massign ichnl, "insname"[, ireset] idest midic14 ictlno1, ictlno2, imin, imax [, ifn] kdest midic14 ictlno1, ictlno2, kmin, kmax [, ifn] idest midic21 ictlno1, ictlno2, ictlno3, imin, imax [, ifn] kdest midic21 ictlno1, ictlno2, ictlno3, kmin, kmax [, ifn] idest midic7 ictlno, imin, imax [, ifn] kdest midic7 ictlno, kmin, kmax [, ifn] ival midictrl inum [, imin] [, imax] kval midictrl inum [, imin] [, imax] ival notnum ibend pchbend [imin] [, imax] kbend pchbend [imin] [, imax] pgmassign ipgm, inst[, ichn] pgmassign ipgm, "insname"[, ichn] ires polyaft inote [, ilow] [, ihigh] kres polyaft inote [, ilow] [, ihigh] ival veloc [ilow] [, ihigh]
nrpn kchan, kparmnum, kparmvalue outiat ichn, ivalue, imin, imax outic ichn, inum, ivalue, imin, imax outic14 ichn, imsb, ilsb, ivalue, imin, imax outipat ichn, inotenum, ivalue, imin, imax outipb ichn, ivalue, imin, imax outipc ichn, iprog, imin, imax outkat kchn, kvalue, kmin, kmax outkc kchn, knum, kvalue, kmin, kmax outkc14 kchn, kmsb, klsb, kvalue, kmin, kmax outkpat kchn, knotenum, kvalue, kmin, kmax outkpb kchn, kvalue, kmin, kmax outkpc kchn, kprog, kmin, kmax
Real-time MIDI:Converters.
iamplitude ampmidid ivelocity, idecibels kamplitude ampmidid kvelocity, idecibels icps cpsmidi icps cpsmidib [irange] kcps cpsmidib [irange] icps cpstmid ifn ioct octmidi ioct octmidib [irange] koct octmidib [irange] ipch pchmidi ipch pchmidib [irange] kpch pchmidib [irange]
2682
i1,...,i32 s32b14 ichan, ictlno_msb1, ictlno_lsb1, imin1, imax1, \ initvalue1, ifn1,..., ictlno_msb32, ictlno_lsb32, imin32, imax32, initvalue32, ifn32
2683
k1,...,k32 s32b14 ichan, ictlno_msb1, ictlno_lsb1, imin1, imax1, \ initvalue1, ifn1,..., ictlno_msb32, ictlno_lsb32, imin32, imax32, initvalue32, ifn32 i1,...,i16 slider16 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum16, imin16, imax16, init16, ifn16 k1,...,k16 slider16 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum16, imin16, imax16, init16, ifn16 k1,...,k16 slider16f ichan, ictlnum1, imin1, imax1, init1, ifn1, \ icutoff1,..., ictlnum16, imin16, imax16, init16, ifn16, icutoff16 kflag slider16table ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, .... , ictlnum16, imin16, imax16, init16, ifn16 kflag slider16tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum16, imin16, imax16, init16, ifn16, icutoff16 i1,...,i32 slider32 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum32, imin32, imax32, init32, ifn32 k1,...,k32 slider32 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum32, imin32, imax32, init32, ifn32 k1,...,k32 slider32f ichan, ictlnum1, imin1, imax1, init1, ifn1, icutoff1, \ ..., ictlnum32, imin32, imax32, init32, ifn32, icutoff32 kflag slider32table ichan, ioutTable, ioffset, ictlnum1, imin1, \ imax1, init1, ifn1, .... , ictlnum32, imin32, imax32, init32, ifn32 kflag slider32tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum32, imin32, imax32, init32, ifn32, icutoff32 i1,...,i64 slider64 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum64, imin64, imax64, init64, ifn64 k1,...,k64 slider64 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum64, imin64, imax64, init64, ifn64 k1,...,k64 slider64f ichan, ictlnum1, imin1, imax1, init1, ifn1, \ icutoff1,..., ictlnum64, imin64, imax64, init64, ifn64, icutoff64 kflag slider64table ichan, ioutTable, ioffset, ictlnum1, imin1, \ imax1, init1, ifn1, .... , ictlnum64, imin64, imax64, init64, ifn64 kflag slider64tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum64, imin64, imax64, init64, ifn64, icutoff64 i1,...,i8 slider8 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum8, imin8, imax8, init8, ifn8 k1,...,k8 slider8 ichan, ictlnum1, imin1, imax1, init1, ifn1,..., \ ictlnum8, imin8, imax8, init8, ifn8 k1,...,k8 slider8f ichan, ictlnum1, imin1, imax1, init1, ifn1, icutoff1, \ ..., ictlnum8, imin8, imax8, init8, ifn8, icutoff8 kflag slider8table ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1,..., ictlnum8, imin8, imax8, init8, ifn8 kflag slider8tablef ichan, ioutTable, ioffset, ictlnum1, imin1, imax1, \ init1, ifn1, icutoff1, .... , ictlnum8, imin8, imax8, init8, ifn8, icutoff8 k1, k2, ...., k16 sliderKawai imin1, imax1, init1, ifn1, \ imin2, imax2, init2, ifn2, ..., imin16, imax16, init16, ifn16
Spectral Processing:STFT.
ktableseg ifn1, idur1, ifn2 [, idur2] [, ifn3] [...] ares pvadd ktimpnt, kfmod, ifilcod, ifn, ibins [, ibinoffset] \ [, ibinincr] [, iextractmode] [, ifreqlim] [, igatefn] pvbufread ktimpnt, ifile
2684
ares pvcross ktimpnt, kfmod, ifile, kampscale1, kampscale2 [, ispecwp] ares pvinterp ktimpnt, kfmod, ifile, kfreqscale1, kfreqscale2, \ kampscale1, kampscale2, kfreqinterp, kampinterp ares pvoc ktimpnt, kfmod, ifilcod [, ispecwp] [, iextractmode] \ [, ifreqlim] [, igatefn] kfreq, kamp pvread ktimpnt, ifile, ibin tableseg ifn1, idur1, ifn2 [, idur2] [, ifn3] [...] tablexseg ifn1, idur1, ifn2 [, idur2] [, ifn3] [...] ares vpvoc ktimpnt, kfmod, ifile [, ispecwp] [, ifn]
Spectral Processing:LPC.
ares lpfreson asig, kfrqratio lpinterp islot1, islot2, kmix krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate] ares lpreson asig lpslot islot
Spectral Processing:Non-Standard.
wsig specaddm wsig1, wsig2 [, imul2] wsig specdiff wsigin specdisp wsig, iprd [, iwtflg] wsig specfilt wsigin, ifhtim wsig spechist wsigin koct, kamp specptrk wsig, kvar, ilo, ihi, istr, idbthresh, inptls, \ irolloff [, iodd] [, iconfs] [, interp] [, ifprd] [, iwtflg] wsig specscal wsigin, ifscale, ifthresh ksum specsum wsig [, interp] wsig spectrum xsig, iprd, iocts, ifrqa [, iq] [, ihann] [, idbout] \ [, idsprd] [, idsinrs]
Spectral Processing:Streaming.
ftrks partials ffr, fphs, kthresh, kminpts, kmaxgap, imaxtracks ares pvsadsyn fsrc, inoscs, kfmod [, ibinoffset] [, ibinincr] [, iinit] fsig pvsanal ain, ifftsize, ioverlap, iwinsize, iwintype [, iformat] [, iinit] fsig pvsarp fsigin, kbin, kdepth, kgain fsig pvsbandp fsigin, xlowcut,
2685
xlowfull, xhighfull, xhighcut[, ktype] fsig pvsbandr fsigin, xlowcut, xlowfull, xhighfull, xhighcut[, ktype] kamp, kfr pvsbin fsig, kbin fsig pvsblur fsigin, kblurtime, imaxdel ihandle, ktime fsig pvsbufread pvsbuffer fsig, ilen ktime, khandle[, ilo, ihi]
fsig pvscale fsigin, kscal[, kkeepform, kgain, kcoefs] kcent pvscent fsig fsig pvscross fsrc, fdest, kamp1, kamp2 fsig pvsdemix fleft, fright, kpos, kwidth, ipoints fsig pvsdiskinSFname,ktscal,kgain[,ioffset, ichan] pvsdisp fsig[, ibins, iwtflg] fsig pvsfilter fsigin, fsigfil, kdepth[, igain] fsig pvsfread ktimpt, ifn [, ichan] fsig pvsfreeze fsigin, kfreeza, kfreezf pvsftr fsrc, ifna [, ifnf] kflag pvsftw fsrc, ifna [, ifnf] pvsfwrite fsig, ifile fsig pvshift fsigin, kshift, klowest[, kkeepform, igain, kcoefs] ffr,fphs pvsifd ain, ifftsize, ihopsize, iwintype[,iscal] fsig pvsin kchan[,isize,iolap,iwinsize,iwintype,iformat] ioverlap, inumbins, iwinsize, iformat pvsinfo fsrc fsig pvsinit isize[,iolap,iwinsize,iwintype, iformat] fsig pvslock fsigin, klock fsig pvsmaska fsrc, ifn, kdepth fsig pvsmix fsigin1, fsigin2 fsig pvsmooth fsigin, kacf, kfcf fsig pvsmorph fsig1, fsig2, kampint, kfrqint fsig pvsosc kamp, kfreq, ktype, isize [,ioverlap] [, iwinsize] [, iwintype] [, iformat] pvsout fsig, kchan kfr, kamp pvspitch fsig, kthresh fsig pvstencil fsigin, kgain, klevel, iftable fsig pvsvoc famp, fexc, kdepth, kgain [,kcoefs] fsig pvswarp fsigin, kscal, kshift[, klowest, kmeth, kgain, kcoefs] ares pvsynth fsrc, [iinit] asig resyn fin, kscal, kpitch, kmaxtracks, ifn
2686
kmaxtracks, ifn
asig tradsyn fin, kscal, kpitch, kmaxtracks, ifn fsig trcross fin1, fin2, ksearch,kdepth[,kmode] fsig trfilter fin, kamnt, ifn fsig, kfr,kamp trhighest fin1, kscal fsig, kfr,kamp trlowest fin1, kscal fsig trmix fin1, fin2 fsig trscale fin, kpitch[, kgain] fsig trshift fin, kpshift[, kgain] fsiglow, fsighi trsplit fin, ksplit[, kgainlow, kgainhigh]
Spectral Processing:Loris.
lorismorph isrcidx, itgtidx, istoreidx, kfreqmorphenv, kampmorphenv, kbwmorphenv ar lorisplay ireadidx, kfreqenv, kampenv, kbwenv lorisread ktimpnt, ifilcod, istoreidx, kfreqenv, kampenv, kbwenv[, ifadetime]
Strings:Definition.
Sdst strget indx strset iarg, istring
Strings:Manipulation.
puts Sstr, ktrig[, inonl] Sdst sprintf Sfmt, xarg1[, xarg2[, ... ]] Sdst sprintfk Sfmt, xarg1[, xarg2[, ... ]] Sdst strcat Ssrc1, Ssrc2 Sdst strcatk Ssrc1, Ssrc2 ires strcmp S1, S2 kres strcmpk S1, S2 Sdst strcpy Ssrc Sdst = Ssrc Sdst strcpyk Ssrc ipos strindex S1, S2 kpos strindexk S1, S2 ilen strlen Sstr
2687
klen strlenk Sstr ipos strrindex S1, S2 kpos strrindexk S1, S2 Sdst strsub Ssrc[, istart[, iend]] Sdst strsubk Ssrc, kstart, kend
Strings:Conversion.
ichr strchar Sstr[, ipos] kchr strchark Sstr[, kpos] Sdst strlower Ssrc Sdst strlowerk Ssrc ir strtod Sstr ir strtod indx kr strtodk Sstr kr strtodk kndx ir strtol Sstr ir strtol indx kr strtolk Sstr kr strtolk kndx Sdst strupper Ssrc Sdst strupperk Ssrc
Vectorial:Tables.
vtaba vtabi vtabk andx, ifn, aout1 [, aout2, aout3, .... , aoutN ] indx, ifn, iout1 [, iout2, iout3, .... , ioutN ] kndx, ifn, kout1 [, kout2, kout3, .... , koutN ] kfn,kout1 [, kout2, kout3, .... , koutN ] andx, kfn, kinterp, ixmode, aout1 [, aout2, aout3, .... , aoutN ] indx, ifn, interp, ixmode, iout1 [, iout2, iout3, .... , ioutN ] kndx, kfn, kinterp, ixmode, kout1 [, kout2, kout3, .... , koutN ] andx, kfn, ixmode, ainarg1 [, ainarg2, ainarg3 , .... , ainargN ] indx, ifn, ixmode, inarg1 [, inarg2, inarg3 , .... , inargN ] kndx, kfn, ixmode, kinarg1 [, kinarg2, kinarg3 , .... , kinargN ]
vtable1k vtablea vtablei vtablek vtablewa vtablewi vtablewk vtabwa vtabwi vtabwk
andx, ifn, ainarg1 [, ainarg2, ainarg3 , .... , ainargN ] indx, ifn, inarg1 [, inarg2, inarg3 , .... , inargN ] kndx, ifn, kinarg1 [, kinarg2, kinarg3 , .... , kinargN ]
2688
Vectorial:Scalar operations.
vadd ifn, kval, kelements [, kdstoffset] [, kverbose] ifn, ival, ielements [, idstoffset]
vadd_i vexp
ifn, kval, kelements [, kdstoffset] [, kverbose] ifn, ival, ielements[, idstoffset] ifn, kval, kelements [, kdstoffset] [, kverbose] ifn, ival, ielements [, idstoffset]
vexp_i vmult
vmult_i vpow
vpow_i
Vectorial:Vectorial operations.
vaddv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
vaddv_i vcopy
ifn, ifn2, kelements [, kdstoffset] [, ksrcoffset] [, kverbose] ifn, ifn2, ielements [,idstoffset, isrcoffset]
vcopy_i vdivv
ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
vdivv_i vexpv
ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
vexpv_i vmap
ifn1, ifn2, ielements [,idstoffset, isrcoffset] ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
vmultv
vmultv_i
vpowv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] vpowv_i ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] vsubv ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ifn1, ifn2, ielements [, idstoffset] [, isrcoffset]
vsubv_i
Vectorial:Envelopes.
vexpseg vlinseg ifnout, ielements, ifn1, idur1, ifn2 [, idur2, ifn3 [...]] ifnout, ielements, ifn1, idur1, ifn2 [, idur2, ifn3 [...]]
2689
vmirror vwrap
Vectorial:Delay Paths.
kout vdelayk vecdelay iksig, kdel, imaxdel [, iskip, imode]
Vectorial:Random.
vrandh ifn, krange, kcps, ielements [, idstoffset] [, iseed] [, isize] [, ioffset] vrandi ifn, krange, kcps, ielements [, idstoffset] [, iseed] [, isize] [, ioffset]
Vectorial:Cellular Automata.
vcella ktrig, kreinit, ioutFunc, initStateFunc, \ iRuleFunc, ielements, irulelen [, iradius]
2690
Plugin Hosting:VST.
aout1,aout2 vstaudio instance, [ain1, ain2] aout1,aout2 vstaudiog instance, [ain1, ain2] vstbankload instance, ipath vstedit instance vstinfo instance instance vstinit ilibrarypath [,iverbose] vstmidiout instance, kstatus, kchan, kdata1, kdata2 vstnote instance, kchan, knote, kveloc, kdur vstparamset instance, kparam, kvalue kvalue vstparamget instance, kparam vstprogset instance, kprogram
OSC.
ihandle OSCinit iport kans OSClisten ihandle, idest, itype [, xdata1, xdata2, ...] OSCsend kwhen, ihost, iport, idestination, itype [, kdata1, kdata2, ...]
Network.
remoteport iportnum asig sockrecv iport, ilength asigl, asigr sockrecvs iport, ilength asig strecv Sipaddr, iport socksend asig, Sipaddr, iport, ilength socksends asigl, asigr, Sipaddr, iport, ilength stsend asig, Sipaddr, iport
2691
Remote Opcodes.
insglobal isource, instrnum [,instrnum...] insremot idestination, isource, instrnum [,instrnum...] midglobal isource, instrnum [,instrnum...] midremot idestination, isource, instrnum [,instrnum...]
Mixer Opcodes.
MixerClear kgain MixerGetLevel isend, ibuss asignal MixerReceive ibuss, ichannel MixerSend asignal, isend, ibuss, ichannel MixerSetLevel isend, ibuss, kgain MixerSetLevel_i isend, ibuss, igain
Python Opcodes.
pyassign "variable", kvalue pyassigni "variable", ivalue pylassign "variable", kvalue pylassigni "variable", ivalue pyassignt ktrigger, "variable", kvalue pylassignt ktrigger, "variable", kvalue kresult kresult1, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kresult kresult1, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, iresult iresult1, ir1, ir2, ir1, ir2, ir1, ir2, ir1, ir2, ir1, ir2, ir1, ir2, pycalln pycallni kresult kresult1, kr1, kr2, kr1, kr2, kr1, kr2, pycall "callable", karg1, ... pycall1 "callable", karg1, ... kresult2 pycall2 "callable", karg1, ... kr3 pycall3 "callable", karg1, ... kr3, kr4 pycall4 "callable", karg1, ... kr3, kr4, kr5 pycall5 "callable", karg1, ... kr3, kr4, kr5, kr6 pycall6 "callable", karg1, ... kr3, kr4, kr5, kr6, kr7 pycall7 "callable", karg1, ... kr3, kr4, kr5, kr6, kr7, kr8 pycall8 "callable", karg1, ... pycallt ktrigger, "callable", karg1, pycall1t ktrigger, "callable", karg1, kresult2 pycall2t ktrigger, "callable", karg1, kr3 pycall3t ktrigger, "callable", karg1, kr3, kr4 pycall4t ktrigger, "callable", karg1, kr3, kr4, kr5 pycall5t ktrigger, "callable", karg1, kr3, kr4, kr5, kr6 pycall6t ktrigger, "callable", karg1, kr3, kr4, kr5, kr6, kr7 pycall7t ktrigger, "callable", karg1, kr3, kr4, kr5, kr6, kr7, kr8 pycall8t ktrigger, "callable", karg1, pycalli "callable", karg1, ... pycall1i "callable", iarg1, ... iresult2 pycall2i "callable", iarg1, ... ir3 pycall3i "callable", iarg1, ... ir3, ir4 pycall4i "callable", iarg1, ... ir3, ir4, ir5 pycall5i "callable", iarg1, ... ir3, ir4, ir5, ir6 pycall6i "callable", iarg1, ... ir3, ir4, ir5, ir6, ir7 pycall7i "callable", iarg1, ... ir3, ir4, ir5, ir6, ir7, ir8 pycall8i "callable", iarg1, ... "callable", nresults, kresult1, ..., kresultn, karg1, ... "callable", nresults, iresult1, ..., iresultn, iarg1, ... pylcall "callable", karg1, ... pylcall1 "callable", karg1, ... kresult2 pylcall2 "callable", karg1, ... kr3 pylcall3 "callable", karg1, ... kr3, kr4 pylcall4 "callable", karg1, ... kr3, kr4, kr5 pylcall5 "callable", karg1, ...
2692
kr1, kr2, kr3, kr4, kr5, kr6 kr1, kr2, kr3, kr4, kr5, kr6, kr7 kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 kresult kresult1, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, kr1, kr2, iresult iresult1, ir1, ir2, ir1, ir2, ir1, ir2, ir1, ir2, ir1, ir2, ir1, ir2, pylcalln pylcallni kresult iresult kresult iresult kresult kresult
pylcall6 "callable", karg1, ... pylcall7 "callable", karg1, ... pylcall8 "callable", karg1, ... pylcallt ktrigger, "callable", karg1, pylcall1t ktrigger, "callable", karg1, kresult2 pylcall2t ktrigger, "callable", karg1, kr3 pylcall3t ktrigger, "callable", karg1, kr3, kr4 pylcall4t ktrigger, "callable", karg1, kr3, kr4, kr5 pylcall5t ktrigger, "callable", karg1, kr3, kr4, kr5, kr6 pylcall6t ktrigger, "callable", karg1, kr3, kr4, kr5, kr6, kr7 pylcall7t ktrigger, "callable", karg1, kr3, kr4, kr5, kr6, kr7, kr8 pylcall8t ktrigger, "callable", karg1, pylcalli "callable", karg1, ... pylcall1i "callable", iarg1, ... iresult2 pylcall2i "callable", iarg1, ... ir3 pylcall3i "callable", iarg1, ... ir3, ir4 pylcall4i "callable", iarg1, ... ir3, ir4, ir5 pylcall5i "callable", iarg1, ... ir3, ir4, ir5, ir6 pylcall6i "callable", iarg1, ... ir3, ir4, ir5, ir6, ir7 pylcall7i "callable", iarg1, ... ir3, ir4, ir5, ir6, ir7, ir8 pylcall8i "callable", iarg1, ... "callable", nresults, kresult1, ..., kresultn, karg1, ... "callable", nresults, iresult1, ..., iresultn, iarg1, ...
pyeval "expression" pyevali "expression" pyleval "expression" pylevali "expression" pyevalt ktrigger, "expression" pylevalt ktrigger, "expression"
pyexec "filename" pyexeci "filename" pylexec "filename" pylexeci "filename" pyexect ktrigger, "filename" plyexect ktrigger, "filename" pyinit pyrun "statement" pyruni "statement" pylrun "statement" pylruni "statement" pyrunt ktrigger, "statement" pylrunt ktrigger, "statement"
Miscellaneous.
kfl fareylen kfn
2693
ifl fareyleni ifn modmatrix iresfn, isrcmodfn, isrcparmfn, imodscale, inum_mod, \\ inum_parm, kupdate ires system_i itrig, Scmd, [inowait] kres system ktrig, Scmd, [knowait] tableshuffle ktablenum tableshufflei itablenum
Utilities.
csound -U atsa [flags] infilename outfilename cs [-OPTIONS] <name> [CSOUND OPTIONS ... ] csb64enc [OPTIONS ... ] infile1 [ infile2 [ ... ]] csound -U cvanal [flags] infilename outfilename cvanal [flags] infilename outfilename dnoise [flags] -i noise_ref_file -o output_soundfile input_soundfile
envext [-flags] soundfile csound -U envext [-flags] soundfile extractor [OPTIONS ... ] infile het_export het_file cstext_file csound -U het_export het_file cstext_file het_import cstext_file het_file csound -U het_import cstext_file het_file csound -U hetro [flags] infilename outfilename hetro [flags] infilename outfilename csound -U lpanal [flags] infilename outfilename lpanal [flags] infilename outfilename makecsd [OPTIONS ... ] infile1 [ infile2 [ ... ]] mixer [OPTIONS ... ] infile [[OPTIONS... ] infile] ... pv_export pv_file cstext_file csound -U pv_export pv_file cstext_file pv_import cstext_file pv_file csound -U pv_import cstext_file pv_file csound -U pvanal [flags] infilename outfilename pvanal [flags] infilename outfilename csound -U pvlook [flags] infilename pvlook [flags] infilename scale [OPTIONS ... ] infile sdif2ad [flags] infilename outfilename csound -U sndinfo [options] soundfilenames ... sndinfo [options] soundfilenames ... srconv [flags] infile
2694
List of examples
oscilikts.csd [examples/oscilikts.csd] oscils.csd [examples/oscils.csd] poscil.csd [examples/poscil.csd] poscil3.csd [examples/poscil3.csd] poscil3-file.csd [examples/poscil3-file.csd] vibr.csd [examples/vibr.csd] vibrato.csd [examples/vibrato.csd] Signal Generators:Dynamic Spectrum Oscillators. buzz.csd [examples/buzz.csd] gbuzz.csd [examples/gbuzz.csd] mpulse.csd [examples/mpulse.csd] vco.csd [examples/vco.csd] vco2.csd [examples/vco2.csd] Signal Generators:FM Synthesis. crossfm.csd [examples/crossfm.csd] fmb3.csd [examples/fmb3.csd] fmbell.csd [examples/fmbell.csd] fmmetal.csd [examples/fmmetal.csd] fmpercfl.csd [examples/fmpercfl.csd] fmrhode.csd [examples/fmrhode.csd] fmvoice.csd [examples/fmvoice.csd] fmwurlie.csd [examples/fmwurlie.csd] foscil.csd [examples/foscil.csd] foscili.csd [examples/foscili.csd] Signal Generators:Granular Synthesis. diskgrain.csd [examples/diskgrain.csd] fof.csd [examples/fof.csd] fof2.csd [examples/fof2.csd] fof2-2.csd [examples/fof2-2.csd]
2696
List of examples
grain.csd [examples/grain.csd] grain2.csd [examples/grain2.csd] grain3.csd [examples/grain3.csd] granule.csd [examples/granule.csd] PartikkelExample1.csd [examples/PartikkelExample1.csd] partikkel_softsync.csd [examples/partikkel_softsync.csd] partikkel.csd [examples/partikkel.csd] sndwarp.csd [examples/sndwarp.csd] vosim.csd [examples/vosim.csd] Signal Generators:Hyper Vectorial Synthesis. hvs1.csd [examples/hvs1.csd] hvs2.csd [examples/hvs2.csd] hvs2-2.csd [examples/hvs2-2.csd] hvs3.csd [examples/hvs3.csd] Signal Generators:Linear and Exponential Generators. expcurve.csd [examples/expcurve.csd] expon.csd [examples/expon.csd] expseg.csd [examples/expseg.csd] expsega.csd [examples/expsega.csd] expsegr.csd [examples/expsegr.csd] gainslider.csd [examples/gainslider.csd] line.csd [examples/line.csd] linseg.csd [examples/linseg.csd] linsegr.csd [examples/linsegr.csd] logcurve.csd [examples/logcurve.csd] loopseg.csd [examples/loopseg.csd] loopsegp.csd [examples/loopsegp.csd] looptseg.csd [examples/looptseg.csd] loopxseg.csd [examples/loopxseg.csd] lpshold.csd [examples/lpshold.csd] 2697
List of examples
scale.csd [examples/scale.csd] transeg.csd [examples/transeg.csd] transegr.csd [examples/transegr.csd] Signal Generators:Envelope Generators. adsr.csd [examples/adsr.csd] envlpx.csd [examples/envlpx.csd] envlpxr.csd [examples/envlpxr.csd] madsr.csd [examples/madsr.csd] Signal Generators:Models and Emulations. bamboo.csd [examples/bamboo.csd] barmodel.csd [examples/barmodel.csd] cabasa.csd [examples/cabasa.csd] chuap.csd [examples/chuap.csd] crunch.csd [examples/crunch.csd] dripwater.csd [examples/dripwater.csd] gogobel.csd [examples/gogobel.csd] guiro.csd [examples/guiro.csd] lorenz.csd [examples/lorenz.csd] mandol.csd [examples/mandol.csd] marimba.csd [examples/marimba.csd] moog.csd [examples/moog.csd] planet.csd [examples/planet.csd] prepiano.csd [examples/prepiano.csd] sandpaper.csd [examples/sandpaper.csd] sekere.csd [examples/sekere.csd] shaker.csd [examples/shaker.csd] sleighbells.csd [examples/sleighbells.csd] stix.csd [examples/stix.csd] tambourine.csd [examples/tambourine.csd] vibes.csd [examples/vibes.csd] 2698
List of examples
voice.csd [examples/voice.csd] Signal Generators:Phasors. phasor.csd [examples/phasor.csd] phasorbnk.csd [examples/phasorbnk.csd] syncphasor.csd [examples/syncphasor.csd] syncphasor-CZresonance.csd [examples/syncphasor-CZresonance.csd] Signal Generators:Random (Noise) Generators. betarand.csd [examples/betarand.csd] bexprnd.csd [examples/bexprnd.csd] cauchy.csd [examples/cauchy.csd] exprand.csd [examples/exprand.csd] gauss.csd [examples/gauss.csd] jitter.csd [examples/jitter.csd] jitter2.csd [examples/jitter2.csd] linrand.csd [examples/linrand.csd] noise.csd [examples/noise.csd] noise-2.csd [examples/noise-2.csd] pcauchy.csd [examples/pcauchy.csd] pinkish.csd [examples/pinkish.csd] poisson.csd [examples/poisson.csd] rand.csd [examples/rand.csd] randh.csd [examples/randh.csd] randi.csd [examples/randi.csd] random.csd [examples/random.csd] randomh.csd [examples/randomh.csd] randomi.csd [examples/randomi.csd] rnd31.csd [examples/rnd31.csd] rnd31_krate.csd [examples/rnd31_krate.csd] rnd31_seed7.csd [examples/rnd31_seed7.csd] rnd31_time.csd [examples/rnd31_time.csd] 2699
List of examples
trandom.csd [examples/trandom.csd] trirand.csd [examples/trirand.csd] unirand.csd [examples/unirand.csd] urandom.csd [examples/urandom.csd] urandom_krate.csd [examples/urandom_krate.csd] weibull.csd [examples/weibull.csd] Signal Generators:Sample Playback. bbcutm.csd [examples/bbcutm.csd] bbcuts.csd [examples/bbcuts.csd] fluidcomplex.csd [examples/fluidcomplex.csd] fluidcomplex.csd [examples/fluidcomplex.csd] loscil.csd [examples/loscil.csd] loscil3.csd [examples/loscil3.csd] lphasor.csd [examples/lphasor.csd] lposcila.csd [examples/lposcila.csd] lposcilsa.csd [examples/lposcilsa.csd] lposcilsa2.csd [examples/lposcilsa2.csd] waveset.csd [examples/waveset.csd] Signal Generators:Scanned Synthesis. scans.csd [examples/scans.csd] scantable.csd [examples/scantable.csd] Signal Generators:Table Access. table.csd [examples/table.csd] Signal Generators:Wave Terrain Synthesis. wterrain.csd [examples/wterrain.csd] Signal Generators:Waveguide Physical Modeling. pluck.csd [examples/pluck.csd] repluck.csd [examples/repluck.csd]
2700
List of examples
streson.csd [examples/streson.csd] wgbow.csd [examples/wgbow.csd] wgbowedbar.csd [examples/wgbowedbar.csd] wgbrass.csd [examples/wgbrass.csd] wgclar.csd [examples/wgclar.csd] wgflute.csd [examples/wgflute.csd] wgpluck.csd [examples/wgpluck.csd] wgpluck_brighter.csd [examples/wgpluck_brighter.csd] wgpluck2.csd [examples/wgpluck2.csd] Signal I/O:File I/O. dumpk.csd [examples/dumpk.csd] fout.csd [examples/fout.csd] fout_poly.csd [examples/fout_poly.csd] fout_ftable.csd [examples/fout_ftable.csd] fprintks.csd [examples/fprintks.csd] fprintks-2.csd [examples/fprintks-2.csd] scogen.csd [examples/scogen.csd] fprints.csd [examples/fprints.csd] readk.csd [examples/readk.csd] Signal I/O:Signal Input. diskin.csd [examples/diskin.csd] diskin2.csd [examples/diskin2.csd] inrg.csd [examples/inrg.csd] soundin.csd [examples/soundin.csd] Signal I/O:Signal Output. mdelay.csd [examples/mdelay.csd] outrg.csd [examples/outrg.csd] Signal I/O:Printing and Display. dispfft.csd [examples/dispfft.csd] 2701
List of examples
display.csd [examples/display.csd] flashtxt.csd [examples/flashtxt.csd] print.csd [examples/print.csd] printk.csd [examples/printk.csd] printk2.csd [examples/printk2.csd] printks.csd [examples/printks.csd] prints.csd [examples/prints.csd] Signal I/O:Soundfile Queries. filebit.csd [examples/filebit.csd] filelen.csd [examples/filelen.csd] filenchnls.csd [examples/filenchnls.csd] filepeak.csd [examples/filepeak.csd] filesr.csd [examples/filesr.csd] filevalid.csd [examples/filevalid.csd] Signal Modifiers:Amplitude Modifiers. balance.csd [examples/balance.csd] clip.csd [examples/clip.csd] compress.csd [examples/compress.csd] dam.csd [examples/dam.csd] dam_expanded.csd [examples/dam_expanded.csd] gain.csd [examples/gain.csd] Signal Modifiers:Convolution and Morphing. convolve.csd [examples/convolve.csd] cross2.csd [examples/cross2.csd] dconv.csd [examples/dconv.csd] ftconv.csd [examples/ftconv.csd] ftmorf.csd [examples/ftmorf.csd] Signal Modifiers:Delay. delay.csd [examples/delay.csd] 2702
List of examples
delay1.csd [examples/delay1.csd] delayk.csd [examples/delayk.csd] delayr.csd [examples/delayr.csd] delayw.csd [examples/delayw.csd] deltap.csd [examples/deltap.csd] deltap3.csd [examples/deltap3.csd] deltapi.csd [examples/deltapi.csd] deltapn.csd [examples/deltapn.csd] deltapx.csd [examples/deltapx.csd] deltapxw.csd [examples/deltapxw.csd] Signal Modifiers:Panning and Spatialization. bformenc.csd [examples/bformenc.csd] bformenc1.csd [examples/bformenc1.csd] bformenc.csd [examples/bformenc.csd] bformenc1.csd [examples/bformenc1.csd] hrtfer.csd [examples/hrtfer.csd] hrtfmove.csd [examples/hrtfmove.csd] hrtfmove2.csd [examples/hrtfmove2.csd] hrtfstat.csd [examples/hrtfstat.csd] spat3d_stereo.csd [examples/spat3d_stereo.csd] spat3d_UHJ.csd [examples/spat3d_UHJ.csd] spat3d_quad.csd [examples/spat3d_quad.csd] vbap8.csd [examples/vbap8.csd] vbap8move.csd [examples/vbap8move.csd] Signal Modifiers:Reverberation. alpass.csd [examples/alpass.csd] babo.csd [examples/babo.csd] babo_expert.csd [examples/babo_expert.csd] comb.csd [examples/comb.csd] freeverb.csd [examples/freeverb.csd] 2703
List of examples
nestedap.csd [examples/nestedap.csd] nreverb.csd [examples/nreverb.csd] nreverb_ftable.csd [examples/nreverb_ftable.csd] reverb.csd [examples/reverb.csd] reverbsc.csd [examples/reverbsc.csd] vcomb.csd [examples/vcomb.csd] Signal Modifiers:Sample Level Operators. denorm.csd [examples/denorm.csd] diff.csd [examples/diff.csd] downsamp.csd [examples/downsamp.csd] fold.csd [examples/fold.csd] integ.csd [examples/integ.csd] interp.csd [examples/interp.csd] opa.csd [examples/opa.csd] vaget.csd [examples/vaget.csd] vaset.csd [examples/vaset.csd] Signal Modifiers:Special Effects. distort.csd [examples/distort.csd] distort1.csd [examples/distort1.csd] flanger.csd [examples/flanger.csd] harmon.csd [examples/harmon.csd] phaser1.csd [examples/phaser1.csd] phaser2.csd [examples/phaser2.csd] Signal Modifiers:Standard Filters. atone.csd [examples/atone.csd] atonex.csd [examples/atonex.csd] biquad.csd [examples/biquad.csd] biquad-2.csd [examples/biquad-2.csd] butterbp.csd [examples/butterbp.csd]
2704
List of examples
butterbr.csd [examples/butterbr.csd] butterhp.csd [examples/butterhp.csd] butterlp.csd [examples/butterlp.csd] clfilt_lowpass.csd [examples/clfilt_lowpass.csd] clfilt_highpass.csd [examples/clfilt_highpass.csd] doppler.csd [examples/doppler.csd] mode.csd [examples/mode.csd] Signal Modifiers:Standard Filters:Resonant. areson.csd [examples/areson.csd] bqrez.csd [examples/bqrez.csd] lowpass2.csd [examples/lowpass2.csd] lowres.csd [examples/lowres.csd] lowresx.csd [examples/lowresx.csd] lpf18.csd [examples/lpf18.csd] moogvcf.csd [examples/moogvcf.csd] moogvcf2.csd [examples/moogvcf2.csd] reson.csd [examples/reson.csd] resonr.csd [examples/resonr.csd] resony.csd [examples/resony.csd] rezzy.csd [examples/rezzy.csd] svfilter.csd [examples/svfilter.csd] tbvcf.csd [examples/tbvcf.csd] vlowres.csd [examples/vlowres.csd] Signal Modifiers:Standard Filters:Control. aresonk.csd [examples/aresonk.csd] atonek.csd [examples/atonek.csd] portk.csd [examples/portk.csd] Signal Modifiers:Specialized Filters. dcblock.csd [examples/dcblock.csd]
2705
List of examples
dcblock2.csd [examples/dcblock2.csd] eqfil.csd [examples/eqfil.csd] hilbert.csd [examples/hilbert.csd] hilbert_barberpole.csd [examples/hilbert_barberpole.csd] pareq.csd [examples/pareq.csd] rbjeq.csd [examples/rbjeq.csd] Signal Modifiers:Waveguides. wguide1.csd [examples/wguide1.csd] wguide2.csd [examples/wguide2.csd] Signal Modifiers:Waveshaping. chebyshevpoly.csd [examples/chebyshevpoly.csd] pdclip.csd [examples/pdclip.csd] pdhalf.csd [examples/pdhalf.csd] pdhalfy.csd [examples/pdhalfy.csd] powershape.csd [examples/powershape.csd] Instrument Control:Clock Control. clockoff.csd [examples/clockoff.csd] clockon.csd [examples/clockon.csd] Instrument Control:Conditional Values. equals.csd [examples/equals.csd] greaterequal.csd [examples/greaterequal.csd] greaterthan.csd [examples/greaterthan.csd] lessequal.csd [examples/lessequal.csd] lessthan.csd [examples/lessthan.csd] notequal.csd [examples/notequal.csd] Instrument Control:Duration Control. ihold.csd [examples/ihold.csd] turnoff.csd [examples/turnoff.csd]
2706
List of examples
Instrument Control:Invocation. event.csd [examples/event.csd] event_named.csd [examples/event_named.csd] mute.csd [examples/mute.csd] schedkwhen.csd [examples/schedkwhen.csd] schedkwhennamed.csd [examples/schedkwhennamed.csd] schedule.csd [examples/schedule.csd] schedwhen.csd [examples/schedwhen.csd] Instrument Control:Program Flow Control. cggoto.csd [examples/cggoto.csd] cigoto.csd [examples/cigoto.csd] ckgoto.csd [examples/ckgoto.csd] cngoto.csd [examples/cngoto.csd] else.csd [examples/else.csd] elseif.csd [examples/elseif.csd] endif.csd [examples/endif.csd] goto.csd [examples/goto.csd] igoto.csd [examples/igoto.csd] kgoto.csd [examples/kgoto.csd] ifthen.csd [examples/ifthen.csd] igoto.csd [examples/igoto.csd] kgoto.csd [examples/kgoto.csd] Instrument Control:Realtime Performance Control. active.csd [examples/active.csd] active_k.csd [examples/active_k.csd] active_scale.csd [examples/active_scale.csd] cpuprc.csd [examples/cpuprc.csd] jacktransport.csd [examples/jacktransport.csd] maxalloc.csd [examples/maxalloc.csd]
2707
List of examples
prealloc.csd [examples/prealloc.csd] Instrument Control:Initialization and Reinitialization. assign.csd [examples/assign.csd] p.csd [examples/p.csd] passign.csd [examples/passign.csd] reinit.csd [examples/reinit.csd] reinit.csd [examples/reinit.csd] Instrument Control:Sensing and Control. changed.csd [examples/changed.csd] checkbox.csd [examples/checkbox.csd] follow.csd [examples/follow.csd] follow2.csd [examples/follow2.csd] metro.csd [examples/metro.csd] p5g.csd [examples/p5g.csd] pcount.csd [examples/pcount.csd] peak.csd [examples/peak.csd] pindex.csd [examples/pindex.csd] pitch.csd [examples/pitch.csd] pitchamdf.csd [examples/pitchamdf.csd] ptrack.csd [examples/ptrack.csd] rms.csd [examples/rms.csd] sensekey.csd [examples/sensekey.csd] FLpanel-sensekey.csd [examples/FLpanel-sensekey.csd] FLpanel-sensekey2.csd [examples/FLpanel-sensekey2.csd] seqtime.csd [examples/seqtime.csd] setctrl.csd [examples/setctrl.csd] tempest.csd [examples/tempest.csd] tempo.csd [examples/tempo.csd] tempoval.csd [examples/tempoval.csd] trigger.csd [examples/trigger.csd] 2708
List of examples
wii.csd [examples/wii.csd] xyin.csd [examples/xyin.csd] Instrument Control:Subinstrument Control. subinstr.csd [examples/subinstr.csd] subinstr_named.csd [examples/subinstr_named.csd] Instrument Control:Time Reading. date.csd [examples/date.csd] dates.csd [examples/dates.csd] readclock.csd [examples/readclock.csd] rtclock.csd [examples/rtclock.csd] timeinstk.csd [examples/timeinstk.csd] timeinsts.csd [examples/timeinsts.csd] timek.csd [examples/timek.csd] times.csd [examples/times.csd] Table Control. ftgen.csd [examples/ftgen.csd] ftgen-2.csd [examples/ftgen-2.csd] ftgentmp.csd [examples/ftgentmp.csd] Table Control:Table Queries. ftchnls.csd [examples/ftchnls.csd] ftcps.csd [examples/ftcps.csd] ftlen.csd [examples/ftlen.csd] ftlptim.csd [examples/ftlptim.csd] ftsr.csd [examples/ftsr.csd] nsamp.csd [examples/nsamp.csd] tableng.csd [examples/tableng.csd] Table Control:Dynamic Selection. tablexkt.csd [examples/tablexkt.csd]
2709
List of examples
Table Control:Read/Write Opreations. ftsave.csd [examples/ftsave.csd] tabmorph.csd [examples/tabmorph.csd] tabmorpha.csd [examples/tabmorpha.csd] tabmorphak.csd [examples/tabmorphak.csd] tabmorphi.csd [examples/tabmorphi.csd] FLTK:Containers. FLpanel.csd [examples/FLpanel.csd] FLscroll.csd [examples/FLscroll.csd] FLtabs.csd [examples/FLtabs.csd] FLTK:Valuators. FLcount.csd [examples/FLcount.csd] FLjoy.csd [examples/FLjoy.csd] FLknob.csd [examples/FLknob.csd] FLknob-2.csd [examples/FLknob-2.csd] FLroller.csd [examples/FLroller.csd] FLslider.csd [examples/FLslider.csd] FLslider-2.csd [examples/FLslider-2.csd] FLtext.csd [examples/FLtext.csd] FLTK:Other. FLbox.csd [examples/FLbox.csd] FLbutBank.csd [examples/FLbutBank.csd] FLbutton.csd [examples/FLbutton.csd] FLexecButton.csd [examples/FLexecButton.csd] FLhvsBox.csd [examples/FLhvsBox.csd] FLhvsBoxSetValue.csd [examples/FLhvsBoxSetValue.csd] FLkeyIn.csd [examples/FLkeyIn.csd] FLmouse.csd [examples/FLmouse.csd] FLsavesnap_simple.csd [examples/FLsavesnap_simple.csd] 2710
List of examples
FLsavesnap.csd [examples/FLsavesnap.csd] FLslidBnk.csd [examples/FLslidBnk.csd] FLslidBnk2.csd [examples/FLslidBnk2.csd] FLslidBnk2Set.csd [examples/FLslidBnk2Set.csd] FLslidBnk2Setk.csd [examples/FLslidBnk2Setk.csd] FLslidBnkGetHandle.csd [examples/FLslidBnkGetHandle.csd] FLslidBnkSet.csd [examples/FLslidBnkSet.csd] FLslidBnkSetk.csd [examples/FLslidBnkSetk.csd] FLvalue.csd [examples/FLvalue.csd] FLvslidBnk.csd [examples/FLvslidBnk.csd] FLvslidBnk2.csd [examples/FLvslidBnk2.csd] FLxyin.csd [examples/FLxyin.csd] FLxyin-2.csd [examples/FLxyin-2.csd] vphaseseg.csd [examples/vphaseseg.csd] FLTK:Appearance. FLsetcolor.csd [examples/FLsetcolor.csd] FLsetText.csd [examples/FLsetText.csd] Mathematical Operations:Arithmetic and Logic Operations. adds.csd [examples/adds.csd] divides.csd [examples/divides.csd] modulus.csd [examples/modulus.csd] multiplies.csd [examples/multiplies.csd] bitwise.csd [examples/bitwise.csd] bitshift.csd [examples/bitshift.csd] raises.csd [examples/raises.csd] subtracts.csd [examples/subtracts.csd] Mathematical Operations:Comparators and Accumulators. clear.csd [examples/clear.csd] Mathematical Operations:Mathematical Functions. 2711
List of examples
abs.csd [examples/abs.csd] ceil.csd [examples/ceil.csd] exp.csd [examples/exp.csd] frac.csd [examples/frac.csd] int.csd [examples/int.csd] log.csd [examples/log.csd] log10.csd [examples/log10.csd] logbtwo.csd [examples/logbtwo.csd] powoftwo.csd [examples/powoftwo.csd] sqrt.csd [examples/sqrt.csd] Mathematical Operations:Trigonometric Functions. cos.csd [examples/cos.csd] cosh.csd [examples/cosh.csd] cosinv.csd [examples/cosinv.csd] sin.csd [examples/sin.csd] sinh.csd [examples/sinh.csd] sininv.csd [examples/sininv.csd] tan.csd [examples/tan.csd] tanh.csd [examples/tanh.csd] taninv.csd [examples/taninv.csd] Mathematical Operations:Amplitude Functions. ampdb.csd [examples/ampdb.csd] ampdbfs.csd [examples/ampdbfs.csd] db.csd [examples/db.csd] dbamp.csd [examples/dbamp.csd] dbfsamp.csd [examples/dbfsamp.csd] Mathematical Operations:Random Functions. birnd.csd [examples/birnd.csd] rnd.csd [examples/rnd.csd]
2712
List of examples
Mathematical Operations:Opcode Equivalents of Functions. divz.csd [examples/divz.csd] polynomial.csd [examples/polynomial.csd] pow.csd [examples/pow.csd] taninv2.csd [examples/taninv2.csd] Pitch Converters:Functions. cent.csd [examples/cent.csd] cpsmidinn.csd [examples/cpsmidinn.csd] cpsmidinn2.csd [examples/cpsmidinn2.csd] cpsoct.csd [examples/cpsoct.csd] cpspch.csd [examples/cpspch.csd] octave.csd [examples/octave.csd] octcps.csd [examples/octcps.csd] cpsmidinn.csd [examples/cpsmidinn.csd] octpch.csd [examples/octpch.csd] cpsmidinn.csd [examples/cpsmidinn.csd] pchoct.csd [examples/pchoct.csd] semitone.csd [examples/semitone.csd] Pitch Converters:Tuning Opcodes. cps2pch.csd [examples/cps2pch.csd] cps2pch_ftable.csd [examples/cps2pch_ftable.csd] cps2pch_19et.csd [examples/cps2pch_19et.csd] cpstun.csd [examples/cpstun.csd] cpstuni.csd [examples/cpstuni.csd] cpsxpch.csd [examples/cpsxpch.csd] cpsxpch_105et.csd [examples/cpsxpch_105et.csd] cpsxpch_pierce.csd [examples/cpsxpch_pierce.csd] Real-time MIDI:Input. aftouch.csd [examples/aftouch.csd] 2713
List of examples
chanctrl.csd [examples/chanctrl.csd] ctrl7.csd [examples/ctrl7.csd] notnum.csd [examples/notnum.csd] notnum_complex.csd [examples/notnum_complex.csd] pchbend.csd [examples/pchbend.csd] pgmassign.csd [examples/pgmassign.csd] pgmassign_ignore.csd [examples/pgmassign_ignore.csd] pgmassign_advanced.csd [examples/pgmassign_advanced.csd] polyaft.csd [examples/polyaft.csd] veloc.csd [examples/veloc.csd] Real-time MIDI:Output. outkpc.csd [examples/outkpc.csd] outkpc_fltk.csd [examples/outkpc_fltk.csd] Real-time MIDI:Converters. ampmidi.csd [examples/ampmidi.csd] ampmidid.csd [examples/ampmidid.csd] cpsmidi.csd [examples/cpsmidi.csd] cpsmidib.csd [examples/cpsmidib.csd] cpstmid.csd [examples/cpstmid.csd] octmidi.csd [examples/octmidi.csd] octmidib.csd [examples/octmidib.csd] pchmidi.csd [examples/pchmidi.csd] pchmidib.csd [examples/pchmidib.csd] Real-time MIDI:Generic I/O. midiin.csd [examples/midiin.csd] Real-time MIDI:Event Extenders. xtratim.csd [examples/xtratim.csd] xtratim-2.csd [examples/xtratim-2.csd]
2714
List of examples
Real-time MIDI:Note Output. midion_simple.csd [examples/midion_simple.csd] midion_scale.csd [examples/midion_scale.csd] moscil.csd [examples/moscil.csd] noteondur.csd [examples/noteondur.csd] noteondur2.csd [examples/noteondur2.csd] Real-time MIDI:MIDI/Score Interoperability. midichannelaftertouch.csd [examples/midichannelaftertouch.csd] midichn.csd [examples/midichn.csd] midichn_advanced.csd [examples/midichn_advanced.csd] midinoteoff.csd [examples/midinoteoff.csd] midinoteoncps.csd [examples/midinoteoncps.csd] midinoteonkey.csd [examples/midinoteonkey.csd] midinoteonoct.csd [examples/midinoteonoct.csd] midinoteonpch.csd [examples/midinoteonpch.csd] midipitchbend.csd [examples/midipitchbend.csd] Spectral Processing:Streaming. binit.csd [examples/binit.csd] pvsadsyn.csd [examples/pvsadsyn.csd] pvsarp.csd [examples/pvsarp.csd] pvsarp2.csd [examples/pvsarp2.csd] pvsbandp.csd [examples/pvsbandp.csd] pvsbandr.csd [examples/pvsbandr.csd] pvsbin.csd [examples/pvsbin.csd] pvsblur.csd [examples/pvsblur.csd] pvsbufread.csd [examples/pvsbufread.csd] pvscale.csd [examples/pvscale.csd] pvscent.csd [examples/pvscent.csd] pvscross.csd [examples/pvscross.csd]
2715
List of examples
pvsdisp.csd [examples/pvsdisp.csd] pvsfilter.csd [examples/pvsfilter.csd] pvsfreeze.csd [examples/pvsfreeze.csd] pvsfwrite.csd [examples/pvsfwrite.csd] pvshift.csd [examples/pvshift.csd] pvsmaska.csd [examples/pvsmaska.csd] pvsmorph.csd [examples/pvsmorph.csd] pvsmorph2.csd [examples/pvsmorph2.csd] pvsosc.csd [examples/pvsosc.csd] pvspitch.csd [examples/pvspitch.csd] pvswarp.csd [examples/pvswarp.csd] pvsynth.csd [examples/pvsynth.csd] Spectral Processing:ATS. ATSadd.csd [examples/ATSadd.csd] ATSaddnz.csd [examples/ATSaddnz.csd] ATSbufread.csd [examples/ATSbufread.csd] ATScross.csd [examples/ATScross.csd] ATSinfo.csd [examples/ATSinfo.csd] ATSinterpread.csd [examples/ATSinterpread.csd] ATSpartialtap.csd [examples/ATSpartialtap.csd] ATSread.csd [examples/ATSread.csd] ATSreadnz.csd [examples/ATSreadnz.csd] ATSsinnoi.csd [examples/ATSsinnoi.csd] Strings:Definition. strset.csd [examples/strset.csd] Strings:Manipulation. sprintfk.csd [examples/sprintfk.csd] strsub.csd [examples/strsub.csd] Strings:Conversion. 2716
List of examples
strtod.csd [examples/strtod.csd] strtodk.csd [examples/strtodk.csd] strtol.csd [examples/strtol.csd] strtolk.csd [examples/strtolk.csd] Vectorial:Tables. vtable1k.csd [examples/vtable1k.csd] vtablei.csd [examples/vtablei.csd] vtablek.csd [examples/vtablek.csd] vtablewa.csd [examples/vtablewa.csd] vtablewk.csd [examples/vtablewk.csd] Vectorial:Scalar operations. vadd.csd [examples/vadd.csd] vadd_i.csd [examples/vadd_i.csd] vexp.csd [examples/vexp.csd] vexp_i.csd [examples/vexp_i.csd] vmult-2.csd [examples/vmult-2.csd] vmult.csd [examples/vmult.csd] vmult_i.csd [examples/vmult_i.csd] vpow.csd [examples/vpow.csd] vpow_i.csd [examples/vpow_i.csd] Vectorial:Vectorial operations. vaddv.csd [examples/vaddv.csd] vcopy.csd [examples/vcopy.csd] vdivv.csd [examples/vdivv.csd] vexpv.csd [examples/vexpv.csd] vmap.csd [examples/vmap.csd] vmultv.csd [examples/vmultv.csd] vpowv.csd [examples/vpowv.csd] vsubv.csd [examples/vsubv.csd]
2717
List of examples
Vectorial:Envelopes. vexpseg.csd [examples/vexpseg.csd] vlinseg.csd [examples/vlinseg.csd] Vectorial:Random. vrandh.csd [examples/vrandh.csd] vrandi.csd [examples/vrandi.csd] Vectorial:Cellular Automata. vcella.csd [examples/vcella.csd] Zak Patch System. zacl.csd [examples/zacl.csd] zakinit.csd [examples/zakinit.csd] zamod.csd [examples/zamod.csd] zar.csd [examples/zar.csd] zarg.csd [examples/zarg.csd] zaw.csd [examples/zaw.csd] zawm.csd [examples/zawm.csd] zir.csd [examples/zir.csd] ziw.csd [examples/ziw.csd] ziwm.csd [examples/ziwm.csd] zkcl.csd [examples/zkcl.csd] zkmod.csd [examples/zkmod.csd] zkr.csd [examples/zkr.csd] zkw.csd [examples/zkw.csd] zkwm.csd [examples/zkwm.csd] Plugin Hosting:DSSI and LADSPA. dssiactivate.csd [examples/dssiactivate.csd] dssiaudio.csd [examples/dssiaudio.csd] dssictls.csd [examples/dssictls.csd]
2718
List of examples
dssiinit.csd [examples/dssiinit.csd] dssilist.csd [examples/dssilist.csd] Plugin Hosting:VST. vst4cs.csd [examples/vst4cs.csd] vst4cs.csd [examples/vst4cs.csd] vst4cs.csd [examples/vst4cs.csd] vst4cs.csd [examples/vst4cs.csd] vst4cs.csd [examples/vst4cs.csd] vst4cs.csd [examples/vst4cs.csd] OSC. OSCmidisend.csd [examples/OSCmidisend.csd] OSCmidircv.csd [examples/OSCmidircv.csd] Remote Opcodes. insremot.csd [examples/insremot.csd] insremotM.csd [examples/insremotM.csd] midremot.csd [examples/midremot.csd] Image Processing Opcodes. imageopcodes.csd [examples/imageopcodes.csd] imageopcodes.csd [examples/imageopcodes.csd] imageopcodesdemo2.csd [examples/imageopcodesdemo2.csd] imageopcodes.csd [examples/imageopcodes.csd] imageopcodes.csd [examples/imageopcodes.csd] imageopcodes.csd [examples/imageopcodes.csd] imageopcodes.csd [examples/imageopcodes.csd] Miscellaneous. modmatrix.csd [examples/modmatrix.csd] system.csd [examples/system.csd] farey7shuffled.csd [examples/farey7shuffled.csd]
2719
Pitch Conversion
Note C2 C#2 D2 D#2 E2 F2 F#2 G2 G#2 A2 A#2 B2 C3 C#3 D3 D#3 E3 F3 F#3 G3 G#3 A3 A#3 B3 C4 C#4 D4 D#4 E4 F4 F#4 G4 G#4 A4 A#4 B4 C5 C#5 D5 D#5 E5
Hz 65.406 69.296 73.416 77.782 82.407 87.307 92.499 97.999 103.826 110.000 116.541 123.471 130.813 138.591 146.832 155.563 164.814 174.614 184.997 195.998 207.652 220.000 233.082 246.942 261.626 277.183 293.665 311.127 329.628 349.228 369.994 391.995 415.305 440.000 466.164 493.883 523.251 554.365 587.330 622.254 659.255 2721
cpspch 6.00 6.01 6.02 6.03 6.04 6.05 6.06 6.07 6.08 6.09 6.10 6.11 7.00 7.01 7.02 7.03 7.04 7.05 7.06 7.07 7.08 7.09 7.10 7.11 8.00 8.01 8.02 8.03 8.04 8.05 8.06 8.07 8.08 8.09 8.10 8.11 9.00 9.01 9.02 9.03 9.04
MIDI 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
Pitch Conversion
Note F5 F#5 G5 G#5 A5 A#5 B5 C6 C#6 D6 D#6 E6 F6 F#6 G6 G#6 A6 A#6 B6 C7 C#7 D7 D#7 E7 F7 F#7 G7 G#7 A7 A#7 B7 C8 C#8 D8 D#8 E8 F8 F#8 G8 G#8 A8
Hz 698.456 739.989 783.991 830.609 880.000 932.328 987.767 1046.502 1108.731 1174.659 1244.508 1318.510 1396.913 1479.978 1567.982 1661.219 1760.000 1864.655 1975.533 2093.005 2217.461 2349.318 2489.016 2637.020 2793.826 2959.955 3135.963 3322.438 3520.000 3729.310 3951.066 4186.009 4434.922 4698.636 4978.032 5274.041 5587.652 5919.911 6271.927 6644.875 7040.000 2722
cpspch 9.05 9.06 9.07 9.08 9.09 9.10 9.11 10.00 10.01 10.02 10.03 10.04 10.05 10.06 10.07 10.08 10.09 10.10 10.11 11.00 11.01 11.02 11.03 11.04 11.05 11.06 11.07 11.08 11.09 11.10 11.11 12.00 12.01 12.02 12.03 12.04 12.05 12.06 12.07 12.08 12.09
MIDI 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
Pitch Conversion
Hz 7458.620 7902.133 8372.018 8869.844 9397.273 9956.063 10548.08 11175.30 11839.82 12543.85
cpspch 12.10 12.11 13.00 13.01 13.02 13.03 13.04 13.05 13.06 13.07
MIDI 118 119 120 121 122 123 124 125 126 127
2723
2724
Formant Values
f1 600 0 60
f2 1040 -7 70
f3 2250 -9 110
f4 2450 -9 120
2726
Formant Values
Formant Values
f1 0 60
f2 -20 100
f3 -15 120
f4 -40 150
f5 -56 200
2728
Formant Values
2729
2730
Modal Frequency Ratios ([1312.0, 1314.5, 2353.3, 2362.9, 3306.5, 3309.4, 3923.8, 3928.2, 4966.6, 4993.7, 5994.4, 6003.0, 6598.9, 6619.7, 7971.7, 7753.2, 8413.1, 8453.3, 9292.4, 9305.2, 9602.3, 9912.4] Hz) [ 1, 1.0019054878049, 1.8009908536585, 2.5224085365854, 2.9940548780488, 3.8061737804878, 4.5754573170732, 5.0455030487805, 5.9094512195122, 6.4430640243902, 7.0923780487805, 7.5551829268293 ] ratios 1.7936737804878, 2.5201981707317, 2.9907012195122, 3.7855182926829, 4.5689024390244, 5.0296493902439, 6.0759908536585, 6.4124237804878, 7.0826219512195, 7.3188262195122,
spinel sphere with diameter of 3.6675mm ([977.25, 1003.16, 1390.13, 1414.93, 1465.34, 1748.48, 1834.20, 1919.90, 1987.20, 2096.48, 2107.10, 2202.08, 2280.10, 0 /*2290.53 calculated*/, 2435.85, 2507.80, 2546.30, 2608.55, 2691.70, 2708.00] Hz) [ 1, 1.026513174725, 1.4478690202098, 1.499452545408, 1.8768994627782, 1.9786543873113, 2.1452852391916, 2.2533435661294, 2.3331798413917, 0, 2.4925556408289, 2.6055768738808, 2.7140956766436, 2.7710411870043 ] ratios pot lid [ 1, 3.2, 6.23, 6.27, 9.92, 14.15] ratios 1432.84, 1933.64, 2238.40, 2400.88, 2652.35,
1.4224916858532, 1.4661959580455, 1.7891839345101, 1.9645945254541, 2.0334612432847, 2.1561524686621, 2.2905090816065, 2.4567715528268, 2.5661806088514, 2.6692760296751, 2.7543617293425,
2731
2732
Window Functions
2733
Window Functions
2734
Window Functions
Window Functions
f89
4096
-20
.75
2736
2737
2738
Glossary
G
Guard Point A guard point is the last position on a function table. If the length is, say 1024, the table will have 1024+1 (1025) points: the extra point is the guard point. In any case, for a 1024-point table, the first point is index 0 and the last 1023; index 1024 is not really used) The reason for a guard-point is that some opcodes interpolate to obtain a table value, in which case, when the table index is say, 1023.5, we need the value of the 1024 pos in order to interpolate. There are two ways of filling this point (writing the value that goes in it): 1. Default way: by copying the value of the 1st point in the table 2. Extended Guard-Point: extending the contour of the table (continuing to calculate the table for one extra point) In general the first mode is used for wrap-around applications, such as an oscillator (which loops continuously reading the table). The second use is for one-shot readouts, such as envelopes, where the last point needs to be interpolated correctly following the table contour (we are not looping back to the beginning of the table)
2739