Захват аудио с помощью Silverlight - PullRequest
2 голосов
/ 30 марта 2011

У меня есть некоторые AudioSink, которые назначены некоторым CaptureSource.

CaptureSource captureSource = new CaptureSource() {
    VideoCaptureDevice = null,
    AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice()
};
SampleAudioSink audioSink = new SampleAudioSink() {
    CaptureSource = captureSource
};
captureSource.Start();

Реализация AudioSink просто регистрирует вызванную функцию, чтобы убедиться, что она работает правильно. Однако метод OnSamples перестает вызываться после 37 выборок.

  • OnCaptureStarted
  • OnFormatChange
  • OnSamples (1)
  • OnSamples (2)
  • OnSamples (3)
  • [...]
  • OnSamples (35)
  • OnSamples (36)
  • OnSamples (37)

OnCaptureStopped никогда не вызывается; CaptureSource должен постоянно вызывать эту функцию. CaptureSource также не вызывает событие CaptureFailed.

Что может вызвать это странное поведение и какие попытки я могу предпринять, чтобы исправить это?

Я загрузил полный исходный код, который вызывает проблему в Pastebin

1 Ответ

2 голосов
/ 13 апреля 2011

Проблема заключалась в том, что сборщик мусора удалил AudioSink через 18 секунд ...
Добавление AudioSink в качестве члена класса решило проблему.

[...]
TextBox log;
SampleAudioSink audioSink; // to prevent garbage collector from collection
private void Application_Startup (object sender, StartupEventArgs e) {
    [...]
}
[...]
...