How do I get Unity to playback a Microphone input in real time?


  • I want to develop an application with my Microphone device
  • I cannot get real time audio playback from my Microphone input without latency occurring


You are unable to play back audio from a Microphone source in real time. You may be experiencing one of the following issues:

  • During playback you can hear an inaudible chopped noise
  • The audio recorded continues to play in an infinite feedback loop
  • The audio heard during playback has a fair amount of latency and does not sound immediately.


To ensure your Microphone audio plays back in real time:

  1. Firstly, you will need to set the microphone as an AudioClip and attach this AudioClip onto an Audio Source. You will need to set the audio to loop by checking the loop tick box in your Audio Source component in the Inspector. You will then be able to use the spectrum data off the Audio Source, rather than the Audio Listener.
  2. Secondly, you will need to attach a script to the Audio Source which tells Unity that the Microphone device to start recording an AudioClip. For this you will need to call Microphone.Start();

To control latency you will also need to call Microphone.GetPosition(); and choose your desired latency sample rate. If you want no latency you can set this to “0” samples before the audio starts to play. See the below script to see how this script is executed.

Please note that you need to add the permissions to the app (iOS, Android, Windows Phone, Web Player), to use the microphone. The permissions are added if you have a reference to UnityEngine.Microphone in your script.

However, on Android specifically this feature is not strictly required as it breaks compatibility with Android TV.

More Information

For scripting reference to calling Microphone.Start(); then see this document here

For scripting reference to calling Microphone.GetPosition(); then see this document here


Was this article helpful?
1 out of 2 found this helpful
Have more questions? Submit a request


  • 1
    Ted Barnett

    Following the instructions above, I still see latency of over 220 msec using the Microphone on Windows, Unity 5.4.1 (see image).  Is that the expected minimum?  I've tried disabling all effects, using both USB and line-in mics, and varying the sample size without success.  

    I'm trying to build a Unity app that allows users to sing through the speakers, but this delay makes singing impossible.  

    Any hints/samples/suggestions appreciated!


     My code is as follows:

    using UnityEngine;
    using System.Collections;
    [RequireComponent (typeof(AudioSource))]

    public class MicrophoneOn : MonoBehaviour {

    void Start ()
    AudioSource audio = GetComponent<AudioSource>();
    audio.clip = Microphone.Start(null, true, 100, 44100);
    audio.loop = true;
    while (!(Microphone.GetPosition(null) > 0)){}
    Debug.Log("start playing... position is " + Microphone.GetPosition(null));


  • 0
    Pino of DFT Games Limited

    Unity is not designed for real time mic management, so if you want to create a Karaoke game you can't use Unity internal microphone management.

    Edited by Pino of DFT Games Limited
  • -2
    Ted Barnett

    Thanks, Pino.  I thought so, though the text above (from Unity!) deceptively suggests that it CAN work:

    "To ensure your Microphone audio plays back in real time..."

  • 2
    Andy Jenkins

    Hi Ted,

    There will always be some inherent latency when processing audio. Depending on the platform(s) you are targeting this audio latency will occur at different rates.

    Something you can do if you haven’t yet done so to improve audio latency is by reducing the DSP buffer size: 

    • Edit -> Project Settings -> Audio

           Set DSP Buffer Size to ‘Best Latency’

    Hope this helps.


  • 0
    Max Aigner

    Hi Ted,

    If you change your code to that, it is a lot faster and really great:



    AudioSource audio = GetComponent<AudioSource>();
           audio.clip = Microphone.Start(null, true, 1, 22050);
           audio.loop = true;
           while (!(Microphone.GetPosition(null) > 0)) { }
           Debug.Log("start playing... position is " + Microphone.GetPosition(null));


    ( a Pity we cannot change the Microphone LengthSec to 0.1 something or another float, but it's quite nice already.)




    Max Aigner

    (Signature: )

    Edited by Max Aigner
  • 1
    Arnas Cibulskis

    Hi, this doesn't seem to be working in 2018, any suggestions?

  • 0
    axi zapantis

    This script used to work in unity 5.6 for my gearvr app.I updated to unity 2018.1.0f2 and the gearvr app freezes on a frame but headtracking continues to work.I know this script is the problem because when i uncheck it the app is working fine...Is there an alternative way to playback a mic in realtime in unity 2018?Thanks.

  • 0

    I just tried this script in 2018.3.0b5 Personal and it is working for me.  I hear the slightly delayed sound in my headphones, so it works. 

    Some slight adjustments:
    I didn't need to include any namespace - it just worked with Microphone,

    Had to use Microphone.devices to get the name of my microphone (since Built-in Microphone didn't exist for my machine).

  • 0
    axi zapantis

    The problem in my occassion was caused by the permission request "Record audio" .Even if i had the reference UnityEngine.Microphone in my script it didnt ask for this permission when i was starting my app.I created a new project and copy pasted everything and now it asks for the permission "record audio" and everything works fine like before...

  • 0
    rahul patil

    when first microphone is start how to stop for the 5 seconds


    IEnumerator RecordVoice()
    yield return new WaitForSeconds(5);

  • 1

    @Megan I tested the codes on Mac and android platforms, there was a little latency on MAC which can satisfy my requirement, but on android platform the latency was longer, and the experience was bad,how to solve this?

    Edited by wsdfz
Please sign in to leave a comment.