Использование NAudio для микширования WaveProviders - PullRequest
2 голосов
/ 05 марта 2012

Я использую NAudio для генерации и воспроизведения звуковых волн во время выполнения.

Мне удалось получить синусоидальную волну, сгенерированную с помощью этого урока: http://mark -dot-net.blogspot.com / 2009/10 / play-of-sine-wave-in-naudio.html

Однако мне действительно нужно иметь возможность добавлять множество отдельных волн в WaveMixerStream во время выполнения.

Я понимаю, что для этого мне нужны отдельные WaveStreams, но я не знаю, как преобразовать вывод WaveProvider в WaveStream для добавления в WaveMixerStream.

Я предполагаю, что это не такможно изменить код, чтобы получить производный класс WaveStream.

Я добавил:

public override long Length
    {
        get { return long.MaxValue; }
    }

Но я не уверен, как получить позицию:

public override long Position
{
    get
    {
        return //What here?
    }
    set
    {
        // What here? = value;
    }

}

Итак, вопрос: 1. Будет ли это работать?2. Как мне получить / установить позицию?

Заранее спасибо.

1 Ответ

2 голосов
/ 05 марта 2012

Разница между IWaveProvider и WaveStream заключается в том, что WaveStream поддерживает длину сообщения, позицию и положение установки.Однако, поскольку вы передаете IWaveProvider, вы не знаете длину и не можете установить позицию.Просто ничего не делайте в установщике Position, а для получателя Position верните общее количество байтов, которые были возвращены из метода Read до сих пор (просто сохраните личную переменную типа long для ее хранения).

Другой подход - просто скопировать код из WaveMixerStream и превратить его в IWaveProvider вместо WaveStream.На самом деле это немного упростит. Большая сложность WaveMixerStream заключается в правильном расположении всех входов микшера при изменении положения.

(Кстати, в будущем я буду поощрять людей использоватьинтерфейс ISampleProvider и уже есть MixingSampleProvider, который делает именно то, что вы хотите. Я еще не успел написать учебники по этому вопросу, но это все там)

...