void Update() { if (Application.isEditor) { //space key triggers recording to start... if (Input.GetKeyDown("space")) { isRecording = !isRecording; UnityEngine.Debug.Log(isRecording == true ? "Is Recording" : "Off"); if (isRecording == false) { //stop recording, get length, create a new array of samples int length = Microphone.GetPosition(null); Microphone.End(null); float[] clipData = new float[length]; audioSource.clip.GetData(clipData, 0); //create a larger vector that will have enough space to hold our temporary //recording, and the last section of the current recording float[] fullClip = new float[clipData.Length + tempRecording.Count]; for (int i = 0; i < fullClip.Length; i++) { //write data all recorded data to fullCLip vector if (i < tempRecording.Count) { fullClip[i] = tempRecording[i]; } else { fullClip[i] = clipData[i - tempRecording.Count]; } } recordedClips.Add(fullClip); audioSource.clip = AudioClip.Create("recorded samples", fullClip.Length, 1, 44100, false); audioSource.clip.SetData(fullClip, 0); audioSource.loop = true; } else { //stop audio playback and start new recording... audioSource.Stop(); tempRecording.Clear(); Microphone.End(null); audioSource.clip = Microphone.Start(null, true, 1, 44100); Invoke("ResizeRecording", 1); } } //use number keys to switch between recorded clips, start from 1!! for (int i = 0; i < 10; i++) { if (Input.GetKeyDown("" + i)) { SwitchClips(i - 1); } } // Press E to save the current recorded clip playing on audiosource (the last one by default) if (Input.GetKeyDown(KeyCode.E)) { GenerateAudio.CallSaveFunction("audio", audioSource.clip); } } }