将NodeJS转换为C#以加载WAV格式音频并删除一些不必要的标题
我正在尝试将.sd9文件转换为C#中的.wav文件,这些文件基本上都是.wav文件,标题不正确(在某些游戏中使用) 我在网上找到了一些NodeJS代码来执行此操作,此代码工作正常:将NodeJS转换为C#以加载WAV格式音频并删除一些不必要的标题,c#,node.js,C#,Node.js,我正在尝试将.sd9文件转换为C#中的.wav文件,这些文件基本上都是.wav文件,标题不正确(在某些游戏中使用) 我在网上找到了一些NodeJS代码来执行此操作,此代码工作正常: var snd_buf = fs.readFileSync(item); if (snd_buf.slice(0x00, 0x03).toString() != "SD9") { console.log("[-] '" + path.basename(item) + "' is not
var snd_buf = fs.readFileSync(item);
if (snd_buf.slice(0x00, 0x03).toString() != "SD9") {
console.log("[-] '" + path.basename(item) + "' is not SD9 file.");
continue;
}
var wav_buf = snd_buf.slice(0x20, snd_buf.length);
if (sd9_file_list.length > 1) {
if (!fs.existsSync(output_path)) {
fs.mkdirSync(output_path);
}
output_path += "/" + path.basename(item, ".sd9") + ".wav";
}
output_path = path.normalize(output_path);
fs.writeFileSync(output_path, wav_buf);
项目:文件的完整路径
现在我正试图“翻译”这个C#而没有任何运气:
string[] files = Directory.GetFiles(fbd.SelectedPath, "*.sd9", SearchOption.AllDirectories);
foreach (string file in files)
{
UTF8Encoding nobom = new UTF8Encoding(false);
string raw_buffer = File.ReadAllText(file, nobom);
string wave_buffer = "";
if (raw_buffer.Substring(0x00, 0x03) == "SD9")
{
wave_buffer = raw_buffer.Substring(0x20);
MessageBox.Show(wave_buffer);
}
if (File.Exists(fbdd.SelectedPath + @"\" + Path.GetFileNameWithoutExtension(file) + ".wav")) { File.Delete(fbdd.SelectedPath + @"\" + Path.GetFileNameWithoutExtension(file) + ".wav"); }
BinaryWriter sw = new BinaryWriter(new FileStream(fbdd.SelectedPath + @"\" + Path.GetFileNameWithoutExtension(file) + ".wav", FileMode.CreateNew));
sw.Write(wave_buffer);
sw.Flush();
sw.Close();
}
写入或读取的方式似乎会添加不必要的头/格式错误的字节或任何使文件无法读取的内容,例如,使用NodeJS脚本正确转换的文件为91KB,而我的脚本输出的文件损坏了140KB。您的问题是,您正在以
字符串的形式读取SD9文件。然后使用string
函数将文件分割开来。相反,您希望将文件读取为字节[]
使用File.ReadAllBytes()
将文件读取为byte[]
使用以下技巧“拼接”字节数组:
使用System.Text.Encoding.ASCII.GetString()
将byte[]
转换为string
,以进行“SD9”标题比较
使用File.writealBytes()
编写新文件
您正在以字符串形式读取文件。它是一个二进制文件。你需要处理字节,而不是字符和字符串。好吧,我尝试过使用File.ReadAllBytes,但我的问题是,我如何正确地“删除”字节数组中不必要的头,就像我试图处理子字符串一样。是的,经过数小时的困惑,终于找到了一个有效的解决方案,谢谢Matt!:D(当然还有Marc;回答子数组线程的人)