Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将NodeJS转换为C#以加载WAV格式音频并删除一些不必要的标题_C#_Node.js - Fatal编程技术网

将NodeJS转换为C#以加载WAV格式音频并删除一些不必要的标题

将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

我正在尝试将.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 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;回答子数组线程的人)