Skip to content
Browse files

Merging various recent changes from trunk into 34 - inc sc.app menu t…

…weak, synthdef changes

git-svn-id: https://supercollider.svn.sourceforge.net/svnroot/supercollider/branches/3.4@10015 a380766d-ff14-0410-b294-a243070f3f08
  • Loading branch information...
1 parent 12932b2 commit c54cbbccac3514c79f8bbac73c021a33955ccb56 @danstowell danstowell committed
Showing with 2,846 additions and 1,694 deletions.
  1. +5 −0 common/Headers/lang/ByteCodeArray.h
  2. +5 −0 common/Headers/lang/MiscInlineMath.h
  3. +0 −4 common/Headers/lang/SC_LanguageClient.h
  4. +4 −0 common/Headers/lang/SimpleStack.h
  5. +5 −1 common/Headers/plugin_interface/SC_Unit.h
  6. +2 −0 common/Source/app/SCCocoaView.M
  7. +2 −3 common/Source/app/SCView.M
  8. +28 −28 common/Source/lang/LangSource/PyrInterpreter3.cpp
  9. +1 −9 common/Source/lang/LangSource/PyrMessage.cpp
  10. +19 −9 common/Source/plugins/DelayUGens.cpp
  11. +15 −15 common/Source/plugins/FilterUGens.cpp
  12. +7 −0 common/build/ChangeLog
  13. +126 −110 common/build/Help/Core/Kernel/Function.html
  14. +187 −49 common/build/Help/Core/Symbol.html
  15. +12 −12 common/build/Help/GUI/Cocoa-GUI/SCListView.html
  16. +5 −5 common/build/Help/GUI/Cocoa-GUI/SCNumberBox.html
  17. +8 −8 common/build/Help/GUI/Cocoa-GUI/SCTabletView.html
  18. +16 −19 common/build/Help/GUI/Cocoa-GUI/SCUserViewSubclassing/SCUserView-Subclassing.html
  19. +7 −7 common/build/Help/GUI/Cocoa-GUI/SCView.html
  20. +5 −5 common/build/Help/GUI/EZ-GUI/EZListView.html
  21. +2 −2 common/build/Help/GUI/EZ-GUI/EZLists.html
  22. +2 −2 common/build/Help/GUI/EZ-GUI/EZPopUpMenu.html
  23. +112 −112 common/build/Help/GUI/GUI-Tools/FlowLayout.html
  24. +24 −20 common/build/Help/Libraries/JITLib/extras/EnvirGui.html
  25. +148 −0 common/build/Help/Libraries/JITLib/extras/JITGui.html
  26. +25 −86 common/build/Help/Libraries/JITLib/extras/PdefEditor.html
  27. +212 −0 common/build/Help/Libraries/JITLib/extras/PdefGui.html
  28. +24 −86 common/build/Help/Libraries/JITLib/extras/TdefEditor.html
  29. +206 −0 common/build/Help/Libraries/JITLib/extras/TdefGui.html
  30. +202 −138 common/build/Help/Math/Complex.html
  31. +50 −49 common/build/Help/Math/Magnitude.html
  32. +125 −111 common/build/Help/Math/Number.html
  33. +18 −16 common/build/Help/UGens/Analysis/Pitch.html
  34. +2 −2 common/build/Help/UGens/Playback and Recording/VDiskIn.html
  35. +143 −87 common/build/Help/UGens/Synth control/Control.html
  36. +107 −55 common/build/SCClassLibrary/Common/Audio/SynthDef.sc
  37. +28 −0 common/build/SCClassLibrary/Common/Audio/SynthDesc.sc
  38. +2 −2 common/build/SCClassLibrary/Common/Audio/Trig.sc
  39. +1 −0 common/build/SCClassLibrary/Common/Audio/UGenCategories.sc
  40. +0 −40 common/build/SCClassLibrary/Common/Audio/asSynthDesc.sc
  41. +3 −0 common/build/SCClassLibrary/Common/Collections/Dictionary.sc
  42. +52 −11 common/build/SCClassLibrary/Common/Collections/SequenceableCollection.sc
  43. +4 −0 common/build/SCClassLibrary/Common/Control/Server.sc
  44. +4 −0 common/build/SCClassLibrary/Common/Core/Object.sc
  45. +1 −1 common/build/SCClassLibrary/Common/GUI/ViewRedirect.sc
  46. +14 −6 common/build/SCClassLibrary/Common/GUI/osx/scide_scapp/Base/SCPen.sc
  47. +14 −0 common/build/SCClassLibrary/Common/GUI/osx/scide_scapp/SCImage.sc
  48. +52 −50 common/build/SCClassLibrary/Common/GUI/osx/scide_scapp/SCLevelIndicator.sc
  49. +23 −1 common/build/SCClassLibrary/Common/Math/Complex.sc
  50. +327 −0 common/build/SCClassLibrary/JITLib/GUI/TaskProxyGui.sc
  51. +0 −336 common/build/SCClassLibrary/JITLib/GUI/TdefEditor.sc
  52. +40 −0 common/build/SCClassLibrary/JITLib/GUI/extJITgui.sc
  53. +27 −5 common/build/SCClassLibrary/JITLib/ProxySpace/InBus.sc
  54. +10 −4 common/build/SCClassLibrary/JITLib/ProxySpace/NodeMap.sc
  55. +3 −1 common/build/SCClassLibrary/JITLib/ProxySpace/NodeMapSetting.sc
  56. +14 −7 common/build/SCClassLibrary/JITLib/ProxySpace/NodeProxy.sc
  57. +92 −79 common/build/SCClassLibrary/JITLib/ProxySpace/ProxyInterfaces.sc
  58. +96 −97 common/build/SCClassLibrary/JITLib/basics/EnvirGui.sc
  59. +173 −0 common/build/SCClassLibrary/JITLib/basics/JITGui.sc
  60. +1 −1 common/build/SCClassLibrary/JITLib/basics/SkipJack.sc
  61. +1 −0 common/build/SCClassLibrary/Platform/osx/scide_scapp/CocoaGUI.sc
  62. +1 −1 common/build/SCClassLibrary/crucial/Editors/NumberEditor.sc
  63. +2 −2 mac/Resources/English.lproj/MainMenu.nib/info.nib
  64. BIN mac/Resources/English.lproj/MainMenu.nib/keyedobjects.nib
