Skip to content

Commit 0426db9

Browse files
Checking for complete NBPML content and fixes for some hallucinations
Complete NBPML checker is added to prevent end-of-file errors and time signature and sharp fixer is added to fix some hallucinations in output that potentially cause errors, exceptions, even crashes.
1 parent 56aa3ab commit 0426db9

11 files changed

Lines changed: 108 additions & 0 deletions

NeoBleeper/CreateMusicWithAI.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,11 @@ private async void buttonCreate_Click(object sender, EventArgs e)
950950
output = Regex.Replace(output, @"\bFsharp(\d+)\b", "F#$1", RegexOptions.IgnoreCase);
951951
output = Regex.Replace(output, @"\bGsharp(\d+)\b", "G#$1", RegexOptions.IgnoreCase);
952952
output = Regex.Replace(output, @"\bAsharp(\d+)\b", "A#$1", RegexOptions.IgnoreCase);
953+
output = Regex.Replace(output, @"\bCs(\d+)\b", "C#$1", RegexOptions.IgnoreCase);
954+
output = Regex.Replace(output, @"\bDs(\d+)\b", "D#$1", RegexOptions.IgnoreCase);
955+
output = Regex.Replace(output, @"\bFs(\d+)\b", "F#$1", RegexOptions.IgnoreCase);
956+
output = Regex.Replace(output, @"\bGs(\d+)\b", "G#$1", RegexOptions.IgnoreCase);
957+
output = Regex.Replace(output, @"\bAs(\d+)\b", "A#$1", RegexOptions.IgnoreCase);
953958
output = Regex.Replace(output, @"\bR(\d+)\b", string.Empty, RegexOptions.IgnoreCase);
954959
output = Regex.Replace(output, @"<Note(\d)>\s*(?:Rest|REST|rest|\-+)?\s*</Note(\d)>", m => $"<Note{m.Groups[1].Value}></Note{m.Groups[2].Value}>", RegexOptions.Singleline);
955960
output = Regex.Replace(output, @"<Note(\d)>\s*None\s*</Note(\d)>", m => $"<Note{m.Groups[1].Value}></Note{m.Groups[2].Value}>", RegexOptions.Singleline | RegexOptions.IgnoreCase);
@@ -980,9 +985,25 @@ private async void buttonCreate_Click(object sender, EventArgs e)
980985
"<${tag}>$2</${tag}>",
981986
RegexOptions.Singleline
982987
);
988+
// Fix TimeSignature if written as a fraction due to hallucination
989+
output = Regex.Replace(
990+
output,
991+
@"<TimeSignature>\s*(\d+)\s*/\s*\d+\s*</TimeSignature>",
992+
m => $"<TimeSignature>{m.Groups[1].Value}</TimeSignature>",
993+
RegexOptions.IgnoreCase
994+
);
983995
// Trim leading/trailing whitespace
984996
output = output.Trim();
985997
output = RewriteOutput(output).Trim();
998+
if(!IsCompleteNBPML(output)) // Check for completeness of NBPML content
999+
{
1000+
Logger.Log("Generated output is incomplete NBPML content.", Logger.LogTypes.Error);
1001+
MessageForm.Show(Resources.MessageIncompleteNBPMLContent, Resources.TitleIncompleteNBPMLContent, MessageBoxButtons.OK, MessageBoxIcon.Error);
1002+
generatedFilename = string.Empty; // Clear the filename if it's incomplete
1003+
output = String.Empty; // Clear the output if it's incomplete
1004+
this.Close(); // Close the form after handling the incomplete output
1005+
return; // Exit the method
1006+
}
9861007
if (!CheckIfOutputIsJSONErrorMessage(JSONText))
9871008
{
9881009
Logger.Log("Output: " + output, Logger.LogTypes.Info);
@@ -1424,6 +1445,14 @@ private string RewriteOutput(string output)
14241445
output = output.Trim();
14251446
return output;
14261447
}
1448+
private bool IsCompleteNBPML(string NBPMLDocument) // Check if the NBPML document has all required sections
1449+
{
1450+
bool isComplete = Regex.Matches(NBPMLDocument, @"<NeoBleeperProjectFile>").Count == 1 &&
1451+
Regex.Matches(NBPMLDocument, @"</NeoBleeperProjectFile>").Count == 1 &&
1452+
Regex.Matches(NBPMLDocument, @"<LineList>").Count == 1 &&
1453+
Regex.Matches(NBPMLDocument, @"</LineList>").Count == 1;
1454+
return isComplete; // Return true if all required sections are present
1455+
}
14271456
private string FixParameterNames(string xmlContent)
14281457
{
14291458
if (string.IsNullOrEmpty(xmlContent))
@@ -1612,12 +1641,19 @@ private string SynchronizeLengths(string xmlContent)
16121641
},
16131642
RegexOptions.Multiline | RegexOptions.IgnoreCase
16141643
);
1644+
// Fix to remove extra space before tag names
1645+
output = Regex.Replace(output, @"<\s+/?", m => m.Value.Replace(" ", ""), RegexOptions.Multiline);
1646+
output = Regex.Replace(output, @"</\s+", "</", RegexOptions.Multiline);
16151647
// Trim and normalize the XML content
16161648
xmlContent = Regex.Replace(xmlContent, @"^[\s\S]*(<NeoBleeperProjectFile>)", "$1", RegexOptions.IgnoreCase);
16171649
xmlContent = Regex.Replace(xmlContent, @"</<(\w+)>", @"</$1>");
16181650
xmlContent = Regex.Replace(
16191651
xmlContent, @"<\?xml.*?\?>", string.Empty, RegexOptions.IgnoreCase);
16201652
//Debug.WriteLine(xmlContent); // For debugging purposes
1653+
if(!IsCompleteNBPML(xmlContent))
1654+
{
1655+
return xmlContent; // Return original content if not complete
1656+
}
16211657
// Load the XML content into an XmlDocument
16221658
var xmlDoc = new System.Xml.XmlDocument();
16231659
xmlDoc.LoadXml(xmlContent);

