Skip to content

Commit

Permalink
Merge branch 'dev-audiostats'
Browse files Browse the repository at this point in the history
  • Loading branch information
bnco-dev committed Jul 25, 2023
2 parents 5a08065 + 5780ef6 commit 8308eb9
Show file tree
Hide file tree
Showing 31 changed files with 1,672 additions and 730 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ void Start()
StartAudio().Start();
}

public event Action<AudioStats> statsPushed;
public event EncodedSampleDelegate OnAudioSourceEncodedSample;
public event RawAudioSampleDelegate OnAudioSourceRawSample;
#pragma warning disable 67
Expand Down Expand Up @@ -136,12 +137,14 @@ void FixedUpdate()
// This ratio re-samples the clip from one samples per second count to other

var samplesRatio = (Clip.frequency / 16000f);
var volumeSum = 0.0f;

for (int i = 0; i < pcmSamples.Length; i++)
{
var sampleIndex = (int)(i * samplesRatio);
var clipSample = clipSamples[sampleIndex];
clipSample = Mathf.Clamp(clipSample * gain, -.999f, .999f);
volumeSum += clipSample;
pcmSamples[i] = (short)(clipSample * short.MaxValue);
}

Expand All @@ -153,6 +156,13 @@ void FixedUpdate()
OnAudioSourceEncodedSample((uint)duration, encoded);
}

statsPushed?.Invoke(new AudioStats
(
sampleCount:clipSamples.Length,
volumeSum:volumeSum,
sampleRate:16000
));

time += Time.fixedDeltaTime;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Threading.Tasks;
using SIPSorceryMedia.Abstractions;
using UnityEngine;
using Ubiq.Voip.Implementations;

namespace Ubiq.Voip.Implementations.Dotnet
{
Expand Down Expand Up @@ -103,7 +104,7 @@ public RtpBufferer (int latencySamples, int syncSamples,
stopwatch.Start();
}

public PlaybackStats Commit (int currentTimeSamples, AudioClip audioClip)
public AudioStats Commit (int currentTimeSamples, AudioClip audioClip)
{
var stats = Advance(currentTimeSamples, audioClip);
Flush(audioClip);
Expand Down Expand Up @@ -187,7 +188,7 @@ private void Flush (AudioClip audioClip)
}

// Step internal time trackers forward and zero out just-read samples
private PlaybackStats Advance (int timeSamples, AudioClip audioClip)
private AudioStats Advance (int timeSamples, AudioClip audioClip)
{
if (absTimeSamples < 0)
{
Expand Down Expand Up @@ -227,10 +228,10 @@ private PlaybackStats Advance (int timeSamples, AudioClip audioClip)
lastTimeSamples = timeSamples;

// Calculate stats for the advance
return new PlaybackStats { volumeSum=volume, sampleCount=deltaTimeSamples, sampleRate=audioClip.frequency};
return new AudioStats(sampleCount:deltaTimeSamples,volumeSum:volume,sampleRate:audioClip.frequency);
}

return new PlaybackStats { volumeSum=0, sampleCount=0, sampleRate=audioClip.frequency};
return new AudioStats(sampleCount:0,volumeSum:0,sampleRate:audioClip.frequency);
}

public void AddRtp (AudioRtp rtp)
Expand All @@ -239,14 +240,15 @@ public void AddRtp (AudioRtp rtp)
}
}

public event Action<AudioStats> statsPushed;

public int sampleRate { get { return 16000; } }
public int bufferSamples { get { return sampleRate * 2; } }
public int latencySamples { get { return sampleRate / 5; } }
public int syncSamples { get { return sampleRate * 1; } }

public float gain = 1.0f;
public AudioSource unityAudioSource { get; private set; }
public PlaybackStats lastFrameStats { get; private set; }
public float Volume { get => unityAudioSource.volume; set => unityAudioSource.volume = value; }

private G722AudioDecoder audioDecoder = new G722AudioDecoder();
Expand Down Expand Up @@ -320,7 +322,8 @@ private void Update()

var timeSamples = unityAudioSource.timeSamples;
var clip = unityAudioSource.clip;
lastFrameStats = rtpBufferer.Commit(timeSamples,clip);
var stats = rtpBufferer.Commit(timeSamples,clip);
statsPushed?.Invoke(stats);
}

private float PcmToFloat (short pcm)
Expand Down Expand Up @@ -368,11 +371,6 @@ private Task GetCloseAudioTask()
return new Task(() => { });
}

public PlaybackStats GetLastFramePlaybackStats()
{
return lastFrameStats;
}

public void UpdateSpatialization(Vector3 sourcePosition,
Quaternion sourceRotation, Vector3 listenerPosition,
Quaternion listenerRotation)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using System;
using UnityEngine;

namespace Ubiq.Voip.Implementations.Dotnet
{
public interface IVoipSink : SIPSorceryMedia.Abstractions.IAudioSink
{
PlaybackStats GetLastFramePlaybackStats();
event Action<AudioStats> statsPushed;
void UpdateSpatialization(Vector3 sourcePosition, Quaternion sourceRotation,
Vector3 listenerPosition, Quaternion listenerRotation);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
using System;

namespace Ubiq.Voip.Implementations.Dotnet
{
public interface IVoipSource : SIPSorceryMedia.Abstractions.IAudioSource
{
event Action<AudioStats> statsPushed;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ public void End ()
}
}

public event Action<AudioStats> statsPushed;
public float gain = 1.0f;

private MicrophoneListener microphoneListener = new MicrophoneListener();
Expand Down Expand Up @@ -221,15 +222,23 @@ private void Update()
// Send samples if we have them
while (microphoneListener.Advance())
{
var volumeSum = 0.0f;
for (int i = 0; i < microphoneListener.samples.Length; i++)
{
var floatSample = microphoneListener.samples[i];
floatSample = Mathf.Clamp(floatSample*gain,-.999f,.999f);
volumeSum += floatSample;
pcm[i] = (short)(floatSample * short.MaxValue);
}

audioEncoder.Encode(encoded,pcm);
OnAudioSourceEncodedSample.Invoke(RTP_TIMESTAMP_PER_BUFFER,encoded);
statsPushed?.Invoke(new AudioStats
(
sampleCount:microphoneListener.samples.Length,
volumeSum:volumeSum,
sampleRate:SAMPLE_RATE
));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace Ubiq.Voip.Implementations.Dotnet
public class NullVoipSink : MonoBehaviour, IVoipSink
{
#pragma warning disable 67
public event Action<AudioStats> statsPushed;
public event SourceErrorDelegate OnAudioSinkError;
#pragma warning restore 67

Expand Down Expand Up @@ -63,11 +64,6 @@ public void GotAudioRtp(IPEndPoint remoteEndPoint, uint ssrc, uint seqnum, uint
{
}

public PlaybackStats GetLastFramePlaybackStats()
{
return new PlaybackStats();
}

public void UpdateSpatialization(Vector3 sourcePosition, Quaternion sourceRotation, Vector3 listenerPosition, Quaternion listenerRotation)
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class NullVoipSource : MonoBehaviour, IVoipSource
private MediaFormatManager<AudioFormat> audioFormatManager;

#pragma warning disable 0067
public event Action<AudioStats> statsPushed;
public event EncodedSampleDelegate OnAudioSourceEncodedSample;
public event RawAudioSampleDelegate OnAudioSourceRawSample;
public event SourceErrorDelegate OnAudioSourceError;
Expand Down
Loading

0 comments on commit 8308eb9

Please sign in to comment.