У меня есть приложение, которое генерирует 32-разрядные числа с плавающей точкой (big endian).Если я записываю их в файл, а затем открываю их в Audacity, файл воспроизводится правильно.Я пытаюсь воспроизвести поток с помощью NAudio.Если я создаю WaveFormat из 24 тыс. Сэмплов, 32-битных и 2-х каналов, я слышу шум, хотя, поскольку это неправильный формат, поток, конечно, не рендерится, если я создаю правильный формат (IeeeFloatWave), то ничего не слышу ввсе.Я знаю, что сэмплы поступают правильно, так как я могу сохранить их на диск, но я просто не могу их воспроизвести.Кто-нибудь видит, что я делаю, что не так?
Обновлен и решен - изменение порядка байтов от маленького к большому в процедуре кормления
Преобразователь битов FloatTo16формат до воспроизведения
private bool _streamActive = false;
private BufferedWaveProvider bufferedWaveProvider = null;
private WaveFloatTo16Provider waveFloatTo16Provider = null;
private WaveOut waveOut = null;
private WaveFormat waveFormat=null;
// ProcessSound is fed incoming byte packets
// (28 bytes header plus 1024 bytes audio)
// by background thread
// Data is converted from little to big endian in background thread
public void ProcessSound(byte[] rxData)
{
// get data length
int datalen = rxData.Length;
// check to activate player
if (_streamActive == true)
{
// add samples to buffer ('28' allows for header information)
bufferedWaveProvider.AddSamples(rxData, 28, datalen - 28);
return;
}
// start it going
waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(24000, 2);
// create buffer to allow samples to be added
bufferedWaveProvider = new BufferedWaveProvider(waveFormat);
// convert from 32 bit float to 16 bit PCM
waveFloatTo16Provider = new WaveFloatTo16Provider(bufferedWaveProvider);
// add samples to buffer
bufferedWaveProvider.AddSamples(rxData, 28, datalen - 28);
// create waveOut player
waveOut = new WaveOut();
waveOut.Init(waveFloatTo16Provider);
waveOut.Volume = 0.25f;
waveOut.Play();
// mark stream is active
_streamActive = true;
}