NeoBleeper/Properties/Resources.Designer.cs

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

NeoBleeper/Properties/Resources.de.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,4 +1001,10 @@ Möchten Sie die Datei trotzdem öffnen?</value>
10011001
<data name="MessageBadGateway" xml:space="preserve">
10021002
<value>Es wurde eine ungültige Antwort vom Upstream-Server empfangen.</value>
10031003
</data>
1004+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1005+
<value>Die generierte Ausgabe ist unvollständiger NBPML-Inhalt und kann nicht verwendet werden.</value>
1006+
</data>
1007+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1008+
<value>Unvollständiger NBPML-Inhalt</value>
1009+
</data>
10041010
</root>

NeoBleeper/Properties/Resources.es.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,4 +1001,10 @@ Puede usar esta ventana para controlar la reproducción de todas las instancias
10011001
<data name="MessageBadGateway" xml:space="preserve">
10021002
<value>Se recibió una respuesta no válida del servidor ascendente.</value>
10031003
</data>
1004+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1005+
<value>El resultado generado parece contener contenido NBPML incompleto y no se puede utilizar.</value>
1006+
</data>
1007+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1008+
<value>Contenido NBPML incompleto</value>
1009+
</data>
10041010
</root>

NeoBleeper/Properties/Resources.fr.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,4 +1001,10 @@ Voulez-vous quand même ouvrir ce fichier ?</value>
10011001
<data name="MessageBadGateway" xml:space="preserve">
10021002
<value>Réponse invalide reçue du serveur en amont.</value>
10031003
</data>
1004+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1005+
<value>Le contenu NBPML généré est incomplet et ne peut être utilisé.</value>
1006+
</data>
1007+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1008+
<value>Contenu NBPML incomplet</value>
1009+
</data>
10041010
</root>

NeoBleeper/Properties/Resources.it.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,4 +1000,10 @@ Vuoi aprire comunque questo file?</value>
10001000
<data name="MessageBadGateway" xml:space="preserve">
10011001
<value>Risposta non valida ricevuta dal server upstream.</value>
10021002
</data>
1003+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1004+
<value>L'output generato sembra essere un contenuto NBPML incompleto e non può essere utilizzato.</value>
1005+
</data>
1006+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1007+
<value>Contenuto NBPML incompleto</value>
1008+
</data>
10031009
</root>

NeoBleeper/Properties/Resources.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,4 +1021,10 @@ Do you want to open this file anyway?</value>
10211021
<data name="MessageBadGateway" xml:space="preserve">
10221022
<value>Received an invalid response from the upstream server.</value>
10231023
</data>
1024+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1025+
<value>The generated output appears to be incomplete NBPML content and cannot be used.</value>
1026+
</data>
1027+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1028+
<value>Incomplete NBPML Content</value>
1029+
</data>
10241030
</root>

NeoBleeper/Properties/Resources.ru.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,4 +1003,10 @@
10031003
<data name="MessageBadGateway" xml:space="preserve">
10041004
<value>Получен неверный ответ от вышестоящего сервера.</value>
10051005
</data>
1006+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1007+
<value>Сгенерированный результат, по-видимому, содержит неполное содержимое NBPML и не может быть использован.</value>
1008+
</data>
1009+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1010+
<value>Неполное содержимое NBPML</value>
1011+
</data>
10061012
</root>

NeoBleeper/Properties/Resources.tr.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,4 +1002,10 @@ Bu dosyayı yine de açmak istiyor musunuz?</value>
10021002
<data name="MessageBadGateway" xml:space="preserve">
10031003
<value>Yukarı akış sunucusundan geçersiz bir yanıt alındı.</value>
10041004
</data>
1005+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1006+
<value>Oluşturulan çıktı eksik NBPML içeriği içeriyor gibi görünüyor ve kullanılamaz.</value>
1007+
</data>
1008+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1009+
<value>Eksik NBPML İçeriği</value>
1010+
</data>
10051011
</root>

NeoBleeper/Properties/Resources.uk.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,4 +1003,10 @@
10031003
<data name="MessageBadGateway" xml:space="preserve">
10041004
<value>Отримано недійсну відповідь від сервера вищого рівня.</value>
10051005
</data>
1006+
<data name="MessageIncompleteNBPMLContent" xml:space="preserve">
1007+
<value>Згенерований вивід, схоже, є неповним вмістом NBPML і не може бути використаний.</value>
1008+
</data>
1009+
<data name="TitleIncompleteNBPMLContent" xml:space="preserve">
1010+
<value>Неповний вміст NBPML</value>
1011+
</data>
10061012
</root>

0 commit comments

Comments
 (0)