3e0c9b43a2
* change simulator svg
* change radio image
* Remove google fonts cdn
* change color of 'advanced' button
* font fix
* font fix 2
* display fix
* change fullsceen simulator bg
* Continuous servo
* handle continuous state
* adding shims
* update rendering for continuous servos
* fixing sim
* fix sig
* typo
* fix sim
* bump pxt
* bump pxt
* rerun travis
* Input blocks revision
- add Button and Pin event types
- merge onPinPressed & onPinReleased in new onPinEvent function
- create new onButtonEvent function
* update input blocks in docs and tests
* remove device_pin_release block
* Hide DAL.x behind Enum
* bring back deprecated blocks, but hide them
* shims and locales files
* fix input.input. typing
* remove buildpr
* bump V3
* update simulator aspect ratio
* add Loudness Block
* revoke loudness block
* Adds soundLevel
To be replaced by pxt-common-packages when DAL is updated.
* Remove P0 & P3 from AnalogPin
* Fix Sound and replace AnalogPin.P0
* remove approved extensions
* V4 Updates from remote Repo
* locales
* add storage functions
* fix storage functions
* fix int/float values
* decrease decimal precision
* reorder blocks
* Update BLE Settings and Storage Blocks
* Fetch MicroBit changes up to v4.0.18
* Update timing for LED Matrix usage
* use 32kb ram (mini v2)
* resize gatt table
* Revert "use 32kb ram (mini v2)"
This reverts commit 4b15592f0f
.
* fix missleading indentation
* add support for 32kb and 16kb ram
* only MIT extensions in preferredRepos
* remove extensions without MIT License file
* add updated extensions
* add extensions with MIT license
Co-authored-by: Juri <gitkraken@juriwolf.de>
Co-authored-by: Juri <info@juriwolf.de>
60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
namespace pxsim.music {
|
|
function loadWavAsync(path: string): Promise<Uint8Array> {
|
|
return new Promise<Uint8Array>((resolve, reject) => {
|
|
let httprequest = new XMLHttpRequest();
|
|
httprequest.responseType = "arraybuffer";
|
|
httprequest.onreadystatechange = function () {
|
|
if (httprequest.readyState == XMLHttpRequest.DONE) {
|
|
if (httprequest.status == 200) {
|
|
const r = httprequest.response;
|
|
resolve(new Uint8Array(httprequest.response));
|
|
}
|
|
else {
|
|
reject(httprequest.status);
|
|
}
|
|
}
|
|
};
|
|
httprequest.open("GET", path, true);
|
|
httprequest.send();
|
|
})
|
|
}
|
|
const wavPromises: Map<Promise<Uint8Array>> = {}
|
|
//%
|
|
export function __playSoundExpression(notes: string, waitTillDone: boolean): void {
|
|
const cb = getResume();
|
|
const b = board();
|
|
// v2 only...
|
|
b.ensureHardwareVersion(2);
|
|
|
|
// load wav file
|
|
let p: Promise<Uint8Array>;
|
|
// defined in sim.html
|
|
const path = (<any>pxsim).soundExpressionFiles[notes];
|
|
if (path) {
|
|
p = wavPromises[notes] || (wavPromises[notes] = loadWavAsync(path));
|
|
} else
|
|
p = Promise.resolve(undefined);
|
|
|
|
p.then(data => {
|
|
// failed to load data
|
|
if (data) {
|
|
// finally play
|
|
const buf = new RefBuffer(data);
|
|
const pp = AudioContextManager.playBufferAsync(buf)
|
|
if (waitTillDone)
|
|
// wait until sound is done
|
|
return pp;
|
|
}
|
|
// don't wait
|
|
cb();
|
|
return Promise.resolve();
|
|
}).catch((e) => {
|
|
console.log(e)
|
|
cb();
|
|
})
|
|
}
|
|
|
|
export function __stopSoundExpressions() {
|
|
AudioContextManager.stopAll();
|
|
}
|
|
} |