Embedding resources in projects
Let’s say you want to add some sound resources.
In mysounds.ts
you put definitions of constants for all sounds. You pass an empty
hex literal to the constructor - it will be replaced with the data from sounds.jres
file, based on the jres=...
annotation. The jres=...
also implies whenUsed
, ie., the
sound object will only be created if it is actually referenced from somewhere.
namespace sfx {
//% fixedInstance jres=sounds.bark
export const bark = new Sound(hex ``)
//% fixedInstance jres=sounds.purr
export const purr = new Sound(hex ``)
}
The sounds.jres
file contains the data. The file has a special *
key, which specifies
default metadata for other keys. The rest of keys specify resources.
{
"*": {
"namespace": "sounds",
"dataEncoding": "base64",
"mimeType": "audio/wav"
},
"bark": {
"data": "CiAgICAiYnVpbHQvcHh0cGFydHMu...IsCiAgICAic",
"icon": "data:image/png,base64:dHMiLAogICAgI...93ZWIvd"
},
"purr": {
// ...
}
}
Currently, only base64
is supported as data encoding. If you skip dataEncoding
in the .jres
file,
it will now and in future default to base64
.
Short forms
In case, there’s only the "data"
field present, the file can be shortened:
{
"*": {
"namespace": "images",
"dataEncoding": "base64",
"mimeType": "image/png"
},
"eyes": "CiAgICAiYnVpbHQvcHh0cGFydHMu...IsCiAgICAic",
"smile": "dHMiLAogICAgI...93ZWIvd"
}
In case where the jres
name matches the namespace and name of the constant,
it can be omitted, as in:
namespace images {
//% fixedInstance jres
export const eyes = new Image(hex ``)
}
Building JRES files
The command line provides a command, buildjres
that will automatically expand files into a jres resource.
- create a jres file with empty resources
{
"*": {
"namespace": "sounds",
"dataEncoding": "base64",
"mimeType": "audio/wav"
},
"bark": {},
"purr": {}
}
- Under the same project, create a subfolder
jres/RESOURCENAME
whereRESOURCENAME
is the name of your jres file. - Place all the files that need to be included with the names
RESOURCE-icon.png
for icons, andRESOURCE-data.EXT
for data, whereext
is determine by the mime type of the resource.