From 9d505c8900a3fe0bb80516fca6d88f544533ebcb Mon Sep 17 00:00:00 2001 From: Perfare Date: Fri, 10 Nov 2017 02:27:36 +0800 Subject: [PATCH] change Audio related code --- .../Unity Studio Classes/UnityStudio.cs | 33 +++++++++---------- Unity Studio/UnityStudioForm.Designer.cs | 9 ++--- Unity Studio/UnityStudioForm.cs | 4 +-- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/Unity Studio/Unity Studio Classes/UnityStudio.cs b/Unity Studio/Unity Studio Classes/UnityStudio.cs index fa1f4c1..4dd795f 100644 --- a/Unity Studio/Unity Studio Classes/UnityStudio.cs +++ b/Unity Studio/Unity Studio Classes/UnityStudio.cs @@ -1666,10 +1666,7 @@ namespace Unity_Studio result = FMOD.Factory.System_Create(out system); if (result != FMOD.RESULT.OK) { return false; } - result = system.setOutput(FMOD.OUTPUTTYPE.NOSOUND_NRT); - if (result != FMOD.RESULT.OK) { return false; } - - result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null); + result = system.init(1, FMOD.INITFLAGS.NORMAL, IntPtr.Zero); if (result != FMOD.RESULT.OK) { return false; } exinfo.cbsize = Marshal.SizeOf(exinfo); @@ -1678,22 +1675,21 @@ namespace Unity_Studio result = system.createSound(m_AudioClip.m_AudioData, FMOD.MODE.OPENMEMORY, ref exinfo, out sound); if (result != FMOD.RESULT.OK) { return false; } - result = sound.getSubSound(0, out sound); + result = sound.getSubSound(0, out var subsound); if (result != FMOD.RESULT.OK) { return false; } - result = sound.setMode(FMOD.MODE.LOOP_OFF); + result = subsound.getFormat(out var type, out var format, out int NumChannels, out int BitsPerSample); if (result != FMOD.RESULT.OK) { return false; } - result = sound.setLoopCount(-1); + result = subsound.getDefaults(out var frequency, out int priority); if (result != FMOD.RESULT.OK) { return false; } - uint length; - result = sound.getLength(out length, FMOD.TIMEUNIT.PCMBYTES); + var SampleRate = (int)frequency; + + result = subsound.getLength(out var length, FMOD.TIMEUNIT.PCMBYTES); if (result != FMOD.RESULT.OK) { return false; } - IntPtr ptr1, ptr2; - uint len1, len2; - result = sound.@lock(0, length, out ptr1, out ptr2, out len1, out len2); + result = subsound.@lock(0, length, out var ptr1, out var ptr2, out var len1, out var len2); if (result != FMOD.RESULT.OK) { return false; } byte[] buffer = new byte[len1 + 44]; @@ -1703,19 +1699,20 @@ namespace Unity_Studio Encoding.UTF8.GetBytes("WAVEfmt ").CopyTo(buffer, 8); BitConverter.GetBytes(16).CopyTo(buffer, 16); BitConverter.GetBytes((short)1).CopyTo(buffer, 20); - BitConverter.GetBytes((short)m_AudioClip.m_Channels).CopyTo(buffer, 22); - BitConverter.GetBytes(m_AudioClip.m_Frequency).CopyTo(buffer, 24); - BitConverter.GetBytes(m_AudioClip.m_Frequency * m_AudioClip.m_Channels * m_AudioClip.m_BitsPerSample / 8).CopyTo(buffer, 28); - BitConverter.GetBytes((short)(m_AudioClip.m_Channels * m_AudioClip.m_BitsPerSample / 8)).CopyTo(buffer, 32); - BitConverter.GetBytes((short)m_AudioClip.m_BitsPerSample).CopyTo(buffer, 34); + BitConverter.GetBytes((short)NumChannels).CopyTo(buffer, 22); + BitConverter.GetBytes(SampleRate).CopyTo(buffer, 24); + BitConverter.GetBytes(SampleRate * NumChannels * BitsPerSample / 8).CopyTo(buffer, 28); + BitConverter.GetBytes((short)(NumChannels * BitsPerSample / 8)).CopyTo(buffer, 32); + BitConverter.GetBytes((short)BitsPerSample).CopyTo(buffer, 34); Encoding.UTF8.GetBytes("data").CopyTo(buffer, 36); BitConverter.GetBytes(len1).CopyTo(buffer, 40); Marshal.Copy(ptr1, buffer, 44, (int)len1); File.WriteAllBytes(exportFullname, buffer); - result = sound.unlock(ptr1, ptr2, len1, len2); + result = subsound.unlock(ptr1, ptr2, len1, len2); if (result != FMOD.RESULT.OK) { return false; } + subsound.release(); sound.release(); system.release(); } diff --git a/Unity Studio/UnityStudioForm.Designer.cs b/Unity Studio/UnityStudioForm.Designer.cs index 3f7918a..864d89e 100644 --- a/Unity Studio/UnityStudioForm.Designer.cs +++ b/Unity Studio/UnityStudioForm.Designer.cs @@ -591,6 +591,7 @@ // // FMODinfoLabel // + this.FMODinfoLabel.AutoSize = true; this.FMODinfoLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight; this.FMODinfoLabel.Location = new System.Drawing.Point(305, 271); this.FMODinfoLabel.Name = "FMODinfoLabel"; @@ -600,9 +601,9 @@ // FMODtimerLabel // this.FMODtimerLabel.ForeColor = System.Drawing.SystemColors.ControlLightLight; - this.FMODtimerLabel.Location = new System.Drawing.Point(435, 271); + this.FMODtimerLabel.Location = new System.Drawing.Point(440, 271); this.FMODtimerLabel.Name = "FMODtimerLabel"; - this.FMODtimerLabel.Size = new System.Drawing.Size(158, 13); + this.FMODtimerLabel.Size = new System.Drawing.Size(155, 13); this.FMODtimerLabel.TabIndex = 7; this.FMODtimerLabel.Text = "0:00.0 / 0:00.0"; this.FMODtimerLabel.TextAlign = System.Drawing.ContentAlignment.TopRight; @@ -619,10 +620,10 @@ // FMODprogressBar // this.FMODprogressBar.AutoSize = false; - this.FMODprogressBar.Location = new System.Drawing.Point(252, 290); + this.FMODprogressBar.Location = new System.Drawing.Point(249, 290); this.FMODprogressBar.Maximum = 1000; this.FMODprogressBar.Name = "FMODprogressBar"; - this.FMODprogressBar.Size = new System.Drawing.Size(348, 24); + this.FMODprogressBar.Size = new System.Drawing.Size(350, 24); this.FMODprogressBar.TabIndex = 5; this.FMODprogressBar.TickStyle = System.Windows.Forms.TickStyle.None; this.FMODprogressBar.Scroll += new System.EventHandler(this.FMODprogressBar_Scroll); diff --git a/Unity Studio/UnityStudioForm.cs b/Unity Studio/UnityStudioForm.cs index 4d8fd1f..cbe4c3d 100644 --- a/Unity Studio/UnityStudioForm.cs +++ b/Unity Studio/UnityStudioForm.cs @@ -1131,7 +1131,7 @@ namespace Unity_Studio Application.Exit(); } - result = system.init(1, FMOD.INITFLAGS.NORMAL, (IntPtr)null); + result = system.init(1, FMOD.INITFLAGS.NORMAL, IntPtr.Zero); if (ERRCHECK(result)) { return; } //result = system.getMasterChannelGroup(out channelGroup); @@ -1155,7 +1155,7 @@ namespace Unity_Studio if (sound != null) { var result = sound.release(); - if (result != FMOD.RESULT.OK) { StatusStripUpdate("FMOD error! " + result + " - " + FMOD.Error.String(result)); } + ERRCHECK(result); sound = null; } }