Ejemplo n.º 1
0
 /**
  * Reads audio file record from database and generates audio preview.
  */
 public function preview()
 {
     Logger::printf("Requested preview for track %s", $this->track_id);
     if ($this->hasPreview()) {
         Logger::printf("Track preview is available (file_id is %s)", $this->track_data[TSongs::PREVIEW_ID]);
         FileServer::sendToClient($this->track_data[TSongs::PREVIEW_ID]);
         return;
     }
     Logger::printf("Track preview is unavailable");
     Logger::printf("Generating new track preview in real time");
     header("Content-Type: " . PREVIEW_MIME);
     $temp_file = TempFileProvider::generate("preview", ".mp3");
     $filename = FileServer::getFileUsingId($this->track_data[TSongs::FILE_ID]);
     $command_template = "%s -i %s -bufsize 256k -vn -ab 128k -ac 2 -acodec libmp3lame -f mp3 - | tee %s";
     $command = sprintf($command_template, $this->settings->get("tools", "ffmpeg_cmd"), escapeshellarg($filename), escapeshellarg($temp_file));
     passthru($command);
     $temp_file_id = FileServer::register($temp_file, PREVIEW_MIME);
     Logger::printf("New preview registered => %s", $temp_file_id);
     SongDao::updateSongUsingId($this->track_id, [TSongs::PREVIEW_ID => $temp_file_id]);
 }
Ejemplo n.º 2
0
 public static function changeCover($song_id, $cover_file)
 {
     $song_ids = explode(",", $song_id);
     $song_objects = (new SelectQuery(TSongs::_NAME))->where(TSongs::ID, $song_ids)->where(TSongs::USER_ID, self::$me->getId())->fetchAll();
     // Delete exists covers
     foreach ($song_objects as $song) {
         if ($song[TSongs::C_SMALL_ID]) {
             FileServer::unregister($song[TSongs::C_SMALL_ID]);
         }
         if ($song[TSongs::C_MID_ID]) {
             FileServer::unregister($song[TSongs::C_MID_ID]);
         }
         if ($song[TSongs::C_BIG_ID]) {
             FileServer::unregister($song[TSongs::C_BIG_ID]);
         }
     }
     $covers = FFProbe::readTempCovers($cover_file)->getOrThrow(ControllerException::class, "Image file is corrupted");
     $query = (new UpdateQuery(TSongs::_NAME))->where(TSongs::ID, $song_ids)->where(TSongs::USER_ID, self::$me->getId());
     $full_cover_id = FileServer::register($covers[0]);
     $middle_cover_id = FileServer::register($covers[1]);
     $small_cover_id = FileServer::register($covers[2]);
     $query->set(TSongs::C_SMALL_ID, $small_cover_id)->set(TSongs::C_MID_ID, $middle_cover_id)->set(TSongs::C_BIG_ID, $full_cover_id);
     $query->returning(implode(",", [TSongs::ID, TSongs::C_SMALL_ID, TSongs::C_MID_ID, TSongs::C_BIG_ID]));
     return $query->fetchAll();
 }