| 
 | 
   random_initializeWithSeedUnsafelyButPredictably (89678363)
   samplingFrequency = 44100
   my.Sound = Create Sound from formula: "sineWithNoise", 1, 0.0, 1.0,
   ... samplingFrequency, ~ 1/2 * sin(2*pi*377*x) + randomGauss(0,0.1)
What is the biggest step between two consecutive samples?
   difference.Sound = Copy: "difference"
   Formula: ~ if col = ncol then 0 else self [col + 1] - self [col] fi
   biggestAbsoluteWaveformStepBetweenSamples = Get absolute extremum: 0, 0, "none"
   appendInfoLine: "## biggest absolute waveform step between samples: ",
   ... biggestAbsoluteWaveformStepBetweenSamples, " Pa"
=>   ## biggest absolute waveform step between samples: 0.5882017498987074 Pa
This corresponds to the following biggest energy step between two consecutive samples:
   biggestAbsoluteEnergyStepBetweenSamples = biggestAbsoluteWaveformStepBetweenSamples ^ 2 / samplingFrequency
   appendInfoLine: "## biggest absolute energy step between samples: ",
   ... biggestAbsoluteEnergyStepBetweenSamples, " Pa²s"
=>   ## biggest absolute energy step between samples: 7.845380920269877e-06 Pa²s
We’ll divide up every sample into 10 ministeps:
   oversampling = 10
Between any consecutive ministeps, the energy step should not exceed one tenth of the biggest energy step between two consecutive samples:
   biggestAbsoluteEnergyMinistep = biggestAbsoluteEnergyStepBetweenSamples / oversampling
   appendInfoLine: "## biggest absolute energy ministep: ",
   ... biggestAbsoluteEnergyMinistep, " Pa²s"
=>   ## biggest absolute energy ministep: 7.845380920269877e-07 Pa²s
Large test:
   stopwatch
   minidt = 1.0 / samplingFrequency / oversampling
   tmin = 1e-9   ; not 0.0, in order to prevent autowindowing
   previousEnergy = Get energy: 0, tmin
   for i from 1 to 10000
       energy = Get energy: 0, tmin + i * minidt
       energyGain = energy - previousEnergy
       if i < 100
           appendInfoLine: i, " ", energy, " ", energyGain
       endif
       step = abs (energyGain)
       assert step > 0.0
       assert step < 1.0000000000001 * biggestAbsoluteEnergyMinistep   ; also captures undefined samples
       previousEnergy = energy
   endfor
   appendInfoLine: "## time elapsed: ", fixed$ (stopwatch * 1000, 3), " ms"
