public ConvertOsuCommand(string[] args) : base(args) { OutputPath = args[2]; Beatmap = new OsuBeatmap(args[1]); Beatmap.ToQua().Save(args[2]); }
public void CheckObjectCount() { var converter = new OsuBeatmap(BeatmapFilename); var qua = converter.ToQua(); Assert.Equal(2041 + 270, qua.HitObjects.Count); }
public void CheckCommonBPM() { // This map had incorrect common BPM. var converter = new OsuBeatmap("./Osu/Resources/Camellia feat. Nanahira - ChoChoKouSokuDeMaeSaiSoku!!! SpeedStarKanade (jakads) [Tsukahara's MAXIMUM].osu"); var qua = converter.ToQua(); Assert.Equal(500, qua.GetCommonBpm()); }
public void CheckObjectCountWithHitsounds() { // This map had missing objects due to an error in the parsing logic. var converter = new OsuBeatmap("./Osu/Resources/xi - Blue Zenith (Jepetski) [Zen's Black Another].osu"); var qua = converter.ToQua(); Assert.Equal(4084 + 49, qua.HitObjects.Count); }
public void KeySoundZeroVolume() { var converter = new OsuBeatmap("./Osu/Resources/keysound-zero-volume.osu"); var qua = converter.ToQua(); var groundTruthQua = Qua.Parse("./Osu/Resources/keysound-zero-volume.qua"); Assert.Equal(groundTruthQua.HitObjects, qua.HitObjects, HitObjectInfo.ByValueComparer); }
public void HitSoundTypeConversionCheck() { var converter = new OsuBeatmap("./Osu/Resources/hitsounds.osu"); var qua = converter.ToQua(); var groundTruthQua = Qua.Parse("./Osu/Resources/hitsounds.qua"); Assert.True(qua.EqualByValue(groundTruthQua)); }
public void FullConversionCheck() { var converter = new OsuBeatmap(BeatmapFilename); var qua = converter.ToQua(); var groundTruthQua = Qua.Parse(Path.ChangeExtension(BeatmapFilename, "qua")); Assert.True(qua.EqualByValue(groundTruthQua)); }
public void FullConversionWithKeysoundsCheck() { var converter = new OsuBeatmap("./Osu/Resources/megalovania.osu"); var qua = converter.ToQua(); var groundTruthQua = Qua.Parse("./Osu/Resources/megalovania.qua"); Assert.True(qua.EqualByValue(groundTruthQua)); }
public void SoundEffectsFromO2JamConvert() { var converter = new OsuBeatmap("./Osu/Resources/Glide.osu"); var qua = converter.ToQua(); var groundTruthQua = Qua.Parse("./Osu/Resources/Glide-sound-effects.qua"); Assert.Equal(groundTruthQua.CustomAudioSamples, qua.CustomAudioSamples, CustomAudioSampleInfo.ByValueComparer); Assert.Equal(groundTruthQua.SoundEffects, qua.SoundEffects, SoundEffectInfo.ByValueComparer); }
public void ConvertToQuaFile() { var dir = "./tests/osu"; Directory.CreateDirectory(dir); var converter = new OsuBeatmap(BeatmapFilename); var qua = converter.ToQua(); qua.Save($"{dir}/output.qua"); }
/// <summary> /// Loads the .qua, .osu or .sm file for a map. /// /// </summary> /// <returns></returns> /// <exception cref="ArgumentException"></exception> public Qua LoadQua(bool checkValidity = true) { // Reference to the parsed .qua file Qua qua; // Handle osu! maps as well switch (Game) { case MapGame.Quaver: var quaPath = $"{ConfigManager.SongDirectory}/{Directory}/{Path}"; qua = Qua.Parse(quaPath, checkValidity); break; case MapGame.Osu: var osu = new OsuBeatmap(MapManager.OsuSongsFolder + Directory + "/" + Path); qua = osu.ToQua(); break; default: throw new InvalidEnumArgumentException(); } return(qua); }
/// <summary> /// Exports the entire mapset to a zip (.qp) file. /// </summary> public void ExportToZip() { var exportsDir = $"{ConfigManager.DataDirectory}/Exports/"; System.IO.Directory.CreateDirectory(exportsDir); var tempFolder = $"{ConfigManager.DataDirectory}/temp/{GameBase.Game.TimeRunning}/"; System.IO.Directory.CreateDirectory(tempFolder); using (var archive = ZipArchive.Create()) { foreach (var map in Maps) { try { switch (map.Game) { case MapGame.Quaver: var path = $"{ConfigManager.SongDirectory.Value}/{map.Directory}/{map.Path}"; File.Copy(path, $"{tempFolder}/{map.Path}"); break; // Map is from osu!, so we need to convert it to .qua format case MapGame.Osu: var osuPath = $"{MapManager.OsuSongsFolder}{map.Directory}/{map.Path}"; var osu = new OsuBeatmap(osuPath); map.BackgroundPath = osu.Background; var name = StringHelper.FileNameSafeString($"{map.Artist} - {map.Title} [{map.DifficultyName}].qua"); var savePath = $"{tempFolder}/{name}"; osu.ToQua().Save(savePath); Logger.Debug($"Successfully converted osu beatmap: {osuPath}", LogType.Runtime); break; } // Copy over audio file if necessary if (File.Exists(MapManager.GetAudioPath(map)) && !File.Exists($"{tempFolder}/{map.AudioPath}")) { File.Copy(MapManager.GetAudioPath(map), $"{tempFolder}/{map.AudioPath}"); } // Copy over background file if necessary if (File.Exists(MapManager.GetBackgroundPath(map)) && !File.Exists($"{tempFolder}/{map.BackgroundPath}")) { File.Copy(MapManager.GetBackgroundPath(map), $"{tempFolder}/{map.BackgroundPath}"); } } catch (Exception e) { Logger.Error(e, LogType.Runtime); } } archive.AddAllFromDirectory(tempFolder); var outputPath = exportsDir + $"{StringHelper.FileNameSafeString(Artist + " - " + Title + " - " + GameBase.Game.TimeRunning)}.qp"; archive.SaveTo(outputPath, CompressionType.Deflate); Utils.NativeUtils.HighlightInFileManager(outputPath); } System.IO.Directory.Delete(tempFolder, true); }
/// <summary> /// Converts a .osz archive file to .qua format. M /// (Makes it available to play in Quaver) /// </summary> public static void ConvertOsz(string file, string extractDirectory) { var time = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Milliseconds; var tempFolder = $@"{ConfigManager.DataDirectory}/Temp/{Path.GetFileNameWithoutExtension(file)} - {time}"; if (Directory.Exists(tempFolder)) { Directory.Delete(tempFolder, true); } Directory.CreateDirectory(tempFolder); try { // Extract the .osz archive to the temporary folder using (var archive = ArchiveFactory.Open(file)) { foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { entry.WriteToDirectory(tempFolder, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true }); } } } // Convert all .osu files in the temp folder to .qua foreach (var osuFile in Directory.GetFiles(tempFolder, "*.osu", SearchOption.AllDirectories)) { try { var map = new OsuBeatmap(osuFile); if (!map.IsValid) { continue; } // Convert the map to .qua map.ToQua().Save(map.OriginalFileName.Replace(".osu", ".qua")); } catch (Exception e) { Logger.Error(e, LogType.Runtime); } } Directory.CreateDirectory(extractDirectory); // Go through each file in the temp folder and add it to the target directory foreach (var tempFile in Directory.GetFiles(tempFolder)) { var fileName = $"{extractDirectory}/{Path.GetFileName(tempFile)}"; // Make sure the path to the file is less than 200 characters while (fileName.Length > 200) { fileName = fileName.Remove(fileName.Length - 1); } // Go through each file and move it. switch (Path.GetExtension(tempFile).ToLower()) { case ".qua": case ".mp3": case ".jpg": case ".png": case ".jpeg": case ".ogg": File.Move(tempFile, fileName); break; default: continue; } } } catch (Exception e) { Logger.Error(e, LogType.Runtime); } }