<> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> <<>> <> << >> << >> DIRECTORY BasicTime USING [GMT], File USING [wordsPerPage], Jukebox USING [Handle, Tune, RunArrayRange, RunComponent, EnergyRange, LengthRange, bytesPerChirp, singlePktLength, RunArray, bytesPerMS]; TuneAccess: CEDAR DEFINITIONS = BEGIN userHeaderLength: CARDINAL = File.wordsPerPage*2; -- in bytes Byte: TYPE = [0..256); ByteBlock: TYPE = REF ByteSequence; ByteSequence: TYPE = RECORD [ length: NAT, s: PACKED SEQUENCE max: NAT OF Byte ]; EnergyBlock: TYPE = REF EnergySequence; EnergySequence: TYPE = RECORD [ length: NAT, s: SEQUENCE max: NAT OF Jukebox.EnergyRange ]; <> <<>> EncryptedSilence: TYPE = REF EncryptedSilenceArray; EncryptedSilenceArray: TYPE = ARRAY [0..Jukebox.bytesPerMS) OF Byte; <> <> <<>> <> <> <<>> <> <> <<>> NextTuneNumber: PROC [jukebox: Jukebox.Handle, currentTuneID: INT _ -1] RETURNS [tuneID: INT]; <> <> <> <<>> <> <> <> <> <<>> ReadTuneHeader: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, nBytes: CARDINAL _ userHeaderLength, block: ByteBlock _ NIL] RETURNS [ByteBlock]; <userHeaderLength then reads userHeaderLength. The tune must be open. No interpretation of the header is assumed by this code, hence a plain sequence of bytes is returned.>> <> WriteTuneHeader: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, block: ByteBlock, nBytes: CARDINAL _ userHeaderLength]; <> <<>> ReadRunArray: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, chirpNumber: INT, runArray: REF Jukebox.RunArray _ NIL] RETURNS [REF Jukebox.RunArray]; <> <<>> InterpretRunArrayElement: PROC [runArray: REF Jukebox.RunArray, currArrayIndex: Jukebox.RunArrayRange] RETURNS [length: Jukebox.LengthRange, energy: Jukebox.EnergyRange, skipNextArrayElement: BOOLEAN, silence: BOOLEAN]; <> <<>> GetEnergyProfile: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, chirpNumber: INT, energyBlock: EnergyBlock _ NIL, divisions: INT _ Jukebox.bytesPerChirp/Jukebox.singlePktLength, signalMissingChirp: BOOLEAN _ FALSE] RETURNS [EnergyBlock]; <> <<>> ReadChirpSamples: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, chirpNumber: INT, nBytes: CARDINAL _ Jukebox.bytesPerChirp, block: ByteBlock _ NIL] RETURNS [ByteBlock]; <> <<>> ReadFormattedSamples: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, chirpNumber: INT, block: ByteBlock _ NIL, encryptedSilence: EncryptedSilence _ NIL, signalMissingChirp: BOOLEAN _ FALSE] RETURNS [ByteBlock]; <> <> GetCreateDate: PROC [tune: Jukebox.Tune] RETURNS [createDate: BasicTime.GMT] = TRUSTED INLINE {RETURN [tune.createDate]}; GetWriteDate: PROC [tune: Jukebox.Tune] RETURNS [appendDate: BasicTime.GMT] = TRUSTED INLINE {RETURN [tune.appendDate]}; GetReadDate: PROC [tune: Jukebox.Tune] RETURNS [playDate: BasicTime.GMT] = TRUSTED INLINE {RETURN [tune.playDate]}; ReadAmbientLevel: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, chirpNumber: INT] RETURNS [Jukebox.EnergyRange]; <> <> <<>> WriteAmbientLevel: PROC [jukebox: Jukebox.Handle, tune: Jukebox.Tune, ambientLevel: Jukebox.EnergyRange, fromChirp: INT _ 0, toChirp: INT _ -1]; <> <> <<>> END.