-
-
Notifications
You must be signed in to change notification settings - Fork 59
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
$mol_audio refactor, added sample and scheduled nodes
- Loading branch information
Showing
15 changed files
with
169 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
namespace $ { | ||
// const api = require('web-audio-api') as { AudioContext: new() => AudioContext } | ||
|
||
// export const $mol_audio_context_node = new api.AudioContext() | ||
export const $mol_audio_context_node = new Proxy({} as AudioContext, { | ||
get() { | ||
throw new Error('Not implemented') | ||
} | ||
}) | ||
|
||
$.$mol_audio_context = $mol_audio_context_node | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
namespace $ { | ||
export let $mol_audio_context = undefined as unknown as AudioContext | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
namespace $ { | ||
export const $mol_audio_context_web = new AudioContext() | ||
|
||
$.$mol_audio_context = $mol_audio_context_web | ||
} |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
namespace $ { | ||
|
||
/** | ||
* @see https://mol.hyoo.ru/#!section=demos/demo=mol_audio_demo | ||
*/ | ||
export class $mol_audio_room extends $mol_audio_node { | ||
|
||
duration_default() { | ||
return 1000 | ||
} | ||
|
||
duration() { | ||
let duration = 0 | ||
for (const input of this.input_connected()) { | ||
if (input instanceof $mol_audio_room) duration += input.duration() | ||
if (input instanceof $mol_audio_sample) duration += input.duration() | ||
} | ||
return duration || this.duration_default() | ||
} | ||
|
||
@ $mol_action | ||
play() { | ||
this.output() | ||
this.$.$mol_wait_timeout( this.duration() ) | ||
} | ||
|
||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
namespace $ { | ||
export class $mol_audio_sample extends $mol_audio_scheduled { | ||
@ $mol_mem | ||
override node() { return this.context().createBufferSource() } | ||
|
||
duration() { | ||
return this.audio_buffer().duration * 1000 | ||
} | ||
|
||
buffer() { | ||
return new ArrayBuffer(0) | ||
} | ||
|
||
@ $mol_mem | ||
audio_buffer() { | ||
return $mol_wire_sync(this.context()).decodeAudioData(this.buffer()) | ||
} | ||
|
||
@ $mol_mem | ||
override node_configured() { | ||
const node = this.node() | ||
node.buffer = this.audio_buffer() | ||
node.onended = $mol_wire_async(() => this.active(false)) | ||
|
||
return node | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
namespace $ { | ||
export class $mol_audio_scheduled extends $mol_audio_node { | ||
@ $mol_mem | ||
override node(): AudioScheduledSourceNode { | ||
throw new Error('implement') | ||
} | ||
|
||
@ $mol_mem | ||
node_configured() { | ||
return this.node() | ||
} | ||
|
||
promise = $mol_promise<void>() | ||
|
||
@ $mol_mem | ||
wait() { | ||
return this.promise | ||
} | ||
|
||
@ $mol_mem | ||
active( next?: boolean ): boolean { | ||
|
||
$mol_wire_solid() | ||
|
||
const node = this.node_configured() | ||
|
||
const prev = $mol_wire_probe( ()=> this.active() ) | ||
if( prev === next ) return next ?? false | ||
|
||
if( next === true ) { | ||
node.start() | ||
} else if( prev === true ) { | ||
node.stop() | ||
this.promise.done() | ||
this.promise = $mol_promise() | ||
} | ||
|
||
return next ?? false | ||
} | ||
|
||
override destructor() { | ||
this.active( false ) | ||
super.destructor() | ||
} | ||
|
||
@ $mol_mem | ||
override output() { | ||
this.active( true ) | ||
return super.output() | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
namespace $ { | ||
|
||
export type $mol_audio_vibe_shape = | ||
| 'sine' | ||
| 'square' | ||
| 'sawtooth' | ||
| 'triangle' | ||
| 'custom' | ||
|
||
/** | ||
* @see https://mol.hyoo.ru/#!section=demos/demo=mol_audio_demo_vibe | ||
*/ | ||
export class $mol_audio_vibe extends $mol_audio_scheduled { | ||
|
||
@ $mol_mem | ||
override node() { return this.context().createOscillator() } | ||
|
||
@ $mol_mem | ||
freq( next = 440 ) { return next } | ||
|
||
@ $mol_mem | ||
shape( next: $mol_audio_vibe_shape = 'sine' ) { return next } | ||
|
||
@ $mol_mem | ||
override node_configured(): AudioScheduledSourceNode { | ||
const node = this.node() | ||
node.frequency.setValueAtTime( this.freq(), this.time() ) | ||
node.type = this.shape() | ||
|
||
return node | ||
} | ||
|
||
} | ||
} |
This file was deleted.
Oops, something went wrong.