Я предполагаю, что ваш байт [] не содержит двоичного представления чисел с плавающей запятой, но представляет собой последовательность Int8
с или Int16
с.Приведенные вами примеры не похожи на аудиосэмплы, основанные на числах с плавающей запятой (ни NaN, ни -2.41E + 24 не находятся в диапазоне от -1 до 1. Хотя некоторые новые форматы аудио могут поддерживать операции с плавающей запятой вне этого диапазона, традиционно аудиоданные состоят из подписанных8 или 16-битные целочисленные выборки.
Еще одна вещь, о которой вам нужно знать, это то, что часто различные каналы чередуются. Например, он может содержать первую выборку для левого, затем для правого канала, а затемвторой сэмпл для обоих ... Так что вам нужно разделить каналы при разборе.
Также возможно, но редко, что сэмплы не подписаны. В этом случае вам нужно удалить смещение из функций преобразования.
Итак, сначала вам нужно проанализировать текущую позицию в байтовом массиве в Int8 / 16, а затем преобразовать это целое число в число с плавающей точкой в диапазоне от -1 до 1.
Если форматВы можете использовать BitConverter с прямым порядком байтов.Другая возможность, которая работает с обоими порядками байтов, это получить два байтаи объединяя их со сдвигом.Я не помню, встречается ли маленький или большой порядок байтов.Поэтому вам нужно попробовать это самостоятельно.
Это можно сделать с помощью функций, подобных следующим (я их не проверял):
float Int8ToFloat(Int8 i)
{
return ((i-Int8.MinValue)*(1f/0xFF))-0.5f;
}
float Int16ToFloat(Int16 i)
{
return ((i-Int16.MinValue)*(1f/0xFFFF))-0.5f;
}