@@ -66,11 +66,6 @@ interface IMediaElementAudioSourceOptions extends MediaElementAudioSourceOptions
6666 loop : boolean ;
6767}
6868
69- interface IMediaElementAudioSourceNode extends MediaElementAudioSourceNode {
70- onended : IOnEnded ;
71- loop : boolean ;
72- }
73-
7469export interface IChangeVolumeOptions {
7570 volume : number ;
7671 sound ?: ISound ;
@@ -388,18 +383,18 @@ class PlayerAudio {
388383 public async createMediaElementSourceNode ( sourceNodeOptions : IMediaElementAudioSourceOptions , sound : ISound ) : Promise < void > {
389384
390385 const audioContext = await this . getAudioContext ( ) ;
391- let mediaElementAudioSourceNode : IMediaElementAudioSourceNode ;
386+ let mediaElementAudioSourceNode : MediaElementAudioSourceNode ;
392387
393388 try {
394- mediaElementAudioSourceNode = audioContext . createMediaElementSource ( sourceNodeOptions . mediaElement ) as IMediaElementAudioSourceNode ;
389+ mediaElementAudioSourceNode = audioContext . createMediaElementSource ( sourceNodeOptions . mediaElement ) as MediaElementAudioSourceNode ;
395390 } catch ( error ) {
396391 throw new PlayerError ( error ) ;
397392 }
398393
399394 sound . mediaElementAudioSourceNode = mediaElementAudioSourceNode ;
400395
401396 // do we loop this song
402- mediaElementAudioSourceNode . loop = sourceNodeOptions . loop ;
397+ mediaElementAudioSourceNode . mediaElement . loop = sourceNodeOptions . loop ;
403398
404399 // ??? no onEnded on MediaElementSource: https://developer.mozilla.org/en-US/docs/Web/API/AudioScheduledSourceNode/onended
405400 // ??? mediaElementAudioSourceNode.mediaElement.ended
@@ -408,7 +403,8 @@ class PlayerAudio {
408403 // NOTE: the onEnded handler won't have any effect if the loop property is set to
409404 // true, as the audio won't stop playing. To see the effect in this case you'd
410405 // have to use AudioBufferSourceNode.stop()
411- mediaElementAudioSourceNode . onended = ( ) : void => {
406+ mediaElementAudioSourceNode . mediaElement . onended = ( ) : void => {
407+ sourceNodeOptions . onEnded ( ) ;
412408 this . destroySourceNode ( sound ) ;
413409 // TODO on end destroy the audio element, probably not if loop enabled, but if loop
414410 // is disabled, maybe still a good idea to keep it (cache?), but not all audio elements
@@ -417,7 +413,7 @@ class PlayerAudio {
417413
418414 }
419415
420- public connectSourceNodeToGraphNodes ( sourceNode : AudioBufferSourceNode | IMediaElementAudioSourceNode ) : void {
416+ public connectSourceNodeToGraphNodes ( sourceNode : AudioBufferSourceNode | MediaElementAudioSourceNode ) : void {
421417
422418 // audio routing graph
423419 this . getAudioGraph ( ) . then ( ( audioGraph : IAudioGraph ) => {
@@ -576,4 +572,4 @@ class PlayerAudio {
576572
577573}
578574
579- export { PlayerAudio , IAudioGraph , IAudioOptions , IAudioBufferSourceOptions , IMediaElementAudioSourceOptions , IMediaElementAudioSourceNode } ;
575+ export { PlayerAudio , IAudioGraph , IAudioOptions , IAudioBufferSourceOptions , IMediaElementAudioSourceOptions } ;
0 commit comments