Как преобразовать сохраненные данные файла MP3 (byte[]) в число с плавающей точкой [], которое Unity может использовать в качестве AudioSource-Data?

За последние дни я провел массу исследований, и ничто не помогло мне в решении моей особой проблемы. Я пишу свой собственный музыкальный движок для игры Unity3d, и для этого я создал собственные файлы, содержащие данные mp3 и другую информацию.

Сейчас я пытаюсь взять эти разделенные mp3-байтовые массивы (которые можно воспроизвести, когда я храню их по отдельности, я их протестировал - так что аудиоданные кажутся нормальными) и преобразовать их в AudioSource Unity (s) как-то Я думаю, что преобразования байта [] в число с плавающей точкой [], содержащее необходимые образцы данных моего аудио, будет достаточно, потому что audioClip.setData( ... ); должен сделать трюк тогда (я надеюсь).

Но я постоянно терплю неудачу в распаковке и / или преобразовании моего необработанного mp3-буфера [] во что-то вроде float[] - и даже если я каким-то образом преуспеваю, единственное, что я слышу, - это мерзкая чепуха, похожая на шум.

Есть идеи? Я хотел бы услышать от вас и решить эту проблему!

1 ответ

Реализация алгоритма распаковки, который будет принимать сжатый поток MP3 и выводить его в виде несжатых данных, не является тривиальной задачей. Вы можете найти библиотеку, которая делает это (я ничего не знаю), или обойти проблему каким-то образом. Вы можете использовать untiy engine для распаковки (или воспроизведения) через AudioSource, а затем сэмплировать его или выполнить некоторую командную строку FFMPEG, чтобы получить wav. Большинство способов сделать это громоздко, и в идеале вы должны найти способ вообще этого не делать.

byte [] или float[] на самом деле не имеют существенного различия - разница кодируется против raw

Другие вопросы по тегам