SoundStream.st
author Claus Gittinger <cg@exept.de>
Wed, 10 Dec 1997 12:42:30 +0100
changeset 592 7daa4b2db7eb
parent 575 f1fc72870c72
child 593 719f9d1c7bbb
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
1f66800df351 *** empty log message ***
claus
parents: 3
diff changeset
     1
"
1f66800df351 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
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>
575
f1fc72870c72 eliminate MKOBJ & MKCP (use MKEXTERNALADDRESS & externalAddressVal)
Claus Gittinger <cg@exept.de>
parents: 353
diff changeset
    30
# define _ALportVal(o)  (ALport)(__externalAddressVal(o))
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    31
#endif
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    32
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    33
#ifdef LINUX
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    34
# include <sys/soundcard.h>
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    35
#endif
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    36
%}
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    37
! !
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    38
28
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    39
!SoundStream class methodsFor:'documentation'!
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    40
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    41
copyright
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    42
"
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    43
 COPYRIGHT (c) 1993 by Claus Gittinger
45
claus
parents: 36
diff changeset
    44
	      All Rights Reserved
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    45
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    46
 This software is furnished under a license and may be used
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    47
 only in accordance with the terms of that license and with the
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    48
 inclusion of the above copyright notice.   This software may not
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    49
 be provided or otherwise made available to, or used by, any
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    50
 other person.  No title to or ownership of the software is
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    51
 hereby transferred.
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    52
"
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    53
!
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    54
28
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    55
documentation
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    56
"
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    57
    Preliminary (unfinished) interface to audio device.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    58
    Currently works with LINUX,sun /dev/audio driver and
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    59
    IRIX (indy). 
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    60
    On iris default setup is 8 bit mono
28
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    61
    so I can play the standard sound files I have here.
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    62
    It needs much more work, for stereo, different sampling rates etc.
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    63
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    64
    This is an experimental class - its interface & implementation
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    65
    may change in the future.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
    66
31
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    67
    see companion classes VocBrowser and VocView in fileIn-directory for
e223f3cf2995 *** empty log message ***
claus
parents: 28
diff changeset
    68
    how to use this class.
259
6d36f3ac42a2 documentation
Claus Gittinger <cg@exept.de>
parents: 217
diff changeset
    69
6d36f3ac42a2 documentation
Claus Gittinger <cg@exept.de>
parents: 217
diff changeset
    70
    [author:]
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
    71
	Claus Gittinger
28
350f8e9493a4 *** empty log message ***
claus
parents: 15
diff changeset
    72
"
152
89d93f115cb8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 121
diff changeset
    73
