У меня есть приложение C # UWP, которое использует AudioGraph API.
Я использую пользовательский эффект для MediaSourceAudioInputNode
.
Я следовал примеру на этой странице: https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/custom-audio-effects
Это работает, но я слышу несколько щелчков в секунду в динамиках, когда работает пользовательский эффект.
Вот код для моего ProcessFrame
метода:
public unsafe void ProcessFrame(ProcessAudioFrameContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
AudioFrame frame = context.InputFrame;
using (AudioBuffer inputBuffer = frame.LockBuffer(AudioBufferAccessMode.Read))
using (IMemoryBufferReference inputReference = inputBuffer.CreateReference())
{
((IMemoryBufferByteAccess)inputReference).GetBuffer(out byte* inputDataInBytes, out uint inputCapacity);
Span<float> samples = new Span<float>(inputDataInBytes, (int)inputCapacity / sizeof(float));
for (int i = 0; i < samples.Length; i++)
{
float sample = samples[i];
// sample processing...
samples[i] = sample;
}
}
}
Я использовал профилировщик Visual Studio, чтобы определить причину проблемы.Понятно, что есть проблема с памятью.Сборка мусора выполняется несколько раз в секунду.При каждой сборке мусора я слышу щелчок.
Профилировщик Visual Studio показывает, что объекты для сбора мусора имеют тип ProcessAudioFrameContext
.
Эти объекты создаются API AudioGraph перед вводомметод ProcessFrame
и переданный в качестве параметра этому методу.
Можно ли что-то сделать, чтобы избежать этих частых сборок мусора?