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