diff --git a/BizHawk.Client.Common/movie/Subtitle.cs b/BizHawk.Client.Common/movie/Subtitle.cs index dbc7cff4d2..73d056ef2e 100644 --- a/BizHawk.Client.Common/movie/Subtitle.cs +++ b/BizHawk.Client.Common/movie/Subtitle.cs @@ -44,5 +44,60 @@ namespace BizHawk.Client.Common return sb.ToString(); } + + public string ToSubRip(int index, double fps) + { + var sb = new StringBuilder(); + + sb.Append(index.ToString()); + sb.Append("\r\n"); + + // Frame timing + double start = (double)Frame; + double end = (double)(Frame + Duration); + + int startTime = (int)(start * 1000 / fps); + int endTime = (int)(end * 1000 / fps); + + var startString = string.Format( + "{0:d2}:{1:d2}:{2:d2},{3:d3}", + startTime / 3600000, + (startTime / 60000) % 60, + (startTime / 1000) % 60, + startTime % 1000 + ); + + var endString = string.Format( + "{0:d2}:{1:d2}:{2:d2},{3:d3}", + endTime / 3600000, + (endTime / 60000) % 60, + (endTime / 1000) % 60, + endTime % 1000 + ); + + sb.Append(startString); + sb.Append(" --> "); + sb.Append(endString); + sb.Append("\r\n"); + + // TODO: Positioning + + // Color tag open + uint rgb = (Color & 0x00FFFFFF); + sb.Append(""); + + // Message text + sb.Append(Message); + + // Color tag close + sb.Append("\r\n"); + + // Seperator + sb.Append("\r\n"); + + return sb.ToString(); + } } } diff --git a/BizHawk.Client.Common/movie/SubtitleList.cs b/BizHawk.Client.Common/movie/SubtitleList.cs index 738904f617..a0570c4aa5 100644 --- a/BizHawk.Client.Common/movie/SubtitleList.cs +++ b/BizHawk.Client.Common/movie/SubtitleList.cs @@ -54,5 +54,17 @@ namespace BizHawk.Client.Common return false; } + + public string ToSubRip(double fps) + { + int index = 1; + + var sb = new StringBuilder(); + + foreach (var subtitle in this) + sb.Append(subtitle.ToSubRip(index++, fps)); + + return sb.ToString(); + } } } \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.cs b/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.cs index 66fdcc096c..23dbc80b98 100644 --- a/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.cs +++ b/BizHawk.Client.EmuHawk/movie/EditSubtitlesForm.cs @@ -171,6 +171,7 @@ namespace BizHawk.Client.EmuHawk private void Export_Click(object sender, EventArgs e) { + // Get file to save as var form = new SaveFileDialog(); form.AddExtension = true; form.Filter = "SubRip Files (*.srt)|*.srt|All files (*.*)|*.*"; @@ -183,6 +184,7 @@ namespace BizHawk.Client.EmuHawk if (result != System.Windows.Forms.DialogResult.OK) return; + // Fetch fps var system = _selectedMovie.HeaderEntries[HeaderKeys.PLATFORM]; var pal = _selectedMovie.HeaderEntries.ContainsKey(HeaderKeys.PAL) && _selectedMovie.HeaderEntries[HeaderKeys.PAL] == "1"; @@ -205,59 +207,15 @@ namespace BizHawk.Client.EmuHawk return; } - int index = 0; + // Create string and write to file + var str = _selectedMovie.Subtitles.ToSubRip(fps); + File.WriteAllText(fileName, str); - var sb = new StringBuilder(); - - foreach (var subtitle in _selectedMovie.Subtitles) - { - // Subtitle index - index++; - - sb.Append(index.ToString()); - sb.Append("\r\n"); - - // Frame timing - double start = (double)subtitle.Frame; - double end = (double)(subtitle.Frame + subtitle.Duration); - - int startTime = (int)(start * 1000 / fps); - int endTime = (int)(end * 1000 / fps); - - var startString = string.Format( - "{0:d2}:{1:d2}:{2:d2},{3:d3}", - startTime / 3600000, - (startTime / 60000) % 60, - (startTime / 1000) % 60, - startTime % 1000 - ); - - var endString = string.Format( - "{0:d2}:{1:d2}:{2:d2},{3:d3}", - endTime / 3600000, - (endTime / 60000) % 60, - (endTime / 1000) % 60, - endTime % 1000 - ); - - sb.Append(startString); - sb.Append(" --> "); - sb.Append(endString); - sb.Append("\r\n"); - - // TODO: Positioning - - // TODO: Color - - // Message text - sb.Append(subtitle.Message); - sb.Append("\r\n"); - - // Seperator - sb.Append("\r\n"); - } - - File.WriteAllText(form.FileName, sb.ToString()); + // Display success + MessageBox.Show( + string.Format("Subtitles succesfully exported to {0}.", fileName), + "Success" + ); } } }