Files
nextcloud-recognize/lib/Classifiers/Audio/MusicnnClassifier.php
Marcel Klehr d3625422cb fix(psalm): Upgrade to psalm 6 and fix issues
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2025-04-09 13:06:24 +02:00

54 lines
1.8 KiB
PHP

<?php
/*
* Copyright (c) 2021-2022 The Recognize contributors.
* This file is licensed under the Affero General Public License version 3 or later. See the COPYING file.
*/
declare(strict_types=1);
namespace OCA\Recognize\Classifiers\Audio;
use OCA\Recognize\Classifiers\Classifier;
use OCA\Recognize\Service\Logger;
use OCA\Recognize\Service\QueueService;
use OCA\Recognize\Service\TagManager;
use OCP\AppFramework\Services\IAppConfig;
use OCP\Files\IRootFolder;
use OCP\IPreview;
use OCP\ITempManager;
final class MusicnnClassifier extends Classifier {
public const AUDIO_TIMEOUT = 40; // seconds
public const AUDIO_PUREJS_TIMEOUT = 420; // seconds
public const MODEL_NAME = 'musicnn';
private TagManager $tagManager;
public function __construct(Logger $logger, IAppConfig $config, TagManager $tagManager, QueueService $queue, IRootFolder $rootFolder, ITempManager $tempManager, IPreview $previewProvider) {
parent::__construct($logger, $config, $rootFolder, $queue, $tempManager, $previewProvider);
$this->tagManager = $tagManager;
}
/**
* @param \OCA\Recognize\Db\QueueFile[] $queueFiles
* @return void
* @throws \ErrorException|\RuntimeException
*/
public function classify(array $queueFiles): void {
if ($this->config->getAppValueString('tensorflow.purejs', 'false') === 'true') {
$timeout = self::AUDIO_PUREJS_TIMEOUT;
} else {
$timeout = self::AUDIO_TIMEOUT;
}
$classifierProcess = $this->classifyFiles(self::MODEL_NAME, $queueFiles, $timeout);
/**
* @var list<string> $results
*/
foreach ($classifierProcess as $queueFile => $results) {
$this->tagManager->assignTags($queueFile->getFileId(), $results);
$this->config->setAppValueString(self::MODEL_NAME.'.status', 'true');
$this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time());
}
}
}