SoundStream.st
author Claus Gittinger <cg@exept.de>
Fri, 17 Nov 1995 17:54:08 +0100
changeset 121 606a3ccd3682
parent 112 3e18f2cfe430
child 152 89d93f115cb8
permissions -rw-r--r--
linux fixes (cut off when closing)
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
"
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    62
!
45
claus
parents: 36
diff changeset
    63
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    64
version
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    65
^ '$Header: /cvs/stx/stx/libbasic2/SoundStream.st,v 1.18 1995-11-17 16:54:08 cg Exp $'! !
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:[
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    82
        "soundblaster special kludge to avoid click"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    83
        RampOff isNil ifTrue:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    84
            self generateRamp
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
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:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   430
        totalCount := totalCount + count.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   431
        soundStream nextPutBytes:count from:buffer.
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
    ].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   498
%{ 
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   499
#ifdef IRIS_AUDIO
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   500
    ALcloseport(_ALportVal(_INST(filePointer)));
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   501
#endif
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   502
%}
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   503
! !
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:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   569
        "/
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   570
        "/ sunos or linux
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   571
        "/
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
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:[
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   576
        "no device, use special library calls"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
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:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   592
        ^ self closeFile
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
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   615
nextBytes:count into:anObject startingAt:start
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   616
    "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
   617
     bytes read or nil on error.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   618
     Use with ByteArrays only."
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
%{
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   621
#ifdef IRIS_AUDIO
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   622
  {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   623
    ALport p;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   624
    int cnt, offs;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   625
    int objSize;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   626
    char *cp;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   627
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   628
    if (_INST(filePointer) != nil) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   629
	if (_INST(mode) != _writeonly) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   630
	    if (__bothSmallInteger(count, start)) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   631
		cnt = _intVal(count);
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   632
		offs = _intVal(start) - 1;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   633
		p = _ALportVal(_INST(filePointer));
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   634
		objSize = _Size(anObject) - OHDR_SIZE;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   635
		if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   636
		    cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   637
		    if (_INST(bitsPerSample) == _MKSMALLINT(16))
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   638
			ALreadsamps(p, cp, cnt / 2);
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   639
		    else
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   640
			ALreadsamps(p, cp, cnt);
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   641
		    RETURN ( _MKSMALLINT(cnt) );
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
	}
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
#endif
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   648
%}
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
    OperatingSystem getOSType = 'irix' ifFalse:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   651
	^ super nextPutBytes:count from:anObject startingAt:start
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   652
    ].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   653
    filePointer isNil ifTrue:[^ self errorNotOpen].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   654
    (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   655
    self primitiveFailed
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   656
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   657
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   658
nextPutBytes:count from:anObject startingAt:start
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   659
    "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
   660
     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
   661
     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
   662
     (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
   663
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   664
%{
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   665
#ifdef IRIS_AUDIO
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   666
  {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   667
    ALport p;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   668
    int cnt, offs;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   669
    int objSize;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   670
    char *cp;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   671
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   672
    if (_INST(filePointer) != nil) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   673
	if (_INST(mode) != _readonly) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   674
	    if (__bothSmallInteger(count, start)) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   675
		cnt = _intVal(count);
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   676
		offs = _intVal(start) - 1;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   677
		p = _ALportVal(_INST(filePointer));
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
		/*
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   680
		 * compute number of samples
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   681
		 */
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   682
		objSize = _Size(anObject) - OHDR_SIZE;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   683
		if ( (offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs)) ) {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   684
		    cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   685
		    if (_INST(bitsPerSample) == _MKSMALLINT(16))
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   686
			ALwritesamps(p, cp, cnt / 2);
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   687
		    else
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   688
			ALwritesamps(p, cp, cnt);
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   689
		    RETURN ( _MKSMALLINT(cnt) );
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
	}
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
#endif
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   696
%}
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
    OperatingSystem getOSType = 'irix' ifFalse:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   699
	^ super nextPutBytes:count from:anObject startingAt:start
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   700
    ].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   701
    filePointer isNil ifTrue:[^ self errorNotOpen].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   702
    (mode == #readonly) ifTrue:[^ self errorReadOnly].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   703
    self primitiveFailed
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   704
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   705
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   706
openWithMode:aMode
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   707
    OperatingSystem getOSType = 'irix' ifFalse:[
45
claus
parents: 36
diff changeset
   708
	"its a regular file open"
claus
parents: 36
diff changeset
   709
	^ super openWithMode:aMode
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   710
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   711
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   712
    ((aMode = 'r') or:[aMode = 'w']) ifFalse:[
45
claus
parents: 36
diff changeset
   713
	self error:'invalid mode'.
claus
parents: 36
diff changeset
   714
	^ nil
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   715
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   716
%{
36
d046fe84ea67 *** empty log message ***
claus
parents: 31
diff changeset
   717
#ifdef IRIS_AUDIO
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   718
  {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   719
    ALconfig config;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   720
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   721
    long params[] = {
45
claus
parents: 36
diff changeset
   722
	AL_INPUT_SOURCE, AL_INPUT_MIC,
claus
parents: 36
diff changeset
   723
	AL_INPUT_RATE, 8000,
claus
parents: 36
diff changeset
   724
	AL_OUTPUT_RATE, 8000,
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   725
    };
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   726
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   727
    config = ALnewconfig();
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   728
    if (_INST(numberOfChannels) == _MKSMALLINT(2))
45
claus
parents: 36
diff changeset
   729
	ALsetchannels(config, AL_STEREO);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   730
    else
45
claus
parents: 36
diff changeset
   731
	ALsetchannels(config, AL_MONO);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   732
    if (_INST(bitsPerSample) == _MKSMALLINT(16))
45
claus
parents: 36
diff changeset
   733
	ALsetwidth(config, AL_SAMPLE_16);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   734
    else
45
claus
parents: 36
diff changeset
   735
	ALsetwidth(config, AL_SAMPLE_8);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   736
58
bd6753bf0401 *** empty log message ***
claus
parents: 51
diff changeset
   737
    if (__isSmallInteger(_INST(sampleRate)))
45
claus
parents: 36
diff changeset
   738
	params[3] = params[5] = _intVal(_INST(sampleRate));
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   739
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   740
    ALsetparams(AL_DEFAULT_DEVICE, params, 6);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   741
    p = ALopenport("smallchat", (char *)_stringVal(aMode), config);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   742
    if (p) {
110
7af19ae8693b use new FILE* wrapper macros (based on externalAddress)
Claus Gittinger <cg@exept.de>
parents: 85
diff changeset
   743
	_INST(filePointer) = __MKOBJ(p);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   744
    } else {
45
claus
parents: 36
diff changeset
   745
	_INST(filePointer) = nil;
claus
parents: 36
diff changeset
   746
	RETURN (nil);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   747
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   748
    _INST(binary) = true;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   749
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   750
    ALfreeconfig(config);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   751
    /*
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   752
     * get the parameters actually installed
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   753
     */
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   754
    config = ALgetconfig(p);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   755
    switch (ALgetchannels(config)) {
45
claus
parents: 36
diff changeset
   756
	default:
claus
parents: 36
diff changeset
   757
	    /* cannot happen */
claus
parents: 36
diff changeset
   758
	case AL_MONO:
claus
parents: 36
diff changeset
   759
	    _INST(numberOfChannels) = _MKSMALLINT(1);
claus
parents: 36
diff changeset
   760
	    break;
claus
parents: 36
diff changeset
   761
	case AL_STEREO:
claus
parents: 36
diff changeset
   762
	    _INST(numberOfChannels) = _MKSMALLINT(2);
claus
parents: 36
diff changeset
   763
	    break;
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   764
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   765
    switch (ALgetwidth(config)) {
45
claus
parents: 36
diff changeset
   766
	default:
claus
parents: 36
diff changeset
   767
	    /* cannot happen */
claus
parents: 36
diff changeset
   768
	case AL_SAMPLE_8:
claus
parents: 36
diff changeset
   769
	    _INST(bitsPerSample) = _MKSMALLINT(8);
claus
parents: 36
diff changeset
   770
	    break;
claus
parents: 36
diff changeset
   771
	case AL_SAMPLE_16:
claus
parents: 36
diff changeset
   772
	    _INST(bitsPerSample) = _MKSMALLINT(16);
claus
parents: 36
diff changeset
   773
	    break;
claus
parents: 36
diff changeset
   774
	case AL_SAMPLE_24:
claus
parents: 36
diff changeset
   775
	    _INST(bitsPerSample) = _MKSMALLINT(24);
claus
parents: 36
diff changeset
   776
	    break;
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   777
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   778
    ALgetparams(AL_DEFAULT_DEVICE, params, 6);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   779
    _INST(sampleRate) = _MKSMALLINT(params[3]);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   780
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   781
    ALfreeconfig(config);
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   782
  }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   783
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   784
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   785
.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   786
    ^ self
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   787
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   788
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   789
synchronizeOutput
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   790
    "wait until all sound has been played"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   791
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   792
%{ 
36
d046fe84ea67 *** empty log message ***
claus
parents: 31
diff changeset
   793
#ifdef IRIS_AUDIO
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   794
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   795
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   796
    if (_INST(filePointer) != nil) {
110
7af19ae8693b use new FILE* wrapper macros (based on externalAddress)
Claus Gittinger <cg@exept.de>
parents: 85
diff changeset
   797
	p = _ALportVal(_INST(filePointer));
45
claus
parents: 36
diff changeset
   798
	while (ALgetfilled(p) > 0) {
claus
parents: 36
diff changeset
   799
	    sginap(1);
claus
parents: 36
diff changeset
   800
	}
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   801
    }
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   802
#endif
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   803
%}
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   804
.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   805
    OperatingSystem getOSType = 'irix' ifFalse:[
45
claus
parents: 36
diff changeset
   806
	"dont know how to wait"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   807
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   808
    ^ self
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   809
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   810
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   811
!SoundStream methodsFor:'sine wave generation'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   812
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   813
tuneTone
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
   814
    |buffer numSamples val scale|
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   815
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   816
    "allocate memory for 1sec playing time"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   817
    numSamples := self sampleRate.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   818
    buffer := ByteArray new:numSamples.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   819
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   820
    "fill it with a sine wave"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   821
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
   822
    scale := 440 * 2 * (Float pi).
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   823
    1 to:numSamples do:[:i |
45
claus
parents: 36
diff changeset
   824
	val := (scale * i / numSamples) sin.
claus
parents: 36
diff changeset
   825
	val := (val * 127 + 128) rounded.
claus
parents: 36
diff changeset
   826
	buffer at:i put:val
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   827
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   828
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
   829
    buffer inspect.
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
   830
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   831
    1 to:3 do:[:s |
45
claus
parents: 36
diff changeset
   832
	self nextPutBytes:numSamples from:buffer
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   833
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   834
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
   835
    "SoundStream writing tuneTone"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   836
! !
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   837