BBS: Inland Empire Archive Date: 11-30-92 (21:17) Number: 377 From: RICH GELDREICH Refer#: NONE To: ALL Recvd: NO Subj: Mod Player/5 Conf: (2) Quik_Bas
'<<Part 5 Starts Here>> CASE 1 'Port Down C.Command(A) = 2 C.PortSpeed(A) = O CASE 2 'Port Up C.Command(A) = 3 C.PortSpeed(A) = O CASE 3 'Port to Note IF C.Period(A) > C THEN C.Command(A) = 4 ELSE C.Command(A) = 5 END IF C.PortSpeed(A) = o C.PortDest(A) = C CASE 10 'Volume Slide C.Command(A) = 1 IF O AND 15 THEN C.VolumeSpeed(A) = -(O AND 15) ELSE C.VolumeSpeed(A) = O\16 END IF CASE 11 'Position Jump IF o<T.Length THEN T.Pos = o T.Line = 1 END IF CASE 13 'Pattern Skip T.Line = 1 END SELECT END IF T.Offset = T.Offset + 2 NEXT T.ClicksLeft = T.Tempo T.Line = T.Line - 1:IF T.Line = 0 THEN GOTO NewPattern RETURN NewPattern: T.Pos = T.Pos + 1:IF T.Pos >= T.Length THEN T.Pos = 0 GOSUB StartNewPattern RETURN StartNewPattern: LOCATE ,1 PRINT USING "Playing:###"; (T.Pos*100&)\T.Length; PRINT "%"; T.Line = 64 PatternSegment = PatternSegment(T.Pos) T.Offset = 0 RETURN '===================================================================== 'Main mixer follows. While the assembly routine is playing one buffer, 'this routine mixes the other. DoMix: BufferOffset = BufferOffset XOR 512 Tm=0 FOR K = 0 TO 3 IF C.InactiveFlag(K)=False AND ChannelOn(K) THEN GOSUB Mix Tm = 1 END IF NEXT If Tm=0 then 'If all channels inactive then just clear buffer to 0's. FOR B = BufferOffset TO BufferOffset + IntsPerClick-1 SampleBuffer(B) = 0 NEXT END IF T.ClicksLeft = T.ClicksLeft - 1 'If not time for a new line the process slide commands, if any. IF T.ClicksLeft = 0 THEN GOSUB DoLine ELSE GOSUB DoCommands RETURN '===================================================================== Mix: MixesLeftToDo = IntsPerClick OffsetNow = BufferOffset 'Preload all needed variables for speed. DEF SEG = C.Segment(K) o = C.Offset(K) 'current offset into sample r = C.Remainder(K) 'current remainder(0-255) at offset v = C.Volume(K) 'volume(0-64) h = C.HighStep(K) 'integer step l = C.LowStep(K) 'remainder step(0-255) IF C.RepLength(K) THEN DO 'If sample loops the calculate the number of mixes left until 'we must loop... PL&=C.LoopEnd(K)-o 'Thanks to QB's lack of unsigned ints, we must do this... IF PL&<0 THEN PL&=PL&+65536 '<<-Continued On Next Message->> --- MsgToss 2.0b * Origin: Computer Co-Op - Voorhees, NJ | Ted Hare (1:266/29)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET