beautypg.com

Apple Newton Programmer’s Newton 2.0 (for Newton 2.0) User Manual

Page 517

background image

C H A P T E R 1 2

Special-Purpose Objects for Data Storage and Retrieval

Using Special-Purpose Data Storage Objects

12-11

The following code fragment adds sound sample data to an empty VBO and
demonstrates the use of the

EntryUndoChanges

function to undo those changes:

// create a temporary soup

mySoup := RegUnionSoup('|foo:myApp:mySig|,

{name: "foo:myApp:mySig", indexes: '[]}) ;

// get a soup entry that is a sound

anEntry := mySoup:AddToDefaultStoreXmit('{sndFrameType: nil,

samples:nil,

samplingRate:nil,

dataType:nil,

compressionType: nil,

userName: nil}, nil) ;

// make a VBO to use for the samples

myVBO := GetDefaultStore():NewCompressedVBO('samples,5000,nil, nil);

// grab some samples from ROM and fill in most of sound frame

romSound := Clone(ROM_FunBeep) ;

anEntry.sndFrameType := romSound.sndFrameType ;

anEntry.samplingRate := romSound.samplingRate ;

anEntry.dataType := romSound.dataType ;

anEntry.compressionType := romSound.compressionType ;

anEntry.samples := myVBO ;

// put the samples in the VBO

BinaryMunger(myVBO, 0, nil, romSound.samples, 0, nil) ;

// write the VBO to the soup

try

EntryChangeXmit(anEntry, nil);

onException |evt.ex.fr.store| do

:Notify(kNotifyAlert, "My App", "Sorry, can’t save changes.");

// listen to the sound to verify change

PlaySound(anEntry);

// change the sound

BinaryMunger(anEntry.samples,0, nil, ROM_PlinkBeep.samples, 0, nil);

PlaySound(anEntry) ;