From e42d1406d3382b467ca7424f8f6ccdb834394b7f Mon Sep 17 00:00:00 2001 From: alcexhim Date: Thu, 16 Oct 2014 16:10:59 -0400 Subject: [PATCH] Updated VOCALOID-related data formats in Multimedia plugin --- .../Vocaloid/VocaloidIndexDataFormat.cs | 64 ++++++++++++++++++ .../Vocaloid/VocaloidVoicebankDataFormat.cs | 66 ++++++++++--------- .../UniversalEditor.Plugins.Multimedia.csproj | 2 + 3 files changed, 102 insertions(+), 30 deletions(-) create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidIndexDataFormat.cs diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidIndexDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidIndexDataFormat.cs new file mode 100644 index 00000000..cf4fc492 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidIndexDataFormat.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UniversalEditor.IO; + +namespace UniversalEditor.DataFormats.Multimedia.Audio.Voicebank.Vocaloid +{ + public class VocaloidIndexDataFormat : DataFormat + { + protected override void LoadInternal(ref ObjectModel objectModel) + { + Reader reader = base.Accessor.Reader; + // Bruno Clara + uint unknown1 = reader.ReadUInt32(); // 0 + uint unknown2 = reader.ReadUInt32(); + string chunkName = reader.ReadFixedLengthString(4); // DBSe + uint unknown3 = reader.ReadUInt32(); + uint unknown4 = reader.ReadUInt32(); // 1 + uint unknown5 = reader.ReadUInt32(); + uint unknown6 = reader.ReadUInt32(); // 3, subchunk count? + + string chunkNamePHDC = reader.ReadFixedLengthString(4); + uint chunkSizePHDC = reader.ReadUInt32(); // total size of PHDC chunk (3927 in Bruno) + uint unknown7 = reader.ReadUInt32(); // 4 + + uint phonemeCount = reader.ReadUInt32(); // 32 + for (uint i = 0; i < phonemeCount; i++) + { + string phonemeName = reader.ReadFixedLengthString(30); + byte phonemeData = reader.ReadByte(); + } + + string chunkNamePHG2 = reader.ReadFixedLengthString(4); + uint chunkSizePHG2 = reader.ReadUInt32(); // total size of PHG2 chunk (515 in Bruno) + + uint groupCount = reader.ReadUInt32(); // 9 + for (uint i = 0; i < groupCount; i++) + { + uint groupNameLength = reader.ReadUInt32(); + string groupName = reader.ReadFixedLengthString(groupNameLength); + uint groupPhonemeCount = reader.ReadUInt32(); + for (uint j = 0; j < phonemeCount; j++) + { + uint unknown8 = reader.ReadUInt32(); // unknown (possibly index into PHDC table?) + uint groupPhonemeNameLength = reader.ReadUInt32(); + string groupPhonemeName = reader.ReadFixedLengthString(groupPhonemeNameLength); + } + uint unknown9 = reader.ReadUInt32(); + } + + + + // whenever we get to "TDB " chunk + + + } + + protected override void SaveInternal(ObjectModel objectModel) + { + throw new NotImplementedException(); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidVoicebankDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidVoicebankDataFormat.cs index 4457637b..33a9e321 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidVoicebankDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/DataFormats/Multimedia/Audio/Voicebank/Vocaloid/VocaloidVoicebankDataFormat.cs @@ -2,21 +2,25 @@ using System; using UniversalEditor.IO; using UniversalEditor.ObjectModels.Multimedia.Audio.Voicebank; using UniversalEditor.ObjectModels.FileSystem; +using UniversalEditor.Accessors; namespace UniversalEditor.DataFormats.Multimedia.Audio.Voicebank.Vocaloid { public class VocaloidVoicebankDataFormat : DataFormat { + private static DataFormatReference _dfr = null; public override DataFormatReference MakeReference() { - DataFormatReference dfr = base.MakeReference(); - dfr.Filters.Add("VOCALOID voice bank database", new byte?[][] { new byte?[] { new byte?(70), new byte?(45), new byte?(0), new byte?(0) }, new byte?[] { new byte?(70), new byte?(82), new byte?(77), new byte?(50) } }, new string[] { "*.ddb" }); - dfr.Capabilities.Add(typeof(FileSystemObjectModel), DataFormatCapabilities.Load); - dfr.Capabilities.Add(typeof(VoicebankObjectModel), DataFormatCapabilities.All); - return dfr; + if (_dfr == null) + { + _dfr = base.MakeReference(); + _dfr.Filters.Add("VOCALOID voice bank database", new byte?[][] { new byte?[] { new byte?(70), new byte?(45), new byte?(0), new byte?(0) }, new byte?[] { new byte?(70), new byte?(82), new byte?(77), new byte?(50) } }, new string[] { "*.ddb" }); + _dfr.Capabilities.Add(typeof(VoicebankObjectModel), DataFormatCapabilities.All); + } + return _dfr; } protected override void LoadInternal(ref ObjectModel objectModel) { - BinaryReader br = base.Stream.BinaryReader; + Reader br = base.Accessor.Reader; VoicebankObjectModel vom = (objectModel as VoicebankObjectModel); FileSystemObjectModel fsom = (objectModel as FileSystemObjectModel); @@ -42,34 +46,36 @@ namespace UniversalEditor.DataFormats.Multimedia.Audio.Voicebank.Vocaloid int i = 0; while (!br.EndOfStream) { - br.SeekUntil("SND "); + string chunkName = br.ReadFixedLengthString(4); + uint chunkSize = br.ReadUInt32(); + uint dataSize = chunkSize - 8; + byte[] chunkData = br.ReadBytes(dataSize); - string SND_ = br.ReadFixedLengthString(4); - if (SND_ == "SND ") + switch (chunkName) { - int sign = br.ReadInt32(); - int size = br.ReadInt32(); - int freq = br.ReadInt32(); - short channels = br.ReadInt16(); - int dummy = br.ReadInt32(); - - byte[] data = br.ReadBytes(size - 18); - - if (fsom != null) + case "SND ": { - fsom.Files.Add(i.ToString() + ".raw", data); + Reader r = new Reader(new MemoryAccessor(chunkData)); + int size = r.ReadInt32(); + int freq = r.ReadInt32(); + short channels = br.ReadInt16(); + int dummy = br.ReadInt32(); + + // TODO: test this + byte[] data = br.ReadBytes(size - 18); + + if (fsom != null) + { + fsom.Files.Add(i.ToString() + ".raw", data); + } + Console.WriteLine("found sound file " + i.ToString() + ":"); + Console.WriteLine(" size: " + size.ToString()); + Console.WriteLine(" freq: " + freq.ToString()); + Console.WriteLine(" channels: " + channels.ToString()); + Console.WriteLine(" unknown_int32: " + dummy.ToString()); + i++; + break; } - Console.WriteLine("found sound file " + i.ToString() + ":"); - Console.WriteLine(" sign: " + sign.ToString()); - Console.WriteLine(" size: " + size.ToString()); - Console.WriteLine(" freq: " + freq.ToString()); - Console.WriteLine(" channels: " + channels.ToString()); - Console.WriteLine(" unknown_int32: " + dummy.ToString()); - i++; - } - else - { - break; } } } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj index d3173502..e94eed38 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/UniversalEditor.Plugins.Multimedia.csproj @@ -77,6 +77,8 @@ + +