void Dispose() { int cnt = _items.Count; for (int i = 0; i < cnt; i++) { PackageItem pi = _items[i]; if (pi.texture != null) { if (Application.isPlaying) { if (pi.texture.alphaTexture != null) Texture.Destroy(pi.texture.alphaTexture); if (pi.texture != NTexture.Empty) pi.texture.Dispose(); } else pi.texture.DestroyMaterials(); } else if (pi.audioClip != null) { if (Application.isPlaying) AudioClip.Destroy(pi.audioClip); } else if (pi.bitmapFont != null) FontManager.UnregisterFont(pi.bitmapFont); } if (_resBundle != null) _resBundle.Unload(true); }
///----------------------------------------------------------- /// <summary>録音終了</summary> ///----------------------------------------------------------- public void StopRecord() { //マイクの録音位置を取得 int position = Microphone.GetPosition(mic); //マイクの録音を強制的に終了 Microphone.End(mic); //シーク位置を検査 if (position > 0) { //再生時間を確認すると、停止した時間に関わらず、maxDurationの値になっている。これは無音を含んでいる? Debug.Log("修正前の録音時間: " + audioClip.length); //音声データ一時退避用の領域を確保し、audioClipからのデータを格納 float[] soundData = new float[audioClip.samples * audioClip.channels]; audioClip.GetData(soundData, 0); //新しい音声データ領域を確保し、positonの分だけ格納できるサイズにする。 float[] newData = new float[position * audioClip.channels]; //positionの分だけデータをコピー for (int i = 0; i < newData.Length; i++) { newData[i] = soundData[i]; } //新しいAudioClipのインスタンスを生成し、音声データをセット AudioClip newClip = AudioClip.Create(audioClip.name, position, audioClip.channels, audioClip.frequency, false); newClip.SetData(newData, 0); //audioClipを新しいものに差し替え AudioClip.Destroy(audioClip); audioClip = newClip; //再生時間 Debug.Log("修正後の録音時間: " + newClip.length); } }
public void StopPlayback() { m_audioSource.Pause(); StopCoroutine(m_songPlayCoroutine); AudioClip.Destroy(m_audioSource.clip); // RPB: IMPORTANT! If we don't have this, the app runs out of memory and crashes!!! }