38 lines
958 B
JavaScript
38 lines
958 B
JavaScript
|
({
|
||
|
_acquired : false,
|
||
|
_acquire : ffi("int furi_hal_speaker_acquire(int)"),
|
||
|
start : ffi("void furi_hal_speaker_start(float, float)"),
|
||
|
stop : ffi("void furi_hal_speaker_stop()"),
|
||
|
_release : ffi("void furi_hal_speaker_release()"),
|
||
|
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();
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
)
|