37 lines
1016 B
JavaScript
37 lines
1016 B
JavaScript
|
({
|
||
|
_acquired: false,
|
||
|
_acquire: ffi("int furi_hal_speaker_acquire(int)"),
|
||
|
_release: ffi("void furi_hal_speaker_release(void)"),
|
||
|
start: ffi("void furi_hal_speaker_start(float, float)"),
|
||
|
stop: ffi("void furi_hal_speaker_stop(void)"),
|
||
|
acquire: function (timeout) {
|
||
|
if (!this._acquired) {
|
||
|
this._acquired = this._acquire(timeout);
|
||
|
}
|
||
|
return this._acquired;
|
||
|
},
|
||
|
acquired: function () {
|
||
|
return this._acquired;
|
||
|
},
|
||
|
release: function () {
|
||
|
if (this._acquired) {
|
||
|
this._release();
|
||
|
this._acquired = false;
|
||
|
}
|
||
|
},
|
||
|
play: function (frequency, volume, duration) {
|
||
|
let already_acquired = this.acquired();
|
||
|
if (!already_acquired) {
|
||
|
this.acquire(1000);
|
||
|
};
|
||
|
if (this.acquired()) {
|
||
|
this.start(frequency, volume);
|
||
|
delay(duration);
|
||
|
this.stop();
|
||
|
}
|
||
|
if (!already_acquired) {
|
||
|
this.release();
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
)
|