30 # include <audio.h> |
30 # include <audio.h> |
31 # define __ALportVal(o) (ALport)(__externalAddressVal(o)) |
31 # define __ALportVal(o) (ALport)(__externalAddressVal(o)) |
32 #endif |
32 #endif |
33 |
33 |
34 #ifdef LINUX |
34 #ifdef LINUX |
|
35 # include <stdio.h> |
|
36 # include <sys/soundcard.h> |
|
37 # define DEV_AUDIO_DEFAULT_FREQ (8000) |
|
38 # define DEV_AUDIO_DEFAULT_BUFFERSIZE (16384) |
35 # define DEV_AUDIO |
39 # define DEV_AUDIO |
36 # include <sys/soundcard.h> |
|
37 #endif |
40 #endif |
38 |
41 |
|
42 #ifdef FREEBSD |
|
43 # include <stdio.h> |
|
44 # include <sys/time.h> |
|
45 # include <sys/ioctl.h> |
|
46 # include <machine/pcaudioio.h> |
|
47 # define DEV_AUDIO_DEFAULT_FREQ (8000) |
|
48 # define DEV_AUDIO_DEFAULT_BUFFERSIZE (16384) |
|
49 # define DEV_AUDIO |
|
50 #endif |
|
51 |
39 #if defined(sunos) || defined(solaris) |
52 #if defined(sunos) || defined(solaris) |
|
53 # include <stdio.h> |
|
54 # ifdef solaris |
|
55 # include <sys/audioio.h> |
|
56 # else |
|
57 # include <sun/audioio.h> |
|
58 # endif |
|
59 # define DEV_AUDIO_DEFAULT_FREQ (8000) |
|
60 # define DEV_AUDIO_DEFAULT_BUFFERSIZE (16384) |
|
61 # define DEV_AUDIO |
|
62 #endif |
|
63 |
|
64 #if defined(hpux) |
|
65 # include <stdio.h> |
|
66 # include <sys/ioctl.h> |
|
67 # include <sys/inode.h> |
|
68 # include <sys/audio.h> |
|
69 # include <sys/time.h> |
|
70 # include <unistd.h> |
|
71 # define DEV_AUDIO_DEFAULT_FREQ (22050) |
|
72 # define DEV_AUDIO_DEFAULT_BUFFERSIZE (16384) |
40 # define DEV_AUDIO |
73 # define DEV_AUDIO |
41 #endif |
74 #endif |
42 |
75 |
43 #if defined(__openVMS__) || defined(LINUX) |
76 #if defined(__openVMS__) || defined(LINUX) |
44 /* |
77 /* |
779 int __stereo = 0; |
815 int __stereo = 0; |
780 int __channels = 0; |
816 int __channels = 0; |
781 |
817 |
782 #if defined(DEV_AUDIO) |
818 #if defined(DEV_AUDIO) |
783 channels = __MKSMALLINT(1); |
819 channels = __MKSMALLINT(1); |
|
820 blockSize = __MKSMALLINT(DEV_AUDIO_DEFAULT_BUFFERSIZE); |
784 stereo = __MKSMALLINT(0); |
821 stereo = __MKSMALLINT(0); |
785 speed = __MKSMALLINT(8000); |
822 speed = __MKSMALLINT(DEV_AUDIO_DEFAULT_FREQ); |
786 |
823 |
787 # if defined(SNDCTL_DSP_GETBLKSIZE) |
824 # if defined(SNDCTL_DSP_GETBLKSIZE) |
788 if (ioctl(f, SNDCTL_DSP_GETBLKSIZE, &__blockSize) >= 0) { |
825 if (ioctl(f, SNDCTL_DSP_GETBLKSIZE, &__blockSize) >= 0) { |
789 blockSize = __MKSMALLINT(__blockSize); |
826 blockSize = __MKSMALLINT(__blockSize); |
790 } |
827 } |
965 # endif |
1006 # endif |
966 # ifdef AFMT_MPEG |
1007 # ifdef AFMT_MPEG |
967 } else if (sym == @symbol(MPEG)) { |
1008 } else if (sym == @symbol(MPEG)) { |
968 __fmt = AFMT_MPEG; |
1009 __fmt = AFMT_MPEG; |
969 # endif |
1010 # endif |
|
1011 |
|
1012 # ifdef AUDIO_FORMAT_LINEAR16BIT |
|
1013 } else if (sym == @symbol(S16)) { |
|
1014 __fmt = AUDIO_FORMAT_LINEAR16BIT; |
|
1015 # endif |
|
1016 # ifdef AUDIO_FORMAT_ULAW |
|
1017 } else if (sym == @symbol(MU_LAW)) { |
|
1018 __fmt = AUDIO_FORMAT_ULAW; |
|
1019 # endif |
|
1020 # ifdef AUDIO_FORMAT_ALAW |
|
1021 } else if (sym == @symbol(A_LAW)) { |
|
1022 __fmt = AUDIO_FORMAT_ALAW; |
|
1023 # endif |
970 } else { |
1024 } else { |
971 fprintf(stderr, "bad format: %s\n", __stringVal(sym)); |
1025 fprintf(stderr, "bad format: %s\n", __stringVal(sym)); |
972 goto bad; |
1026 goto bad; |
973 } |
1027 } |
974 } |
1028 } |
975 |
1029 |
|
1030 # ifdef SNDCTL_DSP_SETFMT |
976 __fmtWant = __fmt; |
1031 __fmtWant = __fmt; |
977 |
1032 |
978 # ifdef SNDCTL_DSP_SETFMT |
|
979 if (ioctl(f, SNDCTL_DSP_SETFMT, &__fmt) >= 0) { |
1033 if (ioctl(f, SNDCTL_DSP_SETFMT, &__fmt) >= 0) { |
980 if (__fmt == __fmtWant) { |
1034 if (__fmt == __fmtWant) { |
981 __INST(audioFormat) = sym; |
1035 __INST(audioFormat) = sym; |
982 RETURN (self); |
1036 RETURN (self); |
983 } else { |
1037 } else { |
986 } else { |
1040 } else { |
987 /* fprintf(stderr, "got err-return from setFmp %x\n", __fmt); */ |
1041 /* fprintf(stderr, "got err-return from setFmp %x\n", __fmt); */ |
988 } |
1042 } |
989 # endif /* SNDCTL_DSP_SETFMT */ |
1043 # endif /* SNDCTL_DSP_SETFMT */ |
990 |
1044 |
|
1045 # ifdef AUDIO_SET_DATA_FORMAT /* hpux */ |
|
1046 if (ioctl (f, AUDIO_SET_DATA_FORMAT, __fmt)) { |
|
1047 /* fprintf(stderr, "got err-return from AUDIO_SET_DATA_FORMAT\n"); */ |
|
1048 } |
|
1049 # endif |
|
1050 |
|
1051 |
991 bad: ; |
1052 bad: ; |
992 } |
1053 } |
993 #endif /* DEV_AUDIO */ |
1054 #endif /* DEV_AUDIO */ |
994 |
|
995 #ifdef WIN32 |
|
996 if (__INST(audioFormat) == sym) { |
|
997 RETURN (self); |
|
998 } |
|
999 #endif |
|
1000 |
1055 |
1001 %}. |
1056 %}. |
1002 ^ UnsupportedOperationSignal raise |
1057 ^ UnsupportedOperationSignal raise |
1003 |
1058 |
1004 " |
1059 " |
1023 ]. |
1078 ]. |
1024 %{ |
1079 %{ |
1025 int f = __intVal(fd); |
1080 int f = __intVal(fd); |
1026 int __nCh = 0; |
1081 int __nCh = 0; |
1027 |
1082 |
1028 #if defined(DEV_AUDIO) && defined(SOUND_PCM_WRITE_CHANNELS) |
1083 #if defined(DEV_AUDIO) |
1029 if (__isSmallInteger(fd) && __isSmallInteger(nChannels)) { |
1084 if (__isSmallInteger(fd) && __isSmallInteger(nChannels)) { |
1030 __nCh = __intVal(nChannels); |
1085 __nCh = __intVal(nChannels); |
|
1086 # if defined(SOUND_PCM_WRITE_CHANNELS) |
1031 if (ioctl(f, SOUND_PCM_WRITE_CHANNELS, &__nCh) >= 0) { |
1087 if (ioctl(f, SOUND_PCM_WRITE_CHANNELS, &__nCh) >= 0) { |
1032 __INST(numberOfChannels) = nChannels; |
1088 __INST(numberOfChannels) = nChannels; |
1033 RETURN (self); |
1089 RETURN (self); |
1034 } |
1090 } |
|
1091 # endif |
|
1092 # ifdef AUDIO_SET_CHANNELS /* hpux */ |
|
1093 if (ioctl (f, AUDIO_SET_CHANNELS, __nCh)) { |
|
1094 /* fprintf(stderr, "got err-return from AUDIO_SET_CHANNELS\n"); */ |
|
1095 __INST(numberOfChannels) = nChannels; |
|
1096 RETURN (self); |
|
1097 } |
|
1098 # endif |
1035 } |
1099 } |
1036 #endif |
1100 #endif |
1037 %}. |
1101 %}. |
1038 ^ UnsupportedOperationSignal raise |
1102 ^ UnsupportedOperationSignal raise |
1039 |
1103 |
1059 ]. |
1123 ]. |
1060 %{ |
1124 %{ |
1061 int f = __intVal(fd); |
1125 int f = __intVal(fd); |
1062 int __blockSize = 0; |
1126 int __blockSize = 0; |
1063 |
1127 |
1064 #if defined(DEV_AUDIO) && defined(SNDCTL_DSP_SETFRAGMENT) |
1128 #if defined(DEV_AUDIO) |
1065 if (__isSmallInteger(fd) && __isSmallInteger(blockSize)) { |
1129 if (__isSmallInteger(fd) && __isSmallInteger(blockSize)) { |
1066 __blockSize = __intVal(blockSize); |
1130 __blockSize = __intVal(blockSize); |
|
1131 # if defined(SNDCTL_DSP_SETFRAGMENT) |
1067 if (ioctl(f, SNDCTL_DSP_SETFRAGMENT, &__blockSize) >= 0) { |
1132 if (ioctl(f, SNDCTL_DSP_SETFRAGMENT, &__blockSize) >= 0) { |
1068 /* __INST(blockSize) = blockSize; */ |
1133 /* __INST(blockSize) = blockSize; */ |
1069 RETURN (self); |
1134 RETURN (self); |
1070 } |
1135 } |
|
1136 # endif |
|
1137 # ifdef AUDIO_SET_CHANNELS /* hpux */ |
|
1138 if (ioctl (f, AUDIO_SET_TXBUFSIZE, __blockSize)) { |
|
1139 /* fprintf(stderr, "got err-return from AUDIO_SET_TXBUFSIZE\n"); */ |
|
1140 /* __INST(blockSize) = blockSize; */ |
|
1141 RETURN (self); |
|
1142 } |
|
1143 # endif |
1071 } |
1144 } |
1072 #endif |
1145 #endif |
1073 %}. |
1146 %}. |
1074 ^ UnsupportedOperationSignal raise |
1147 ^ UnsupportedOperationSignal raise |
1075 ! |
1148 ! |
1090 %{ |
1163 %{ |
1091 int f = __intVal(fd); |
1164 int f = __intVal(fd); |
1092 int __rate = 0; |
1165 int __rate = 0; |
1093 int __rateWant; |
1166 int __rateWant; |
1094 |
1167 |
1095 #if defined(DEV_AUDIO) && defined(SOUND_PCM_WRITE_RATE) |
1168 #if defined(DEV_AUDIO) |
1096 if (__isSmallInteger(fd) && __isSmallInteger(hz)) { |
1169 if (__isSmallInteger(fd) && __isSmallInteger(hz)) { |
1097 __rate = __rateWant = __intVal(hz); |
1170 __rate = __intVal(hz); |
|
1171 # if defined(SOUND_PCM_WRITE_RATE) |
|
1172 __rateWant = __rate; |
1098 if (ioctl(f, SOUND_PCM_WRITE_RATE, &__rate) >= 0) { |
1173 if (ioctl(f, SOUND_PCM_WRITE_RATE, &__rate) >= 0) { |
1099 if (__rate != __rateWant) { |
1174 if (__rate != __rateWant) { |
1100 fprintf(stderr, "SoundStream [warning]: actual rate is %d\n", __rate); |
1175 fprintf(stderr, "SoundStream [warning]: actual rate is %d\n", __rate); |
1101 hz = __MKSMALLINT(__rate); |
1176 hz = __MKSMALLINT(__rate); |
1102 } |
1177 } |
1103 __INST(sampleRate) = hz; |
1178 __INST(sampleRate) = hz; |
1104 RETURN (self); |
1179 RETURN (self); |
1105 } |
1180 } |
|
1181 # endif |
|
1182 # ifdef AUDIO_SET_SAMPLE_RATE /* hpux */ |
|
1183 if (ioctl (f, AUDIO_SET_SAMPLE_RATE, __rate)) { |
|
1184 /* fprintf(stderr, "got err-return from AUDIO_SET_SAMPLE_RATE\n"); */ |
|
1185 __INST(sampleRate) = hz; |
|
1186 RETURN (self); |
|
1187 } |
|
1188 # endif |
1106 } |
1189 } |
1107 #endif |
1190 #endif |
1108 %}. |
1191 %}. |
1109 ^ UnsupportedOperationSignal raise |
1192 ^ UnsupportedOperationSignal raise |
1110 |
1193 |