Можно ли установить количество сэмплов, запрашиваемых NAudio's Read? - PullRequest
0 голосов
/ 21 августа 2010

Я использую naudio для генерации звуковых сигналов с широтно-импульсной модуляцией для управления парой сервоприводов. В настоящее время я использую класс WaveProvider32, который написал Марк Хит (http://mark -dot-net.blogspot.com / 2009/10 / play-of-sine-wave-in-naudio.html ), который реализует интерфейс IWaveProvider. Частота дискретизации составляет 44100

Аудиосигнал в основном представляет собой блок шириной N, где в первой части сигнала все значения высокие, а для остальной части блока значения низкие. Поскольку операция чтения запрашивает больше выборок, чем ширина блока, я просто повторяю сигнал, пока не заполню буфер. У меня проблема в том, что длина буфера не кратна ширине моего сигнального блока, поэтому часть последнего блока обрезается, какие винты с сервоприводом и заставляет его дергаться. Я понимаю, что мог бы сделать некоторую причудливость кода, чтобы отследить его и компенсировать начало следующего чтения, но мне было бы проще, если бы я мог установить количество значений, которые WaveProvider должен был предоставить одновременно, чтобы я мог сделать его кратным (или может быть точная ширина) размера блока сигнала.

Это возможно?

1 Ответ

0 голосов
/ 27 сентября 2010

Объем данных, запрашиваемых функцией Read, определяется выбранной реализацией IWaveOut, а также задержкой и количеством буферов, с которыми она работает. Вам необходимо создать промежуточный IWaveProvider, который гарантирует, что методы Read для основного поставщика всегда запрашивают правильный номер. Взгляните на BlockAlignReductionStream , который я создал для аналогичной проблемы.

...