private static void ImportSound(AtsMotorNoise motorNoise, string path, string sectionName) { var directoryName = Path.GetDirectoryName(path); var soundTxt = AtsParser.ParseIni(path, a => AtsStorage.ReadText(a)); var keyValuePairs = soundTxt[sectionName].GetPairArray(); var motorTrackList = new List <AtsMotorNoise.MotorTrack>(); foreach (var keyValuePair in keyValuePairs) { var index = int.Parse(keyValuePair.Key); var filePath = Path.Combine(directoryName, keyValuePair.Value); if (!File.Exists(filePath)) { AtsDebug.LogError(string.Format("{0}: The file does not exist: {1}, {2}", typeof(AtsMotorNoiseImporter).Name, index, filePath)); return; } var audio = new AtsMotorNoise.MotorAudio(new StreamReader(filePath).BaseStream); motorTrackList.Add(new AtsMotorNoise.MotorTrack(index, filePath, audio)); } motorNoise.SetMotorTracks(motorTrackList.ToArray()); }
public static string ReadText(string path) { if (!Path.IsPathRooted(path)) { path = Path.Combine(AtsModule.ModuleDirectoryPath, path); } if (!File.Exists(path)) { throw new FileNotFoundException($"{typeof(AtsStorage).Name}: The file does not exist: {path}"); } AtsDebug.LogInfo($"{nameof(AtsStorage)}: ReadText: Load: {path}"); var header = string.Empty; var body = string.Empty; var encoding = Encoding.UTF8; var hasHeader = false; using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))) { header = streamReader.ReadLine(); } var match = Regex.Match(header.ToLower(), "bvets.+|version .+"); if (match.Success) { hasHeader = true; match = Regex.Match(header.ToLower(), ":"); if (match.Success) { var headerLength = header.IndexOf(','); var encodingName = (headerLength == -1 ? header : header.Substring(0, headerLength)).Substring(match.Index + 1); encoding = Encoding.GetEncoding(encodingName); } } using (var streamReader = new StreamReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), encoding)) { if (hasHeader) { streamReader.ReadLine(); } body = streamReader.ReadToEnd(); } return(body); }