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