public CachedSound(string audioFileName, TYPE_SOURCE type = TYPE_SOURCE.FILE_LOCAL) { this.Type = type; switch (type) { case TYPE_SOURCE.FILE_LOCAL: using (var audioFileReader = new AudioFileReader(audioFileName)) { // TODO: could add resampling in here if required WaveFormat = audioFileReader.WaveFormat; var wholeFile = new List <float>((int)(audioFileReader.Length / 4)); float[] readBuffer = new float[audioFileReader.WaveFormat.SampleRate * audioFileReader.WaveFormat.Channels]; int samplesRead; while ((samplesRead = audioFileReader.Read(readBuffer, 0, readBuffer.Length)) > 0) { wholeFile.AddRange(readBuffer.Take(samplesRead)); } AudioData = wholeFile.ToArray(); } break; case TYPE_SOURCE.FILE_MP3_ONLINE: using (Stream ms = new MemoryStream()) { using (Stream stream = WebRequest.Create(audioFileName) .GetResponse().GetResponseStream()) { //byte[] buffer = new byte[32768]; //int read; //while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) //{ // ms.Write(buffer, 0, read); //} // TODO: could add resampling in here if required WaveFormat = new WaveFormat(); var wholeFile = new List <byte>(); byte[] readBuffer = new byte[32768]; int samplesRead = 0; while ((samplesRead = stream.Read(readBuffer, 0, readBuffer.Length)) > 0) { wholeFile.AddRange(readBuffer.Take(samplesRead)); } AudioData_FILE_MP3_ONLINE = wholeFile.ToArray(); } } break; case TYPE_SOURCE.STREAM_CLOUD: break; } }
void test_play_file_cache(string url, TYPE_SOURCE type = TYPE_SOURCE.FILE_LOCAL) { // on startup: var zap = new CachedSound(url, type); //var boom = new CachedSound("boom.wav"); // later in the app... AudioPlaybackEngine.Instance.PlaySound(zap); //AudioPlaybackEngine.Instance.PlaySound(boom); //AudioPlaybackEngine.Instance.PlaySound("crash.wav"); // on shutdown //AudioPlaybackEngine.Instance.Dispose(); }