Проблемы формата Naudio WAV - PullRequest
0 голосов
/ 30 октября 2019

Я хочу воспроизводить 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 канала. Как вы должны рассчитать размер выборки, чтобы я мог автоматически узнать, какой размер подходит для любого данного формата?

...