{#if voice.error}

{voice.error}

{/if}

Devices

Transmit

{#each modes as m (m.id)} {/each}
{#if s.mode === 'ptt'}
{voice.pttDown ? 'Talking' : 'Hold the key to talk'}

Works while mumh5 is focused. System-wide push to talk is planned.

{/if} {#if s.mode === 'vad'} voice.update({ vadThreshold: Number(e.currentTarget.value) })} aria-label="Voice activity threshold" />

Speak normally and put the marker just below your voice; the bar turns green when you would be sending. Threshold {s.vadThreshold} dB.

voice.update({ vadHoldMs: Number(e.currentTarget.value) })} /> {/if}
voice.update({ inputGain: Number(e.currentTarget.value) })} />
voice.update({ outputVolume: Number(e.currentTarget.value) })} />
{voice.testing ? 'You should hear yourself. Use headphones to avoid feedback.' : 'Plays your microphone back to you'}

Processing

Quality

voice.update({ bitrate: Number(e.currentTarget.value) })} /> {#if voice.effectiveBitrate && voice.effectiveBitrate < s.bitrate && session.status === 'connected'}

Limited to {Math.round(voice.effectiveBitrate / 1000)} kbit/s by this server

{/if}
voice.update({ jitterMs: Number(e.currentTarget.value) })} />

Higher values smooth out bad connections at the cost of delay.

{#if session.status === 'connected'}

Statistics

{@const t = session.voiceTransport}

Sent {voice.stats.sent} packets, received {voice.stats.received}, decoded {voice.stats.decoded}, gaps {voice.stats.lost}. Transport: {t.udp ? `UDP, ${Math.round(t.rtt)} ms ping` : 'TCP tunnel'}.

{/if}