View
5 common/Headers/lang/ByteCodeArray.h
@@ -18,6 +18,10 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifndef LANG_BYTECODEARRAY_H
+#define LANG_BYTECODEARRAY_H
+
+
typedef unsigned char Byte;
#define BYTE_CODE_CHUNK_SIZE 64
@@ -48,3 +52,4 @@ void compileJump(long opcode, long jumplen);
int compileNumber(unsigned long value);
int compileNumber24(unsigned long value);
+#endif
View
5 common/Headers/lang/MiscInlineMath.h
@@ -18,6 +18,9 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifndef LANG_MISCINLINEMATH_H
+#define LANG_MISCINLINEMATH_H
+
#define NUMPRIMES 6542
long nthPrime(int n);
long findPrime(int n);
@@ -52,3 +55,5 @@ inline double linexp(double x, double a, double b, double c, double d)
if (x >= b) return d;
return pow(d/c, (x-a)/(b-a)) * c;
}
+
+#endif
View
4 common/Headers/lang/SC_LanguageClient.h
@@ -38,11 +38,7 @@
struct PyrSymbol;
struct VMGlobals;
-#ifndef SC_WIN32
-extern long compiledOK;
-#else
extern bool compiledOK;
-#endif
extern pthread_mutex_t gLangMutex;
extern VMGlobals* gMainVMGlobals;
View
4 common/Headers/lang/SimpleStack.h
@@ -18,6 +18,8 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifndef LANG_SIMPLESTACK_H
+#define LANG_SIMPLESTACK_H
typedef struct {
long *stak;
@@ -30,3 +32,5 @@ void growLongStack(LongStack *self);
void pushls(LongStack *self, long value);
long popls(LongStack *self);
int emptyls(LongStack *self);
+
+#endif
View
6 common/Headers/plugin_interface/SC_Unit.h
@@ -29,6 +29,10 @@ typedef void (*UnitDtorFunc)(struct Unit* inUnit);
typedef void (*UnitCalcFunc)(struct Unit *inThing, int inNumSamples);
+struct SC_Unit_Extensions {
+ float * todo;
+};
+
struct Unit
{
struct World *mWorld;
@@ -39,9 +43,9 @@ struct Unit
int16 mSpecialIndex; // used by unary and binary ops
int16 mParentIndex;
int16 mDone;
-
struct Wire **mInput, **mOutput;
struct Rate *mRate;
+ SC_Unit_Extensions* mExtensions; //future proofing and backwards compatibility; used to be SC_Dimension struct pointer
float **mInBuf, **mOutBuf;
UnitCalcFunc mCalcFunc;
View
2 common/Source/app/SCCocoaView.M
@@ -887,6 +887,8 @@ void QDDrawBevelRect(CGContextRef cgc, CGRect bounds, float width, bool inout);
[mFormatter setAlwaysShowsDecimalSeparator:NO];
[mFormatter setExponentSymbol:@"e"];
[mFormatter setMaximumFractionDigits:20];
+ [mFormatter setDecimalSeparator:@"."];
+ [mFormatter setUsesGroupingSeparator:NO];
[[self cell] setFormatter:mFormatter];
}
View
5 common/Source/app/SCView.M
@@ -4232,15 +4232,14 @@ void SCUserView::draw(SCRect inDamage)
void SCUserView::clearDrawing()
{
- if( !mNSImageForLayering )
+ if( mClearOnRefresh )
return;
//SCRect bounds = getDrawBounds();
//CGContextClearRect ( mNSImageForLayering , CGRectMake( 0, 0, bounds.width, bounds.height));
[ mNSImageForLayering lockFocus ];
CGContextRef cgc = (CGContextRef)[[NSGraphicsContext currentContext]graphicsPort];
- if(mClearOnRefresh)
- CGContextClearRect( cgc, CGRectMake( 0.f, 0.f, [mNSImageForLayering size].width, [mNSImageForLayering size].height ) );
+ CGContextClearRect( cgc, CGRectMake( 0.f, 0.f, [mNSImageForLayering size].width, [mNSImageForLayering size].height ) );
[ mNSImageForLayering unlockFocus ];
}
View
56 common/Source/lang/LangSource/PyrInterpreter3.cpp
@@ -97,7 +97,7 @@ bool gTraceInterpreter = false;
//bool gTraceInterpreter = true;
-char* byteCodeString(int code);
+const char* byteCodeString(int code);
extern int gNumClasses;
extern PyrClass *gClassList;
@@ -587,7 +587,7 @@ void Interpret(VMGlobals *g)
++sp; SetObject(sp, classobj);
} else {
postfl("Execution warning: Class '%s' not found\n", slotRawSymbol(&slotRawObject(&g->block->selectors)->slots[op2])->name);
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svNil]);
+ slotCopy(++sp, &gSpecialValues[svNil]);
}
break;
case 1 : // opExtended, opPushInstVar
@@ -639,7 +639,7 @@ void Interpret(VMGlobals *g)
if (classobj) {
++sp; SetObject(sp, classobj);
} else {
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svNil]);
+ slotCopy(++sp, &gSpecialValues[svNil]);
}
break;
case 7 : // opExtended, opStoreInstVar
@@ -745,7 +745,7 @@ void Interpret(VMGlobals *g)
++sp; SetObject(sp, closure);
break;
default :
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svNil]); break;
+ slotCopy(++sp, &gSpecialValues[svNil]); break;
}
break;
// opPushInstVar, 0..15
@@ -896,22 +896,22 @@ void Interpret(VMGlobals *g)
g->tailCall = 0;
#endif
} else {
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svOne]);
+ slotCopy(++sp, &gSpecialValues[svOne]);
g->sp = sp; g->ip = ip;
g->primitiveIndex = opSub;
prSubNum(g, -1);
sp = g->sp; ip = g->ip;
}
break;
- case 98 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svNegOne]); break;
- case 99 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svZero]); break;
- case 100 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svOne]); break;
- case 101 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svTwo]); break;
- case 102 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFHalf]); break;
- case 103 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFNegOne]); break;
- case 104 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFZero]); break;
- case 105 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFOne]); break;
- case 106 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFTwo]); break;
+ case 98 : slotCopy(++sp, &gSpecialValues[svNegOne]); break;
+ case 99 : slotCopy(++sp, &gSpecialValues[svZero]); break;
+ case 100 : slotCopy(++sp, &gSpecialValues[svOne]); break;
+ case 101 : slotCopy(++sp, &gSpecialValues[svTwo]); break;
+ case 102 : slotCopy(++sp, &gSpecialValues[svFHalf]); break;
+ case 103 : slotCopy(++sp, &gSpecialValues[svFNegOne]); break;
+ case 104 : slotCopy(++sp, &gSpecialValues[svFZero]); break;
+ case 105 : slotCopy(++sp, &gSpecialValues[svFOne]); break;
+ case 106 : slotCopy(++sp, &gSpecialValues[svFTwo]); break;
case 107 : // push one and add
if (IsInt(sp)) {
SetRaw(sp, slotRawInt(sp) + 1);
@@ -919,17 +919,17 @@ void Interpret(VMGlobals *g)
g->tailCall = 0;
#endif
} else {
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svOne]);
+ slotCopy(++sp, &gSpecialValues[svOne]);
g->sp = sp; g->ip = ip;
g->primitiveIndex = opAdd;
prAddNum(g, -1);
sp = g->sp; ip = g->ip;
}
break;
- case 108 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svTrue]); break;
- case 109 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFalse]); break;
- case 110 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svNil]); break;
- case 111 : slotCopy(++sp, (PyrSlot*)&gSpecialValues[svInf]); break;
+ case 108 : slotCopy(++sp, &gSpecialValues[svTrue]); break;
+ case 109 : slotCopy(++sp, &gSpecialValues[svFalse]); break;
+ case 110 : slotCopy(++sp, &gSpecialValues[svNil]); break;
+ case 111 : slotCopy(++sp, &gSpecialValues[svInf]); break;
// opStoreInstVar, 0..15
#if 1
@@ -1578,7 +1578,7 @@ void Interpret(VMGlobals *g)
if ( NotNil(sp) ) {
jmplen = (ip[1]<<8) | ip[2];
ip += jmplen + 2;
- slotCopy(sp, (PyrSlot*)&gSpecialValues[svNil]);
+ slotCopy(sp, &gSpecialValues[svNil]);
} else {
ip+=2;
--sp;
@@ -1832,7 +1832,7 @@ void Interpret(VMGlobals *g)
if (IsNil(&sp[0])) {
SetTagRaw(&sp[0], tagTrue);
} else {
- slotCopy(sp, (PyrSlot*)&gSpecialValues[svFalse]);
+ slotCopy(sp, &gSpecialValues[svFalse]);
}
#if TAILCALLOPTIMIZE
g->tailCall = 0;
@@ -1840,7 +1840,7 @@ void Interpret(VMGlobals *g)
break;
case 211 : // opNotNil
if (NotNil(&sp[0])) {
- slotCopy(sp, (PyrSlot*)&gSpecialValues[svTrue]);
+ slotCopy(sp, &gSpecialValues[svTrue]);
} else {
SetTagRaw(&sp[0], tagFalse);
}
@@ -1952,19 +1952,19 @@ void Interpret(VMGlobals *g)
sp = g->sp; ip = g->ip;
break;
case 245 : // opcReturnTrue
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svTrue]);
+ slotCopy(++sp, &gSpecialValues[svTrue]);
g->sp = sp; g->ip = ip;
returnFromMethod(g);
sp = g->sp; ip = g->ip;
break;
case 246 : // opcReturnFalse
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svFalse]);
+ slotCopy(++sp, &gSpecialValues[svFalse]);
g->sp = sp; g->ip = ip;
returnFromMethod(g);
sp = g->sp; ip = g->ip;
break;
case 247 : // opcReturnNil
- slotCopy(++sp, (PyrSlot*)&gSpecialValues[svNil]);
+ slotCopy(++sp, &gSpecialValues[svNil]);
g->sp = sp; g->ip = ip;
returnFromMethod(g);
sp = g->sp; ip = g->ip;
@@ -1990,7 +1990,7 @@ void Interpret(VMGlobals *g)
if ( IsFalse(sp)) {
jmplen = (ip[1]<<8) | ip[2];
ip += jmplen + 2;
- slotCopy(sp, (PyrSlot*)&gSpecialValues[svNil]);
+ slotCopy(sp, &gSpecialValues[svNil]);
} else if ( IsTrue(sp)) {
--sp;
ip+=2;
@@ -2025,7 +2025,7 @@ void Interpret(VMGlobals *g)
} else if (IsTrue(sp)) {
jmplen = (ip[1]<<8) | ip[2];
ip += jmplen + 2;
- slotCopy(sp, (PyrSlot*)&gSpecialValues[svTrue]);
+ slotCopy(sp, &gSpecialValues[svTrue]);
} else {
numArgsPushed = 1;
selector = gSpecialSelectors[opmNonBooleanError];
@@ -2114,7 +2114,7 @@ void Interpret(VMGlobals *g)
slotCopy(&obj->slots[index], &sp[1]);
g->gc->GCWrite(obj, sp + 1);
} else {
- slotCopy(&obj->slots[index], (PyrSlot*)&gSpecialValues[svNil]);
+ slotCopy(&obj->slots[index], &gSpecialValues[svNil]);
}
slotCopy(sp, slot);
}
View
10 common/Source/lang/LangSource/PyrMessage.cpp
@@ -22,6 +22,7 @@
#include "PyrPrimitiveProto.h"
#include "PyrInterpreter.h"
#include "PyrPrimitive.h"
+#include "PyrListPrim.h"
#include "GC.h"
#include "bullet.h"
#include <stdlib.h>
@@ -39,11 +40,7 @@ bool gKeywordError = true;
extern bool gTraceInterpreter;
long cvxUniqueMethods;
-#ifdef SC_WIN32
extern int ivxIdentDict_array;
-#else
-extern long ivxIdentDict_array;
-#endif
void StoreToImmutableB(VMGlobals *g, PyrSlot *& sp, unsigned char *& ip);
@@ -692,11 +689,6 @@ void sendSuperMessage(VMGlobals *g, PyrSymbol *selector, long numArgsPushed)
//postfl("<-sendMessage\n");
}
-#ifdef SC_WIN32
-int arrayAtIdentityHashInPairs(PyrObject *array, PyrSlot *key); // this is the implementation prototype
-#else
-long arrayAtIdentityHashInPairs(PyrObject *array, PyrSlot *key);
-#endif
extern PyrClass *class_identdict;
void doesNotUnderstandWithKeys(VMGlobals *g, PyrSymbol *selector,
View
28 common/Source/plugins/DelayUGens.cpp
@@ -111,6 +111,7 @@ struct Pitch : public Unit
int m_minperiod, m_maxperiod, m_execPeriod, m_index, m_readp, m_size;
int m_downsamp, m_maxlog2bins, m_medianSize;
int m_state;
+ bool m_getClarity;
};
struct BufDelayUnit : public Unit
@@ -1629,7 +1630,8 @@ enum {
kPitchMedian,
kPitchAmpThreshold,
kPitchPeakThreshold,
- kPitchDownsamp
+ kPitchDownsamp,
+ kPitchGetClarity
};
void Pitch_Ctor(Pitch *unit)
@@ -1675,6 +1677,8 @@ void Pitch_Ctor(Pitch *unit)
unit->m_hasfreq = 0.f;
initMedian(unit->m_values, unit->m_ages, unit->m_medianSize, unit->m_freq);
+
+ unit->m_getClarity = ZIN0(kPitchGetClarity) > 0.f;
ZOUT0(0) = 0.f;
ZOUT0(1) = 0.f;
@@ -1731,11 +1735,11 @@ void Pitch_next_a(Pitch *unit, int inNumSamples)
int maxlog2bins = unit->m_maxlog2bins;
int octave;
// calculate the zero lag value and compute the threshold based on that
- float threshold = 0.f;
+ float zerolagval = 0.f;
for (int j = 0; j < maxperiod; ++j) {
- threshold += bufData[j] * bufData[j];
+ zerolagval += bufData[j] * bufData[j];
}
- threshold *= unit->m_peakthresh;
+ float threshold = zerolagval * unit->m_peakthresh;
// skip until drop below threshold
int binstep, peakbinstep = 0;
@@ -1850,7 +1854,10 @@ void Pitch_next_a(Pitch *unit, int inNumSamples)
if (unit->m_medianSize > 1) {
freq = insertMedian(unit->m_values, unit->m_ages, unit->m_medianSize, freq);
}
- hasfreq = 1.f;
+ if(unit->m_getClarity)
+ hasfreq = maxsum / zerolagval; // "clarity" measure is normalised size of first peak
+ else
+ hasfreq = 1.f;
startperiod = (ksamps+downsamp-1)/downsamp;
}
@@ -1930,11 +1937,11 @@ void Pitch_next_k(Pitch *unit, int inNumSamples)
int maxlog2bins = unit->m_maxlog2bins;
int octave;
// calculate the zero lag value and compute the threshold based on that
- float threshold = 0.f;
+ float zerolagval = 0.f;
for (int j = 0; j < maxperiod; ++j) {
- threshold += bufData[j] * bufData[j];
+ zerolagval += bufData[j] * bufData[j];
}
- threshold *= unit->m_peakthresh;
+ float threshold = zerolagval * unit->m_peakthresh;
// skip until drop below threshold
int binstep, peakbinstep = 0;
@@ -2049,7 +2056,10 @@ void Pitch_next_k(Pitch *unit, int inNumSamples)
if (unit->m_medianSize > 1) {
freq = insertMedian(unit->m_values, unit->m_ages, unit->m_medianSize, freq);
}
- hasfreq = 1.f;
+ if(unit->m_getClarity)
+ hasfreq = maxsum / zerolagval; // "clarity" measure is normalised size of first peak
+ else
+ hasfreq = 1.f;
// nescivi: not sure about this one?
startperiod = 1; // (ksamps+downsamp-1)/downsamp;
View
30 common/Source/plugins/FilterUGens.cpp
@@ -4591,9 +4591,9 @@ void MoogFF_Ctor(MoogFF* unit)
void MoogFF_next(MoogFF *unit, int inNumSamples)
{
- float *out = OUT(0);
+ float *out = ZOUT(0);
- float *in = IN(0);
+ float *in = ZIN(0);
float k = IN0(2);
k = k > 4.f? 4.f : (k<0.f ? 0.f : k);
@@ -4612,7 +4612,6 @@ void MoogFF_next(MoogFF *unit, int inNumSamples)
double wcD=unit->m_wcD;
float a1 = unit->m_a1, b0 = unit->m_b0; // Filter coefficient parameters
float o, u; // System's null response, loop input
- float past, future;
// Update filter coefficients, but only if freq changes since it involves some expensive operations
if(freq != IN0(1)) {
@@ -4624,18 +4623,23 @@ void MoogFF_next(MoogFF *unit, int inNumSamples)
double TwcD = T*wcD;
b0 = (float)(TwcD/(TwcD + 2.));
a1 = (float)((TwcD - 2.)/(TwcD + 2.));
+ unit->m_freq = freq;
+ unit->m_b0 = b0;
+ unit->m_a1 = a1;
+ unit->m_wcD = wcD;
}
- for (int i=0; i < inNumSamples; ++i)
- {
+ LOOP1(inNumSamples,
// compute loop values
o = s4 + b0*(s3 + b0*(s2 + b0*s1));
- out[i] = (b0*b0*b0*b0*in[i] + o)/(1.f + b0*b0*b0*b0*k);
- u = in[i] - k*out[i];
+ float ins = ZXP(in);
+ float outs = (b0*b0*b0*b0*ins + o)/(1.f + b0*b0*b0*b0*k);
+ ZXP(out) = outs;
+ u = ins - k*outs;
// update 1st order filter states
- past = u;
- future = b0*past + s1;
+ float past = u;
+ float future = b0*past + s1;
s1 = b0*past - a1*future;
past = future;
@@ -4646,14 +4650,10 @@ void MoogFF_next(MoogFF *unit, int inNumSamples)
future = b0*past + s3;
s3 = b0*past - a1*future;
- s4 = b0*future - a1*out[i];
- }
+ s4 = b0*future - a1*outs;
+ )
// Store state
- unit->m_freq = freq;
- unit->m_b0 = b0;
- unit->m_a1 = a1;
- unit->m_wcD = wcD;
unit->m_s1 = s1;
unit->m_s2 = s2;
unit->m_s3 = s3;
View
7 common/build/ChangeLog
@@ -64,6 +64,9 @@ Bugfixes:
* 2010-02-11 Fix for nowExecutingPath with Routines - sw
* 2010-02-23 Performance fixes for SCUserView - sw
* 2010-02-25 Fix interpolation / indexing problem in VDiskIn that caused slight pitch fluctuations - jp
+* 2010-03-11 SequenceableCollection:reduce no longer returns nil if the collection has only 1 element - ds
+* 2010-03-28 fix memory leak of empty command line, for interactive sclang mode - tb
+* 2010-03-29 main menu for Mac lang editor app: correction to key for evaluate selection, used to be return, now return+shift - nc
Other additions/improvements:
-----------------------------
@@ -94,6 +97,10 @@ Other additions/improvements:
* 2010-02-11 Server:default_ now assigns to s by default. Settable with flag - sw
* 2010-02-27 removed SCAnimationView and added SCUserView:animate_ - fo
* 2010-03-10 SCPen:setSmoothing changed to SCPen:smoothing_, harmonised change with swingosc - ds
+* 2010-03-23 exponentiation for Complex numbers - jr
+* 2010-xx-xx many helpfiles improved - various authors
+* 2010-03-30 Image class added, a redirect for SCImage or JSCImage - hr
+* 2010-03-30 Pitch ugen ability to output clarity measure (by default not activated, for backwards compat) - ds
SuperCollider v3.3.1, released 2009-06-19
=========================================
View
236 common/build/Help/Core/Kernel/Function.html
@@ -5,41 +5,46 @@
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.54">
+<meta name="CocoaVersion" content="1038.25">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #001bb9}
+p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #0000ee}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ad140d}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Helvetica; min-height: 11.0px}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px}
-p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #001bb9}
-p.p12 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p13 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica}
-p.p14 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco}
-p.p15 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
-p.p16 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px}
-p.p17 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ad140d; min-height: 12.0px}
-p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #2c7014}
-p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; min-height: 17.0px}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #cd1612}
+p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
+p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Helvetica; min-height: 11.0px}
+p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
+p.p12 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px}
+p.p13 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #001bb9}
+p.p14 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica; min-height: 14.0px}
+p.p15 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica}
+p.p16 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco}
+p.p17 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
+p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px}
+p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ad140d; min-height: 12.0px}
+p.p20 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #2c7014}
+p.p21 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; min-height: 17.0px}
span.s1 {color: #000000}
span.s2 {color: #001bb9}
-span.s3 {color: #ad140d}
-span.s4 {color: #606060}
-span.s5 {color: #2c7014}
-span.s6 {text-decoration: underline ; color: #001bb9}
-span.s7 {font: 9.0px Monaco; color: #2c7014}
+span.s3 {color: #0000ee}
+span.s4 {color: #ad140d}
+span.s5 {color: #0b28c6}
+span.s6 {color: #cd1612}
+span.s7 {color: #606060}
+span.s8 {color: #2c7014}
+span.s9 {text-decoration: underline ; color: #001bb9}
+span.s10 {font: 9.0px Monaco; color: #2c7014}
span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
<p class="p1"><b>Function</b></p>
<p class="p2"><br></p>
-<p class="p3"><span class="s1"><b>Inherits from: </b><a href="../Object.html"><b>Object</b></a></span><b> : </b><a href="AbstractFunction.html"><b>AbstractFunction</b></a></p>
+<p class="p3"><span class="s1"><b>Inherits from: </b><a href="../Object.html"><b>Object</b></a></span><span class="s2"><b> : </b><a href="AbstractFunction.html"><span class="s3"><b>AbstractFunction</b></span></a></span></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p4">A Function is a reference to a <a href="FunctionDef.html"><span class="s2">FunctionDef</span></a> and its defining context <a href="Frame.html"><span class="s2">Frame</span></a>. When a FunctionDef is encountered in your code it is pushed on the stack as a Function. A Function can be evaluated by using the 'value' method. See the <a href="../../Language/Functions.html"><span class="s2">Functions</span></a> help file for a basic introduction.</p>
@@ -49,17 +54,23 @@
<p class="p5">// example</p>
<p class="p6">(</p>
<p class="p6"><span class="s2">var</span> a, b, c;</p>
-<p class="p6">a = { [100, 200, 300].choose };<span class="Apple-tab-span"> </span><span class="s3">// a Function</span></p>
-<p class="p6">b = { 10.rand + 1 };<span class="Apple-tab-span"> </span><span class="s3">// another Function</span></p>
+<p class="p6">a = { [100, 200, 300].choose };<span class="Apple-tab-span"> </span><span class="s4">// a Function</span></p>
+<p class="p6">b = { 10.rand + 1 };<span class="Apple-tab-span"> </span><span class="s4">// another Function</span></p>
<p class="p5"><span class="s1">c = a + b; <span class="Apple-tab-span"> </span></span>// c is a Function.</p>
<p class="p5"><span class="s1">c.value.postln;<span class="Apple-tab-span"> </span></span>// evaluate c and print the result</p>
<p class="p6">)</p>
<p class="p7"><br></p>
<p class="p4">See <a href="AbstractFunction.html"><span class="s2">AbstractFunction</span></a><b> </b>for function composition examples.</p>
<p class="p2"><br></p>
+<p class="p4">Because Functions are such an important concept, here some examples from related programming languages with functions as first class objects:</p>
<p class="p2"><br></p>
+<p class="p8">// returning the first argument itself:</p>
+<p class="p6">{ <span class="s5">|x|</span> x }.value(1) <span class="s6">// SuperCollider</span></p>
+<p class="p6">[:x | x ] value: 1<span class="s6"> // Smalltalk</span></p>
+<p class="p6">((lambda (x) x) 1) <span class="s6">// Lisp</span></p>
<p class="p2"><br></p>
-<p class="p8"><b>Accessing</b></p>
+<p class="p2"><br></p>
+<p class="p9"><b>Accessing</b></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p4"><b>def</b></p>
@@ -71,14 +82,14 @@
<p class="p4">returns true if the function is closed, i.e. has no external references and can thus be converted to a compile string safely.</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
-<p class="p8"><b>Evaluation</b></p>
+<p class="p9"><b>Evaluation</b></p>
<p class="p2"><br></p>
<p class="p4"><b>value(... args)</b></p>
<p class="p2"><br></p>
<p class="p4">Evaluates the FunctionDef referred to by the Function. The Function is passed the args given.</p>
<p class="p2"><br></p>
<p class="p6">{ <span class="s2">|a, b|</span> (a * b).postln }.value(3, 10);</p>
-<p class="p6">{ <span class="s2">arg</span> a, b; (a * b).postln }.value(3, 10); <span class="s3">// different way of expressing the same</span></p>
+<p class="p6">{ <span class="s2">arg</span> a, b; (a * b).postln }.value(3, 10); <span class="s4">// different way of expressing the same</span></p>
<p class="p7"><br></p>
<p class="p7"><br></p>
<p class="p2"><br></p>
@@ -87,25 +98,30 @@
<p class="p4">Evaluates the FunctionDef referred to by the Function. If the last argument is an Array or List, then it is unpacked and appended to the other arguments (if any) to the Function. If the last argument is not an Array or List then this is the same as the 'value' method.</p>
<p class="p2"><br></p>
<p class="p6">{ <span class="s2">|a, b, c|</span> ((a * b) + c).postln }.valueArray([3, 10, 7]);</p>
-<p class="p9"><br></p>
+<p class="p10"><br></p>
<p class="p6">{ <span class="s2">|a, b, c, d|</span> [a, b, c, d].postln }.valueArray([1, 2, 3]);</p>
-<p class="p9"><br></p>
+<p class="p10"><br></p>
<p class="p6">{ <span class="s2">|a, b, c, d|</span> [a, b, c, d].postln }.valueArray(9, [1, 2, 3]);</p>
<p class="p7"><br></p>
<p class="p6">{ <span class="s2">|a, b, c, d|</span> [a, b, c, d].postln }.valueArray(9, 10, [1, 2, 3]);</p>
-<p class="p10"><br></p>
+<p class="p7"><br></p>
+<p class="p4">A common syntactic shortcut:</p>
+<p class="p7"><br></p>
+<p class="p11">{ <span class="s5">|a, b, c|</span> ((a * b) + c).postln }.value(*[3, 10, 7]);</p>
+<p class="p7"><br></p>
+<p class="p12"><br></p>
<p class="p4"><b>valueEnvir(... args)</b></p>
<p class="p2"><br></p>
<p class="p4">As value above. Unsupplied argument names are looked up in the current <b>Environment</b>.</p>
<p class="p2"><br></p>
<p class="p6">(</p>
-<p class="p11">Environment<span class="s1">.use({</span></p>
+<p class="p13">Environment<span class="s1">.use({</span></p>
<p class="p6">~a = 3;</p>
<p class="p6">~b = 10;</p>
<p class="p6">{ <span class="s2">|a, b|</span> (a * b).postln }.valueEnvir;</p>
<p class="p6">});</p>
<p class="p6">)</p>
-<p class="p10"><br></p>
+<p class="p12"><br></p>
<p class="p2"><br></p>
<p class="p4"><b>valueArrayEnvir(... args)</b></p>
<p class="p2"><br></p>
@@ -126,29 +142,29 @@
<p class="p2"><br></p>
<p class="p4">For Function, this behaves the same as valueArray(arglist). It is used<span class="Apple-converted-space">  </span>where Functions and other objects should behave differently to value, such as in the objecr prototyping implementation of <a href="../../Collections/Environment.html"><span class="s2">Environment</span></a>.</p>
<p class="p2"><br></p>
-<p class="p12"><br></p>
-<p class="p13"><b>performWithEnvir(selector, envir)</b></p>
-<p class="p12"><b><span class="Apple-tab-span"> </span></b></p>
+<p class="p14"><br></p>
+<p class="p15"><b>performWithEnvir(selector, envir)</b></p>
+<p class="p14"><b><span class="Apple-tab-span"> </span></b></p>
<p class="p4"><b>selector: </b>A <a href="../Symbol.html"><span class="s2">Symbol</span></a> representing a method selector.<span class="Apple-converted-space"> </span></p>
<p class="p4"><b>envir: </b>The remaining arguments derived from the environment and passed as arguments to the method named by the selector.</p>
<p class="p2"><br></p>
-<p class="p6">a = { <span class="s2">|a, b, c|</span> postf(<span class="s4">"% plus % plus % is %\n"</span>, a, b, c, a + b + c); <span class="s4">""</span> };</p>
-<p class="p6">a.performWithEnvir(<span class="s5">\value</span>, (a: 1, c: 3, d: 4, b: 2));</p>
+<p class="p6">a = { <span class="s2">|a, b, c|</span> postf(<span class="s7">"% plus % plus % is %\n"</span>, a, b, c, a + b + c); <span class="s7">""</span> };</p>
+<p class="p6">a.performWithEnvir(<span class="s8">\value</span>, (a: 1, c: 3, d: 4, b: 2));</p>
<p class="p2"><span class="Apple-tab-span"> </span></p>
-<p class="p13"><b>performKeyValuePairs(selector, pairs)</b></p>
-<p class="p12"><b><span class="Apple-tab-span"> </span></b></p>
-<p class="p13"><b>selector: </b>A <a href="../Symbol.html"><span class="s2">Symbol</span></a> representing a method selector.<span class="Apple-converted-space"> </span></p>
-<p class="p13"><b>pairs: </b>Array or List with key-value pairs.</p>
-<p class="p12"><br></p>
-<p class="p14">a = { <span class="s2">|a, b, c|</span> postf(<span class="s4">"% plus % plus % is %\n"</span>, a, b, c, a + b + c); <span class="s4">""</span> };</p>
-<p class="p14">a.performKeyValuePairs(<span class="s5">\value</span>, [<span class="s5">\a</span>, 1, <span class="s5">\b</span>, 2, <span class="s5">\c</span>, 3, <span class="s5">\d</span>, 4]);</p>
-<p class="p12"><br></p>
+<p class="p15"><b>performKeyValuePairs(selector, pairs)</b></p>
+<p class="p14"><b><span class="Apple-tab-span"> </span></b></p>
+<p class="p15"><b>selector: </b>A <a href="../Symbol.html"><span class="s2">Symbol</span></a> representing a method selector.<span class="Apple-converted-space"> </span></p>
+<p class="p15"><b>pairs: </b>Array or List with key-value pairs.</p>
+<p class="p14"><br></p>
+<p class="p16">a = { <span class="s2">|a, b, c|</span> postf(<span class="s7">"% plus % plus % is %\n"</span>, a, b, c, a + b + c); <span class="s7">""</span> };</p>
+<p class="p16">a.performKeyValuePairs(<span class="s8">\value</span>, [<span class="s8">\a</span>, 1, <span class="s8">\b</span>, 2, <span class="s8">\c</span>, 3, <span class="s8">\d</span>, 4]);</p>
+<p class="p14"><br></p>
<p class="p2"><br></p>
<p class="p4"><b>loop</b></p>
<p class="p2"><br></p>
<p class="p4">Repeat this function. Useful with <b>Task</b> and Clocks.</p>
<p class="p2"><br></p>
-<p class="p6">t = <span class="s2">Task</span>({ { <span class="s4">"I'm loopy"</span>.postln; 1.wait;}.loop });</p>
+<p class="p6">t = <span class="s2">Task</span>({ { <span class="s7">"I'm loopy"</span>.postln; 1.wait;}.loop });</p>
<p class="p6">t.start;</p>
<p class="p6">t.stop;</p>
<p class="p2"><br></p>
@@ -157,7 +173,7 @@
<p class="p2"><br></p>
<p class="p4">Delay the evaluation of this Function by <b>delta</b> in seconds. Uses <b>AppClock</b>.</p>
<p class="p2"><br></p>
-<p class="p15"><span class="s1">{ </span>"2 seconds have passed."<span class="s1">.postln; }.defer(2);</span></p>
+<p class="p17"><span class="s1">{ </span>"2 seconds have passed."<span class="s1">.postln; }.defer(2);</span></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p4"><b>dup(n)</b></p>
@@ -184,7 +200,7 @@
<p class="p7"><br></p>
<p class="p4"><b>choose</b><span class="Apple-converted-space"> </span></p>
<p class="p2"><br></p>
-<p class="p4">evaluates the function. This makes it polymorphic to <a href="../../Collections/SequenceableCollection.html"><span class="s6">SequenceableCollection</span></a>, <a href="../../Collections/Bag.html"><span class="s2">Bag</span></a> and <a href="../../Collections/Set.html"><span class="s6">Set</span></a>.</p>
+<p class="p4">evaluates the function. This makes it polymorphic to <a href="../../Collections/SequenceableCollection.html"><span class="s9">SequenceableCollection</span></a>, <a href="../../Collections/Bag.html"><span class="s2">Bag</span></a> and <a href="../../Collections/Set.html"><span class="s9">Set</span></a>.</p>
<p class="p7"><br></p>
<p class="p6">[{ 100.rand }, [20, 30, 40]].collect(_.choose);</p>
<p class="p2"><br></p>
@@ -200,16 +216,16 @@
<p class="p2"><br></p>
<p class="p4">Returns a Routine using the receiver as it's function, and plays it in a <a href="../../Scheduling/TempoClock.html"><span class="s2">TempoClock</span></a>.</p>
<p class="p2"><br></p>
-<p class="p6">{ 4.do({ <span class="s4">"Threadin..."</span>.postln; 1.wait;}) }.fork;</p>
+<p class="p6">{ 4.do({ <span class="s7">"Threadin..."</span>.postln; 1.wait;}) }.fork;</p>
<p class="p7"><br></p>
<p class="p7"><br></p>
<p class="p4"><b>forkIfNeeded(clock, quant, stackSize)</b></p>
<p class="p2"><br></p>
<p class="p4">If needed, creates a new Routine to evaluate the function in, if the message is called within a routine already, it simply evaluates it.</p>
<p class="p2"><br></p>
-<p class="p6">f = { 4.do({ <span class="s4">"Threadin..."</span>.postln; 1.wait;}) };</p>
+<p class="p6">f = { 4.do({ <span class="s7">"Threadin..."</span>.postln; 1.wait;}) };</p>
<p class="p6">f.forkIfNeeded;</p>
-<p class="p6">{ <span class="s4">"we are now in a routine"</span>.postln; 1.wait; f.forkIfNeeded }.fork;</p>
+<p class="p6">{ <span class="s7">"we are now in a routine"</span>.postln; 1.wait; f.forkIfNeeded }.fork;</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p4"><b>block</b></p>
@@ -234,7 +250,7 @@
<p class="p7"><br></p>
<p class="p4"><b>flop</b></p>
<p class="p2"><br></p>
-<p class="p4">Return a function that, when evaluated with nested arguments, does multichannel expansion by evaluting the receiver function for each channel.</p>
+<p class="p4">Return a function that, when evaluated with nested arguments, does multichannel expansion by evaluting the receiver function for each channel. A flopped function responds like the "map" function in languages like Lisp.</p>
<p class="p7"><br></p>
<p class="p6">f = { <span class="s2">|a, b|</span> if(a &gt; 0) { a + b } { -<span class="s2">inf</span> } }.flop;</p>
<p class="p6">f.value([-1, 2, 1, -3.0], [10, 1000]);</p>
@@ -258,11 +274,11 @@
<p class="p4">returns an "environment-safe" function. See <a href="../../Collections/Environment.html"><span class="s2">Environment</span></a> for more details.</p>
<p class="p2"><br></p>
<p class="p5">// prints nil because ~a is read from topEnvironment, not e</p>
-<p class="p6">e = (a: <span class="s4">"got it"</span>, f: { { ~a.postln }.defer(0.5) });</p>
+<p class="p6">e = (a: <span class="s7">"got it"</span>, f: { { ~a.postln }.defer(0.5) });</p>
<p class="p6">e.use { e.f };</p>
<p class="p7"><br></p>
<p class="p5">// prints "got it" because { ~a.postln } is now bound to the e environment</p>
-<p class="p6">e = (a: <span class="s4">"got it"</span>, f: { { ~a.postln }.inEnvir.defer(0.5) });</p>
+<p class="p6">e = (a: <span class="s7">"got it"</span>, f: { { ~a.postln }.inEnvir.defer(0.5) });</p>
<p class="p6">e.use { e.f };</p>
<p class="p7"><br></p>
<p class="p2"><br></p>
@@ -270,18 +286,18 @@
<p class="p4"><b>case(cases)</b></p>
<p class="p2"><br></p>
<p class="p4">Function implements a <b>case </b>method which allows for conditional evaluation with multiple cases. Since the receiver represents the first case this can be simply written as pairs of test functions and corresponding functions to be evaluated if true. Unlike Object-switch, this is inlined and is therefore just as efficient as nested if statements.</p>
-<p class="p16"><br></p>
+<p class="p18"><br></p>
<p class="p6">(</p>
<p class="p6"><span class="s2">var</span> i, x, z;</p>
<p class="p6">z = [0, 1, 1.1, 1.3, 1.5, 2];</p>
<p class="p6">i = z.choose;</p>
<p class="p6">x = case</p>
-<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1 } <span class="Apple-converted-space">  </span>{ <span class="s5">\no</span> }</p>
-<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1.1 } { <span class="s5">\wrong</span> }</p>
-<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1.3 } { <span class="s5">\wrong</span> }</p>
-<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1.5 } { <span class="s5">\wrong</span> }</p>
-<p class="p6"><span class="Apple-tab-span"> </span>{ i == 2 } <span class="Apple-converted-space">  </span>{ <span class="s5">\wrong</span> }</p>
-<p class="p6"><span class="Apple-tab-span"> </span>{ i == 0 } <span class="Apple-converted-space">  </span>{ <span class="s5">\true</span> };</p>
+<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1 } <span class="Apple-converted-space">  </span>{ <span class="s8">\no</span> }</p>
+<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1.1 } { <span class="s8">\wrong</span> }</p>
+<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1.3 } { <span class="s8">\wrong</span> }</p>
+<p class="p6"><span class="Apple-tab-span"> </span>{ i == 1.5 } { <span class="s8">\wrong</span> }</p>
+<p class="p6"><span class="Apple-tab-span"> </span>{ i == 2 } <span class="Apple-converted-space">  </span>{ <span class="s8">\wrong</span> }</p>
+<p class="p6"><span class="Apple-tab-span"> </span>{ i == 0 } <span class="Apple-converted-space">  </span>{ <span class="s8">\true</span> };</p>
<p class="p6">x.postln;</p>
<p class="p6">)</p>
<p class="p7"><br></p>
@@ -290,26 +306,26 @@
<p class="p4">Interface shared with other classes that implements pattern matching. See also: matchItem.</p>
<p class="p4">Function.matchItem evaluates the function with the item as argument, expecting a <a href="../Boolean.html"><span class="s2">Boolean</span></a> as reply.</p>
<p class="p2"><br></p>
-<p class="p6">{ <span class="s2">|x|</span> x &gt; 5 }.matchItem(6); <span class="s3">// true</span></p>
-<p class="p17"><br></p>
-<p class="p17"><br></p>
+<p class="p6">{ <span class="s2">|x|</span> x &gt; 5 }.matchItem(6); <span class="s4">// true</span></p>
+<p class="p19"><br></p>
+<p class="p19"><br></p>
<p class="p4"><b>performDegreeToKey(scaleDegree, stepsPerOctave = 12, accidental = 0)</b></p>
<p class="p2"><br></p>
-<p class="p4">use a function as a conversion from scale degree to note number. See also <a href="../../Collections/SequenceableCollection.html"><span class="s6">SequenceableCollection</span></a> and <a href="../../Collections/Scale.html"><span class="s2">Scale</span></a></p>
+<p class="p4">use a function as a conversion from scale degree to note number. See also <a href="../../Collections/SequenceableCollection.html"><span class="s9">SequenceableCollection</span></a> and <a href="../../Collections/Scale.html"><span class="s2">Scale</span></a></p>
<p class="p2"><br></p>
<p class="p5">// a strange mapping</p>
<p class="p6">(</p>
-<p class="p11">var<span class="s1"> f = {</span>|degree, stepsPerOctave, acc|</p>
+<p class="p13">var<span class="s1"> f = {</span>|degree, stepsPerOctave, acc|</p>
<p class="p6"><span class="Apple-tab-span"> </span>(1.8 ** (degree % stepsPerOctave) + acc).postln</p>
<p class="p6">};</p>
-<p class="p11">Pbind<span class="s1">(</span></p>
-<p class="p18"><span class="s1"><span class="Apple-tab-span"> </span></span>\scale<span class="s1">, f,</span></p>
-<p class="p6"><span class="Apple-tab-span"> </span><span class="s5">\degree</span>, <span class="s2">Pseq</span>([0, 1, 2b, 3s, 4s, 6, 14, [0, 2, 4], [1, 3, 6]], <span class="s2">inf</span>)</p>
+<p class="p13">Pbind<span class="s1">(</span></p>
+<p class="p20"><span class="s1"><span class="Apple-tab-span"> </span></span>\scale<span class="s1">, f,</span></p>
+<p class="p6"><span class="Apple-tab-span"> </span><span class="s8">\degree</span>, <span class="s2">Pseq</span>([0, 1, 2b, 3s, 4s, 6, 14, [0, 2, 4], [1, 3, 6]], <span class="s2">inf</span>)</p>
<p class="p6">).play</p>
<p class="p6">)</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
-<p class="p8"><b>Exception Handling</b></p>
+<p class="p9"><b>Exception Handling</b></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p4">For the following two methods a return ^ inside of the receiver itself cannot be caught. Returns in methods called by the receiver are OK.</p>
@@ -326,92 +342,92 @@
<p class="p4">Examples:</p>
<p class="p7"><br></p>
<p class="p5">// no exception handler</p>
-<p class="p6">value { 8.zorg; <span class="s5">\didnt_continue</span>.postln; }</p>
+<p class="p6">value { 8.zorg; <span class="s8">\didnt_continue</span>.postln; }</p>
<p class="p7"><br></p>
-<p class="p6">try { 8.zorg } {<span class="s2">|error|</span> error.postln; <span class="s5">\cleanup</span>.postln; }; <span class="s5">\continued</span>.postln;</p>
+<p class="p6">try { 8.zorg } {<span class="s2">|error|</span> error.postln; <span class="s8">\cleanup</span>.postln; }; <span class="s8">\continued</span>.postln;</p>
<p class="p7"><br></p>
-<p class="p6">protect { 8.zorg } {<span class="s2">|error|</span> error.postln; }; <span class="s5">\didnt_continue</span>.postln;</p>
+<p class="p6">protect { 8.zorg } {<span class="s2">|error|</span> error.postln; }; <span class="s8">\didnt_continue</span>.postln;</p>
<p class="p7"><br></p>
-<p class="p6">try { 123.postln; 456.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s5">\catch</span>, error].postln };</p>
+<p class="p6">try { 123.postln; 456.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s8">\catch</span>, error].postln };</p>
<p class="p7"><br></p>
-<p class="p6">try { 123.postln; 789.postln } {<span class="s2">|error|</span> [<span class="s5">\catch</span>, error].postln };</p>
+<p class="p6">try { 123.postln; 789.postln } {<span class="s2">|error|</span> [<span class="s8">\catch</span>, error].postln };</p>
<p class="p7"><br></p>
-<p class="p6">try { 123.postln; <span class="s2">nil</span>.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s5">\catch</span>, error].postln };</p>
+<p class="p6">try { 123.postln; <span class="s2">nil</span>.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s8">\catch</span>, error].postln };</p>
<p class="p7"><br></p>
<p class="p7"><br></p>
-<p class="p6">protect { 123.postln; 456.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s5">\onExit</span>, error].postln };</p>
+<p class="p6">protect { 123.postln; 456.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s8">\onExit</span>, error].postln };</p>
<p class="p7"><br></p>
-<p class="p6">protect { 123.postln; 789.postln } {<span class="s2">|error|</span> [<span class="s5">\onExit</span>, error].postln };</p>
+<p class="p6">protect { 123.postln; 789.postln } {<span class="s2">|error|</span> [<span class="s8">\onExit</span>, error].postln };</p>
<p class="p7"><br></p>
<p class="p6">(</p>
<p class="p6">try {</p>
-<p class="p6"><span class="Apple-tab-span"> </span>protect { 123.postln; 456.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s5">\onExit</span>, error].postln };</p>
-<p class="p6">} {<span class="s2">|error|</span> [<span class="s5">\catch</span>, error].postln };</p>
+<p class="p6"><span class="Apple-tab-span"> </span>protect { 123.postln; 456.throw; 789.postln } {<span class="s2">|error|</span> [<span class="s8">\onExit</span>, error].postln };</p>
+<p class="p6">} {<span class="s2">|error|</span> [<span class="s8">\catch</span>, error].postln };</p>
<p class="p6">)</p>
<p class="p7"><br></p>
<p class="p6">value { 123.postln; 456.throw; 789.postln }</p>
<p class="p7"><br></p>
-<p class="p6">value { 123.postln; <span class="s2">Error</span>(<span class="s4">"what happened?"</span>).throw; 789.postln }</p>
+<p class="p6">value { 123.postln; <span class="s2">Error</span>(<span class="s7">"what happened?"</span>).throw; 789.postln }</p>
<p class="p7"><br></p>
<p class="p6">(</p>
-<p class="p18"><span class="s1">a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
+<p class="p20"><span class="s1">a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
<p class="p6">a[1].postln;</p>
-<p class="p6">a[<span class="s5">\x</span>].postln;</p>
+<p class="p6">a[<span class="s8">\x</span>].postln;</p>
<p class="p6">a[2].postln;</p>
<p class="p6">)</p>
<p class="p7"><br></p>
<p class="p6">(</p>
<p class="p6">try {</p>
-<p class="p18"><span class="s1"><span class="Apple-tab-span"> </span>a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
+<p class="p20"><span class="s1"><span class="Apple-tab-span"> </span>a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
<p class="p6"><span class="Apple-tab-span"> </span>a[1].postln;</p>
-<p class="p6"><span class="Apple-tab-span"> </span>a[<span class="s5">\x</span>].postln;</p>
+<p class="p6"><span class="Apple-tab-span"> </span>a[<span class="s8">\x</span>].postln;</p>
<p class="p6"><span class="Apple-tab-span"> </span>a[2].postln;</p>
-<p class="p6">} {<span class="s2">|error|</span> <span class="s5">\caught</span>.postln; error.dump }</p>
+<p class="p6">} {<span class="s2">|error|</span> <span class="s8">\caught</span>.postln; error.dump }</p>
<p class="p6">)</p>
<p class="p7"><br></p>
<p class="p6">(</p>
<p class="p6">try {</p>
-<p class="p18"><span class="s1"><span class="Apple-tab-span"> </span>a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
+<p class="p20"><span class="s1"><span class="Apple-tab-span"> </span>a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
<p class="p6"><span class="Apple-tab-span"> </span>a[1].postln;</p>
-<p class="p6"><span class="Apple-tab-span"> </span>a[<span class="s5">\x</span>].postln;</p>
+<p class="p6"><span class="Apple-tab-span"> </span>a[<span class="s8">\x</span>].postln;</p>
<p class="p6"><span class="Apple-tab-span"> </span>a[2].postln;</p>
-<p class="p6">} {<span class="s2">|error|</span> <span class="s5">\caught</span>.postln; error.dump; error.throw }</p>
+<p class="p6">} {<span class="s2">|error|</span> <span class="s8">\caught</span>.postln; error.dump; error.throw }</p>
<p class="p6">)</p>
<p class="p7"><br></p>
<p class="p6">(</p>
<p class="p6">protect {</p>
-<p class="p18"><span class="s1"><span class="Apple-tab-span"> </span>a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
+<p class="p20"><span class="s1"><span class="Apple-tab-span"> </span>a = [</span>\aaa<span class="s1">, </span>\bbb<span class="s1">, </span>\ccc<span class="s1">, </span>\ddd<span class="s1">];</span></p>
<p class="p6"><span class="Apple-tab-span"> </span>a[1].postln;</p>
-<p class="p6"><span class="Apple-tab-span"> </span>a[<span class="s5">\x</span>].postln;</p>
+<p class="p6"><span class="Apple-tab-span"> </span>a[<span class="s8">\x</span>].postln;</p>
<p class="p6"><span class="Apple-tab-span"> </span>a[2].postln;</p>
-<p class="p6">} {<span class="s2">|error|</span> <span class="s5">\caught</span>.postln; error.dump }</p>
+<p class="p6">} {<span class="s2">|error|</span> <span class="s8">\caught</span>.postln; error.dump }</p>
<p class="p6">)</p>
-<p class="p19"><br></p>
-<p class="p19"><br></p>
-<p class="p8"><b>Audio</b></p>
-<p class="p10"><br></p>
+<p class="p21"><br></p>
+<p class="p21"><br></p>
+<p class="p9"><b>Audio</b></p>
+<p class="p12"><br></p>
<p class="p4"><b>play(target, outbus, fadetime, addAction, args)</b></p>
<p class="p2"><br></p>
-<p class="p4"><span class="Apple-tab-span"> </span>This is probably the simplest way to get audio in SC3. It wraps the Function in a <b>SynthDef</b> (adding an <b>Out</b> ugen if needed), creates and starts a new <b>Synth</b> with it, and returns the Synth object. A <b>Linen</b> is also added to avoid clicks, which is configured to allow the resulting Synth to have its <span class="s7">\gate </span>argument set, or to respond to a release message. Args in the function become args in the resulting def.</p>
+<p class="p4"><span class="Apple-tab-span"> </span>This is probably the simplest way to get audio in SC3. It wraps the Function in a <b>SynthDef</b> (adding an <b>Out</b> ugen if needed), creates and starts a new <b>Synth</b> with it, and returns the Synth object. A <b>Linen</b> is also added to avoid clicks, which is configured to allow the resulting Synth to have its <span class="s10">\gate </span>argument set, or to respond to a release message. Args in the function become args in the resulting def.</p>
<p class="p2"><br></p>
<p class="p4"><b><span class="Apple-tab-span"> </span>target </b>- a Node, Server, or Nil. A Server will be converted to the default group of that server. Nil will be converted to the default group of the default Server.</p>
<p class="p4"><b><span class="Apple-tab-span"> </span>outbus </b>- the output bus to play the audio out on. This is equivalent to Out.ar(outbus, theoutput). The default is 0.</p>
<p class="p4"><b><span class="Apple-tab-span"> </span>fadeTime</b> - a fadein time. The default is 0.02 seconds, which is just enough to avoid a click. This will also be the fadeout time for a release if you do not specify.</p>
-<p class="p4"><b><span class="Apple-tab-span"> </span>addAction</b> - see <b>Synth</b> for a list of valid addActions. The default is <span class="s7">\addToHead</span><b>.</b></p>
-<p class="p10"><br></p>
-<p class="p6"><span class="Apple-tab-span"> </span>x = { <span class="s2">|freq = 440|</span> <span class="s2">SinOsc</span>.ar(freq, 0, 0.3) }.play; <span class="s3">// this returns a Synth object;</span></p>
-<p class="p5"><span class="s1"><span class="Apple-tab-span"> </span>x.set(</span><span class="s5">\freq</span><span class="s1">, 880); </span>// note you can set the freq argument</p>
+<p class="p4"><b><span class="Apple-tab-span"> </span>addAction</b> - see <b>Synth</b> for a list of valid addActions. The default is <span class="s10">\addToHead</span><b>.</b></p>
+<p class="p12"><br></p>
+<p class="p6"><span class="Apple-tab-span"> </span>x = { <span class="s2">|freq = 440|</span> <span class="s2">SinOsc</span>.ar(freq, 0, 0.3) }.play; <span class="s4">// this returns a Synth object;</span></p>
+<p class="p5"><span class="s1"><span class="Apple-tab-span"> </span>x.set(</span><span class="s8">\freq</span><span class="s1">, 880); </span>// note you can set the freq argument</p>
<p class="p5"><span class="s1"><span class="Apple-tab-span"> </span>x.defName; </span>// the name of the resulting SynthDef (generated automatically in a cycle of 512)</p>
<p class="p5"><span class="s1"><span class="Apple-tab-span"> </span>x.release(4); </span>// fadeout over 4 seconds</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p4"><span class="Apple-tab-span"> </span>Many of the examples make use of the Function.play syntax.<span class="Apple-converted-space"> </span></p>
<p class="p4"><span class="Apple-tab-span"> </span>Note that reusing such code in a <a href="../../ServerArchitecture/SynthDef.html"><span class="s2">SynthDef</span></a> requires the addition of an <a href="../../UGens/InOut/Out.html"><span class="s2">Out</span></a> ugen.</p>
-<p class="p10"><br></p>
+<p class="p12"><br></p>
<p class="p5"><span class="Apple-tab-span"> </span>// the following two lines produce equivalent results</p>
<p class="p6"><span class="Apple-tab-span"> </span>{ <span class="s2">SinOsc</span>.ar(440, 0, 0.3) }.play(fadeTime: 0.0);<span class="Apple-converted-space"> </span></p>
-<p class="p6"><span class="Apple-tab-span"> </span><span class="s2">SynthDef</span>(<span class="s5">\help_FuncPlay</span>, { <span class="s2">Out</span>.ar(0, <span class="s2">SinOsc</span>.ar(440, 0, 0.3))}).play;</p>
-<p class="p16"><br></p>
+<p class="p6"><span class="Apple-tab-span"> </span><span class="s2">SynthDef</span>(<span class="s8">\help_FuncPlay</span>, { <span class="s2">Out</span>.ar(0, <span class="s2">SinOsc</span>.ar(440, 0, 0.3))}).play;</p>
+<p class="p18"><br></p>
<p class="p4"><span class="Apple-tab-span"> </span>Function.play is often more convienent than SynthDef.play, particularly for short examples and quick testing. The latter does have some additional options, such as lagtimes for controls, etc. Where reuse and maximum flexibility are of greater importance, SynthDef and its various methods are usually the better choice.<span class="Apple-converted-space"> </span></p>
<p class="p2"><span class="Apple-tab-span"> </span></p>
<p class="p2"><br></p>
@@ -446,7 +462,7 @@
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
-<p class="p8"><b>Conversion</b></p>
+<p class="p9"><b>Conversion</b></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p2"><br></p>
@@ -455,7 +471,7 @@
<p class="p4"><span class="Apple-tab-span"> </span>Returns a SynthDef based on this Function, adding a <b>Linen </b>and an <b>Out</b> ugen if needed.</p>
<p class="p2"><br></p>
<p class="p4"><b><span class="Apple-tab-span"> </span>rates </b>- An Array of rates and lagtimes for the function's arguments (see <b>SynthDef</b> for more details).</p>
-<p class="p4"><span class="Apple-tab-span"> </span><b>outClass</b> - The class of the output ugen as a symbol. The default is <span class="s5">\Out</span>.</p>
+<p class="p4"><span class="Apple-tab-span"> </span><b>outClass</b> - The class of the output ugen as a symbol. The default is <span class="s8">\Out</span>.</p>
<p class="p4"><span class="Apple-tab-span"> </span><b>fadeTime</b> - a fadein time. The default is 0.</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
@@ -463,11 +479,11 @@
<p class="p4"><b>asDefName</b></p>
<p class="p2"><br></p>
<p class="p4">Performs asSynthDef (see above), sends the resulting def to the local server and returns the SynthDefs name. This is asynchronous.</p>
-<p class="p16"><br></p>
-<p class="p6">x = { <span class="s2">SinOsc</span>.ar(440, 0, 0.3) }.asDefName; <span class="s3">// this must complete first</span></p>
+<p class="p18"><br></p>
+<p class="p6">x = { <span class="s2">SinOsc</span>.ar(440, 0, 0.3) }.asDefName; <span class="s4">// this must complete first</span></p>
<p class="p6">y = <span class="s2">Synth</span>(x);</p>
-<p class="p16"><br></p>
-<p class="p16"><br></p>
+<p class="p18"><br></p>
+<p class="p18"><br></p>
<p class="p4"><b>asRoutine</b></p>
<p class="p2"><br></p>
<p class="p4">Returns a <a href="Routine.html"><span class="s2">Routine</span></a> using <b>this</b> as its func argument.</p>
@@ -487,9 +503,9 @@
<p class="p6">x = a.asStream;</p>
<p class="p6">x.nextN(8);</p>
<p class="p7"><br></p>
-<p class="p4">This is useful for using <a href="../../Language/ListComprehensions.html"><span class="s6">ListComprehensions</span></a> in Patterns:</p>
+<p class="p4">This is useful for using <a href="../../Language/ListComprehensions.html"><span class="s9">ListComprehensions</span></a> in Patterns:</p>
<p class="p7"><br></p>
-<p class="p6"><span class="s2">Pbind</span>(<span class="s5">\degree</span>, p {:[x, y].postln, x&lt;-(0..10), y&lt;-(0..10), (x + y).isPrime }, <span class="s5">\dur</span>, 0.3).play;<span class="Apple-converted-space"> </span></p>
+<p class="p6"><span class="s2">Pbind</span>(<span class="s8">\degree</span>, p {:[x, y].postln, x&lt;-(0..10), y&lt;-(0..10), (x + y).isPrime }, <span class="s8">\dur</span>, 0.3).play;<span class="Apple-converted-space"> </span></p>
<p class="p7"><br></p>
</body>
</html>
View
236 common/build/Help/Core/Symbol.html
@@ -5,59 +5,197 @@
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="824.42">
+<meta name="CocoaVersion" content="1038.25">
<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
+p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
-span.s1 {text-decoration: underline}
+p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
+p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #00831b}
+p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
+p.p6 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica; min-height: 14.0px}
+p.p7 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica}
+p.p8 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco}
+p.p9 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; min-height: 12.0px}
+p.p10 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #00831c}
+p.p11 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 14.0px Helvetica}
+p.p12 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 14.0px Helvetica; min-height: 17.0px}
+p.p13 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica; color: #1135f9}
+p.p14 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica; color: #1135f9; min-height: 14.0px}
+p.p15 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #00831b}
+p.p16 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #00831c; min-height: 12.0px}
+span.s1 {font: 18.0px Helvetica}
+span.s2 {color: #1135f9}
+span.s3 {color: #737373}
+span.s4 {color: #00831b}
+span.s5 {color: #00831c}
+span.s6 {font: 12.0px Helvetica}
+span.s7 {font: 9.0px Monaco}
+span.s8 {font: 12.0px Helvetica; color: #000000}
+span.s9 {color: #000000}
+span.s10 {color: #0b28c6}
+span.s11 {text-decoration: underline ; color: #0000ee}
+span.s12 {color: #0b28c5}
+span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
-<p class="p1"><b>Symbol</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>superclass: Object</b></p>
-<p class="p2"><br></p>
-<p class="p3">A Symbol is a name that is guaranteed to be unique. They can be used to represent</p>
-<p class="p3">symbolic constant values, Dictionary keys, etc.</p>
-<p class="p2"><br></p>
-<p class="p3">Symbols are represented syntactically as literals which are described in [01 Literals] .</p>
-<p class="p2"><br></p>
-<p class="p4"><b><span class="s1">Testing</span></b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>isClassName</b></p>
-<p class="p2"><br></p>
-<p class="p3">Answer whether the symbol is a class name.</p>
-<p class="p2"><br></p>
-<p class="p3"><b>isSetter</b></p>
-<p class="p2"><br></p>
-<p class="p3">Answer whether the symbol has a trailing underscore.</p>
-<p class="p2"><br></p>
-<p class="p4"><b><span class="s1">Conversion</span></b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>asString</b></p>
-<p class="p2"><br></p>
-<p class="p3">Convert to a String</p>
-<p class="p2"><br></p>
-<p class="p3"><b>asClass</b></p>
-<p class="p2"><br></p>
-<p class="p3">Answer the Class named by the receiver.</p>
-<p class="p2"><br></p>
-<p class="p3"><b>asSetter</b></p>
-<p class="p2"><br></p>
-<p class="p3">Return a symbol with a trailing underscore added.</p>
-<p class="p2"><br></p>
-<p class="p3"><b>asGetter</b></p>
-<p class="p2"><br></p>
-<p class="p3">Return a symbol with a trailing underscore removed.</p>
-<p class="p2"><br></p>
-<p class="p4"><b><span class="s1">Math</span></b></p>
-<p class="p2"><br></p>
-<p class="p3">Symbols respond to all unary and binary math operations by returning themselves.</p>
-<p class="p3">The result of any math operation between a Number or other math object and a Symbol</p>
-<p class="p3">is to return the Symbol. This allows operations on lists of notes which contain 'rest's</p>
-<p class="p3">to preserve the rests.</p>
-<p class="p2"><br></p>
+<p class="p1"><span class="s1"><b>Symbol<span class="Apple-tab-span"> </span></b></span><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>unique name</b></p>
+<p class="p2"><br></p>
+<p class="p1"><b>superclass: </b><a href="Object.html"><span class="s2"><b>Object</b></span></a></p>
+<p class="p2"><br></p>
+<p class="p1">A Symbol is a name that is guaranteed to be <b>unique</b>. They can be used to represent</p>
+<p class="p1">symbolic constant values, Dictionary keys, etc.</p>
+<p class="p2"><br></p>
+<p class="p1">Symbols are represented syntactically as literals which are described in [<a href="../Language/Literals.html"><span class="s2">Literals</span></a>]</p>
+<p class="p2"><br></p>
+<p class="p2"><br></p>
+<p class="p3"><b>Creating a Symbol</b></p>
+<p class="p2"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span>A symbol can be written by surrounding characters by single quotes (may include whitespace):</p>
+<p class="p2"><br></p>
+<p class="p4"><span class="Apple-tab-span"> </span>'foo bar'</p>
+<p class="p2"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span>Or by a preceeding backslash (then it may not include whitespace):</p>
+<p class="p2"><br></p>
+<p class="p4"><span class="Apple-tab-span"> </span>\foo</p>
+<p class="p2"><br></p>
+<p class="p1"><span class="Apple-tab-span"> </span>A String can be converted into a symbol:</p>
+<p class="p2"><br></p>
+<p class="p5"><span class="Apple-tab-span"> </span><span class="s3">"arbeit"</span>.scramble.asSymbol;</p>
+<p class="p2"><br></p>
+<p class="p2"><br></p>
+<p class="p3"><b>Testing</b></p>
+<p class="p6"><br></p>
+<p class="p7"><b><span class="Apple-tab-span"> </span>isClassName / isMetaClassName</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Answer whether the symbol can be a class name / meta class name. This does not say if the class exists.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">\Array</span>.isClassName;</p>
+<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">\Bauxite</span>.isClassName;</p>
+<p class="p8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s5">\Meta_Array</span>.isMetaClassName;</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>isSetter</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Answer whether the symbol has a trailing underscore.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="s6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><span class="s4">'_action'</span>.isSetter;</p>
+<p class="p9"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="s7"><span class="Apple-tab-span"> </span></span><b>isPrimitiveName</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Answer whether the symbol is a valid primitive name</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p10"><span class="s8"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>'_SymbolIsClassName'<span class="s9">.isPrimitiveName;</span></p>
+<p class="p6"><br></p>
+<p class="p6"><br></p>
+<p class="p11"><b>Conversion</b></p>
+<p class="p6"><br></p>
+<p class="p7"><b><span class="Apple-tab-span"> </span>asString</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Convert to a <a href="../Collections/String.html"><span class="s2">String</span></a></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asInteger</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Convert to an <a href="../Math/Integer.html"><span class="s2">Integer</span></a></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asClass</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Answer the <a href="Kernel/Class.html"><span class="s2">Class</span></a> named by the receiver.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asSetter</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Return a symbol with a trailing underscore added.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asGetter</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Return a symbol with a trailing underscore removed.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>ascii</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>return the ascii codes as an array</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asSpec</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Convert to a <a href="../Control/ControlSpec.html"><span class="s2">ControlSpec</span></a></p>
+<p class="p6"><br></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asTuning</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Convert to a <a href="../Collections/Tuning.html"><span class="s2">Tuning</span></a></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>asScale</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Convert to a <a href="../Collections/Scale.html"><span class="s2">Scale</span></a></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p6"><br></p>
+<p class="p11"><b>Environments</b></p>
+<p class="p12"><br></p>
+<p class="p7">Symbols are used as keys to look up objects in dictionaries and environments, but also in arrays.<span class="Apple-converted-space"> </span></p>
+<p class="p13"><span class="s9">See <a href="../Collections/IdentityDictionary.html"><span class="s6">IdentityDictionary</span></a>, <a href="../Collections/Environment.html"><span class="s6">Environment</span></a>, <a href="../Collections/Event.html"><span class="s6">Event</span></a></span></p>
+<p class="p14"><br></p>
+<p class="p8"><span class="Apple-tab-span"> </span>a = ();</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.put(<span class="s4">\commune</span>, 1871);</p>
+<p class="p15"><span class="s9"><span class="Apple-tab-span"> </span>a.at(</span>\commune<span class="s9">);</span></p>
+<p class="p6"><br></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>envirPut(aValue)</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>put a value to the current environment using receiver as key</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>envirGet</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>return a value from the current environment using receiver as key</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="s6"><span class="Apple-tab-span"> </span></span><span class="s4">\foo</span>.envirPut(100);</p>
+<p class="p8"><span class="Apple-tab-span"> </span><span class="s4">\foo</span>.envirGet;</p>
+<p class="p8"><span class="s6"><span class="Apple-tab-span"> </span></span><span class="s4">\foo</span>.envirPut(<span class="s10">nil</span>);</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p11"><b>Math</b></p>
+<p class="p6"><br></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Symbols respond to all unary and binary math operations by returning themselves. The result of any math operation between a Number or other math object and a Symbol is to return the Symbol. This allows for example operations on lists of notes which contain 'rest's to preserve the rests.</p>
+<p class="p16"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="s5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><span class="s10">Pseq</span>([1, 3, <span class="s4">\rest</span>, 2, 4] + 8);</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>applyTo(firstArg ... args)</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Use the symbol as a method selector and perform the message on <b>firstArg</b>, with <b>args</b> as arguments. This is used for mixing functions with method selectors (see also: <a href="Kernel/Function.html"><span class="s2">Function</span></a>).</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="s6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><span class="s4">'%'</span>.applyTo(2553, 345<span class="s6">);</span></p>
+<p class="p8"><span class="s6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>[<span class="s4">'+'</span>, <span class="s4">'-'</span>, <span class="s4">'*'</span>, { <span class="s10">|a, b|</span> a.rand + b.rand } ].choose.applyTo(2, 3);</p>
+<p class="p9"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
+<p class="p9"><span class="Apple-tab-span"> </span></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p11"><b>Synthesis</b></p>
+<p class="p6"><br></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Inside SynthDefs and UGen functions, symbols can be used to conventiently specify control inputs of different rates and with lags (see:<span class="Apple-converted-space">  </span><a href="../UGens/Synth control/NamedControl.html"><span class="s2">NamedControl</span></a>, <a href="../UGens/Synth control/ControlName.html"><span class="s2">ControlName</span></a><span class="s2">, </span>and<span class="s2"> <a href="../UGens/Synth control/Control.html"><span class="s11">Control</span></a></span>).</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>kr(val, lag)</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Return a control rate <a href="../UGens/Synth control/NamedControl.html"><span class="s2">NamedControl</span></a> input with a default value (<b>val</b>), and if supplied, with a <b>lag</b>. If val is an array, the control will be multichannel.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="Apple-tab-span"> </span>a = { <span class="s10">SinOsc</span>.ar(<span class="s5">\freq</span>.kr(440, 1.2)) }.play;</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.set(<span class="s5">\freq</span>, 330);</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.release;</p>
+<p class="p8"><span class="s6"><span class="Apple-tab-span"> </span></span>a = { <span class="s12">SinOsc</span>.ar(<span class="s5">\freq</span>.kr([440, 460], 1.2)) }.play;</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.setn(<span class="s5">\freq</span>, [330, 367]);</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.release;</p>
+<p class="p9"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="s7"><span class="Apple-tab-span"> </span></span><b>ar(val, lag)</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Return an audio rate <a href="../UGens/Synth control/NamedControl.html"><span class="s2">NamedControl</span></a><span class="s2"> </span>input with a default value (<b>val</b>), and if supplied, with a <b>lag</b>. If val is an array, the control will be multichannel.</p>
+<p class="p12"><br></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>ir(val)</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Return an intitalization rate <a href="../UGens/Synth control/NamedControl.html"><span class="s2">NamedControl</span></a><span class="s2"> </span>input with a default value (<b>val</b>). If val is an array, the control will be multichannel.</p>
+<p class="p6"><span class="s7"><span class="Apple-tab-span"> </span></span><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span><b>tr(val)</b></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p7"><span class="Apple-tab-span"> </span>Return a TrigControl input with a default value (<b>val</b>). If val is an array, the control will be multichannel.</p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><span class="Apple-tab-span"> </span>a = { <span class="s10">Ringz</span>.ar(<span class="s10">T2A</span>.ar(<span class="s5">\trig</span>.tr), <span class="s5">\freq</span>.kr(500, 1), 0.8) }.play;</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.set(<span class="s5">\freq</span>, 330, <span class="s5">\trig</span>, 1);</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.set(<span class="s5">\freq</span>, 830, <span class="s5">\trig</span>, 1);</p>
+<p class="p8"><span class="Apple-tab-span"> </span>a.release;</p>
+<p class="p9"><br></p>
+<p class="p9"><span class="Apple-tab-span"> </span></p>
</body>
</html>
View
24 common/build/Help/GUI/Cocoa-GUI/SCListView.html
@@ -10,7 +10,7 @@
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #001bec}
+p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #0000bf}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
p.p6 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica}
p.p7 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; min-height: 12.0px}
@@ -22,24 +22,24 @@
p.p13 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 14.0px Helvetica}
p.p14 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco}
p.p15 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 14.0px Helvetica; min-height: 17.0px}
-p.p16 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #2b7000}
+p.p16 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #007300}
p.p17 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ae1a19}
+p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
span.s1 {font: 12.0px Helvetica}
-span.s2 {color: #6f7182}
-span.s3 {color: #6a708c}
+span.s2 {color: #0000bf}
+span.s3 {color: #0000bf}
span.s4 {color: #000000}
span.s5 {text-decoration: underline}
-span.s6 {color: #6e7185}
-span.s7 {color: #6f7178}
-span.s8 {color: #0016bd}
-span.s9 {color: #51535a}
-span.s10 {color: #001dfd}
+span.s6 {color: #0000bf}
+span.s7 {color: #0000bf}
+span.s8 {color: #0000bf}
+span.s9 {color: #0000bf}
+span.s10 {color: #0000bf}
span.s11 {font: 14.0px Helvetica}
span.s12 {font: 12.0px Helvetica; color: #000000}
-span.s13 {color: #ae1a19}
+span.s13 {color: #bf0000}
span.s14 {color: #606060}
-span.s15 {color: #2b7000}
+span.s15 {color: #007300}
span.Apple-tab-span {white-space:pre}
</style>
</head>
View
10 common/build/Help/GUI/Cocoa-GUI/SCNumberBox.html
@@ -9,7 +9,7 @@
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #001de0}
+p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #0000bf}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica; min-height: 17.0px}
p.p6 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 12.0px Helvetica}
@@ -23,17 +23,17 @@
p.p14 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
p.p15 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
p.p16 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco}
-p.p17 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #476c24}
-p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #8d241e}
+p.p17 {margin: 0.0px 0.0px 0.0px 57.0px; text-indent: -57.0px; font: 9.0px Monaco; color: #007300}
+p.p18 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
p.p19 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
span.s1 {font: 18.0px Helvetica}
span.s2 {color: #000000}
span.s3 {text-decoration: underline}
-span.s4 {color: #0922ad}
+span.s4 {color: #0000bf}
span.s5 {font: 9.0px Monaco}
span.s6 {color: #606060}
span.s7 {font: 14.0px Helvetica}
-span.s8 {color: