projects/atft/src/lib/object/loader/audio-loader.component.ts
OnDestroy
providers |
provideParent(AudioLoaderComponent)
|
selector | atft-audio-loader |
template |
|
Properties |
|
Methods |
|
Inputs |
Outputs |
constructor(rendererService: RendererService, parent: AbstractObject3D<any>)
|
|||||||||
Parameters :
|
autoplay | |
Type : boolean
|
|
Default value : true
|
|
loop | |
Type : boolean
|
|
Default value : false
|
|
url | |
Type : string
|
|
volume | |
Type : number
|
|
Default value : 0.5
|
|
model | |
Type : string
|
|
Inherited from
AbstractModelLoader
|
|
Defined in
AbstractModelLoader:21
|
|
The model data source (usually a URI). Settings this property only hides the previous model upon successful loading of the new one. This especially means that if the new data source is invalid, the old model will not be removed from the scene. |
layer | |
Type : number
|
|
Default value : 0
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:42
|
name | |
Type : string
|
|
Default value : uuidv4()
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:40
|
rotateX | |
Type : number
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:24
|
|
Rotation in Euler angles (radians) with order X, Y, Z. |
rotateY | |
Type : number
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:25
|
rotateZ | |
Type : number
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:26
|
scaleX | |
Type : number
|
|
Default value : 1
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:36
|
scaleY | |
Type : number
|
|
Default value : 1
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:37
|
scaleZ | |
Type : number
|
|
Default value : 1
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:38
|
translateX | |
Type : number
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:31
|
|
Translate the geometry. This is typically done as a one time operation, and not during a loop. |
translateY | |
Type : number
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:32
|
translateZ | |
Type : number
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:33
|
ready | |
Type : EventEmitter
|
|
changed | |
Type : EventEmitter
|
|
Inherited from
AbstractObject3D
|
|
Defined in
AbstractObject3D:44
|
Protected audioLoaded | ||||||
audioLoaded(buffer: AudioBuffer)
|
||||||
Parameters :
Returns :
void
|
Private initListener |
initListener()
|
Returns :
void
|
Protected Async loadLazyObject |
loadLazyObject()
|
Inherited from
AbstractLazyObject3D
|
Defined in
AbstractLazyObject3D:39
|
Returns :
unknown
|
Public ngOnDestroy |
ngOnDestroy()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:63
|
Returns :
void
|
Public pause |
pause()
|
Returns :
void
|
Public play |
play()
|
Returns :
void
|
Public stop |
stop()
|
Returns :
void
|
Protected afterInit |
afterInit()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:33
|
Returns :
void
|
Protected newObject3DInstance |
newObject3DInstance()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:68
|
Returns :
THREE.Object3D
|
Protected startLoading |
startLoading()
|
Inherited from
AbstractLazyObject3D
|
Defined in
AbstractLazyObject3D:39
|
Returns :
void
|
Public addChild | ||||||
addChild(object: AbstractObject3D<any>)
|
||||||
Inherited from
AbstractObject3D
|
||||||
Defined in
AbstractObject3D:143
|
||||||
Parameters :
Returns :
void
|
Public applyRotation |
applyRotation()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:118
|
Returns :
void
|
Public applyScale |
applyScale()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:135
|
Returns :
void
|
Public applyTranslation |
applyTranslation()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:127
|
Returns :
void
|
Public findByName | ||||||
findByName(name: string)
|
||||||
Inherited from
AbstractObject3D
|
||||||
Defined in
AbstractObject3D:185
|
||||||
Parameters :
Returns :
any
|
Public getChildren |
getChildren()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:202
|
Returns :
Array<AbstractObject3D<any>>
|
Public getObject |
getObject()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:175
|
Returns :
T
|
Public ngAfterViewInit |
ngAfterViewInit()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:181
|
Returns :
void
|
Public ngOnChanges | ||||||
ngOnChanges(changes: SimpleChanges)
|
||||||
Inherited from
AbstractObject3D
|
||||||
Defined in
AbstractObject3D:57
|
||||||
Parameters :
Returns :
void
|
Public ngOnInit |
ngOnInit()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:97
|
Returns :
void
|
Protected recursionByName | |||||||||
recursionByName(currentNode: AbstractObject3D<any>, name: string)
|
|||||||||
Inherited from
AbstractObject3D
|
|||||||||
Defined in
AbstractObject3D:192
|
|||||||||
Parameters :
Returns :
any
|
Public removeChild | ||||||
removeChild(object: AbstractObject3D<any>)
|
||||||
Inherited from
AbstractObject3D
|
||||||
Defined in
AbstractObject3D:160
|
||||||
Parameters :
Returns :
void
|
Public removeChildByName | ||||||
removeChildByName(name: string)
|
||||||
Inherited from
AbstractObject3D
|
||||||
Defined in
AbstractObject3D:206
|
||||||
Parameters :
Returns :
void
|
Public updateParent |
updateParent()
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:111
|
Returns :
void
|
Private listener |
Default value : new THREE.AudioListener()
|
Private loader |
Default value : new THREE.AudioLoader()
|
Private sound |
Default value : new THREE.Audio(this.listener)
|
Protected _model |
Type : string
|
Inherited from
AbstractModelLoader
|
Defined in
AbstractModelLoader:12
|
Protected lazyObject |
Type : THREE.Object3D | undefined
|
Inherited from
AbstractLazyObject3D
|
Defined in
AbstractLazyObject3D:24
|
This is reference to lazy loaded Object3D (async after init) |
Private parentInitialized |
Default value : false
|
Inherited from
AbstractLazyObject3D
|
Defined in
AbstractLazyObject3D:19
|
Flag to signal whether the parentScene class instance AbstractObject3D called the overwritten method AbstractModelLoader yet. Unless that method was called, no methods and properties of AbstractObject3D may be safely accessed, especially AbstractObject3D and AbstractObject3D.renderer. |
Protected childlren |
Type : Array<AbstractObject3D<any>>
|
Default value : []
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:46
|
Protected object |
Type : T
|
Inherited from
AbstractObject3D
|
Defined in
AbstractObject3D:48
|
import {Component, EventEmitter, Input, OnDestroy, Optional, Output, SkipSelf} from '@angular/core';
import * as THREE from 'three';
import {RendererService} from '../../renderer/renderer.service';
import {provideParent} from '../../util';
import {AbstractObject3D} from '../abstract-object-3d';
import {AbstractModelLoader} from './abstract-model-loader';
@Component({
selector: 'atft-audio-loader',
providers: [provideParent(AudioLoaderComponent)],
template: '<ng-content></ng-content>'
})
export class AudioLoaderComponent extends AbstractModelLoader implements OnDestroy {
private loader = new THREE.AudioLoader();
private listener = new THREE.AudioListener();
private sound = new THREE.Audio(this.listener);
@Input() url!: string;
@Input() volume = 0.5;
@Input() loop = false;
@Input() autoplay = true;
@Output() ready = new EventEmitter();
constructor(
protected override rendererService: RendererService,
@SkipSelf() @Optional() protected override parent: AbstractObject3D<any>
) {
super(rendererService, parent);
this.audioLoaded = this.audioLoaded.bind(this);
}
private initListener() {
console.log('AudioLoaderComponent.initListener');
this.rendererService.getCamera().camera.add(this.listener);
}
protected async loadLazyObject() {
this.initListener();
console.log('AudioLoaderComponent.loadLazyObject url', this.url);
return new Promise<THREE.Object3D>((resolve, reject) => {
this.sound = new THREE.Audio(this.listener);
this.loader.load(this.url, this.audioLoaded, undefined, reject);
resolve(this.sound);
});
}
protected audioLoaded(buffer: AudioBuffer) {
console.log('AudioLoaderComponent.audioLoaded');
this.sound.setBuffer(buffer);
this.sound.setLoop(this.loop);
this.sound.setVolume(this.volume);
this.sound.autoplay = this.autoplay;
if (this.autoplay) {
//NOTE: interaction with user must happen before this component initialization
// three.module.js:46880 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu
this.play();
}
this.ready.emit();
}
public override ngOnDestroy(): void {
console.log('AudioLoaderComponent.ngOnDestroy');
super.ngOnDestroy();
this.sound.stop()
}
public play() {
this.sound.play()
}
public pause() {
this.sound.pause();
}
public stop() {
this.sound.stop();
}
}