mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-02-02 16:29:39 +00:00
API route to generate waveform images
This commit is contained in:
parent
4db26f9f79
commit
74652e2e54
4 changed files with 66 additions and 1 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue