Загружается ли SoundEffect.CreateInstance из файла каждый раз?

Это то, что меня беспокоило. Если я создам SoundEffectInstance через SoundEffect.CreateInstance(), я должен избавиться от него, когда закончу с ним. SoundEffect.CreateInstance() не использует ContentManager, насколько я могу судить.

Так он загружается из файла или сохраняет копию в памяти? Загрузка из файла, очевидно, будет очень медленной :-/


person meds    schedule 14.06.2011    source источник
comment
Вы должны задать свой вопрос здесь: gamedev.stackexchange.com   -  person Jean-Philippe Leclerc    schedule 15.06.2011
comment
Я попробую и там, но обычно здесь я получаю лучшие ответы на вопросы по программированию, чем там.   -  person meds    schedule 15.06.2011


Ответы (1)


Это деталь реализации. Вы не знаете наверняка, это не имеет значения, это может отличаться для разных платформ, и это может измениться в будущем.

Однако вы можете сделать обоснованное предположение: во-первых, тот факт, что SoundEffectInstance существует и что вы загружаете звуковые файлы в SoundEffect, указывает на то, что SoundEffect, вероятно, отвечает за хранение звукового эффекта в памяти. И существование SoundEffect.FromStream и конструкторов SoundEffect на основе буфера является убедительным признаком того, что SoundEffect должен иметь механизм для хранения звукового буфера в памяти. Поэтому можно с уверенностью предположить, что когда вы загружаете SoundEffect из файла, он использует тот же механизм.

Если это действительно важно, вы можете проверить это, удалив или изменив звуковой файл, после загрузки SoundEffect, а затем создав экземпляр.

Как всегда, если производительность действительно важна, ее следует измерить.

Конечно, при создании SoundEffectInstance выделяются ресурсы (аудио голоса, управляемая и, возможно, неуправляемая память). Так что это не то, что вы должны создавать регулярно, если можете этого избежать, например, путем объединения и повторного использования экземпляров. Когда вы используете SoundEffect.Play, SoundEffect внутренне управляет для вас пулом SoundEffectInstance объектов.

person Andrew Russell    schedule 15.06.2011
comment
О, я вижу. Причина, по которой я спрашивал, заключается в том, что иногда мне нужно, чтобы звук воспроизводился и зацикливался, но останавливался в определенный момент, поэтому я пытался использовать SoundEffectInstance. Однако я немного беспокоюсь, что это может привести к ненужному снижению производительности. Проблема в том, что я могу воспроизвести звук, а затем зациклить его. но установка IsLoop = true вызывает исключение недопустимой функции. Поэтому я должен избавиться от экземпляра и воссоздать его. - person meds; 15.06.2011
comment
@meds Просто создайте два экземпляра, один для зацикливания, а другой нет. - person Andrew Russell; 15.06.2011