From 4c98c0bc230e6678810865574a925c51de5ce04d Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 12 Jul 2021 14:02:51 -0600 Subject: [PATCH] Increase sample count in voice message thumbnail Fixes https://github.com/vector-im/element-web/issues/17817 Technically requires https://github.com/matrix-org/matrix-react-sdk/pull/6357 for sample sizing. --- src/components/views/rooms/VoiceRecordComposerTile.tsx | 2 +- src/voice/Playback.ts | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/VoiceRecordComposerTile.tsx b/src/components/views/rooms/VoiceRecordComposerTile.tsx index 5d984eacfa..701a5e99ef 100644 --- a/src/components/views/rooms/VoiceRecordComposerTile.tsx +++ b/src/components/views/rooms/VoiceRecordComposerTile.tsx @@ -95,7 +95,7 @@ export default class VoiceRecordComposerTile extends React.PureComponent Math.round(v * 1024)), + waveform: this.state.recorder.getPlayback().waveformThumbnail.map(v => Math.round(v * 1024)), }, "org.matrix.msc3245.voice": {}, // No content, this is a rendering hint }); diff --git a/src/voice/Playback.ts b/src/voice/Playback.ts index 6a120bf924..10e4ad6b7d 100644 --- a/src/voice/Playback.ts +++ b/src/voice/Playback.ts @@ -56,6 +56,7 @@ export class Playback extends EventEmitter implements IDestroyable { private state = PlaybackState.Decoding; private audioBuf: AudioBuffer; private resampledWaveform: number[]; + private thumbnailWaveform: number[]; private waveformObservable = new SimpleObservable(); private readonly clock: PlaybackClock; private readonly fileSize: number; @@ -72,6 +73,7 @@ export class Playback extends EventEmitter implements IDestroyable { this.fileSize = this.buf.byteLength; this.context = createAudioContext(); this.resampledWaveform = arrayFastResample(seedWaveform ?? DEFAULT_WAVEFORM, PLAYBACK_WAVEFORM_SAMPLES); + this.thumbnailWaveform = arrayFastResample(seedWaveform ?? DEFAULT_WAVEFORM, 100); this.waveformObservable.update(this.resampledWaveform); this.clock = new PlaybackClock(this.context); } @@ -92,6 +94,14 @@ export class Playback extends EventEmitter implements IDestroyable { return this.resampledWaveform; } + /** + * Stable waveform for representing a thumbnail of the media. Values are + * guaranteed to be between zero and one, inclusive. + */ + public get waveformThumbnail(): number[] { + return this.thumbnailWaveform; + } + public get waveformData(): SimpleObservable { return this.waveformObservable; }