Использование NAudio для микширования волноводов
Я использую NAudio для генерации и воспроизведения звуковых волн во время выполнения.
Мне удалось получить синусоидальную волну, сгенерированную с помощью этого учебника: http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html
Однако-что мне действительно нужно, так это иметь возможность добавлять много отдельных волн в поток WaveMixerStream во время выполнения.
Я понимаю, что для этого мне нужны отдельные волновые потоки, но я не знаю, как превратить выход из WaveProvider в WaveStream чтобы добавить в поток Wavemixer.
Я предполагаю, что это невозможно, поэтому изменил код, чтобы дать производный класс WaveStream.
Я добавил:
public override long Length
{
get { return long.MaxValue; }
}
Но я не уверен, как получить позицию:
public override long Position
{
get
{
return //What here?
}
set
{
// What here? = value;
}
}
Таким образом, вопрос состоит в следующем: 1. Сработает ли это? 2. Как мне получить / установить позицию?
Заранее благодарю.
1 ответ:
Разница между
Другой подход заключается в простом копировании кода изIWaveProvider
иWaveStream
заключается в том, чтоWaveStream
поддерживает длину отчета и позицию и установку позиции. Однако, поскольку вы проходите вIWaveProvider
, вы не знаете длину и не можете установить позицию. Просто ничего не делайте в сеттереPosition
, а для геттераPosition
верните общее количество байтов, которые были возвращены из методаRead
до сих пор (просто имейте частную переменную типа long для хранения этого).WaveMixerStream
и превратите его вIWaveProvider
вместоWaveStream
. Это на самом деле упростит его совсем немного, большая сложностьWaveMixerStream
заключается в правильном перемещении всех входов микшера при перемещении. (Кстати, в будущем я буду поощрять людей использовать интерфейсISampleProvider
, и уже естьMixingSampleProvider
, который делает именно то, что вы хотите. Я еще не приступил к написанию учебников по этому вопросу, но все это есть)