Unityでマイク入力を取得し、AudioSourceからループバックさせたところ、音がブチブチと途切れる現象に遭遇しました。ほかのソフトウェアでマイクを使用したところ問題はなく、マイクの故障ではありませんでした。
そのとき使用していたスクリプトはこんな感じです。「Unity マイク 録音」とかで検索すると見つかるようなありきたりなコードです。とくに凝ったこともしておらず、Microphone.Startの引数などを疑ってみましたが、どれも問題とは関係ないようでした。
[RequireComponent(typeof(AudioSource))]
public class VoiceMicrophone : MonoBehaviour
{
AudioSource _audioSource;
void Start()
{
_audioSource = GetComponent<AudioSource>();
_audioSource.clip = Microphone.Start(null, true, 999, 48000);
int count = 0;
while (Microphone.GetPosition(null) <= 0 && count < 1000)
{
count++;
}
_audioSource.Play();
}
}
このノイズ問題、結論を申しあげると、Project SettingのDSP Buffer Sizeが原因でした。デフォルトだと、ここの設定がBest Performanceになっていたのですが、Best latencyに変更してみたところ、ノイズは無くなり非常にクリアな音質になりました。
この問題の根本的な原因は断定できないのですが、音声処理のパーフォーマンス維持のために音質が著しく劣化したのではないかと疑っています。
DSP Buffer SizeがBest Performance以外だと、多少なり負荷がかかる可能性がありますので、必要がなければむやみに変更しないほうがいいかと思います。
いずれにせよ、似たような現象にあわれた方は、DSP Buffer Sizeを「Best latency」に変更してみてください。