! !
45
claus
parents: 36
diff changeset
    74
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    75
!SoundStream class methodsFor:'instance creation'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    76
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    77
reading
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    78
    |newStream|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    79
    newStream := (self basicNew) initialize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    80
    newStream openForReading isNil ifTrue:[^nil].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    81
    ^ newStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    82
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    83
    "SoundStream reading"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    84
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    85
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    86
writing
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    87
    |newStream|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    88
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    89
    OperatingSystem getCPUType = '386' ifTrue:[
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
    90
	"soundblaster special kludge to avoid click"
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
    91
	RampOff isNil ifTrue:[
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
    92
	    self generateRamp
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
    93
	]
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    94
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    95
    newStream := (self basicNew) initialize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    96
    newStream openForWriting isNil ifTrue:[^nil].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    97
    ^ newStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
    98
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
    99
    "
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   100
     SoundStream writing
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   101
    "
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   102
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   103
    "Created: 17.11.1995 / 17:25:42 / cg"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   104
!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   105
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   106
writing16BitStero
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   107
    "just an example, has never been tried (I also
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   108
     have no samples for this ... leave it as an exercise)"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   109
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   110
    |newStream|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   111
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   112
    OperatingSystem getCPUType = 'irix' ifFalse:[
45
claus
parents: 36
diff changeset
   113
	self error:'unsupported audio mode'.
claus
parents: 36
diff changeset
   114
	^ nil
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   115
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   116
    newStream := (self basicNew) initialize.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   117
    newStream bitsPerSample:16.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   118
    newStream numberOfChannels:2.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   119
    newStream openForWriting isNil ifTrue:[^nil].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   120
    ^ newStream
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   121
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   122
    "SoundStream writing16BitStereo"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   123
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   124
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   125
!SoundStream class methodsFor:'conversion helpers'!
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   126
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   127
uLawToLinear16:uLawValue
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   128
    "given a uLaw byte, return the decoded signed 16bit value.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   129
     Currently unused - but will be"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   130
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   131
    ^ #(
45
claus
parents: 36
diff changeset
   132
	"0  "     -32256
claus
parents: 36
diff changeset
   133
	"1  "     -31228
claus
parents: 36
diff changeset
   134
	"2  "     -30200
claus
parents: 36
diff changeset
   135
	"3  "     -29172
claus
parents: 36
diff changeset
   136
	"4  "     -28143
claus
parents: 36
diff changeset
   137
	"5  "     -27115
claus
parents: 36
diff changeset
   138
	"6  "     -26087
claus
parents: 36
diff changeset
   139
	"7  "     -25059
claus
parents: 36
diff changeset
   140
	"8  "     -24031
claus
parents: 36
diff changeset
   141
	"9  "     -23002
claus
parents: 36
diff changeset
   142
	"10 "     -21974
claus
parents: 36
diff changeset
   143
	"11 "     -20946
claus
parents: 36
diff changeset
   144
	"12 "     -19918
claus
parents: 36
diff changeset
   145
	"13 "     -18889
claus
parents: 36
diff changeset
   146
	"14 "     -17861
claus
parents: 36
diff changeset
   147
	"15 "     -16833
claus
parents: 36
diff changeset
   148
	"16 "     -16062
claus
parents: 36
diff changeset
   149
	"17 "     -15548
claus
parents: 36
diff changeset
   150
	"18 "     -15033
claus
parents: 36
diff changeset
   151
	"19 "     -14519
claus
parents: 36
diff changeset
   152
	"20 "     -14005
claus
parents: 36
diff changeset
   153
	"21 "     -13491
claus
parents: 36
diff changeset
   154
	"22 "     -12977
claus
parents: 36
diff changeset
   155
	"23 "     -12463
claus
parents: 36
diff changeset
   156
	"24 "     -11949
claus
parents: 36
diff changeset
   157
	"25 "     -11435
claus
parents: 36
diff changeset
   158
	"26 "     -10920
claus
parents: 36
diff changeset
   159
	"27 "     -10406
claus
parents: 36
diff changeset
   160
	"28 "     -9892
claus
parents: 36
diff changeset
   161
	"29 "     -9378
claus
parents: 36
diff changeset
   162
	"30 "     -8864
claus
parents: 36
diff changeset
   163
	"31 "     -8350
claus
parents: 36
diff changeset
   164
	"32 "     -7964
claus
parents: 36
diff changeset
   165
	"33 "     -7707
claus
parents: 36
diff changeset
   166
	"34 "     -7450
claus
parents: 36
diff changeset
   167
	"35 "     -7193
claus
parents: 36
diff changeset
   168
	"36 "     -6936
claus
parents: 36
diff changeset
   169
	"37 "     -6679
claus
parents: 36
diff changeset
   170
	"38 "     -6422
claus
parents: 36
diff changeset
   171
	"39 "     -6165
claus
parents: 36
diff changeset
   172
	"40 "     -5908
claus
parents: 36
diff changeset
   173
	"41 "     -5651
claus
parents: 36
diff changeset
   174
	"42 "     -5394
claus
parents: 36
diff changeset
   175
	"43 "     -5137
claus
parents: 36
diff changeset
   176
	"44 "     -4880
claus
parents: 36
diff changeset
   177
	"45 "     -4623
claus
parents: 36
diff changeset
   178
	"46 "     -4365
claus
parents: 36
diff changeset
   179
	"47 "     -4108
claus
parents: 36
diff changeset
   180
	"48 "     -3916
claus
parents: 36
diff changeset
   181
	"49 "     -3787
claus
parents: 36
diff changeset
   182
	"50 "     -3659
claus
parents: 36
diff changeset
   183
	"51 "     -3530
claus
parents: 36
diff changeset
   184
	"52 "     -3402
claus
parents: 36
diff changeset
   185
	"53 "     -3273
claus
parents: 36
diff changeset
   186
	"54 "     -3144
claus
parents: 36
diff changeset
   187
	"55 "     -3016
claus
parents: 36
diff changeset
   188
	"56 "     -2887
claus
parents: 36
diff changeset
   189
	"57 "     -2759
claus
parents: 36
diff changeset
   190
	"58 "     -2630
claus
parents: 36
diff changeset
   191
	"59 "     -2502
claus
parents: 36
diff changeset
   192
	"60 "     -2373
claus
parents: 36
diff changeset
   193
	"61 "     -2245
claus
parents: 36
diff changeset
   194
	"62 "     -2116
claus
parents: 36
diff changeset
   195
	"63 "     -1988
claus
parents: 36
diff changeset
   196
	"64 "     -1891
claus
parents: 36
diff changeset
   197
	"65 "     -1827
claus
parents: 36
diff changeset
   198
	"66 "     -1763
claus
parents: 36
diff changeset
   199
	"67 "     -1698
claus
parents: 36
diff changeset
   200
	"68 "     -1634
claus
parents: 36
diff changeset
   201
	"69 "     -1570
claus
parents: 36
diff changeset
   202
	"70 "     -1506
claus
parents: 36
diff changeset
   203
	"71 "     -1441
claus
parents: 36
diff changeset
   204
	"72 "     -1377
claus
parents: 36
diff changeset
   205
	"73 "     -1313
claus
parents: 36
diff changeset
   206
	"74 "     -1249
claus
parents: 36
diff changeset
   207
	"75 "     -1184
claus
parents: 36
diff changeset
   208
	"76 "     -1120
claus
parents: 36
diff changeset
   209
	"77 "     -1056
claus
parents: 36
diff changeset
   210
	"78 "     -992
claus
parents: 36
diff changeset
   211
	"79 "     -927
claus
parents: 36
diff changeset
   212
	"80 "     -879
claus
parents: 36
diff changeset
   213
	"81 "     -847
claus
parents: 36
diff changeset
   214
	"82 "     -815
claus
parents: 36
diff changeset
   215
	"83 "     -783
claus
parents: 36
diff changeset
   216
	"84 "     -751
claus
parents: 36
diff changeset
   217
	"85 "     -718
claus
parents: 36
diff changeset
   218
	"86 "     -686
claus
parents: 36
diff changeset
   219
	"87 "     -654
claus
parents: 36
diff changeset
   220
	"88 "     -622
claus
parents: 36
diff changeset
   221
	"89 "     -590
claus
parents: 36
diff changeset
   222
	"90 "     -558
claus
parents: 36
diff changeset
   223
	"91 "     -526
claus
parents: 36
diff changeset
   224
	"92 "     -494
claus
parents: 36
diff changeset
   225
	"93 "     -461
claus
parents: 36
diff changeset
   226
	"94 "     -429
claus
parents: 36
diff changeset
   227
	"95 "     -397
claus
parents: 36
diff changeset
   228
	"96 "     -373
claus
parents: 36
diff changeset
   229
	"97 "     -357
claus
parents: 36
diff changeset
   230
	"98 "     -341
claus
parents: 36
diff changeset
   231
	"99 "     -325
claus
parents: 36
diff changeset
   232
	"100"     -309
claus
parents: 36
diff changeset
   233
	"101"     -293
claus
parents: 36
diff changeset
   234
	"102"     -277
claus
parents: 36
diff changeset
   235
	"103"     -261
claus
parents: 36
diff changeset
   236
	"104"     -245
claus
parents: 36
diff changeset
   237
	"105"     -228
claus
parents: 36
diff changeset
   238
	"106"     -212
claus
parents: 36
diff changeset
   239
	"107"     -196
claus
parents: 36
diff changeset
   240
	"108"     -180
claus
parents: 36
diff changeset
   241
	"109"     -164
claus
parents: 36
diff changeset
   242
	"110"     -148
claus
parents: 36
diff changeset
   243
	"111"     -132
claus
parents: 36
diff changeset
   244
	"112"     -120
claus
parents: 36
diff changeset
   245
	"113"     -112
claus
parents: 36
diff changeset
   246
	"114"     -104
claus
parents: 36
diff changeset
   247
	"115"     -96
claus
parents: 36
diff changeset
   248
	"116"     -88
claus
parents: 36
diff changeset
   249
	"117"     -80
claus
parents: 36
diff changeset
   250
	"118"     -72
claus
parents: 36
diff changeset
   251
	"119"     -64
claus
parents: 36
diff changeset
   252
	"120"     -56
claus
parents: 36
diff changeset
   253
	"121"     -48
claus
parents: 36
diff changeset
   254
	"122"     -40
claus
parents: 36
diff changeset
   255
	"123"     -32
claus
parents: 36
diff changeset
   256
	"124"     -24
claus
parents: 36
diff changeset
   257
	"125"     -16
claus
parents: 36
diff changeset
   258
	"126"     -8
claus
parents: 36
diff changeset
   259
	"127"     0
claus
parents: 36
diff changeset
   260
	"128"     32256
claus
parents: 36
diff changeset
   261
	"129"     31228
claus
parents: 36
diff changeset
   262
	"130"     30200
claus
parents: 36
diff changeset
   263
	"131"     29172
claus
parents: 36
diff changeset
   264
	"132"     28143
claus
parents: 36
diff changeset
   265
	"133"     27115
claus
parents: 36
diff changeset
   266
	"134"     26087
claus
parents: 36
diff changeset
   267
	"135"     25059
claus
parents: 36
diff changeset
   268
	"136"     24031
claus
parents: 36
diff changeset
   269
	"137"     23002
claus
parents: 36
diff changeset
   270
	"138"     21974
claus
parents: 36
diff changeset
   271
	"139"     20946
claus
parents: 36
diff changeset
   272
	"140"     19918
claus
parents: 36
diff changeset
   273
	"141"     18889
claus
parents: 36
diff changeset
   274
	"142"     17861
claus
parents: 36
diff changeset
   275
	"143"     16833
claus
parents: 36
diff changeset
   276
	"144"     16062
claus
parents: 36
diff changeset
   277
	"145"     15548
claus
parents: 36
diff changeset
   278
	"146"     15033
claus
parents: 36
diff changeset
   279
	"147"     14519
claus
parents: 36
diff changeset
   280
	"148"     14005
claus
parents: 36
diff changeset
   281
	"149"     13491
claus
parents: 36
diff changeset
   282
	"150"     12977
claus
parents: 36
diff changeset
   283
	"151"     12463
claus
parents: 36
diff changeset
   284
	"152"     11949
claus
parents: 36
diff changeset
   285
	"153"     11435
claus
parents: 36
diff changeset
   286
	"154"     10920
claus
parents: 36
diff changeset
   287
	"155"     10406
claus
parents: 36
diff changeset
   288
	"156"     9892
claus
parents: 36
diff changeset
   289
	"157"     9378
claus
parents: 36
diff changeset
   290
	"158"     8864
claus
parents: 36
diff changeset
   291
	"159"     8350
claus
parents: 36
diff changeset
   292
	"160"     7964
claus
parents: 36
diff changeset
   293
	"161"     7707
claus
parents: 36
diff changeset
   294
	"162"     7450
claus
parents: 36
diff changeset
   295
	"163"     7193
claus
parents: 36
diff changeset
   296
	"164"     6936
claus
parents: 36
diff changeset
   297
	"165"     6679
claus
parents: 36
diff changeset
   298
	"166"     6422
claus
parents: 36
diff changeset
   299
	"167"     6165
claus
parents: 36
diff changeset
   300
	"168"     5908
claus
parents: 36
diff changeset
   301
	"169"     5651
claus
parents: 36
diff changeset
   302
	"170"     5394
claus
parents: 36
diff changeset
   303
	"171"     5137
claus
parents: 36
diff changeset
   304
	"172"     4880
claus
parents: 36
diff changeset
   305
	"173"     4623
claus
parents: 36
diff changeset
   306
	"174"     4365
claus
parents: 36
diff changeset
   307
	"175"     4108
claus
parents: 36
diff changeset
   308
	"176"     3916
claus
parents: 36
diff changeset
   309
	"177"     3787
claus
parents: 36
diff changeset
   310
	"178"     3659
claus
parents: 36
diff changeset
   311
	"179"     3530
claus
parents: 36
diff changeset
   312
	"180"     3402
claus
parents: 36
diff changeset
   313
	"181"     3273
claus
parents: 36
diff changeset
   314
	"182"     3144
claus
parents: 36
diff changeset
   315
	"183"     3016
claus
parents: 36
diff changeset
   316
	"184"     2887
claus
parents: 36
diff changeset
   317
	"185"     2759
claus
parents: 36
diff changeset
   318
	"186"     2630
claus
parents: 36
diff changeset
   319
	"187"     2502
claus
parents: 36
diff changeset
   320
	"188"     2373
claus
parents: 36
diff changeset
   321
	"189"     2245
claus
parents: 36
diff changeset
   322
	"190"     2116
claus
parents: 36
diff changeset
   323
	"191"     1988
claus
parents: 36
diff changeset
   324
	"192"     1891
claus
parents: 36
diff changeset
   325
	"193"     1827
claus
parents: 36
diff changeset
   326
	"194"     1763
claus
parents: 36
diff changeset
   327
	"195"     1698
claus
parents: 36
diff changeset
   328
	"196"     1634
claus
parents: 36
diff changeset
   329
	"197"     1570
claus
parents: 36
diff changeset
   330
	"198"     1506
claus
parents: 36
diff changeset
   331
	"199"     1441
claus
parents: 36
diff changeset
   332
	"200"     1377
claus
parents: 36
diff changeset
   333
	"201"     1313
claus
parents: 36
diff changeset
   334
	"202"     1249
claus
parents: 36
diff changeset
   335
	"203"     1184
claus
parents: 36
diff changeset
   336
	"204"     1120
claus
parents: 36
diff changeset
   337
	"205"     1056
claus
parents: 36
diff changeset
   338
	"206"     992
claus
parents: 36
diff changeset
   339
	"207"     927
claus
parents: 36
diff changeset
   340
	"208"     879
claus
parents: 36
diff changeset
   341
	"209"     847
claus
parents: 36
diff changeset
   342
	"210"     815
claus
parents: 36
diff changeset
   343
	"211"     783
claus
parents: 36
diff changeset
   344
	"212"     751
claus
parents: 36
diff changeset
   345
	"213"     718
claus
parents: 36
diff changeset
   346
	"214"     686
claus
parents: 36
diff changeset
   347
	"215"     654
claus
parents: 36
diff changeset
   348
	"216"     622
claus
parents: 36
diff changeset
   349
	"217"     590
claus
parents: 36
diff changeset
   350
	"218"     558
claus
parents: 36
diff changeset
   351
	"219"     526
claus
parents: 36
diff changeset
   352
	"220"     494
claus
parents: 36
diff changeset
   353
	"221"     461
claus
parents: 36
diff changeset
   354
	"222"     429
claus
parents: 36
diff changeset
   355
	"223"     397
claus
parents: 36
diff changeset
   356
	"224"     373
claus
parents: 36
diff changeset
   357
	"225"     357
claus
parents: 36
diff changeset
   358
	"226"     341
claus
parents: 36
diff changeset
   359
	"227"     325
claus
parents: 36
diff changeset
   360
	"228"     309
claus
parents: 36
diff changeset
   361
	"229"     293
claus
parents: 36
diff changeset
   362
	"230"     277
claus
parents: 36
diff changeset
   363
	"231"     261
claus
parents: 36
diff changeset
   364
	"232"     245
claus
parents: 36
diff changeset
   365
	"233"     228
claus
parents: 36
diff changeset
   366
	"234"     212
claus
parents: 36
diff changeset
   367
	"235"     196
claus
parents: 36
diff changeset
   368
	"236"     180
claus
parents: 36
diff changeset
   369
	"237"     164
claus
parents: 36
diff changeset
   370
	"238"     148
claus
parents: 36
diff changeset
   371
	"239"     132
claus
parents: 36
diff changeset
   372
	"240"     120
claus
parents: 36
diff changeset
   373
	"241"     112
claus
parents: 36
diff changeset
   374
	"242"     104
claus
parents: 36
diff changeset
   375
	"243"     96
claus
parents: 36
diff changeset
   376
	"244"     88
claus
parents: 36
diff changeset
   377
	"245"     80
claus
parents: 36
diff changeset
   378
	"246"     72
claus
parents: 36
diff changeset
   379
	"247"     64
claus
parents: 36
diff changeset
   380
	"248"     56
claus
parents: 36
diff changeset
   381
	"249"     48
claus
parents: 36
diff changeset
   382
	"250"     40
claus
parents: 36
diff changeset
   383
	"251"     32
claus
parents: 36
diff changeset
   384
	"252"     24
claus
parents: 36
diff changeset
   385
	"253"     16
claus
parents: 36
diff changeset
   386
	"254"     8
claus
parents: 36
diff changeset
   387
	"255"     0
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   388
    ) at:(uLawValue + 1)
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   389
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   390
    "Modified: / 9.12.1997 / 16:34:17 / cg"
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   391
!
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   392
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   393
linear16ToUlaw:a16bitSignedValue
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   394
    "given a 16it signed value, encode into uLaw byte"
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   395
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   396
    |absVal sign exp mantissa byte|
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   397
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   398
%{
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   399
    /*
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   400
     * so heavily used when playing sounds ...
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   401
     * made it a primitive.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   402
     */
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   403
    if (__isSmallInteger(a16bitSignedValue)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   404
	int __sign = 0;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   405
	int __absVal = __intVal(a16bitSignedValue);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   406
	int __exp, __mantissa, __byte;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   407
	static char __uLawExp[] = 
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   408
		    {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   409
			0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   410
			5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   411
			6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   412
			6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   413
			7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   414
			7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   415
			7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   416
			7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   417
		    };
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   418
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   419
	if (__absVal < 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   420
	    if (__absVal <= -32256) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   421
		RETURN (__MKSMALLINT(0));
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   422
	    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   423
	    __absVal = -__absVal;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   424
	    __sign = 0x80;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   425
	} else {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   426
	    if (__absVal >= 32256) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   427
		RETURN (__MKSMALLINT(128));
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   428
	    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   429
	}
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   430
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   431
	__exp = __uLawExp[__absVal >> 8];
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   432
	__mantissa = (__absVal >> (__exp+3)) & 0xF;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   433
	__byte = ~(__sign | (__exp<<4) | __mantissa) & 0xFF;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   434
	RETURN (__MKSMALLINT(__byte));
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   435
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   436
%}.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   437
    "/
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   438
    "/ fallback for non-integral argument
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   439
    "/
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   440
    sign := 0.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   441
    (absVal := a16bitSignedValue asInteger) < 0 ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   442
	(absVal <= -32256) ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   443
	    ^ 0
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   444
	].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   445
	absVal := absVal negated.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   446
	sign := 16r80
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   447
    ] ifFalse:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   448
	absVal >= 32256 ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   449
	    ^ 128
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   450
	]
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   451
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   452
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   453
    exp := #[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   454
	      0 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   455
	      5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   456
	      6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   457
	      6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   458
	      7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   459
	      7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   460
	      7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   461
	      7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   462
           ] at:(absVal bitShift:-1)+1.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   463
    mantissa := (absVal bitShift:(exp+3) negated) bitAnd:16r0F.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   464
    byte := ((sign bitOr:(exp bitShift:4)) bitOr:mantissa) bitInvert bitAnd:16rFF.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   465
    ^ byte
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   466
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   467
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   468
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:0)    
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   469
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:32256)   
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   470
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:-32256)  
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   471
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:32767) 
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   472
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:-32767)
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   473
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:100)   
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   474
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:-100)  
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   475
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:104)   
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   476
     SoundStream uLawToLinear16:(SoundStream linear16ToUlaw:-104)  
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   477
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   478
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   479
    "Modified: / 9.12.1997 / 16:46:24 / cg"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   480
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   481
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   482
!SoundStream class methodsFor:'default values'!
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
blockSize
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   485
    "a good chunk size to read soundstream.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   486
     Some devices may force a specific size ..."
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   487
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   488
    ^ 2048 "about 1/4 of a second" 
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
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   491
defaultBitsPerSample
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   492
    "minimum, supported by all audio systems"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   493
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   494
    ^ 8
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   495
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   496
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   497
defaultMode
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   498
    ^ #linear "planned is at least uLaw"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   499
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   500
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   501
defaultNumberOfChannels
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   502
    "minimum, supported by all audio systems"
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
    ^ 1
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   505
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   506
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   507
defaultSampleRate
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   508
    "minimum, supported by all audio systems"
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
    ^ 8000
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
!SoundStream class methodsFor:'playing'!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   514
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   515
playSoundFile:aFilename
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   516
    |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
   517
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   518
    inStream := aFilename asFilename readStream.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   519
    inStream isNil ifTrue:[^ self].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   520
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   521
    soundStream := self writing.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   522
    soundStream isNil ifTrue:[^ self].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   523
    soundStream buffered:false.
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
    startTime := AbsoluteTime now.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   526
    totalCount := 0.
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
    buffer := ByteArray new:4096.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   529
    [(count := inStream nextBytesInto:buffer) > 0] whileTrue:[
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   530
	totalCount := totalCount + count.
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   531
	soundStream nextPutBytes:count from:buffer.
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   532
    ].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   533
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   534
    inStream close.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   535
    soundStream commit.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   536
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   537
    "/
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   538
    "/ 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
   539
    "/
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   540
    playTime := totalCount / soundStream sampleRate.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   541
    delayedTime := (AbsoluteTime now - startTime).
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   542
    waitTime := playTime - delayedTime + 0.1.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   543
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   544
    (Delay forSeconds:waitTime) wait.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   545
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   546
    soundStream close.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   547
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   548
    "
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   549
     SoundStream playSoundFile:'/usr/local/lib/sounds/laugh.snd'
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   550
     SoundStream playSoundFile:'/usr/local/lib/sounds/spacemusic.snd'
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   551
    "
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   552
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   553
    "Created: 17.11.1995 / 17:25:30 / cg"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   554
    "Modified: 17.11.1995 / 17:45:40 / cg"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   555
