Skip to content

Commit e8cc0af

Browse files
authored
Merge pull request #12859 from nanaya/audio-preview-unset
Set preview time at 40% if unset
2 parents cc82e8e + ff0ef06 commit e8cc0af

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

app/Models/BeatmapsetArchive.php

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,27 @@ public static function fetch(Beatmapset $beatmapset): ?static
6868
}
6969
}
7070

71-
private static function convertAudioForPreview(string $audioFile, int $previewTime): ?string
71+
private static function convertAudioForPreview(string $audioFile, ?int $previewTime): ?string
7272
{
7373
$srcFile = tmpfile();
7474
fwrite($srcFile, $audioFile);
7575
$srcFilename = get_stream_filename($srcFile);
76+
$srcFilenameEscaped = escapeshellarg($srcFilename);
7677
$dstFile = tmpfile();
7778
$dstFilename = get_stream_filename($dstFile);
7879

7980
$duration = 10000;
80-
$previewTime = max($previewTime, 0);
81+
if ($previewTime === null || $previewTime < 0) {
82+
$srcDuration = (float) exec(implode(' ', [
83+
'timeout 10s',
84+
'ffprobe',
85+
'-loglevel quiet',
86+
"-i {$srcFilenameEscaped}",
87+
'-show_entries format=duration',
88+
'-of csv=p=0',
89+
]));
90+
$previewTime = 0.4 * $srcDuration * 100;
91+
}
8192

8293
$fadeInExtension = min($previewTime, 100);
8394
$fadeIn = $fadeInExtension + 100;
@@ -108,7 +119,7 @@ private static function convertAudioForPreview(string $audioFile, int $previewTi
108119
'-nostdin',
109120
"-ss {$previewTime}ms",
110121
"-t {$duration}ms",
111-
'-i '.escapeshellarg($srcFilename),
122+
"-i {$srcFilenameEscaped}",
112123
"-af {$filter}",
113124
'-map 0:a', // strip out non-audio streams
114125
'-map_metadata -1', // strip out metadata
@@ -176,7 +187,7 @@ public function generateAudioPreview(): ?string
176187
$previewTime = $parsedFile->previewTime;
177188
$audioFilename = $parsedFile->audioFilename;
178189

179-
if (isset($audioFilename, $previewTime)) {
190+
if (isset($audioFilename)) {
180191
$audioFile = $this->readFile($audioFilename);
181192

182193
if ($audioFile !== null) {

0 commit comments

Comments
 (0)