예제 #1
0
        public void PreloadSfx([CanBeNull] string fileName, [NotNull] IAudioFormat format)
        {
            if (fileName == null)
            {
                return;
            }

            fileName = Path.GetFullPath(fileName);

            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException("Audio file is not found.", fileName);
            }

            var key = Environment.OSVersion.Platform == PlatformID.Win32NT ? fileName.ToLowerInvariant() : fileName;

            if (_preloaded.ContainsKey(key))
            {
                return;
            }

            using (var waveStream = format.Read(fileName)) {
                byte[] data;
                var    buf = new byte[1024];

                using (var memoryStream = new MemoryStream()) {
                    var read = waveStream.Read(buf, 0, buf.Length);
                    while (read > 0)
                    {
                        memoryStream.Write(buf, 0, read);

                        if (read < buf.Length)
                        {
                            break;
                        }

                        read = waveStream.Read(buf, 0, buf.Length);
                    }
                    data = memoryStream.ToArray();
                }

                var waveFormat = waveStream.WaveFormat;
                _preloaded.Add(key, (data, waveFormat));
            }
        }
예제 #2
0
        public Music CreateMusic([NotNull] string fileName, [NotNull] IAudioFormat format, float volume)
        {
            var audio = format.Read(fileName);

            return(CreateMusic(audio, volume, true));
        }
예제 #3
0
 public Sound LoadSoundDirect([NotNull] string fileName, [NotNull] IAudioFormat format, bool manageResult)
 {
     using (var stream = format.Read(fileName)) {
         return(LoadSoundDirect(fileName, stream, manageResult));
     }
 }