SoundStream.st
author claus
Fri, 16 Jul 1993 11:39:41 +0200
changeset 0 1cf8d1747859
child 3 c9936b5a86a1
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     1
'From Smalltalk/X, Version:2.6.3 on 25-Mar-1993 at 16:32:03'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     2
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     3
FileStream subclass:#SoundStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     4
         instanceVariableNames:'sampleRate numberOfChannels bitsPerSample'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     5
         classVariableNames:'rampOff'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     6
         poolDictionaries:''
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     7
         category:'Streams-External'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     8
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
     9
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    10
SoundStream comment:'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    11
Interface to audio device.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    12
Currently works with PD sound-blaster driver and
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    13
sun audio device. On iris default setup is 8 bit mono
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    14
so I can play the standard sound files I have here.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    15
'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    16
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    17
%{
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    18
#ifdef IRIS
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    19
# include <audio.h>
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    20
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    21
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    22
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    23
!SoundStream class methodsFor:'instance creation'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    24
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    25
reading
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    26
    |newStream|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    27
    newStream := (self basicNew) initialize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    28
    newStream openForReading isNil ifTrue:[^nil].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    29
    ^ newStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    30
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    31
    "SoundStream reading"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    32
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    33
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    34
writing
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    35
    |newStream|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    36
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    37
    OperatingSystem getCPUType = '386' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    38
        "soundblaster special kludge to avoid click"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    39
        rampOff isNil ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    40
            self generateRamp
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    41
        ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    42
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    43
    newStream := (self basicNew) initialize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    44
    newStream openForWriting isNil ifTrue:[^nil].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    45
    ^ newStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    46
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    47
    "SoundStream writing"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    48
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    49
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    50
writing16BitStero
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    51
    "just an example, has never been tried (I also
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    52
     have no samples for this ... leave it as an exercise"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    53
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    54
    |newStream|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    55
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    56
    OperatingSystem getCPUType = 'irix' ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    57
        self error:'unsupported audio mode'.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    58
        ^ nil
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    59
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    60
    newStream := (self basicNew) initialize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    61
    newStream bitsPerSample:16.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    62
    newStream numberOfChannels:2.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    63
    newStream openForWriting isNil ifTrue:[^nil].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    64
    ^ newStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    65
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    66
    "SoundStream writing16BitStereo"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    67
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    68
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    69
!SoundStream class methodsFor:'default values'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    70
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    71
defaultSampleRate
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    72
    "minimum, supported by all audio systems"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    73
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    74
    ^ 8000
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    75
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    76
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    77
defaultBitsPerSample
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    78
    "minimum, supported by all audio systems"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    79
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    80
    ^ 8
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    81
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    82
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    83
defaultNumberOfChannels
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    84
    "minimum, supported by all audio systems"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    85
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    86
    ^ 1
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    87
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    88
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    89
defaultMode
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    90
    ^ #linear "planned is at least uLaw"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    91
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    92
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    93
blockSize
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    94
    "a good chunk size to read soundstream.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    95
     Some devices may force a specific size ..."
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    96
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    97
    ^ 2048 "about 1/4 of a second" 
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    98
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    99
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   100
!SoundStream class methodsFor:'conversion tables'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   101
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   102
uLawToLinear:uLawValue
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   103
    "currently unused - but will be"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   104
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   105
    ^ #(
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   106
        "0  "     -32256
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   107
        "1  "     -31228
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   108
        "2  "     -30200
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   109
        "3  "     -29172
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   110
        "4  "     -28143
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   111
        "5  "     -27115
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   112
        "6  "     -26087
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   113
        "7  "     -25059
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   114
        "8  "     -24031
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   115
        "9  "     -23002
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   116
        "10 "     -21974
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   117
        "11 "     -20946
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   118
        "12 "     -19918
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   119
        "13 "     -18889
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   120
        "14 "     -17861
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   121
        "15 "     -16833
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   122
        "16 "     -16062
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   123
        "17 "     -15548
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   124
        "18 "     -15033
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   125
        "19 "     -14519
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   126
        "20 "     -14005
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   127
        "21 "     -13491
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   128
        "22 "     -12977
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   129
        "23 "     -12463
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   130
        "24 "     -11949
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   131
        "25 "     -11435
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   132
        "26 "     -10920
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   133
        "27 "     -10406
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   134
        "28 "     -9892
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   135
        "29 "     -9378
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   136
        "30 "     -8864
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   137
        "31 "     -8350
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   138
        "32 "     -7964
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   139
        "33 "     -7707
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   140
        "34 "     -7450
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   141
        "35 "     -7193
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   142
        "36 "     -6936
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   143
        "37 "     -6679
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   144
        "38 "     -6422
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   145
        "39 "     -6165
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   146
        "40 "     -5908
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   147
        "41 "     -5651
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   148
        "42 "     -5394
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   149
        "43 "     -5137
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   150
        "44 "     -4880
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   151
        "45 "     -4623
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   152
        "46 "     -4365
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   153
        "47 "     -4108
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   154
        "48 "     -3916
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   155
        "49 "     -3787
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   156
        "50 "     -3659
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   157
        "51 "     -3530
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   158
        "52 "     -3402
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   159
        "53 "     -3273
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   160
        "54 "     -3144
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   161
        "55 "     -3016
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   162
        "56 "     -2887
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   163
        "57 "     -2759
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   164
        "58 "     -2630
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   165
        "59 "     -2502
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   166
        "60 "     -2373
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   167
        "61 "     -2245
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   168
        "62 "     -2116
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   169
        "63 "     -1988
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   170
        "64 "     -1891
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   171
        "65 "     -1827
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   172
        "66 "     -1763
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   173
        "67 "     -1698
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   174
        "68 "     -1634
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   175
        "69 "     -1570
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   176
        "70 "     -1506
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   177
        "71 "     -1441
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   178
        "72 "     -1377
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   179
        "73 "     -1313
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   180
        "74 "     -1249
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   181
        "75 "     -1184
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   182
        "76 "     -1120
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   183
        "77 "     -1056
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   184
        "78 "     -992
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   185
        "79 "     -927
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   186
        "80 "     -879
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   187
        "81 "     -847
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   188
        "82 "     -815
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   189
        "83 "     -783
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   190
        "84 "     -751
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   191
        "85 "     -718
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   192
        "86 "     -686
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   193
        "87 "     -654
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   194
        "88 "     -622
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   195
        "89 "     -590
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   196
        "90 "     -558
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   197
        "91 "     -526
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   198
        "92 "     -494
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   199
        "93 "     -461
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   200
        "94 "     -429
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   201
        "95 "     -397
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   202
        "96 "     -373
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   203
        "97 "     -357
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   204
        "98 "     -341
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   205
        "99 "     -325
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   206
        "100"     -309
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   207
        "101"     -293
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   208
        "102"     -277
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   209
        "103"     -261
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   210
        "104"     -245
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   211
        "105"     -228
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   212
        "106"     -212
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   213
        "107"     -196
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   214
        "108"     -180
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   215
        "109"     -164
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   216
        "110"     -148
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   217
        "111"     -132
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   218
        "112"     -120
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   219
        "113"     -112
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   220
        "114"     -104
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   221
        "115"     -96
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   222
        "116"     -88
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   223
        "117"     -80
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   224
        "118"     -72
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   225
        "119"     -64
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   226
        "120"     -56
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   227
        "121"     -48
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   228
        "122"     -40
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   229
        "123"     -32
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   230
        "124"     -24
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   231
        "125"     -16
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   232
        "126"     -8
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   233
        "127"     0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   234
        "128"     32256
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   235
        "129"     31228
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   236
        "130"     30200
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   237
        "131"     29172
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   238
        "132"     28143
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   239
        "133"     27115
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   240
        "134"     26087
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   241
        "135"     25059
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   242
        "136"     24031
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   243
        "137"     23002
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   244
        "138"     21974
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   245
        "139"     20946
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   246
        "140"     19918
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   247
        "141"     18889
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   248
        "142"     17861
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   249
        "143"     16833
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   250
        "144"     16062
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   251
        "145"     15548
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   252
        "146"     15033
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   253
        "147"     14519
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   254
        "148"     14005
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   255
        "149"     13491
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   256
        "150"     12977
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   257
        "151"     12463
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   258
        "152"     11949
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   259
        "153"     11435
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   260
        "154"     10920
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   261
        "155"     10406
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   262
        "156"     9892
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   263
        "157"     9378
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   264
        "158"     8864
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   265
        "159"     8350
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   266
        "160"     7964
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   267
        "161"     7707
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   268
        "162"     7450
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   269
        "163"     7193
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   270
        "164"     6936
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   271
        "165"     6679
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   272
        "166"     6422
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   273
        "167"     6165
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   274
        "168"     5908
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   275
        "169"     5651
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   276
        "170"     5394
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   277
        "171"     5137
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   278
        "172"     4880
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   279
        "173"     4623
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   280
        "174"     4365
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   281
        "175"     4108
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   282
        "176"     3916
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   283
        "177"     3787
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   284
        "178"     3659
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   285
        "179"     3530
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   286
        "180"     3402
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   287
        "181"     3273
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   288
        "182"     3144
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   289
        "183"     3016
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   290
        "184"     2887
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   291
        "185"     2759
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   292
        "186"     2630
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   293
        "187"     2502
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   294
        "188"     2373
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   295
        "189"     2245
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   296
        "190"     2116
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   297
        "191"     1988
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   298
        "192"     1891
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   299
        "193"     1827
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   300
        "194"     1763
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   301
        "195"     1698
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   302
        "196"     1634
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   303
        "197"     1570
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   304
        "198"     1506
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   305
        "199"     1441
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   306
        "200"     1377
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   307
        "201"     1313
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   308
        "202"     1249
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   309
        "203"     1184
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   310
        "204"     1120
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   311
        "205"     1056
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   312
        "206"     992
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   313
        "207"     927
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   314
        "208"     879
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   315
        "209"     847
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   316
        "210"     815
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   317
        "211"     783
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   318
        "212"     751
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   319
        "213"     718
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   320
        "214"     686
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   321
        "215"     654
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   322
        "216"     622
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   323
        "217"     590
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   324
        "218"     558
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   325
        "219"     526
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   326
        "220"     494
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   327
        "221"     461
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   328
        "222"     429
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   329
        "223"     397
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   330
        "224"     373
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   331
        "225"     357
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   332
        "226"     341
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   333
        "227"     325
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   334
        "228"     309
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   335
        "229"     293
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   336
        "230"     277
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   337
        "231"     261
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   338
        "232"     245
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   339
        "233"     228
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   340
        "234"     212
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   341
        "235"     196
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   342
        "236"     180
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   343
        "237"     164
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   344
        "238"     148
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   345
        "239"     132
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   346
        "240"     120
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   347
        "241"     112
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   348
        "242"     104
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   349
        "243"     96
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   350
        "244"     88
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   351
        "245"     80
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   352
        "246"     72
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   353
        "247"     64
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   354
        "248"     56
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   355
        "249"     48
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   356
        "250"     40
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   357
        "251"     32
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   358
        "252"     24
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   359
        "253"     16
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   360
        "254"     8
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   361
        "255"     0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   362
    ) at:(uLawValue + 1)
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   363
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   364
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   365
!SoundStream class methodsFor:'private'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   366
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   367
generateRamp
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   368
    "create ramp data (need to be played on soundblaster
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   369
     before closing device to prevent audible click-on/off).
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   370
     This method just fills a buffer with ramp data."
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   371
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   372
    |size div|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   373
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   374
    size := 256.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   375
    div := size // 128.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   376
    rampOff := ByteArray new:size.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   377
    1 to:size do:[:index |
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   378
       rampOff at:index put:(size - index // div)
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   379
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   380
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   381
    "SoundStream generateRamp"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   382
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   383
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   384
!SoundStream methodsFor:'mode setting'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   385
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   386
sampleRate:aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   387
    "set the sample rate in hertz - on some
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   388
     devices, this is a nop"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   389
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   390
    OperatingSystem getCPUType = '386' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   391
        "assume sound-blaster device"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   392
        "set sound blasters sample rate"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   393
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   394
        sampleRate := aNumber.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   395
        self ioctl:1 "DSP_IOCTL_SPEED" with:aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   396
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   397
    OperatingSystem getOSType = 'sunos' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   398
        "audio sample rate is fix"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   399
        ^ self "cannot change"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   400
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   401
    OperatingSystem getOSType = 'irix' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   402
        "could change using ALibrary ...for now, it is fix"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   403
        sampleRate := aNumber.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   404
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   405
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   406
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   407
sampleRate
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   408
    "return the sample rate"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   409
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   410
    ^ sampleRate
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   411
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   412
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   413
numberOfChannels
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   414
    "return the number of channels (1 or 2; usually 1)"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   415
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   416
    ^ numberOfChannels
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   417
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   418
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   419
numberOfChannels:aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   420
    "set the number of channels"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   421
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   422
    numberOfChannels := aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   423
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   424
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   425
bitsPerSample
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   426
    "return the number of bits per sample - usually 8"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   427
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   428
    ^ bitsPerSample
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   429
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   430
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   431
bitsPerSample:aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   432
    "set the number of bits per sample"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   433
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   434
    bitsPerSample := aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   435
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   436
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   437
!SoundStream methodsFor:'catching invalid methods'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   438
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   439
pathName:filename
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   440
    "catch pathname access - its fixed here"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   441
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   442
    self shouldNotImplement
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   443
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   444
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   445
pathName:filename in:aDirectory
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   446
    "catch pathname access - its fixed here"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   447
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   448
    self shouldNotImplement
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   449
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   450
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   451
!SoundStream methodsFor:'private'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   452
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   453
initialize 
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   454
    "initialize for least common mode"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   455
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   456
    unBuffered := true.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   457
    bitsPerSample := 8.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   458
    numberOfChannels := 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   459
    sampleRate := 8000.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   460
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   461
    OperatingSystem getOSType = 'sunos' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   462
        pathName := '/dev/audio'.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   463
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   464
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   465
    OperatingSystem getOSType = 'irix' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   466
        "no device, use special library calls"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   467
        pathName := nil.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   468
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   469
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   470
    OperatingSystem getCPUType = '386' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   471
        "this code assumes a PD sound-blaster driver .."
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   472
        pathName := '/dev/sbdsp'
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   473
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   474
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   475
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   476
!SoundStream methodsFor:'redefined'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   477
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   478
openWithMode:aMode
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   479
    OperatingSystem getOSType = 'irix' ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   480
        "its a regular file open"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   481
        ^ super openWithMode:aMode
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   482
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   483
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   484
    ((aMode = 'r') or:[aMode = 'w']) ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   485
        self error:'invalid mode'.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   486
        ^ nil
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   487
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   488
%{
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   489
#ifdef IRIS
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   490
  {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   491
    ALconfig config;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   492
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   493
    long params[] = {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   494
        AL_INPUT_SOURCE, AL_INPUT_MIC,
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   495
        AL_INPUT_RATE, 8000,
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   496
        AL_OUTPUT_RATE, 8000,
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   497
    };
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   498
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   499
    config = ALnewconfig();
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   500
    if (_INST(numberOfChannels) == _MKSMALLINT(2))
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   501
        ALsetchannels(config, AL_STEREO);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   502
    else
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   503
        ALsetchannels(config, AL_MONO);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   504
    if (_INST(bitsPerSample) == _MKSMALLINT(16))
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   505
        ALsetwidth(config, AL_SAMPLE_16);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   506
    else
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   507
        ALsetwidth(config, AL_SAMPLE_8);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   508
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   509
    if (_isSmallInteger(_INST(sampleRate)))
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   510
        params[3] = params[5] = _intVal(_INST(sampleRate));
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   511
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   512
    ALsetparams(AL_DEFAULT_DEVICE, params, 6);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   513
    p = ALopenport("smallchat", (char *)_stringVal(aMode), config);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   514
    if (p) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   515
        _INST(filePointer) = _MKSMALLINT((int) p);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   516
    } else {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   517
        _INST(filePointer) = nil;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   518
        RETURN (nil);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   519
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   520
    _INST(binary) = true;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   521
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   522
    ALfreeconfig(config);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   523
    /*
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   524
     * get the parameters actually installed
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   525
     */
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   526
    config = ALgetconfig(p);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   527
    switch (ALgetchannels(config)) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   528
        default:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   529
            /* cannot happen */
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   530
        case AL_MONO:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   531
            _INST(numberOfChannels) = _MKSMALLINT(1);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   532
            break;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   533
        case AL_STEREO:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   534
            _INST(numberOfChannels) = _MKSMALLINT(2);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   535
            break;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   536
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   537
    switch (ALgetwidth(config)) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   538
        default:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   539
            /* cannot happen */
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   540
        case AL_SAMPLE_8:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   541
            _INST(bitsPerSample) = _MKSMALLINT(8);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   542
            break;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   543
        case AL_SAMPLE_16:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   544
            _INST(bitsPerSample) = _MKSMALLINT(16);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   545
            break;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   546
        case AL_SAMPLE_24:
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   547
            _INST(bitsPerSample) = _MKSMALLINT(24);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   548
            break;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   549
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   550
    ALgetparams(AL_DEFAULT_DEVICE, params, 6);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   551
    _INST(sampleRate) = _MKSMALLINT(params[3]);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   552
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   553
    ALfreeconfig(config);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   554
  }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   555
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   556
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   557
.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   558
    ^ self
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   559
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   560
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   561
close
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   562
    OperatingSystem getOSType = 'irix' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   563
        ^ self closeFile
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   564
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   565
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   566
    (mode == #writeonly) ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   567
        "special handling of close on sound blaster,
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   568
         turn off voice but continue playing a ramp
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   569
         to avoid audible click"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   570
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   571
        OperatingSystem getCPUType = '386' ifTrue:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   572
            "assume sound-blaster device"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   573
            self ioctl:2 "DSP_IOCTL_VOICE" with:0.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   574
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   575
            "OperatingSystem sleep:3.      "
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   576
            "add a ramp to zero to prevent click-off"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   577
            super nextPutBytes:(rampOff size) from:rampOff
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   578
        ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   579
    ].    
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   580
    super close
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   581
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   582
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   583
nextPutBytes:count from:anObject startingAt:start
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   584
    "write count bytes from an object starting at index start.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   585
     return the number of bytes written or nil on error.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   586
     Redefined, since IRIS audio library cannot be used with stdio.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   587
     (at least I dont know). Use with ByteArrays only."
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   588
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   589
%{
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   590
#ifdef IRIS
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   591
  {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   592
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   593
    int cnt, offs;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   594
    int objSize;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   595
    char *cp;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   596
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   597
    if (_INST(filePointer) != nil) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   598
        if (_INST(mode) != _readonly) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   599
            if (_isSmallInteger(count) && _isSmallInteger(start)) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   600
                cnt = _intVal(count);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   601
                offs = _intVal(start) - 1;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   602
                p = (ALport)(_intVal(_INST(filePointer)));
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   603
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   604
                /*
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   605
                 * compute number of samples
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   606
                 */
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   607
                objSize = _Size(anObject) - OHDR_SIZE;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   608
                if ( (offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs)) ) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   609
                    cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   610
                    if (_INST(bitsPerSample) == _MKSMALLINT(16))
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   611
                        ALwritesamps(p, cp, cnt / 2);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   612
                    else
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   613
                        ALwritesamps(p, cp, cnt);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   614
                    RETURN ( _MKSMALLINT(cnt) );
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   615
                }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   616
            }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   617
        }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   618
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   619
  }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   620
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   621
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   622
.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   623
    OperatingSystem getOSType = 'irix' ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   624
        ^ super nextPutBytes:count from:anObject startingAt:start
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   625
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   626
    filePointer isNil ifTrue:[^ self errorNotOpen].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   627
    (mode == #readonly) ifTrue:[^ self errorReadOnly].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   628
    self primitiveFailed
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   629
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   630
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   631
nextBytes:count into:anObject startingAt:start
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   632
    "read the next count bytes into an object and return the number of
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   633
     bytes read or nil on error.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   634
     Use with ByteArrays only."
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   635
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   636
%{
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   637
#ifdef IRIS
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   638
  {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   639
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   640
    int cnt, offs;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   641
    int objSize;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   642
    char *cp;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   643
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   644
    if (_INST(filePointer) != nil) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   645
        if (_INST(mode) != _writeonly) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   646
            if (_isSmallInteger(count) && _isSmallInteger(start)) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   647
                cnt = _intVal(count);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   648
                offs = _intVal(start) - 1;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   649
                p = (ALport)(_intVal(_INST(filePointer)));
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   650
                objSize = _Size(anObject) - OHDR_SIZE;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   651
                if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   652
                    cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   653
                    if (_INST(bitsPerSample) == _MKSMALLINT(16))
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   654
                        ALreadsamps(p, cp, cnt / 2);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   655
                    else
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   656
                        ALreadsamps(p, cp, cnt);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   657
                    RETURN ( _MKSMALLINT(cnt) );
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   658
                }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   659
            }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   660
        }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   661
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   662
  }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   663
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   664
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   665
.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   666
    OperatingSystem getOSType = 'irix' ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   667
        ^ super nextPutBytes:count from:anObject startingAt:start
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   668
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   669
    filePointer isNil ifTrue:[^ self errorNotOpen].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   670
    (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   671
    self primitiveFailed
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   672
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   673
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   674
synchronizeOutput
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   675
    "wait until all sound has been played"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   676
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   677
%{ 
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   678
#ifdef IRIS
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   679
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   680
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   681
    if (_INST(filePointer) != nil) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   682
        p = (ALport)(_intVal(_INST(filePointer)));
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   683
        while (ALgetfilled(p) > 0) {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   684
            sginap(1);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   685
        }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   686
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   687
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   688
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   689
.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   690
    OperatingSystem getOSType = 'irix' ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   691
        "dont know how to wait"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   692
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   693
    ^ self
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   694
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   695
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   696
!SoundStream methodsFor:'instance release'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   697
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   698
closeFile
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   699
    "a stream has been collected - close the file"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   700
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   701
    OperatingSystem getOSType = 'irix' ifFalse:[
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   702
        ^ super closeFile
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   703
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   704
%{ 
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   705
#ifdef IRIS
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   706
    ALcloseport( (ALport) (_intVal(_INST(filePointer))) );
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   707
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   708
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   709
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   710
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   711
!SoundStream methodsFor:'sine wave generation'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   712
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   713
tuneTone
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   714
    |buffer numSamples val|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   715
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   716
    "allocate memory for 1sec playing time"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   717
    numSamples := self sampleRate.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   718
    buffer := ByteArray new:numSamples.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   719
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   720
    "fill it with a sine wave"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   721
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   722
    1 to:numSamples do:[:i |
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   723
        val := (440 * 2 * (Float pi) * i / numSamples) sin.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   724
        val := val * 127 + 128.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   725
        buffer at:i put:val rounded
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   726
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   727
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   728
    "play 3 seconds"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   729
    1 to:3 do:[:s |
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   730
        self nextPutBytes:numSamples from:buffer
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   731
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   732
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   733
    "SoundStream writing tuneTone synchronizeOutput close"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   734
! !