#FEATURE by exept
authorClaus Gittinger <cg@exept.de>
Sat, 04 Jan 2020 02:09:27 +0100
changeset 5415 5605213d20c8
parent 5414 397dd1c5574f
child 5416 641bc1f8e62f
#FEATURE by exept class: SoundStream changed: #tuneTone16:seconds:
SoundStream.st
--- a/SoundStream.st	Sat Jan 04 01:50:41 2020 +0100
+++ b/SoundStream.st	Sat Jan 04 02:09:27 2020 +0100
@@ -1635,7 +1635,11 @@
 
     "allocate memory for 1 sec playing time"
     numSamples := self sampleRate.
-    buffer := WordArray new:numSamples.
+    audioFormat == #U16 ifTrue:[
+        buffer := WordArray new:numSamples.
+    ] ifFalse:[
+        buffer := SignedWordArray new:numSamples.
+    ].
 
     "fill it with a sine wave"
     "/ buffer is 1 second, 
@@ -1643,12 +1647,12 @@
     "/ each of which is 0 .. 2pi
     scale := freq * 2 * (Float pi) / numSamples.
     1 to:numSamples do:[:i |
-        val := (scale * i) sin.
+        val := (scale * (i-1)) sin.
         val := (val * 16r7FFF) rounded.
         audioFormat == #U16 ifTrue:[
             val := val + 16r8000
         ].
-        buffer at:i put:(val bitAnd:16rFFFF)
+        buffer at:i put:val
     ].
 
     1 to:nSeconds truncated do:[:s |
@@ -1662,7 +1666,7 @@
     "of course, the frequency should be below half the
      sampleRate - hear below ...
 
-     SoundStream writing setSampleRate:4000; tuneTone16:440 seconds:1; close
+     SoundStream writing setSampleRate:4000; tuneTone16:440 seconds:3; close
      SoundStream writing setSampleRate:8000; tuneTone16:440 seconds:1; close
      SoundStream writing setSampleRate:10000; tuneTone16:440 seconds:1; close
      SoundStream writing setSampleRate:20000; tuneTone16:440 seconds:1; close