-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Audio file timestamp doesn't stop counting at the end of playback #21796
Comments
I suspect the correct behaviour is for the playhead & time to reset to zero and stay there once playback has reached the end (instead of going back to zero and then counting up again which is what it sounds like it happening). Perhaps this could be a good issue for a relatively new person to help with. src/components/views/messages/MAudioBody.tsx / src/components/views/audio_messages/AudioPlayerBase.tsx in react-sdk are probably the files to start with. |
Also, the file should be able to be replayed, of course 😉 |
I noticed something else while drafting a PR for this issue. If you let the player keep counting after the song's finished, switch to another room and switch back it works as normal i.e Stoppping at zero and when the play button is clicked, it plays normally so this may be something to look out for. |
I'd also like for this issue to be assigned to me but given the information at https://github.com/vector-im/element-meta/wiki/Guidance-on-assigning-issues I'll hold that off until I submit my draft PR. Thought I'd mention this here in case anyone else wants to work on this issue. |
The issue here is that the counter does not only stop at the end of playback, but also the audio cannot be replayed unless the page is manually reloaded. |
After digging around for a while, it seems this is a bit above me and I will not be able to continue working on this, anyone who wants to work on it can pick it up. |
can anyone please explain the problem clearly, i'm unable to get the issue. |
I want to work on it. Please assign me this issue. |
Thank you for your interest in this issue @yoda-76 . We will normally not assign the issue to an external contributor until they have provided at least a draft PR which is taking the right direction. For further details, see our guidance on assigning issues. If you have any technical questions about this issue, you can ask for help in #element-dev:matrix.org . |
@chandra1899 I edited the explanation for you so that you can understand the issue. |
@ABHIXIT2 Do you mean that the issue is no longer reproduced? I confirmed the issue still could be reproduced on my side. |
I think it has something to do with the app because it wasn't happening but after installing app and playing audio there it started happening. I will try to solve the problem and if there anything i need to know just lemme know... @luixxiul Edit : This is happening for above 5 min clips |
I am unable to find this file in the source code src/components/views/messages/MAudioBody.tsx |
@t3chguy I looked at https://github.com/matrix-org/matrix-react-sdk/blob/develop/src/components/views/messages/MAudioBody.tsx. Can a reset Function be added to this react component? |
would like to work on this, but new so would love to collaborate and work together on this issue if anyone is interested! |
is the issue still open or is anyone working in it? |
yes i can still reproduce the same |
Hi @t3chguy @luixxiul so a dirty work around would be comparing the currentTime and duration and firing the ended callback |
Is this issue still there, because I cannot reproduce this, I tried to reproduce in the Chrome, Brave, Firefox but I wasn't able to do so. Can anybody confirm ? Attaching the POC video for reference. Element._.audio-file-timestamp-21796.-.Brave.2024-01-08.00-31-05.mp4 |
i am still able to reproduce @nallapaneni-sreehari www_screencapture_com_2024-1-8_12_45.mp4 |
Adding to this issue, I have managed to reproduce it + found a new issue where the play button for different voice note file send after the music file, doesn't work. 2024-12-05.22-20-57.mp4The play button not "clicking" is very random, sometimes works sometimes doesn't. I was able to replicate, all the other properties others have identified about the playback issue I plan to work on this, I'll propose a draft PR in a bit, hopefully within a day. I am barely a beginner when it comes to this, so any help is greatly appreciated! |
Testing and trying a bit more I am not sure abt why and when the play button decides to not respond. I dont understand the error of "Error downloading audio" in voice notes. I followed the steps of installing again and again, first i forgot abt config file, the next time I corrected that, the error is still there. |
Lord this is tough, coming from knowing nothing of this audio and playback stuff. I have dug a bit and in // The point where we use an audio element is fairly arbitrary, though we don't want
// it to be too low. As of writing, voice messages want to show a waveform but audio
// messages do not. Using an audio element means we can't show a waveform preview, so
// we try to target the difference between a voice message file and large audio file.
// Overall, the point of this is to avoid memory-related issues due to storing a massive
// audio buffer in memory, as that can balloon to far greater than the input buffer's
// byte length.
if (this.buf.byteLength > 5 * 1024 * 1024) {
// 5mb
logger.log("Audio file too large: processing through <audio /> element");
this.element = document.createElement("AUDIO") as HTMLAudioElement;
const deferred = defer<unknown>();
this.element.onloadeddata = deferred.resolve;
this.element.onerror = deferred.reject;
this.element.src = URL.createObjectURL(new Blob([this.buf]));
await deferred.promise; // make sure the audio element is ready for us
} else {
// Safari compat: promise API not supported on this function
this.audioBuf = await new Promise((resolve, reject) => {
this.context.decodeAudioData(
// small file logic from here and i thought, why not remove the if block and make every file go through the same decoding instead of resorting to
and I am not sure how exactly to fix these issues lol |
Thanks for looking at this: seems it's not so trivial so I'll take the good first issue etc labels off. |
Hey so I fixed the playback error slightly. if (this.buf.byteLength > 5 * 1024 * 1024) {
// 5mb
logger.log("Audio file too large: processing through <audio /> element");
this.element = document.createElement("AUDIO") as HTMLAudioElement;
const deferred = defer<unknown>();
this.element.onloadeddata = deferred.resolve;
this.element.onerror = deferred.reject;
this.element.src = URL.createObjectURL(new Blob([this.buf]));
+ this.element.onended = this.onPlaybackEnd;
await deferred.promise; // make sure the audio element is ready for us
} else { From line 216, rewrote playbackend method private onPlaybackEnd = async (): Promise<void> => {
+ if (this.element) {
+ this.element.pause();
+ this.element.currentTime = 0; // Reset the audio element
+ } else {
await this.context.suspend();
+ }
this.emit(PlaybackState.Stopped);
}; |
eh it still doesnt work idk what i did :( |
Steps to reproduce
Outcome
What did you expect?
Either (a) the song would be played again from the start or (b) the counter would stop counting at the end of the song. I am not sure which one is expected.
What happened instead?
The counter was reset to zero and started counting, but the song itself was not replayed.
player.mp4
Also, unless the room is reloaded, the audio file cannot be even replayed on the player.
Operating system
Debian
Browser information
Firefox
URL for webapp
localhost
Application version
develop
Homeserver
No response
Will you send logs?
No
The text was updated successfully, but these errors were encountered: