mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-19 17:16:08 +08:00
feat: currentTime
This commit is contained in:
parent
d60252dca5
commit
3ec7681ecc
@ -340,11 +340,25 @@ export class AudioRoute
|
|||||||
status: AudioStatus = AudioStatus.Stoped;
|
status: AudioStatus = AudioStatus.Stoped;
|
||||||
/** 暂停时刻 */
|
/** 暂停时刻 */
|
||||||
private pauseTime: number = 0;
|
private pauseTime: number = 0;
|
||||||
|
/** 暂停时播放了多长时间 */
|
||||||
|
private pauseCurrentTime: number = 0;
|
||||||
|
|
||||||
/** 音频时长,单位秒 */
|
/** 音频时长,单位秒 */
|
||||||
get duration() {
|
get duration() {
|
||||||
return this.source.duration;
|
return this.source.duration;
|
||||||
}
|
}
|
||||||
|
/** 当前播放了多长时间,单位秒 */
|
||||||
|
get currentTime() {
|
||||||
|
if (this.status === AudioStatus.Paused) {
|
||||||
|
return this.pauseCurrentTime;
|
||||||
|
} else {
|
||||||
|
return this.source.currentTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set currentTime(time: number) {
|
||||||
|
this.source.stop();
|
||||||
|
this.source.play(time);
|
||||||
|
}
|
||||||
|
|
||||||
private shouldStop: boolean = false;
|
private shouldStop: boolean = false;
|
||||||
/**
|
/**
|
||||||
@ -430,6 +444,7 @@ export class AudioRoute
|
|||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.pauseCurrentTime = this.source.currentTime;
|
||||||
const time = this.source.stop();
|
const time = this.source.stop();
|
||||||
this.pauseTime = time;
|
this.pauseTime = time;
|
||||||
if (this.shouldStop) {
|
if (this.shouldStop) {
|
||||||
|
@ -24,6 +24,8 @@ export abstract class AudioSource
|
|||||||
|
|
||||||
/** 获取音频时长 */
|
/** 获取音频时长 */
|
||||||
abstract get duration(): number;
|
abstract get duration(): number;
|
||||||
|
/** 获取当前音频播放了多长时间 */
|
||||||
|
abstract get currentTime(): number;
|
||||||
|
|
||||||
constructor(public readonly ac: AudioContext) {
|
constructor(public readonly ac: AudioContext) {
|
||||||
super();
|
super();
|
||||||
@ -81,7 +83,9 @@ export class AudioStreamSource extends AudioSource implements IStreamReader {
|
|||||||
/** 歌曲时长,加载完毕之前保持为 0 */
|
/** 歌曲时长,加载完毕之前保持为 0 */
|
||||||
duration: number = 0;
|
duration: number = 0;
|
||||||
/** 当前已经播放了多长时间 */
|
/** 当前已经播放了多长时间 */
|
||||||
// readonly currentTime: number = -1;
|
get currentTime(): number {
|
||||||
|
return this.ac.currentTime - this.lastStartTime + this.lastStartWhen;
|
||||||
|
}
|
||||||
/** 在流传输阶段,至少缓冲多长时间的音频之后才开始播放,单位秒 */
|
/** 在流传输阶段,至少缓冲多长时间的音频之后才开始播放,单位秒 */
|
||||||
bufferPlayDuration: number = 1;
|
bufferPlayDuration: number = 1;
|
||||||
/** 音频的采样率,未成功解析出之前保持为 0 */
|
/** 音频的采样率,未成功解析出之前保持为 0 */
|
||||||
@ -92,6 +96,8 @@ export class AudioStreamSource extends AudioSource implements IStreamReader {
|
|||||||
|
|
||||||
private target?: IAudioInput;
|
private target?: IAudioInput;
|
||||||
|
|
||||||
|
/** 上一次播放是从何时开始的 */
|
||||||
|
private lastStartWhen: number = 0;
|
||||||
/** 开始播放时刻 */
|
/** 开始播放时刻 */
|
||||||
private lastStartTime: number = 0;
|
private lastStartTime: number = 0;
|
||||||
/** 上一次播放的缓存长度 */
|
/** 上一次播放的缓存长度 */
|
||||||
@ -492,8 +498,12 @@ export class AudioBufferSource extends AudioSource {
|
|||||||
private loop: boolean = false;
|
private loop: boolean = false;
|
||||||
|
|
||||||
duration: number = 0;
|
duration: number = 0;
|
||||||
// readonly currentTime: number = -1;
|
get currentTime(): number {
|
||||||
|
return this.ac.currentTime - this.lastStartTime + this.lastStartWhen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 上一次播放是从何时开始的 */
|
||||||
|
private lastStartWhen: number = 0;
|
||||||
/** 播放开始时刻 */
|
/** 播放开始时刻 */
|
||||||
private lastStartTime: number = 0;
|
private lastStartTime: number = 0;
|
||||||
private target?: IAudioInput;
|
private target?: IAudioInput;
|
||||||
|
Loading…
Reference in New Issue
Block a user