Я хочу воспроизводить wav-файлы на NAudio BufferedWaveProviders, которые имеют следующий формат: WaveFormat.CreateIeeeFloatWaveFormat (8000, 1);
Формат моих волновых файлов - 16 бит PCM: 44 кГц, 2 канала. Я читаю байты из файла и добавляю их в качестве примеров в bufferedWaveProvider. С форматом, который я хочу использовать (который существует в приложении), звука нет вообще. В стандартном формате (новый WaveFormat ()) звук работает просто отлично. Можно ли манипулировать данными волнового файла для воспроизведения в запрошенном формате?
bufferedWaveProvider = new BufferedWaveProvider(WaveFormat.CreateIeeeFloatWaveFormat(8000, 1);
player = new WaveOut();
player.DeviceNumber = -1;
player.Init(bufferedWaveProvider);
player.Play();
using (WaveFileReader reader = new WaveFileReader ("filePath")
{
int end = (int)reader.Length;
byte[] buffer = new byte[336];
while (reader.Position < end)
{
int bytesRequired = (int)(end - reader.Position);
if (bytesRequired > 0)
{
int bytesToRead = Math.Min(bytesRequired,buffered.Length);
int bytesRead = reader.Read(buffer, 0 , bytesToRead);
if (bytesRead > 0)
{
bufferedWaveProvider.AddSamples(buffer, 0, bytesRead);
}
}
}
}
У меня также есть побочный вопрос. в то время как я выяснял, как передавать данные волнового файла, мне пришлось поэкспериментировать с размером байтового буфера для отправки, потому что, если он слишком маленький, звук прерывистый, а если он слишком большой, переполнение буфера. Хотя методом проб и ошибок я нашел 336 наилучшим размером буфера для волнового формата 16 бит, частотой дискретизации 44100, 2 канала. Как вы должны рассчитать размер выборки, чтобы я мог автоматически узнать, какой размер подходит для любого данного формата?