是否有一种方法可以在JSON文件中存储对MP3文件的引用?



我正在制作一款使用Unity的节奏游戏,我将特定图表所需的信息存储在JSON文件中。虽然诸如节奏、名称和音符数组之类的信息相当简单,但当涉及到存储包含我想要播放的音频和节奏图表的MP3文件的引用时,我已经丢失了。

对于Unity,我使用一个自定义类来存储与文件匹配的数据:

using UnityEngine;
[System.Serializable]
public class MusicChart
{
public string name;
public float startDelay;
public float tempo;
public float finishBeat;
public Timing[] timings;
}

这里的一切都按预期工作,我只需要额外的东西附加到JSON文件和这个类,将使它工作。很抱歉我的无知,我是Unity的新手,不太了解JSON的复杂性。我认为将路径存储为字符串的想法,然后在Unity的脚本中读取该路径将工作,但我不知道如何做后一部分。

有几个选项:

  1. 在json文件中存储mp3文件的绝对或相对路径。这将有路径不正确的风险,是有人只复制json文件,或重命名mp3文件。要做到这一点,只需在你的类中添加一个string musicPath字段。
  2. 将mp3文件作为base64编码字符串存储在json中。这将使你的json文件更难读,而且由于编码效率低下,它会浪费一些空间。
  3. 将json和mp3文件存储在zip-archive中。将mp3文件的条目名称存储在json文件中。这样可以确保用户只看到单个文件,但手工创建或编辑文件会显得有些麻烦。您可以将mp3文件标记为"存储"。以避免压缩开销。

在任何情况下,您都需要知道如何读取和使用表示mp3数据的流。

您可以将mp3文件转换为Base64String并避免丢失:

var audioBytes = File.ReadAllBytes("PATHTOAudio");
var base64String = Convert.ToBase64String(audioBytes);

使用此方法播放mp3文件:

static void PlaySoud(string base64String)
{
var audioBuffer = Convert.FromBase64String(base64String);
using (var ms = new MemoryStream(audioBuffer))
{
var player = new System.Media.SoundPlayer(ms);
player.Play();
}
}

相关内容

  • 没有找到相关文章

最新更新