API route to generate waveform images

This commit is contained in:
advplyr 2023-04-29 14:57:51 -05:00
parent 4db26f9f79
commit 74652e2e54
4 changed files with 66 additions and 1 deletions

View file

@ -1,4 +1,5 @@
const Logger = require('../Logger')
const ffmpegHelpers = require('../utils/ffmpegHelpers')
class ToolsController {
constructor() { }
@ -98,6 +99,32 @@ class ToolsController {
res.sendStatus(200)
}
getAudioFileWaveform(req, res) {
let start = Number(req.query.start || 0)
let end = Number(req.query.end || 0)
if (isNaN(start) || isNaN(end) || start < 0 || end > req.libraryItem.media.duration || end <= start || end - start < 5) {
return res.status(400).send('Invalid start/end query params')
}
const paths = []
let currentTime = 0
let startOffset = 0
for (const track of req.libraryItem.media.tracks) {
currentTime += track.duration
if (currentTime > start) {
if (!paths.length) startOffset = track.startOffset
paths.push(track.metadata.path)
}
if (currentTime > end) {
break
}
}
start -= startOffset
end -= startOffset
ffmpegHelpers.generateWaveform(paths, start, end, res)
}
middleware(req, res, next) {
if (!req.user.isAdminOrUp) {
Logger.error(`[LibraryItemController] Non-root user attempted to access tools route`, req.user)