diff --git a/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83.cs b/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83.cs index ac13172..5461099 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83.cs @@ -68,9 +68,9 @@ namespace Essgee.Emulation.CPU if (AppEnvironment.EnableSuperSlowCPULogger) { - logFile = @"D:\Temp\Essgee\log-lr35902.txt"; - numLogEntries = 0; - logEntries = new string[2000]; + //logFile = @"D:\Temp\Essgee\log-lr35902.txt"; + //numLogEntries = 0; + //logEntries = new string[2000]; } } diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs index 2a8e8c7..1db9ff6 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs @@ -70,6 +70,7 @@ namespace Essgee.Emulation.Cartridges.Nintendo public void LoadAxiStatus(AxiEssgssStatusData data) { + //TODO GB相机暂时不实现 } public AxiEssgssStatusData SaveAxiStatus() diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC1Cartridge.cs b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC1Cartridge.cs index fef802d..930ab4f 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC1Cartridge.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC1Cartridge.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace Essgee.Emulation.Cartridges.Nintendo { @@ -31,11 +32,26 @@ namespace Essgee.Emulation.Cartridges.Nintendo public void LoadAxiStatus(AxiEssgssStatusData data) { + ramData = data.MemberData[nameof(ramData)]; + hasBattery = BitConverter.ToBoolean(data.MemberData[nameof(hasBattery)]); + + romBank = data.MemberData[nameof(romBank)].First(); + ramBank = data.MemberData[nameof(ramBank)].First(); + ramEnable = BitConverter.ToBoolean(data.MemberData[nameof(ramEnable)]); + bankingMode = data.MemberData[nameof(bankingMode)].First(); + //看是否还需要补存储字段 } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + data.MemberData[nameof(ramData)] = ramData; + data.MemberData[nameof(hasBattery)] = BitConverter.GetBytes(hasBattery); + //看是否还需要补存储字段 + data.MemberData[nameof(romBank)] = BitConverter.GetBytes(romBank); + data.MemberData[nameof(ramBank)] = BitConverter.GetBytes(ramBank); + data.MemberData[nameof(ramEnable)] = BitConverter.GetBytes(ramEnable); + data.MemberData[nameof(bankingMode)] = BitConverter.GetBytes(bankingMode); return data; } #endregion diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC2Cartridge.cs b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC2Cartridge.cs index 77b4111..06ffc16 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC2Cartridge.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC2Cartridge.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace Essgee.Emulation.Cartridges.Nintendo { @@ -23,13 +24,25 @@ namespace Essgee.Emulation.Cartridges.Nintendo } #region AxiState + public void LoadAxiStatus(AxiEssgssStatusData data) { + ramData = data.MemberData[nameof(ramData)]; + hasBattery = BitConverter.ToBoolean(data.MemberData[nameof(hasBattery)]); + + romBank = data.MemberData[nameof(romBank)].First(); + ramEnable = BitConverter.ToBoolean(data.MemberData[nameof(ramEnable)]); + //看是否还需要补存储字段 } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + data.MemberData[nameof(ramData)] = ramData; + data.MemberData[nameof(hasBattery)] = BitConverter.GetBytes(hasBattery); + //看是否还需要补存储字段 + data.MemberData[nameof(romBank)] = BitConverter.GetBytes(romBank); + data.MemberData[nameof(ramEnable)] = BitConverter.GetBytes(ramEnable); return data; } #endregion diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC3Cartridge.cs b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC3Cartridge.cs index 9e91d22..0124168 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC3Cartridge.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC3Cartridge.cs @@ -135,11 +135,26 @@ namespace Essgee.Emulation.Cartridges.Nintendo public void LoadAxiStatus(AxiEssgssStatusData data) { + ramData = data.MemberData[nameof(ramData)]; + hasBattery = BitConverter.ToBoolean(data.MemberData[nameof(hasBattery)]); + hasRTC = BitConverter.ToBoolean(data.MemberData[nameof(hasRTC)]); + + romBank = data.MemberData[nameof(romBank)].First(); + ramBank = data.MemberData[nameof(ramBank)].First(); + ramEnable = BitConverter.ToBoolean(data.MemberData[nameof(ramEnable)]); + //看是否还需要补存储字段 } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + data.MemberData[nameof(ramData)] = ramData; + data.MemberData[nameof(hasBattery)] = BitConverter.GetBytes(hasBattery); + data.MemberData[nameof(hasRTC)] = BitConverter.GetBytes(hasRTC); + //看是否还需要补存储字段 + data.MemberData[nameof(romBank)] = BitConverter.GetBytes(romBank); + data.MemberData[nameof(ramBank)] = BitConverter.GetBytes(ramBank); + data.MemberData[nameof(ramEnable)] = BitConverter.GetBytes(ramEnable); return data; } #endregion diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC5Cartridge.cs b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC5Cartridge.cs index 62ff26c..ad56b19 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC5Cartridge.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/MBC5Cartridge.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace Essgee.Emulation.Cartridges.Nintendo { @@ -34,11 +35,26 @@ namespace Essgee.Emulation.Cartridges.Nintendo public void LoadAxiStatus(AxiEssgssStatusData data) { + ramData = data.MemberData[nameof(ramData)]; + hasBattery = BitConverter.ToBoolean(data.MemberData[nameof(hasBattery)]); + hasRumble = BitConverter.ToBoolean(data.MemberData[nameof(hasRumble)]); + + romBank = BitConverter.ToUInt16(data.MemberData[nameof(romBank)]); + ramBank = data.MemberData[nameof(ramBank)].First(); + ramEnable = BitConverter.ToBoolean(data.MemberData[nameof(ramEnable)]); + //看是否还需要补存储字段 } public AxiEssgssStatusData SaveAxiStatus() { - AxiEssgssStatusData data = new AxiEssgssStatusData(); + AxiEssgssStatusData data = new AxiEssgssStatusData(); + data.MemberData[nameof(ramData)] = ramData; + data.MemberData[nameof(hasBattery)] = BitConverter.GetBytes(hasBattery); + data.MemberData[nameof(hasRumble)] = BitConverter.GetBytes(hasRumble); + //看是否还需要补存储字段 + data.MemberData[nameof(romBank)] = BitConverter.GetBytes(romBank); + data.MemberData[nameof(ramBank)] = BitConverter.GetBytes(ramBank); + data.MemberData[nameof(ramEnable)] = BitConverter.GetBytes(ramEnable); return data; } #endregion diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/NoMapperCartridge.cs b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/NoMapperCartridge.cs index fc795ca..ed8ef5a 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/NoMapperCartridge.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/NoMapperCartridge.cs @@ -1,4 +1,5 @@ using System; +using System.Xml; namespace Essgee.Emulation.Cartridges.Nintendo { @@ -17,11 +18,17 @@ namespace Essgee.Emulation.Cartridges.Nintendo public void LoadAxiStatus(AxiEssgssStatusData data) { + ramData = data.MemberData[nameof(ramData)]; + hasBattery = BitConverter.ToBoolean(data.MemberData[nameof(hasBattery)]); + //看是否还需要补存储字段 } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + data.MemberData[nameof(ramData)] = ramData; + data.MemberData[nameof(hasBattery)] = BitConverter.GetBytes(hasBattery); + //看是否还需要补存储字段 return data; } #endregion diff --git a/Assets/Plugins/Essgee.Unity/Emulation/EmulatorHandler.cs b/Assets/Plugins/Essgee.Unity/Emulation/EmulatorHandler.cs index 2f061bc..36b59d3 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/EmulatorHandler.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/EmulatorHandler.cs @@ -87,6 +87,7 @@ namespace Essgee.Emulation public event EventHandler<EventArgs> PauseChanged; GameMetadata currentGameMetadata; + public int AxiEmuRunFrame { get; private set; } public bool IsCartridgeLoaded { get; private set; } @@ -98,11 +99,12 @@ namespace Essgee.Emulation public (string Manufacturer, string Model, string DatFileName, double RefreshRate, double PixelAspectRatio, (string Name, string Description)[] RuntimeOptions) Information => (emulator.ManufacturerName, emulator.ModelName, emulator.DatFilename, emulator.RefreshRate, emulator.PixelAspectRatio, emulator.RuntimeOptions); - public EmulatorHandler(Type type, Action<Exception> exceptionHandler = null) + public EmulatorHandler(Type type, Action<Exception> exceptionHandler = null, IAxiEssgssStatusBytesCover statusBytesCover = null) { this.exceptionHandler = exceptionHandler; emulator = (IMachine)Activator.CreateInstance(type); + AxiStatus.Init(statusBytesCover); } public void SetConfiguration(IConfiguration config) @@ -187,6 +189,8 @@ namespace Essgee.Emulation emulator.Load(romData, ramData, currentGameMetadata.MapperType); IsCartridgeLoaded = true; + + AxiEmuRunFrame = 0; } public void SaveCartridge() @@ -244,6 +248,7 @@ namespace Essgee.Emulation } emulator.RunFrame(); + AxiEmuRunFrame++; if (configChangeRequested) @@ -396,6 +401,7 @@ namespace Essgee.Emulation public void SetStateData(byte[] data) { emulator.LoadAxiStatus(data.ToAxiEssgssStatusData()); + AxiEmuRunFrame = 0; } } } diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs b/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs index 1ad5db5..2fbd7f6 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs @@ -136,11 +136,93 @@ namespace Essgee.Emulation.Machines public void LoadAxiStatus(AxiEssgssStatusData data) { + //config 暂时不需要存什么? + //configuration. = data.MemberData[nameof(configuration.)].ToEnum<TVStandard>(); + + if (data.MemberData.ContainsKey(nameof(bootstrap))) + bootstrap = data.MemberData[nameof(bootstrap)]; + + cartridge.LoadAxiStatus(data.ClassData[nameof(cartridge)]); + wram = data.MemberData[nameof(wram)]; + hram = data.MemberData[nameof(hram)]; + ie = data.MemberData[nameof(ie)].First(); + cpu.LoadAxiStatus(data.ClassData[nameof(cpu)]); + video.LoadAxiStatus(data.ClassData[nameof(video)]); + audio.LoadAxiStatus(data.ClassData[nameof(audio)]); + + //看是否还需要补存储字段 + + + joypadRegister = data.MemberData[nameof(joypadRegister)].First(); + serialData = data.MemberData[nameof(serialData)].First(); + serialUseInternalClock = BitConverter.ToBoolean(data.MemberData[nameof(serialUseInternalClock)]); + divider = data.MemberData[nameof(divider)].First(); + timerCounter = data.MemberData[nameof(timerCounter)].First(); + clockCycleCount = BitConverter.ToUInt16(data.MemberData[nameof(clockCycleCount)]); + timerModulo = data.MemberData[nameof(timerModulo)].First(); + timerRunning = BitConverter.ToBoolean(data.MemberData[nameof(timerRunning)]); + timerInputClock = data.MemberData[nameof(timerInputClock)].First(); + timerOverflow = BitConverter.ToBoolean(data.MemberData[nameof(timerOverflow)]); + timerLoading = BitConverter.ToBoolean(data.MemberData[nameof(timerLoading)]); + irqVBlank = BitConverter.ToBoolean(data.MemberData[nameof(irqVBlank)]); + irqLCDCStatus = BitConverter.ToBoolean(data.MemberData[nameof(irqLCDCStatus)]); + irqTimerOverflow = BitConverter.ToBoolean(data.MemberData[nameof(irqTimerOverflow)]); + irqSerialIO = BitConverter.ToBoolean(data.MemberData[nameof(irqSerialIO)]); + irqKeypad = BitConverter.ToBoolean(data.MemberData[nameof(irqKeypad)]); + bootstrapDisabled = BitConverter.ToBoolean(data.MemberData[nameof(bootstrapDisabled)]); + + + serialBitsCounter = BitConverter.ToInt32(data.MemberData[nameof(serialBitsCounter)]); + serialCycles = BitConverter.ToInt32(data.MemberData[nameof(serialCycles)]); + currentMasterClockCyclesInFrame = BitConverter.ToInt32(data.MemberData[nameof(currentMasterClockCyclesInFrame)]); + totalMasterClockCyclesInFrame = BitConverter.ToInt32(data.MemberData[nameof(totalMasterClockCyclesInFrame)]); + + ReconfigureSystem(); } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + + //config 暂时不需要存什么? + //data.MemberData[nameof(configuration.TVStandard)] = configuration.TVStandard.ToByteArray(); + + if (bootstrap != null) + data.MemberData[nameof(bootstrap)] = bootstrap; + + data.ClassData[nameof(cartridge)] = cartridge.SaveAxiStatus(); + data.MemberData[nameof(wram)] = wram; + data.MemberData[nameof(hram)] = hram; + data.MemberData[nameof(ie)] = BitConverter.GetBytes(ie); + data.ClassData[nameof(cpu)] = cpu.SaveAxiStatus(); + data.ClassData[nameof(video)] = video.SaveAxiStatus(); + data.ClassData[nameof(audio)] = audio.SaveAxiStatus(); + + //看是否还需要补存储字段 + + data.MemberData[nameof(joypadRegister)] = BitConverter.GetBytes(joypadRegister); + data.MemberData[nameof(serialData)] = BitConverter.GetBytes(serialData); + data.MemberData[nameof(serialUseInternalClock)] = BitConverter.GetBytes(serialUseInternalClock); + data.MemberData[nameof(divider)] = BitConverter.GetBytes(divider); + data.MemberData[nameof(timerCounter)] = BitConverter.GetBytes(timerCounter); + data.MemberData[nameof(clockCycleCount)] = BitConverter.GetBytes(clockCycleCount); + data.MemberData[nameof(timerModulo)] = BitConverter.GetBytes(timerModulo); + data.MemberData[nameof(timerRunning)] = BitConverter.GetBytes(timerRunning); + data.MemberData[nameof(timerInputClock)] = BitConverter.GetBytes(timerInputClock); + data.MemberData[nameof(timerOverflow)] = BitConverter.GetBytes(timerOverflow); + data.MemberData[nameof(timerLoading)] = BitConverter.GetBytes(timerLoading); + data.MemberData[nameof(irqVBlank)] = BitConverter.GetBytes(irqVBlank); + data.MemberData[nameof(irqLCDCStatus)] = BitConverter.GetBytes(irqLCDCStatus); + data.MemberData[nameof(irqTimerOverflow)] = BitConverter.GetBytes(irqTimerOverflow); + data.MemberData[nameof(irqSerialIO)] = BitConverter.GetBytes(irqSerialIO); + data.MemberData[nameof(irqKeypad)] = BitConverter.GetBytes(irqKeypad); + data.MemberData[nameof(bootstrapDisabled)] = BitConverter.GetBytes(bootstrapDisabled); + + data.MemberData[nameof(serialBitsCounter)] = BitConverter.GetBytes(serialBitsCounter); + data.MemberData[nameof(serialCycles)] = BitConverter.GetBytes(serialCycles); + data.MemberData[nameof(currentMasterClockCyclesInFrame)] = BitConverter.GetBytes(currentMasterClockCyclesInFrame); + data.MemberData[nameof(totalMasterClockCyclesInFrame)] = BitConverter.GetBytes(totalMasterClockCyclesInFrame); + return data; } #endregion diff --git a/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameGear.cs b/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameGear.cs index d218db4..bc7ce20 100644 --- a/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameGear.cs +++ b/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameGear.cs @@ -301,7 +301,9 @@ namespace Essgee.Emulation.Machines { configuration.Region = data.MemberData[nameof(configuration.Region)].ToEnum<Region>(); - bootstrap.LoadAxiStatus(data.ClassData[nameof(bootstrap)]); + if (data.ClassData.ContainsKey(nameof(bootstrap))) + bootstrap.LoadAxiStatus(data.ClassData[nameof(bootstrap)]); + cartridge.LoadAxiStatus(data.ClassData[nameof(cartridge)]); wram = data.MemberData[nameof(wram)]; cpu.LoadAxiStatus(data.ClassData[nameof(cpu)]); @@ -327,7 +329,9 @@ namespace Essgee.Emulation.Machines AxiEssgssStatusData data = new AxiEssgssStatusData(); data.MemberData[nameof(configuration.Region)] = configuration.Region.ToByteArray(); - data.ClassData[nameof(bootstrap)] = bootstrap.SaveAxiStatus(); + if (bootstrap != null) + data.ClassData[nameof(bootstrap)] = bootstrap.SaveAxiStatus(); + data.ClassData[nameof(cartridge)] = cartridge.SaveAxiStatus(); data.MemberData[nameof(wram)] = wram; data.ClassData[nameof(cpu)] = cpu.SaveAxiStatus(); diff --git a/Assets/Plugins/Essgee.Unity/IAxiStatus.cs b/Assets/Plugins/Essgee.Unity/IAxiStatus.cs index 64c9382..1682cf9 100644 --- a/Assets/Plugins/Essgee.Unity/IAxiStatus.cs +++ b/Assets/Plugins/Essgee.Unity/IAxiStatus.cs @@ -12,6 +12,7 @@ public class AxiEssgssStatusData public Dictionary<string, AxiEssgssStatusData> ClassData = new Dictionary<string, AxiEssgssStatusData>(); } + [Serializable] public class AxiEssgssStatusData_2DArray { @@ -30,25 +31,16 @@ public class AxiEssgssStatusData_2DArray return array1D.CreateByteArray2D(rows, cols); } } -public static class AxiEssgssStatusDataExtention +internal static class AxiEssgssStatusDataExtention { - public static byte[] ToByteArray(this AxiEssgssStatusData data) + internal static byte[] ToByteArray(this AxiEssgssStatusData data) { - using (MemoryStream ms = new MemoryStream()) - { - BinaryFormatter formatter = new BinaryFormatter(); - formatter.Serialize(ms, data); - return ms.ToArray(); - } + return AxiStatus.saveCover.ToByteArray(data); } - public static AxiEssgssStatusData ToAxiEssgssStatusData(this byte[] byteArray) + internal static AxiEssgssStatusData ToAxiEssgssStatusData(this byte[] byteArray) { - using (MemoryStream ms = new MemoryStream(byteArray)) - { - BinaryFormatter formatter = new BinaryFormatter(); - return (AxiEssgssStatusData)formatter.Deserialize(ms); - } + return AxiStatus.saveCover.ToAxiEssgssStatusData(byteArray); } } public interface IAxiStatus @@ -57,8 +49,19 @@ public interface IAxiStatus public AxiEssgssStatusData SaveAxiStatus(); } +public interface IAxiEssgssStatusBytesCover +{ + public byte[] ToByteArray(AxiEssgssStatusData data); + public AxiEssgssStatusData ToAxiEssgssStatusData(byte[] byteArray); +} + internal static class AxiStatus { + public static IAxiEssgssStatusBytesCover saveCover { get; private set; } + public static void Init(IAxiEssgssStatusBytesCover coverter) + { + saveCover = coverter; + } // ������ö������ת��Ϊbyte[] public static byte[] ToByteArray<TEnum>(this TEnum[] enumArray) where TEnum : struct, Enum { diff --git a/Assets/Scripts/UEssgee.cs b/Assets/Scripts/UEssgee.cs index d7ee5ac..402be46 100644 --- a/Assets/Scripts/UEssgee.cs +++ b/Assets/Scripts/UEssgee.cs @@ -27,6 +27,7 @@ public class Essgeeinit : MonoBehaviour EmulatorHandler emulatorHandler; UEGResources uegResources; UEGLog uegLog; + UEGSaveByteConvert ugeSaveConver; bool lastUserPauseState; (int x, int y, int width, int height) currentViewport; @@ -43,8 +44,10 @@ public class Essgeeinit : MonoBehaviour uegResources = new UEGResources(); uegLog = new UEGLog(); + ugeSaveConver = new UEGSaveByteConvert(); InitAll(uegResources, Application.persistentDataPath); - LoadAndRunCartridge("G:/psjapa.sms"); + //LoadAndRunCartridge("G:/psjapa.sms"); + LoadAndRunCartridge("G:/Phantasy Star (USA, Europe) (Rev A).zip"); //LoadAndRunCartridge("G:/Ninja_Gaiden_(UE)_type_A_[!].sms"); //LoadAndRunCartridge("G:/SML2.gb"); } @@ -409,7 +412,7 @@ public class Essgeeinit : MonoBehaviour if (emulatorHandler != null) ShutdownEmulation(); - emulatorHandler = new EmulatorHandler(machineType, ExceptionHandler); + emulatorHandler = new EmulatorHandler(machineType, ExceptionHandler, ugeSaveConver); emulatorHandler.Initialize(); emulatorHandler.SendLogMessage += EmulatorHandler_SendLogMessage; diff --git a/Assets/Scripts/UEssgeeInterface/UEGSaveByteConvert.cs b/Assets/Scripts/UEssgeeInterface/UEGSaveByteConvert.cs new file mode 100644 index 0000000..ac26522 --- /dev/null +++ b/Assets/Scripts/UEssgeeInterface/UEGSaveByteConvert.cs @@ -0,0 +1,24 @@ +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +public class UEGSaveByteConvert : IAxiEssgssStatusBytesCover +{ + public AxiEssgssStatusData ToAxiEssgssStatusData(byte[] byteArray) + { + using (MemoryStream ms = new MemoryStream(byteArray)) + { + BinaryFormatter formatter = new BinaryFormatter(); + return (AxiEssgssStatusData)formatter.Deserialize(ms); + } + } + + public byte[] ToByteArray(AxiEssgssStatusData data) + { + using (MemoryStream ms = new MemoryStream()) + { + BinaryFormatter formatter = new BinaryFormatter(); + formatter.Serialize(ms, data); + return ms.ToArray(); + } + } +} diff --git a/Assets/Scripts/UEssgeeInterface/UEGSaveByteConvert.cs.meta b/Assets/Scripts/UEssgeeInterface/UEGSaveByteConvert.cs.meta new file mode 100644 index 0000000..9b51605 --- /dev/null +++ b/Assets/Scripts/UEssgeeInterface/UEGSaveByteConvert.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d9a09dfc866e362458165b925deb2c19 \ No newline at end of file diff --git a/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs b/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs index f1e1cd6..9b67cb7 100644 --- a/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs +++ b/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs @@ -84,6 +84,11 @@ public class UEGSoundPlayer : MonoBehaviour//, ISoundPlayer _buffer.Write(buffer[i] / 32767.0f); } + if (IsRecording) + { + dataChunk.AddSampleData(buffer, samples_a); + waveHeader.FileLength += (uint)samples_a; + } } public void BufferWirte(int Off, byte[] Data) {