=>   1 9.85991670200348e-09 9.85557039548647e-09
   2 1.971548709748995e-08 9.85557039548647e-09
   3 2.9571057492976423e-08 9.855570395486474e-09
   4 3.942662788846291e-08 9.855570395486483e-09
   5 4.928219828394937e-08 9.85557039548646e-09
   6 5.913776867943583e-08 9.85557039548646e-09
   7 6.899333907492231e-08 9.855570395486487e-09
   8 7.88489094704088e-08 9.85557039548648e-09
   9 8.870447986589525e-08 9.855570395486454e-09
   10 9.860525807996193e-08 9.900778214066685e-09
   11 2.1097288939423437e-07 1.1236763131427244e-07
   12 3.23340520708507e-07 1.1236763131427265e-07
   13 4.3570815202277946e-07 1.1236763131427244e-07
   14 5.480757833370524e-07 1.1236763131427297e-07
   15 6.604434146513251e-07 1.123676313142727e-07
   16 7.728110459655973e-07 1.1236763131427217e-07
   17 8.851786772798705e-07 1.1236763131427323e-07
   18 9.975463085941426e-07 1.1236763131427207e-07
   19 1.1099139399084153e-06 1.123676313142727e-07
   20 1.2222479420557002e-06 1.1233400214728491e-07
   21 1.258358958404482e-06 3.611101634878181e-08
   22 1.2944699747532643e-06 3.611101634878223e-08
   23 1.3305809911020463e-06 3.611101634878202e-08
   24 1.3666920074508283e-06 3.611101634878202e-08
   25 1.4028030237996103e-06 3.611101634878202e-08
   26 1.4389140401483923e-06 3.611101634878202e-08
   27 1.4750250564971746e-06 3.611101634878223e-08
   28 1.5111360728459568e-06 3.611101634878223e-08
   29 1.5472470891947388e-06 3.611101634878202e-08
   30 1.5833498977214194e-06 3.610280852668062e-08
   31 1.6008490724530757e-06 1.7499174731656273e-08
   32 1.618348247184732e-06 1.7499174731656273e-08
   33 1.635847421916388e-06 1.749917473165606e-08
   34 1.6533465966480443e-06 1.7499174731656273e-08
   35 1.6708457713797006e-06 1.7499174731656273e-08
   36 1.6883449461113564e-06 1.749917473165585e-08
   37 1.705844120843013e-06 1.7499174731656484e-08
   38 1.7233432955746688e-06 1.749917473165585e-08
   39 1.740842470306325e-06 1.7499174731656273e-08
   40 1.7583484457624646e-06 1.7505975456139537e-08
   41 1.7912687645441031e-06 3.292031878163856e-08
   42 1.8241890833257415e-06 3.2920318781638346e-08
   43 1.8571094021073796e-06 3.2920318781638134e-08
   44 1.890029720889018e-06 3.2920318781638346e-08
   45 1.9229500396706563e-06 3.2920318781638346e-08
   46 1.955870358452295e-06 3.292031878163856e-08
   47 1.9887906772339334e-06 3.292031878163856e-08
   48 2.021710996015572e-06 3.292031878163856e-08
   49 2.05463131479721e-06 3.2920318781638134e-08
   50 2.0875549016141217e-06 3.292358681691155e-08
   51 2.127885731267828e-06 4.033082965370634e-08
   52 2.1682165609215343e-06 4.033082965370634e-08
   53 2.2085473905752407e-06 4.033082965370634e-08
   54 2.248878220228946e-06 4.033082965370549e-08
   55 2.2892090498826525e-06 4.033082965370634e-08
   56 2.3295398795363584e-06 4.0330829653705916e-08
   57 2.3698707091900648e-06 4.033082965370634e-08
   58 2.4102015388437707e-06 4.0330829653705916e-08
   59 2.450532368497477e-06 4.033082965370634e-08
   60 2.490865592939e-06 4.033322444152279e-08
   61 2.5366267804874685e-06 4.576118754846863e-08
   62 2.5823879680359367e-06 4.5761187548468205e-08
   63 2.6281491555844057e-06 4.576118754846905e-08
   64 2.6739103431328743e-06 4.576118754846863e-08
   65 2.7196715306813425e-06 4.5761187548468205e-08
   66 2.765432718229811e-06 4.576118754846863e-08
   67 2.8111939057782794e-06 4.5761187548468205e-08
   68 2.8569550933267484e-06 4.576118754846905e-08
   69 2.902716280875217e-06 4.576118754846863e-08
   70 2.948506879878777e-06 4.579059900356002e-08
   71 3.0609607097784683e-06 1.1245382989969118e-07
   72 3.173414539678161e-06 1.1245382989969288e-07
   73 3.2858683695778527e-06 1.124538298996916e-07
   74 3.3983221994775456e-06 1.1245382989969288e-07
   75 3.510776029377235e-06 1.1245382989968949e-07
   76 3.623229859276929e-06 1.1245382989969372e-07
   77 3.7356836891766204e-06 1.124538298996916e-07
   78 3.848137519076312e-06 1.1245382989969118e-07
   79 3.960591348976005e-06 1.124538298996933e-07
   80 4.073010283500807e-06 1.1241893452480239e-07
   81 4.106336278682792e-06 3.3325995181984736e-08
   82 4.139662273864778e-06 3.332599518198558e-08
   83 4.1729882690467615e-06 3.332599518198389e-08
   84 4.206314264228747e-06 3.332599518198558e-08
   85 4.239640259410732e-06 3.3325995181984736e-08
   86 4.272966254592717e-06 3.3325995181984736e-08
   87 4.306292249774701e-06 3.3325995181984736e-08
   88 4.339618244956687e-06 3.332599518198558e-08
   89 4.372944240138672e-06 3.3325995181984736e-08
   90 4.406255566082368e-06 3.331132594369599e-08
   91 4.406317982166531e-06 6.241608416314356e-11
   92 4.406380398250694e-06 6.241608416314356e-11
   93 4.406442814334857e-06 6.241608416314356e-11
   94 4.406505230419019e-06 6.241608416229652e-11
   95 4.4065676465031825e-06 6.241608416314356e-11
   96 4.406630062587346e-06 6.241608416314356e-11
   97 4.406692478671509e-06 6.241608416314356e-11
   98 4.406754894755672e-06 6.241608416314356e-11
   99 4.406817310839835e-06 6.241608416314356e-11
   ## time elapsed: 75.024 ms
© Paul Boersma 2025-05-14