Beispiel #1
0
        static void Main(string[] args)
        {
            var words = File.ReadAllLines(args.Length == 0 ? "words.txt" : args[0]);

            var           hepburnConverter = new HepburnConverter();
            List <string> kanaStrings      = new List <string>();
            List <string> romajiStrings    = new List <string>();

            try
            {
                var ifeLang = Activator.CreateInstance(Type.GetTypeFromProgID("MSIME.Japan")) as IFELanguage;
                int hr      = ifeLang.Open();
                if (hr != 0)
                {
                    throw Marshal.GetExceptionForHR(hr);
                }

                foreach (var item in words)
                {
                    hr = ifeLang.GetPhonetic(item, 1, -1, out var yomigana);
                    if (hr != 0)
                    {
                        throw Marshal.GetExceptionForHR(hr);
                    }

                    if (string.IsNullOrWhiteSpace(item))
                    {
                        Console.WriteLine();
                    }
                    else
                    {
                        Console.WriteLine("Origin:" + item);
                        Console.WriteLine("Kana:" + yomigana);
                        var ganaSpace = "";
                        foreach (var word in yomigana)
                        {
                            ganaSpace += word + " ";
                        }
                        Console.WriteLine("Romaji:" + WanaKana.ToRomaji(hepburnConverter, ganaSpace));

                        kanaStrings.Add(yomigana);
                        romajiStrings.Add(WanaKana.ToRomaji(hepburnConverter, ganaSpace));
                    }
                }

                File.AppendAllLines("kana.txt", kanaStrings);
                File.AppendAllLines("romaji.txt", romajiStrings);

                Console.WriteLine("----------------");
                Console.WriteLine("Done!");
                Console.ReadLine();
            }
            catch (COMException ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        public void ProcessDirectory()
        {
            var subDirectories = this._directory.GetDirectories().Where(dir => dir.ContainsSong()).ToList();
            var oszSongs       = this._directory.GetOszFiles();

            if (this._outputDirectory.GetDirectories().Length > 0)
            {
                Console.WriteLine("Cleaning up output directory..");
                foreach (DirectoryInfo directoryInfo in this._outputDirectory.GetDirectories())
                {
                    directoryInfo.Delete(true);
                }
            }

            int total     = subDirectories.Count + oszSongs.Length;
            int id        = this._startId;
            int count     = 1;
            int succesful = 0;

            string format = $"D{total.ToString().Length}";

            Console.WriteLine($"Processing {total} songs!");

            if (oszSongs.Any())
            {
                DirectoryInfo tempDirectory = this._outputDirectory.CreateSubdirectory("temp");

                OsuProcessor osuProcessor = new OsuProcessor(this._categoryId, tempDirectory);
                foreach (FileInfo fileInfo in oszSongs)
                {
                    Console.Write(
                        $"[{count.ToString(format)}/{total.ToString()}] {Path.GetFileNameWithoutExtension(fileInfo.FullName)}..");

                    Song newSong = osuProcessor.Process(fileInfo, id);
                    if (newSong != null)
                    {
                        this._songs.Add(newSong);

                        string outputPath = $"{this._outputDirectory.FullName}{Path.DirectorySeparatorChar}{id}";

                        Directory.CreateDirectory(outputPath);

                        foreach (FileInfo enumerateFile in tempDirectory.EnumerateFiles())
                        {
                            enumerateFile.MoveTo($"{outputPath}{Path.DirectorySeparatorChar}{enumerateFile.Name}");
                        }

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.Write("OK! \n");
                        Console.ResetColor();

                        succesful += 1;
                        id        += 1;
                    }

                    count += 1;
                }

                tempDirectory.Delete(true);
            }



            if (subDirectories.Any())
            {
                TjaProcessor tjaProcessor = new TjaProcessor(this._categoryId);
                foreach (DirectoryInfo subDirectory in subDirectories)
                {
                    FileInfo tjaFile   = subDirectory.GetTjaFile();
                    FileInfo musicFile = subDirectory.GetMusicFile();

                    Console.Write(
                        $"[{count.ToString(format)}/{total.ToString()}] {Path.GetFileNameWithoutExtension(tjaFile.FullName)}..");

                    Song newSong = tjaProcessor.Process(tjaFile, id);

                    if (newSong != null)
                    {
                        this._songs.Add(newSong);


                        string outputPath = $"{this._outputDirectory.FullName}{Path.DirectorySeparatorChar}{id}";

                        Directory.CreateDirectory(outputPath);

#if !DEBUG
                        musicFile.CopyTo($"{outputPath}{Path.DirectorySeparatorChar}main.ogg", true);
#endif

                        tjaFile.CopyTo($"{outputPath}{Path.DirectorySeparatorChar}main.tja", true);

                        if (this._generateMarkers) //behind a switch for now since I don't want to piss off my FTP server (yet)
                        {
                            HepburnConverter hepburn    = new HepburnConverter();
                            string           markerFile =
                                $"{outputPath}{Path.DirectorySeparatorChar}{Path.GetFileNameWithoutExtension(WanaKana.ToRomaji(hepburn, tjaFile.FullName))}";

                            if (!File.Exists(markerFile))
                            {
                                File.Create(
                                    markerFile); //create an empty file with the song name, just to keep shit organised
                            }
                        }

                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.Write("OK! \n");
                        Console.ResetColor();

                        succesful += 1;
                        id        += 1;
                    }

                    count += 1;
                }
            }

            Console.WriteLine($"\nSuccesfully processed {succesful} songs out of {total}!");

            string json = JsonSerializer.Serialize(this._songs);
            Console.WriteLine("Exporting json...");
            File.WriteAllText($@"{this._outputDirectory}{Path.DirectorySeparatorChar}songs.json", json, Encoding.GetEncoding(932));

            Console.WriteLine($"\nDone! Enjoy! Don't forget to import songs.json to mongoDB!");
        }
Beispiel #3
0
 public String Convert(String input, Boolean upcaseKatakana = false, Trie <Char, String> customRomajiMapping = null) => HepburnConverter.Convert(input, upcaseKatakana, customRomajiMapping);