1 | Global *tonspeicher.l,tonlaenge.l,*datspeicher.l,datlaenge.l,adr_mem.l,wert.c,BytesPerSec.l
|
2 | Global adr_dat.l,uni.u,lo.c,hi.c,xx.l
|
3 |
|
4 | Declare bit_1()
|
5 | Declare bit_0()
|
6 |
|
7 | SetCurrentDirectory(GetPathPart(ProgramFilename()))
|
8 |
|
9 | InitSprite()
|
10 | InitSound()
|
11 |
|
12 | OpenWindow(0,0,0,800,600,"sound-test",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
|
13 | OpenWindowedScreen(WindowID(0),10,10,350,300,0,0,0)
|
14 |
|
15 | text1=TextGadget(#PB_Any, 10,380,90,20, "Taste-Q")
|
16 |
|
17 | ClearScreen(RGB(128,128,128))
|
18 |
|
19 | OpenFile(0,"dice2.hex")
|
20 | datlaenge=Lof(0)
|
21 | *datspeicher= AllocateMemory(datlaenge)
|
22 | ReadData(0, *datspeicher, datlaenge)
|
23 | CloseFile(0)
|
24 |
|
25 | #samplerate = 8000
|
26 | #bitrate = 16
|
27 | #channels = 1
|
28 | #secs = 20
|
29 |
|
30 | #breite=1
|
31 |
|
32 | BytesPerSec = #channels*#bitrate/8*#samplerate
|
33 |
|
34 | tonlaenge=BytesPerSec*#secs+44
|
35 | *tonspeicher= AllocateMemory(tonlaenge)
|
36 |
|
37 | Repeat
|
38 |
|
39 | Event.l = WaitWindowEvent(2)
|
40 |
|
41 | If GetAsyncKeyState_(#VK_Q)
|
42 | PokeS(*tonspeicher,"RIFF")
|
43 | PokeL(*tonspeicher+4,36+BytesPerSec*#secs)
|
44 | PokeS(*tonspeicher+8,"WAVE")
|
45 | PokeS(*tonspeicher+12,"fmt ")
|
46 | PokeL(*tonspeicher+16,16)
|
47 | PokeW(*tonspeicher+20,1)
|
48 | PokeW(*tonspeicher+22,#channels)
|
49 | PokeL(*tonspeicher+24,#samplerate )
|
50 | PokeL(*tonspeicher+28,BytesPerSec)
|
51 | PokeW(*tonspeicher+32,#bitrate/8*#channels)
|
52 | PokeW(*tonspeicher+34,#bitrate)
|
53 | PokeS(*tonspeicher+36,"data")
|
54 | PokeL(*tonspeicher+40,BytesPerSec*#secs)
|
55 |
|
56 | adr_mem=44
|
57 | adr_dat=0
|
58 |
|
59 | For stt=0 To 3999 ;4sec 1khz
|
60 | For xx=0 To #breite
|
61 | PokeW(*tonspeicher+adr_mem,-32000)
|
62 | adr_mem + 2
|
63 | Next
|
64 | For xx=0 To #breite
|
65 | PokeW(*tonspeicher+adr_mem,-32000)
|
66 | adr_mem + 2
|
67 | Next
|
68 | For xx=0 To #breite
|
69 | PokeW(*tonspeicher+adr_mem,32000)
|
70 | adr_mem + 2
|
71 | Next
|
72 | For xx=0 To #breite
|
73 | PokeW(*tonspeicher+adr_mem,32000)
|
74 | adr_mem + 2
|
75 | Next
|
76 | Next
|
77 |
|
78 | uni=1 ;filenummer 2byte
|
79 | lo=uni & $00ff
|
80 | hi=uni & $ff00/256
|
81 | For i=0 To 7
|
82 | If (lo & (1<<i))
|
83 | bit_1()
|
84 | Else
|
85 | bit_0()
|
86 | EndIf
|
87 | Next i
|
88 | For i=0 To 7
|
89 | If (hi & (1<<i))
|
90 | bit_1()
|
91 | Else
|
92 | bit_0()
|
93 | EndIf
|
94 | Next i
|
95 |
|
96 | uni=$1800 ;startadresse $1800 2byte
|
97 | lo=uni & $00ff
|
98 | hi=uni & $ff00/256
|
99 | For i=0 To 7
|
100 | If (lo & (1<<i))
|
101 | bit_1()
|
102 | Else
|
103 | bit_0()
|
104 | EndIf
|
105 | Next i
|
106 | For i=0 To 7
|
107 | If (hi & (1<<i))
|
108 | bit_1()
|
109 | Else
|
110 | bit_0()
|
111 | EndIf
|
112 | Next i
|
113 |
|
114 | uni=$1800+datlaenge ;endadresse $1800+datlaenge 2byte
|
115 | lo=uni & $00ff
|
116 | hi=uni & $ff00/256
|
117 | For i=0 To 7
|
118 | If (lo & (1<<i))
|
119 | bit_1()
|
120 | Else
|
121 | bit_0()
|
122 | EndIf
|
123 | Next i
|
124 | For i=0 To 7
|
125 | If (hi & (1<<i))
|
126 | bit_1()
|
127 | Else
|
128 | bit_0()
|
129 | EndIf
|
130 | Next i
|
131 |
|
132 | wert=0 ;checksumme 1byte
|
133 | For i=0 To 7
|
134 | If (wert & (1<<i))
|
135 | bit_1()
|
136 | Else
|
137 | bit_0()
|
138 | EndIf
|
139 | Next i
|
140 |
|
141 | For stt=0 To 3999 ;2sec 2khz
|
142 | For xx=0 To #breite
|
143 | PokeW(*tonspeicher+adr_mem,-32000)
|
144 | adr_mem + 2
|
145 | Next
|
146 | For xx=0 To #breite
|
147 | PokeW(*tonspeicher+adr_mem,32000)
|
148 | adr_mem + 2
|
149 | Next
|
150 | Next
|
151 |
|
152 | For zz=0 To datlaenge-1 ;programmdaten
|
153 | wert = PeekB(*datspeicher+adr_dat)
|
154 | adr_dat +1
|
155 |
|
156 | For st=0 To 23 ;startbit 0
|
157 | For xx=0 To #breite
|
158 | PokeW(*tonspeicher+adr_mem,-32000)
|
159 | adr_mem + 2
|
160 | Next
|
161 | Next
|
162 |
|
163 | For i=0 To 7 ;8bit daten
|
164 | If (wert & (1<<i))
|
165 | bit_1()
|
166 | Else
|
167 | bit_0()
|
168 | EndIf
|
169 | Next i
|
170 |
|
171 | For st=0 To 23 ;stopbit 1
|
172 | For xx=0 To #breite
|
173 | PokeW(*tonspeicher+adr_mem,32000)
|
174 | adr_mem + 2
|
175 | Next
|
176 | Next
|
177 | Next
|
178 |
|
179 | For stt=0 To 3999 ;2sec 2khz
|
180 | For xx=0 To #breite
|
181 | PokeW(*tonspeicher+adr_mem,-32000)
|
182 | adr_mem + 2
|
183 | Next
|
184 | For xx=0 To #breite
|
185 | PokeW(*tonspeicher+adr_mem,32000)
|
186 | adr_mem + 2
|
187 | Next
|
188 | Next
|
189 |
|
190 | CreateFile(0, "wavtest.wav")
|
191 | WriteData(0,*tonspeicher,tonlaenge)
|
192 | CloseFile(0)
|
193 |
|
194 | CatchSound(0, *tonspeicher)
|
195 | PlaySound(0)
|
196 | EndIf
|
197 |
|
198 | Until Event = #PB_Event_CloseWindow
|
199 |
|
200 | End
|
201 |
|
202 | Procedure bit_0()
|
203 | For xx=0 To #breite
|
204 | PokeW(*tonspeicher+adr_mem,32000)
|
205 | adr_mem + 2
|
206 | Next
|
207 | For xx=0 To #breite
|
208 | PokeW(*tonspeicher+adr_mem,-32000)
|
209 | adr_mem + 2
|
210 | Next
|
211 | For xx=0 To #breite
|
212 | PokeW(*tonspeicher+adr_mem,32000)
|
213 | adr_mem + 2
|
214 | Next
|
215 | For xx=0 To #breite
|
216 | PokeW(*tonspeicher+adr_mem,-32000)
|
217 | adr_mem + 2
|
218 | Next
|
219 | For xx=0 To #breite
|
220 | PokeW(*tonspeicher+adr_mem,32000)
|
221 | adr_mem + 2
|
222 | Next
|
223 | For xx=0 To #breite
|
224 | PokeW(*tonspeicher+adr_mem,-32000)
|
225 | adr_mem + 2
|
226 | Next
|
227 | For xx=0 To #breite
|
228 | PokeW(*tonspeicher+adr_mem,32000)
|
229 | adr_mem + 2
|
230 | Next
|
231 | For xx=0 To #breite
|
232 | PokeW(*tonspeicher+adr_mem,-32000)
|
233 | adr_mem + 2
|
234 | Next
|
235 | For xx=0 To #breite
|
236 | PokeW(*tonspeicher+adr_mem,32000)
|
237 | adr_mem + 2
|
238 | Next
|
239 | For xx=0 To #breite
|
240 | PokeW(*tonspeicher+adr_mem,-32000)
|
241 | adr_mem + 2
|
242 | Next
|
243 | For xx=0 To #breite
|
244 | PokeW(*tonspeicher+adr_mem,32000)
|
245 | adr_mem + 2
|
246 | Next
|
247 | For xx=0 To #breite
|
248 | PokeW(*tonspeicher+adr_mem,-32000)
|
249 | adr_mem + 2
|
250 | Next
|
251 | For xx=0 To #breite
|
252 | PokeW(*tonspeicher+adr_mem,32000)
|
253 | adr_mem + 2
|
254 | Next
|
255 | For xx=0 To #breite
|
256 | PokeW(*tonspeicher+adr_mem,-32000)
|
257 | adr_mem + 2
|
258 | Next
|
259 | For xx=0 To #breite
|
260 | PokeW(*tonspeicher+adr_mem,32000)
|
261 | adr_mem + 2
|
262 | Next
|
263 | For xx=0 To #breite
|
264 | PokeW(*tonspeicher+adr_mem,-32000)
|
265 | adr_mem + 2
|
266 | Next
|
267 | For xx=0 To #breite
|
268 | PokeW(*tonspeicher+adr_mem,32000)
|
269 | adr_mem + 2
|
270 | Next
|
271 | For xx=0 To #breite
|
272 | PokeW(*tonspeicher+adr_mem,32000)
|
273 | adr_mem + 2
|
274 | Next
|
275 | For xx=0 To #breite
|
276 | PokeW(*tonspeicher+adr_mem,-32000)
|
277 | adr_mem + 2
|
278 | Next
|
279 | For xx=0 To #breite
|
280 | PokeW(*tonspeicher+adr_mem,-32000)
|
281 | adr_mem + 2
|
282 | Next
|
283 | For xx=0 To #breite
|
284 | PokeW(*tonspeicher+adr_mem,32000)
|
285 | adr_mem + 2
|
286 | Next
|
287 | For xx=0 To #breite
|
288 | PokeW(*tonspeicher+adr_mem,32000)
|
289 | adr_mem + 2
|
290 | Next
|
291 | For xx=0 To #breite
|
292 | PokeW(*tonspeicher+adr_mem,-32000)
|
293 | adr_mem + 2
|
294 | Next
|
295 | For xx=0 To #breite
|
296 | PokeW(*tonspeicher+adr_mem,-32000)
|
297 | adr_mem + 2
|
298 | Next
|
299 | EndProcedure
|
300 |
|
301 | Procedure bit_1()
|
302 | For xx=0 To #breite
|
303 | PokeW(*tonspeicher+adr_mem,32000)
|
304 | adr_mem + 2
|
305 | Next
|
306 | For xx=0 To #breite
|
307 | PokeW(*tonspeicher+adr_mem,-32000)
|
308 | adr_mem + 2
|
309 | Next
|
310 | For xx=0 To #breite
|
311 | PokeW(*tonspeicher+adr_mem,32000)
|
312 | adr_mem + 2
|
313 | Next
|
314 | For xx=0 To #breite
|
315 | PokeW(*tonspeicher+adr_mem,-32000)
|
316 | adr_mem + 2
|
317 | Next
|
318 | For xx=0 To #breite
|
319 | PokeW(*tonspeicher+adr_mem,32000)
|
320 | adr_mem + 2
|
321 | Next
|
322 | For xx=0 To #breite
|
323 | PokeW(*tonspeicher+adr_mem,-32000)
|
324 | adr_mem + 2
|
325 | Next
|
326 | For xx=0 To #breite
|
327 | PokeW(*tonspeicher+adr_mem,32000)
|
328 | adr_mem + 2
|
329 | Next
|
330 | For xx=0 To #breite
|
331 | PokeW(*tonspeicher+adr_mem,-32000)
|
332 | adr_mem + 2
|
333 | Next
|
334 | For xx=0 To #breite
|
335 | PokeW(*tonspeicher+adr_mem,32000)
|
336 | adr_mem + 2
|
337 | Next
|
338 | For xx=0 To #breite
|
339 | PokeW(*tonspeicher+adr_mem,32000)
|
340 | adr_mem + 2
|
341 | Next
|
342 | For xx=0 To #breite
|
343 | PokeW(*tonspeicher+adr_mem,-32000)
|
344 | adr_mem + 2
|
345 | Next
|
346 | For xx=0 To #breite
|
347 | PokeW(*tonspeicher+adr_mem,-32000)
|
348 | adr_mem + 2
|
349 | Next
|
350 | For xx=0 To #breite
|
351 | PokeW(*tonspeicher+adr_mem,32000)
|
352 | adr_mem + 2
|
353 | Next
|
354 | For xx=0 To #breite
|
355 | PokeW(*tonspeicher+adr_mem,32000)
|
356 | adr_mem + 2
|
357 | Next
|
358 | For xx=0 To #breite
|
359 | PokeW(*tonspeicher+adr_mem,-32000)
|
360 | adr_mem + 2
|
361 | Next
|
362 | For xx=0 To #breite
|
363 | PokeW(*tonspeicher+adr_mem,-32000)
|
364 | adr_mem + 2
|
365 | Next
|
366 | For xx=0 To #breite
|
367 | PokeW(*tonspeicher+adr_mem,32000)
|
368 | adr_mem + 2
|
369 | Next
|
370 | For xx=0 To #breite
|
371 | PokeW(*tonspeicher+adr_mem,32000)
|
372 | adr_mem + 2
|
373 | Next
|
374 | For xx=0 To #breite
|
375 | PokeW(*tonspeicher+adr_mem,-32000)
|
376 | adr_mem + 2
|
377 | Next
|
378 | For xx=0 To #breite
|
379 | PokeW(*tonspeicher+adr_mem,-32000)
|
380 | adr_mem + 2
|
381 | Next
|
382 | For xx=0 To #breite
|
383 | PokeW(*tonspeicher+adr_mem,32000)
|
384 | adr_mem + 2
|
385 | Next
|
386 | For xx=0 To #breite
|
387 | PokeW(*tonspeicher+adr_mem,32000)
|
388 | adr_mem + 2
|
389 | Next
|
390 | For xx=0 To #breite
|
391 | PokeW(*tonspeicher+adr_mem,-32000)
|
392 | adr_mem + 2
|
393 | Next
|
394 | For xx=0 To #breite
|
395 | PokeW(*tonspeicher+adr_mem,-32000)
|
396 | adr_mem + 2
|
397 | Next
|
398 | EndProcedure
|