! !
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   556
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   557
!SoundStream class methodsFor:'private'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   558
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   559
generateRamp
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   560
    "create ramp data (need to be played on soundblaster
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   561
     before closing device to prevent audible click-on/off).
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   562
     This method just fills a buffer with ramp data."
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   563
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   564
    |size div|
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   565
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   566
    size := 256.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   567
    div := size // 128.
11
13c892f36231 *** empty log message ***
claus
parents: 6
diff changeset
   568
    RampOff := ByteArray new:size.
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   569
    1 to:size do:[:index |
11
13c892f36231 *** empty log message ***
claus
parents: 6
diff changeset
   570
       RampOff at:index put:(size - index // div)
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   571
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   572
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   573
    "SoundStream generateRamp"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   574
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   575
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   576
!SoundStream methodsFor:'private'!
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   577
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   578
getSetting
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   579
    |fd blockSize audioFormatMask speed channels stereo
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   580
     supportedFormats
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   581
     supports_MU_LAW supports_A_LAW
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   582
     supports_IMA_ADPCM supports_U8
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   583
     supports_S16_LE supports_S16_BE
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   584
     supports_S8 supports_U16_LE
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   585
     supports_U16_BE supports_MPEG|
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   586
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   587
    fd := self fileDescriptor.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   588
    fd isNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   589
	self error.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   590
	^ nil
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   591
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   592
%{
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   593
    int f = __intVal(fd);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   594
    int __audioFormatMask = 0;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   595
    int __blockSize = -1;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   596
    int __speed = 0;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   597
    int __stereo = 0;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   598
    int __channels = 0;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   599
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   600
#ifdef LINUX
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   601
    if (ioctl(f, SNDCTL_DSP_GETBLKSIZE, &__blockSize) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   602
	blockSize = __MKSMALLINT(__blockSize);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   603
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   604
    if (ioctl(f, SNDCTL_DSP_CHANNELS, &__channels) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   605
	channels = __MKSMALLINT(__channels);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   606
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   607
    if (ioctl(f, SNDCTL_DSP_STEREO, &__stereo) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   608
	stereo = __MKSMALLINT(__stereo);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   609
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   610
    if (ioctl(f, SNDCTL_DSP_SPEED, &__speed) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   611
	speed = __MKSMALLINT(__speed);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   612
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   613
    if (ioctl(f, SNDCTL_DSP_GETFMTS, &__audioFormatMask) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   614
	audioFormatMask = __MKSMALLINT(__audioFormatMask);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   615
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   616
	supports_MU_LAW = (__audioFormatMask & AFMT_MU_LAW) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   617
	supports_A_LAW = (__audioFormatMask & AFMT_A_LAW) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   618
	supports_IMA_ADPCM = (__audioFormatMask & AFMT_IMA_ADPCM) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   619
	supports_U8 = (__audioFormatMask & AFMT_U8) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   620
	supports_S16_LE = (__audioFormatMask & AFMT_S16_LE) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   621
	supports_S16_BE = (__audioFormatMask & AFMT_S16_BE) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   622
	supports_S8 = (__audioFormatMask & AFMT_S8) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   623
	supports_U16_LE = (__audioFormatMask & AFMT_U16_LE) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   624
	supports_U16_BE = (__audioFormatMask & AFMT_U16_BE) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   625
	supports_MPEG = (__audioFormatMask & AFMT_MPEG) ? true : false;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   626
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   627
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   628
#endif
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   629
%}.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   630
    blockSize notNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   631
	Transcript show:'blockSize: '; showCR:blockSize
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   632
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   633
    speed notNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   634
	Transcript show:'speed: '; showCR:speed
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   635
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   636
    channels notNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   637
	Transcript show:'channels: '; showCR:channels
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   638
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   639
    stereo notNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   640
	Transcript show:'stereo: '; showCR:stereo
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   641
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   642
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   643
    audioFormatMask notNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   644
	Transcript show:'audioFormatMask: '; showCR:audioFormatMask hexPrintString
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   645
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   646
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   647
    supportedFormats := IdentitySet new.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   648
    supports_MU_LAW ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   649
	supportedFormats add:#'MU_LAW'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   650
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   651
    supports_A_LAW ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   652
	supportedFormats add:#'A_LAW'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   653
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   654
    supports_IMA_ADPCM ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   655
	supportedFormats add:#'IMA_ADPCM'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   656
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   657
    supports_S8 ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   658
	supportedFormats add:#'S8'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   659
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   660
    supports_U8 ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   661
	supportedFormats add:#'U8'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   662
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   663
    supports_S16_LE ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   664
	supportedFormats add:#'S16_LE'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   665
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   666
    supports_S16_BE ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   667
	supportedFormats add:#'S16_BE'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   668
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   669
    supports_U16_LE ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   670
	supportedFormats add:#'U16_LE'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   671
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   672
    supports_U16_BE ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   673
	supportedFormats add:#'U16_BE'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   674
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   675
    supports_MPEG ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   676
	supportedFormats add:#'MPEG'
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   677
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   678
    Transcript show:'audioFormats: '; showCR:supportedFormats.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   679
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   680
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   681
     self writing getSetting; close
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   682
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   683
!
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   684
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   685
resetSoundCard
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   686
    |fd|
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   687
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   688
    fd := self fileDescriptor.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   689
    fd isNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   690
	self error.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   691
	^ nil
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   692
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   693
%{
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   694
    int f = __intVal(fd);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   695
    int __dummy;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   696
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   697
#ifdef LINUX
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   698
    if (ioctl(f, SNDCTL_DSP_RESET, &__dummy) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   699
	RETURN (true);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   700
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   701
#endif
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   702
%}.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   703
    ^ false
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   704
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   705
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   706
     self writing resetSoundCard; close
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   707
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   708
!
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   709
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   710
setAudioFormat:aSymbol
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   711
    |fd|
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   712
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   713
    fd := self fileDescriptor.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   714
    fd isNil ifTrue:[
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   715
	self error.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   716
	^ nil
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   717
    ].
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   718
%{
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   719
    int f = __intVal(fd);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   720
    int __fmt = 0;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   721
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   722
#ifdef LINUX
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   723
    if (__isSymbol(aSymbol)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   724
	if (aSymbol == @symbol(MU_LAW)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   725
	    __fmt = AFMT_MU_LAW;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   726
	} else if (aSymbol == @symbol(A_LAW)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   727
	    __fmt = AFMT_A_LAW;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   728
	} else if (aSymbol == @symbol(IMA_ADPCM)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   729
	    __fmt = AFMT_IMA_ADPCM;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   730
	} else if (aSymbol == @symbol(U8)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   731
	    __fmt = AFMT_U8;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   732
	} else if (aSymbol == @symbol(S8)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   733
	    __fmt = AFMT_S8;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   734
	} else if (aSymbol == @symbol(U16_LE)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   735
	    __fmt = AFMT_U16_LE;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   736
	} else if (aSymbol == @symbol(U16_BE)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   737
	    __fmt = AFMT_U16_BE;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   738
	} else if (aSymbol == @symbol(S16_LE)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   739
	    __fmt = AFMT_S16_LE;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   740
	} else if (aSymbol == @symbol(S16_BE)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   741
	    __fmt = AFMT_A_LAW;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   742
	} else if (aSymbol == @symbol(MPEG)) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   743
	    __fmt = AFMT_MPEG;
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   744
	} else {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   745
	    RETURN (false);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   746
	}
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   747
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   748
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   749
    if (ioctl(f, SNDCTL_DSP_SETFMT, &__fmt) >= 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   750
	RETURN (true);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   751
    }
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   752
    RETURN (false);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   753
#endif
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   754
%}.
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   755
    ^ false
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   756
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   757
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   758
     self writing setAudioFormat:#'MU_LAW'; close
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   759
    "
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   760
! !
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   761
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   762
!SoundStream methodsFor:'catching invalid methods'!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   763
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   764
pathName:filename
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   765
    "catch pathname access - its fixed here"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   766
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   767
    self shouldNotImplement
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   768
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   769
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   770
pathName:filename in:aDirectory
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   771
    "catch pathname access - its fixed here"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   772
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   773
    self shouldNotImplement
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   774
! !
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   775
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   776
!SoundStream methodsFor:'instance release'!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   777
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   778
closeFile
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   779
    "a stream has been collected - close the file"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   780
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   781
    OperatingSystem getOSType = 'irix' ifFalse:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   782
	^ super closeFile
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   783
    ].
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   784
%{ 
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   785
#ifdef IRIS_AUDIO
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   786
    ALcloseport(_ALportVal(__INST(filePointer)));
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   787
#endif
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   788
%}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   789
! !
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   790
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   791
!SoundStream methodsFor:'mode setting'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   792
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   793
bitsPerSample
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   794
    "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
   795
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   796
    ^ bitsPerSample
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   797
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   798
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   799
bitsPerSample:aNumber
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   800
    "set the number of bits per sample"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   801
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   802
    bitsPerSample := aNumber
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   803
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   804
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   805
numberOfChannels
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   806
    "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
   807
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   808
    ^ numberOfChannels
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   809
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   810
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   811
numberOfChannels:aNumber
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   812
    "set the number of channels"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   813
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   814
    numberOfChannels := aNumber
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   815
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   816
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   817
sampleRate
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   818
    "return the sample rate"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   819
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   820
    ^ sampleRate
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   821
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   822
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   823
sampleRate:aNumber
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   824
    "set the sample rate in hertz - on some
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   825
     devices, this is a nop"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   826
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   827
    OperatingSystem getCPUType = '386' ifTrue:[
45
claus
parents: 36
diff changeset
   828
	"assume sound-blaster device"
claus
parents: 36
diff changeset
   829
	"set sound blasters sample rate"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   830
45
claus
parents: 36
diff changeset
   831
	sampleRate := aNumber.
claus
parents: 36
diff changeset
   832
	self ioctl:1 "DSP_IOCTL_SPEED" with:aNumber
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   833
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   834
    OperatingSystem getOSType = 'sunos' ifTrue:[
45
claus
parents: 36
diff changeset
   835
	"audio sample rate is fix"
claus
parents: 36
diff changeset
   836
	^ self "cannot change"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   837
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   838
    OperatingSystem getOSType = 'irix' ifTrue:[
45
claus
parents: 36
diff changeset
   839
	"could change using ALibrary ...for now, it is fix"
claus
parents: 36
diff changeset
   840
	sampleRate := aNumber.
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   841
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   842
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   843
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   844
!SoundStream methodsFor:'private'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   845
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   846
initialize 
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   847
    "initialize for least common mode"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   848
6
claus
parents: 4
diff changeset
   849
    buffered := false.
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   850
    bitsPerSample := 8.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   851
    numberOfChannels := 1.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   852
    sampleRate := 8000.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   853
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   854
    '/dev/audio' asFilename exists ifTrue:[
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   855
	"/
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   856
	"/ sunos or linux
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   857
	"/
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   858
	pathName := '/dev/audio'.
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   859
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   860
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   861
    OperatingSystem getOSType = 'irix' ifTrue:[
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   862
	"no device, use special library calls"
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   863
	pathName := nil.
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   864
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   865
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   866
"/    OperatingSystem getCPUType = '386' ifTrue:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   867
"/        "this code assumes a PD sound-blaster driver .."
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   868
"/        pathName := '/dev/sbdsp'
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   869
"/    ]
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   870
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   871
    "Created: 17.11.1995 / 17:28:14 / cg"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   872
! !
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   873
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   874
!SoundStream methodsFor:'redefined'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
   875
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   876
close
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   877
    OperatingSystem getOSType = 'irix' ifTrue:[
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   878
	^ self closeFile
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   879
    ].
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   880
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   881
"/    (mode == #writeonly) ifTrue:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   882
"/        "special handling of close on sound blaster,
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   883
"/         turn off voice but continue playing a ramp
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   884
"/         to avoid audible click"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   885
"/
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   886
"/        OperatingSystem getCPUType = '386' ifTrue:[
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   887
"/            "assume sound-blaster device"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   888
"/            self ioctl:2 "DSP_IOCTL_VOICE" with:0.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   889
"/
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   890
"/            "OperatingSystem sleep:3.      "
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   891
"/            "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
   892
"/            super nextPutBytes:(RampOff size) from:RampOff
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   893
"/        ]
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   894
"/    ].    
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   895
    super close
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   896
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   897
    "Created: 17.11.1995 / 17:27:26 / cg"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   898
    "Modified: 17.11.1995 / 17:47:13 / cg"
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   899
!
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   900
274
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   901
flush
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   902
    "wait until all sound has been played"
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   903
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   904
%{ 
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   905
#ifdef IRIS_AUDIO
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   906
    ALport p;
274
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   907
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   908
    if (__INST(filePointer) != nil) {
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   909
	p = _ALportVal(__INST(filePointer));
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   910
	while (ALgetfilled(p) > 0) {
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   911
	    sginap(1);
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
   912
	}
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   913
    }
353
d1b7f731a331 Avoid callong of getOStype.
Stefan Vogel <sv@exept.de>
parents: 277
diff changeset
   914
    RETURN(self);
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   915
#endif
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   916
%}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   917
.
353
d1b7f731a331 Avoid callong of getOStype.
Stefan Vogel <sv@exept.de>
parents: 277
diff changeset
   918
    "dont know how to wait on non-iris systems"
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   919
    ^ self
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   920
!
274
f45bd0d6ea31 Rename synchronizeOutput --> flush.
Stefan Vogel <sv@exept.de>
parents: 259
diff changeset
   921
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   922
nextBytes:count into:anObject startingAt:start
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   923
    "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
   924
     bytes read or nil on error.
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   925
     Use with ByteArrays only."
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   926
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   927
%{
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   928
#ifdef IRIS_AUDIO
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   929
  {
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   930
    ALport p;
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   931
    int cnt, offs;
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   932
    int objSize;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   933
    char *cp;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   934
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   935
    if (__INST(filePointer) != nil) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   936
	if (__INST(mode) != _writeonly) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   937
	    if (__bothSmallInteger(count, start)) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   938
		cnt = _intVal(count);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   939
		offs = _intVal(start) - 1;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   940
		p = _ALportVal(__INST(filePointer));
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   941
		objSize = _Size(anObject) - OHDR_SIZE;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   942
		if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   943
		    cp = (char *)__InstPtr(anObject) + OHDR_SIZE + offs;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   944
		    if (__INST(bitsPerSample) == __MKSMALLINT(16))
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   945
			ALreadsamps(p, cp, cnt / 2);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   946
		    else
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   947
			ALreadsamps(p, cp, cnt);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   948
		    RETURN ( __MKSMALLINT(cnt) );
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   949
		}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   950
	    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   951
	}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   952
    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   953
  }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   954
#endif
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   955
%}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   956
.
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   957
    OperatingSystem getOSType = 'irix' ifFalse:[
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   958
	^ super nextPutBytes:count from:anObject startingAt:start
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   959
    ].
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   960
    filePointer isNil ifTrue:[^ self errorNotOpen].
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   961
    (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   962
    self primitiveFailed
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   963
!
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   964
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   965
nextPutBytes:count from:anObject startingAt:start
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
   966
    "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
   967
     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
   968
     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
   969
     (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
   970
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   971
%{
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   972
#ifdef IRIS_AUDIO
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   973
  {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   974
    ALport p;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   975
    int cnt, offs;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   976
    int objSize;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   977
    char *cp;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   978
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   979
    if (__INST(filePointer) != nil) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   980
	if (__INST(mode) != _readonly) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   981
	    if (__bothSmallInteger(count, start)) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   982
		cnt = _intVal(count);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   983
		offs = _intVal(start) - 1;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   984
		p = _ALportVal(__INST(filePointer));
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   985
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   986
		/*
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   987
		 * compute number of samples
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   988
		 */
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   989
		objSize = _Size(anObject) - OHDR_SIZE;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   990
		if ( (offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs)) ) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   991
		    cp = (char *)__InstPtr(anObject) + OHDR_SIZE + offs;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   992
		    if (__INST(bitsPerSample) == __MKSMALLINT(16))
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   993
			ALwritesamps(p, cp, cnt / 2);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   994
		    else
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   995
			ALwritesamps(p, cp, cnt);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   996
		    RETURN ( __MKSMALLINT(cnt) );
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   997
		}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   998
	    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
   999
	}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1000
    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1001
  }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1002
#endif
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1003
%}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1004
.
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1005
    OperatingSystem getOSType = 'irix' ifFalse:[
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1006
	^ super nextPutBytes:count from:anObject startingAt:start
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1007
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1008
    ].
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1009
    filePointer isNil ifTrue:[^ self errorNotOpen].
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1010
    (mode == #readonly) ifTrue:[^ self errorReadOnly].
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1011
    self primitiveFailed
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1012
!
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
  1013
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1014
openWithMode:aMode
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1015
    OperatingSystem getOSType = 'irix' ifFalse:[
45
claus
parents: 36
diff changeset
  1016
	"its a regular file open"
claus
parents: 36
diff changeset
  1017
	^ super openWithMode:aMode
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1018
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1019
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1020
    ((aMode = 'r') or:[aMode = 'w']) ifFalse:[
45
claus
parents: 36
diff changeset
  1021
	self error:'invalid mode'.
claus
parents: 36
diff changeset
  1022
	^ nil
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1023
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1024
%{
36
d046fe84ea67 *** empty log message ***
claus
parents: 31
diff changeset
  1025
#ifdef IRIS_AUDIO
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1026
  {
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1027
    ALconfig config;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1028
    ALport p;
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1029
    long params[] = {
45
claus
parents: 36
diff changeset
  1030
	AL_INPUT_SOURCE, AL_INPUT_MIC,
claus
parents: 36
diff changeset
  1031
	AL_INPUT_RATE, 8000,
claus
parents: 36
diff changeset
  1032
	AL_OUTPUT_RATE, 8000,
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1033
    };
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1034
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1035
    config = ALnewconfig();
217
fcfbc9f71048 underscore cleanup
Claus Gittinger <cg@exept.de>
parents: 152
diff changeset
  1036
    if (__INST(numberOfChannels) == __MKSMALLINT(2))
45
claus
parents: 36
diff changeset
  1037
	ALsetchannels(config, AL_STEREO);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1038
    else
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1039
	ALsetchannels(config, AL_MONO);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1040
    if (__INST(bitsPerSample) == __MKSMALLINT(16))
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1041
	ALsetwidth(config, AL_SAMPLE_16);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1042
    else
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1043
	ALsetwidth(config, AL_SAMPLE_8);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1044
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1045
    if (__isSmallInteger(__INST(sampleRate)))
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1046
	params[3] = params[5] = _intVal(__INST(sampleRate));
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1047
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1048
    ALsetparams(AL_DEFAULT_DEVICE, params, 6);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1049
    p = ALopenport("smallchat", (char *)_stringVal(aMode), config);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1050
    if (p) {
575
f1fc72870c72 eliminate MKOBJ & MKCP (use MKEXTERNALADDRESS & externalAddressVal)
Claus Gittinger <cg@exept.de>
parents: 353
diff changeset
  1051
	__INST(filePointer) = __MKEXTERNALADDRESS(p);
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1052
    } else {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1053
	__INST(filePointer) = nil;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1054
	RETURN (nil);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1055
    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1056
    __INST(binary) = true;
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1057
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1058
    ALfreeconfig(config);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1059
    /*
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1060
     * get the parameters actually installed
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1061
     */
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1062
    config = ALgetconfig(p);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1063
    switch (ALgetchannels(config)) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1064
	default:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1065
	    /* cannot happen */
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1066
	case AL_MONO:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1067
	    __INST(numberOfChannels) = __MKSMALLINT(1);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1068
	    break;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1069
	case AL_STEREO:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1070
	    __INST(numberOfChannels) = __MKSMALLINT(2);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1071
	    break;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1072
    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1073
    switch (ALgetwidth(config)) {
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1074
	default:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1075
	    /* cannot happen */
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1076
	case AL_SAMPLE_8:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1077
	    __INST(bitsPerSample) = __MKSMALLINT(8);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1078
	    break;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1079
	case AL_SAMPLE_16:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1080
	    __INST(bitsPerSample) = __MKSMALLINT(16);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1081
	    break;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1082
	case AL_SAMPLE_24:
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1083
	    __INST(bitsPerSample) = __MKSMALLINT(24);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1084
	    break;
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1085
    }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1086
    ALgetparams(AL_DEFAULT_DEVICE, params, 6);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1087
    __INST(sampleRate) = __MKSMALLINT(params[3]);
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1088
277
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1089
    ALfreeconfig(config);
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1090
  }
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1091
#endif
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1092
%}
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1093
.
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1094
    ^ self
ab17540f022a oops - your last checkin was garbage
Claus Gittinger <cg@exept.de>
parents: 274
diff changeset
  1095
! !
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1096
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1097
!SoundStream methodsFor:'sine wave generation'!
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1098
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1099
tuneTone
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
  1100
    |buffer numSamples val scale|
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1101
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1102
    "allocate memory for 1sec playing time"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1103
    numSamples := self sampleRate.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1104
    buffer := ByteArray new:numSamples.
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1105
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1106
    "fill it with a sine wave"
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1107
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
  1108
    scale := 440 * 2 * (Float pi).
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1109
    1 to:numSamples do:[:i |
45
claus
parents: 36
diff changeset
  1110
	val := (scale * i / numSamples) sin.
claus
parents: 36
diff changeset
  1111
	val := (val * 127 + 128) rounded.
claus
parents: 36
diff changeset
  1112
	buffer at:i put:val
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1113
    ].
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1114
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
  1115
    buffer inspect.
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
  1116
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1117
    1 to:3 do:[:s |
45
claus
parents: 36
diff changeset
  1118
	self nextPutBytes:numSamples from:buffer
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1119
    ]
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1120
15
62e2816c87ac *** empty log message ***
claus
parents: 11
diff changeset
  1121
    "SoundStream writing tuneTone"
0
1cf8d1747859 Initial revision
claus
parents:
diff changeset
  1122
! !
121
606a3ccd3682 linux fixes (cut off when closing)
Claus Gittinger <cg@exept.de>
parents: 112
diff changeset
  1123
152
89d93f115cb8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 121
diff changeset
  1124
!SoundStream class methodsFor:'documentation'!
89d93f115cb8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 121
diff changeset
  1125
89d93f115cb8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 121
diff changeset
  1126
version
592
7daa4b2db7eb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 575
diff changeset
  1127
^ '$Header: /cvs/stx/stx/libbasic2/SoundStream.st,v 1.26 1997-12-10 11:42:30 cg Exp $'! !