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