Использование 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, который делает именно то, что вы хотите. Я еще не приступил к написанию учебников по этому вопросу, но все это есть)