From a2d6b4890e4ce1423a96e1a6756b047cd04483ec Mon Sep 17 00:00:00 2001 From: Regalis Date: Sat, 31 Dec 2016 14:49:43 +0200 Subject: [PATCH] Updated to the latest version of NVorbis, fixed OggStream.Empty() failing to unqueue buffers when quitting due to a modified ALHelper.Check method that doesn't throw an exception on error --- Subsurface/Barotrauma.csproj | 2 +- Subsurface/NVorbis.dll | Bin 53760 -> 0 bytes Subsurface/Source/Sounds/OggStream.cs | 182 ++--- Subsurface/Source/Sounds/SoundManager.cs | 12 +- Subsurface/packages.config | 1 + packages/NVorbis.0.8.5.0/LICENSE | 20 + .../NVorbis.0.8.5.0/NVorbis.0.8.5.0.nupkg | Bin 0 -> 42469 bytes .../NVorbis.0.8.5.0/NVorbis.0.8.5.0.nuspec | 21 + packages/NVorbis.0.8.5.0/README | 123 ++++ packages/NVorbis.0.8.5.0/lib/NVorbis.XML | 672 ++++++++++++++++++ packages/NVorbis.0.8.5.0/lib/NVorbis.dll | Bin 0 -> 66048 bytes 11 files changed, 906 insertions(+), 127 deletions(-) delete mode 100644 Subsurface/NVorbis.dll create mode 100644 packages/NVorbis.0.8.5.0/LICENSE create mode 100644 packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nupkg create mode 100644 packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nuspec create mode 100644 packages/NVorbis.0.8.5.0/README create mode 100644 packages/NVorbis.0.8.5.0/lib/NVorbis.XML create mode 100644 packages/NVorbis.0.8.5.0/lib/NVorbis.dll diff --git a/Subsurface/Barotrauma.csproj b/Subsurface/Barotrauma.csproj index f65ad9123..2f9819604 100644 --- a/Subsurface/Barotrauma.csproj +++ b/Subsurface/Barotrauma.csproj @@ -312,7 +312,7 @@ False - .\NVorbis.dll + ..\packages\NVorbis.0.8.5.0\lib\NVorbis.dll False diff --git a/Subsurface/NVorbis.dll b/Subsurface/NVorbis.dll deleted file mode 100644 index 486be36466b497fc84f3eb97c241abc7de69c362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53760 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 diff --git a/Subsurface/Source/Sounds/OggStream.cs b/Subsurface/Source/Sounds/OggStream.cs index d877cc14f..cc02e522f 100644 --- a/Subsurface/Source/Sounds/OggStream.cs +++ b/Subsurface/Source/Sounds/OggStream.cs @@ -54,7 +54,7 @@ namespace Barotrauma.Sounds DebugConsole.ThrowError("OpenAL error: " + AL.GetErrorString(error)); #else - DebugConsole.NewMessage("OpenAL error: "+AL.GetErrorString(error), Microsoft.Xna.Framework.Color.Red); + DebugConsole.NewMessage("OpenAL error: " + AL.GetErrorString(error), Microsoft.Xna.Framework.Color.Red); #endif } } @@ -130,7 +130,8 @@ namespace Barotrauma.Sounds case ALSourceState.Stopped: lock (prepareMutex) { - Close(); + Reader.DecodedTime = TimeSpan.Zero; + Ready = false; Empty(); } break; @@ -141,15 +142,7 @@ namespace Barotrauma.Sounds lock (prepareMutex) { Preparing = true; -//#if TRACE -// logX = 7; -// LogHandler("(*", logX, logY); -// logX += 2; -//#endif Open(precache: true); -//#if TRACE -// LogHandler(")", logX++, logY); -//#endif } } } @@ -169,20 +162,9 @@ namespace Barotrauma.Sounds Prepare(); -//#if TRACE -// LogHandler("{", logX++, logY); -//#endif AL.SourcePlay(alSourceId); this.Volume = volume; - - try - { - ALHelper.Check(); - } - catch (Exception e) - { - throw new Exception ("AIHElper", e.InnerException); - } + ALHelper.Check(); Preparing = false; @@ -195,9 +177,6 @@ namespace Barotrauma.Sounds return; OggStreamer.Instance.RemoveStream(this); -//#if TRACE -// LogHandler("]", logX++, logY); -//#endif AL.SourcePause(alSourceId); ALHelper.Check(); } @@ -208,9 +187,6 @@ namespace Barotrauma.Sounds return; OggStreamer.Instance.AddStream(this); -#if TRACE - LogHandler("[", logX++, logY); -#endif AL.SourcePlay(alSourceId); ALHelper.Check(); } @@ -220,9 +196,6 @@ namespace Barotrauma.Sounds var state = AL.GetSourceState(alSourceId); if (state == ALSourceState.Playing || state == ALSourceState.Paused) { -//#if TRACE -// LogHandler("}", logX++, logY); -//#endif StopPlayback(); } @@ -232,20 +205,20 @@ namespace Barotrauma.Sounds } } - //float lowPassHfGain; - //public float LowPassHFGain - //{ - // get { return lowPassHfGain; } - // set - // { - // if (ALHelper.Efx.IsInitialized) - // { - // ALHelper.Efx.Filter(alFilterId, EfxFilterf.LowpassGainHF, lowPassHfGain = value); - // ALHelper.Efx.BindFilterToSource(alSourceId, alFilterId); - // ALHelper.Check(); - // } - // } - //} + /*float lowPassHfGain; + public float LowPassHFGain + { + get { return lowPassHfGain; } + set + { + if (ALHelper.Efx.IsInitialized) + { + ALHelper.Efx.Filter(alFilterId, EfxFilterf.LowpassGainHF, lowPassHfGain = value); + ALHelper.Efx.BindFilterToSource(alSourceId, alFilterId); + ALHelper.Check(); + } + } + }*/ float volume; public float Volume @@ -260,45 +233,31 @@ namespace Barotrauma.Sounds public bool IsLooped { get; set; } - - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } + var state = AL.GetSourceState(alSourceId); + if (state == ALSourceState.Playing || state == ALSourceState.Paused) + StopPlayback(); - protected virtual void Dispose(bool disposing) - { - if (disposing) + lock (prepareMutex) { - var state = AL.GetSourceState(alSourceId); - if (state == ALSourceState.Playing || state == ALSourceState.Paused) - StopPlayback(); + OggStreamer.Instance.RemoveStream(this); - lock (prepareMutex) - { - OggStreamer.Instance.RemoveStream(this); + if (state != ALSourceState.Initial) + Empty(); - if (state != ALSourceState.Initial) - Empty(); + Close(); - Close(); - - underlyingStream.Dispose(); - } - - AL.DeleteSource(alSourceId); - AL.DeleteBuffers(alBufferIds); - - //if (ALHelper.Efx.IsInitialized) - // ALHelper.Efx.DeleteFilter(alFilterId); - - ALHelper.Check(); - #if TRACE - ALHelper.TraceMemoryUsage(LogHandler); - #endif + underlyingStream.Dispose(); } + + AL.DeleteSource(alSourceId); + AL.DeleteBuffers(alBufferIds); + + /*if (ALHelper.Efx.IsInitialized) + ALHelper.Efx.DeleteFilter(alFilterId);*/ + + ALHelper.Check(); } void StopPlayback() @@ -311,12 +270,18 @@ namespace Barotrauma.Sounds { int queued; AL.GetSource(alSourceId, ALGetSourcei.BuffersQueued, out queued); + ALHelper.Check(); + if (queued > 0) { try { AL.SourceUnqueueBuffers(alSourceId, queued); - ALHelper.Check(); + + if (AL.GetError() != ALError.NoError) + { + throw new InvalidOperationException(); + } } catch (InvalidOperationException) { @@ -338,10 +303,6 @@ namespace Barotrauma.Sounds Empty(); } } -//#if TRACE -// logX = 7; -// LogHandler(new string(Enumerable.Repeat(' ', Console.BufferWidth - 6).ToArray()), logX, logY); -//#endif } internal void Open(bool precache = false) @@ -388,7 +349,7 @@ namespace Barotrauma.Sounds readonly short[] castBuffer; readonly HashSet streams = new HashSet(); - readonly List threadLocalStreams = new List(); + readonly List threadLocalStreams = new List(); readonly Thread underlyingThread; volatile bool cancelled; @@ -432,27 +393,18 @@ namespace Barotrauma.Sounds public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposing) + lock (singletonMutex) { - lock (singletonMutex) - { - Debug.Assert(Instance == this, "Two instances running, somehow...?"); + Debug.Assert(Instance == this, "Two instances running, somehow...?"); - cancelled = true; - lock (iterationMutex) - streams.Clear(); + cancelled = true; + lock (iterationMutex) + streams.Clear(); - Instance = null; - } + Instance = null; } } - + internal bool AddStream(OggStream stream) { lock (iterationMutex) @@ -460,7 +412,7 @@ namespace Barotrauma.Sounds } internal bool RemoveStream(OggStream stream) { - lock (iterationMutex) + lock (iterationMutex) return streams.Remove(stream); } @@ -473,12 +425,8 @@ namespace Barotrauma.Sounds CastBuffer(readSampleBuffer, castBuffer, readSamples); } AL.BufferData(bufferId, stream.Reader.Channels == 1 ? ALFormat.Mono16 : ALFormat.Stereo16, castBuffer, - readSamples * sizeof (short), stream.Reader.SampleRate); + readSamples * sizeof(short), stream.Reader.SampleRate); ALHelper.Check(); -//#if TRACE -// stream.LogHandler(readSamples == BufferSize ? "." : "|", stream.logX++, stream.logY); -// //ALHelper.TraceMemoryUsage(stream.LogHandler); -//#endif return readSamples != BufferSize; } @@ -497,7 +445,7 @@ namespace Barotrauma.Sounds { while (!cancelled) { - Thread.Sleep((int) (1000 / UpdateRate)); + Thread.Sleep((int)(1000 / UpdateRate)); if (cancelled) break; threadLocalStreams.Clear(); @@ -515,10 +463,10 @@ namespace Barotrauma.Sounds int queued; AL.GetSource(stream.alSourceId, ALGetSourcei.BuffersQueued, out queued); - //ALHelper.Check(); + ALHelper.Check(); int processed; AL.GetSource(stream.alSourceId, ALGetSourcei.BuffersProcessed, out processed); - //ALHelper.Check(); + ALHelper.Check(); if (processed == 0 && queued == stream.BufferCount) continue; @@ -530,22 +478,12 @@ namespace Barotrauma.Sounds for (int i = 0; i < tempBuffers.Length; i++) { - try - { - finished |= FillBuffer(stream, tempBuffers[i]); - } - catch - { - finished = true; - } + finished |= FillBuffer(stream, tempBuffers[i]); if (finished) { if (stream.IsLooped) - { - stream.Close(); - stream.Open(); - } + stream.Reader.DecodedTime = TimeSpan.Zero; else { streams.Remove(stream); @@ -555,7 +493,7 @@ namespace Barotrauma.Sounds } AL.SourceQueueBuffers(stream.alSourceId, tempBuffers.Length, tempBuffers); - //ALHelper.Check(); + ALHelper.Check(); if (finished && !stream.IsLooped) continue; @@ -572,9 +510,6 @@ namespace Barotrauma.Sounds var state = AL.GetSourceState(stream.alSourceId); if (state == ALSourceState.Stopped) { -//#if TRACE -// stream.LogHandler("!", stream.logX++, stream.logY); -//#endif AL.SourcePlay(stream.alSourceId); ALHelper.Check(); } @@ -583,5 +518,4 @@ namespace Barotrauma.Sounds } } } - } diff --git a/Subsurface/Source/Sounds/SoundManager.cs b/Subsurface/Source/Sounds/SoundManager.cs index 86607bc00..986a1ee64 100644 --- a/Subsurface/Source/Sounds/SoundManager.cs +++ b/Subsurface/Source/Sounds/SoundManager.cs @@ -29,6 +29,7 @@ namespace Barotrauma.Sounds try { AC = new AudioContext(); + ALHelper.Check(); } catch (DllNotFoundException e) { @@ -266,21 +267,28 @@ namespace Barotrauma.Sounds { var state = OpenTK.Audio.OpenAL.AL.GetSourceState(alSources[i]); if (state == OpenTK.Audio.OpenAL.ALSourceState.Playing || state == OpenTK.Audio.OpenAL.ALSourceState.Paused) + { Stop(i); + } OpenTK.Audio.OpenAL.AL.DeleteSource(alSources[i]); ALHelper.Check(); } - if (oggStream!=null) + if (oggStream != null) { oggStream.Stop(); oggStream.Dispose(); + + oggStream = null; } - + if (oggStreamer != null) + { oggStreamer.Dispose(); + oggStreamer = null; + } } } diff --git a/Subsurface/packages.config b/Subsurface/packages.config index dc755f697..065671582 100644 --- a/Subsurface/packages.config +++ b/Subsurface/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file diff --git a/packages/NVorbis.0.8.5.0/LICENSE b/packages/NVorbis.0.8.5.0/LICENSE new file mode 100644 index 000000000..bd12e52a0 --- /dev/null +++ b/packages/NVorbis.0.8.5.0/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2015 Andrew Ward, Ms-PL + +Microsoft Public License (Ms-PL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +Definitions +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. +A "contribution" is the original software, or any additions or changes to the software. +A "contributor" is any person that distributes its contribution under this license. +"Licensed patents" are a contributor's patent claims that read directly on its contribution. +Grant of Rights +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. +Conditions and Limitations +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. diff --git a/packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nupkg b/packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..a6208fde21e3fa5453d4c9bfaa85ac0d1628719f GIT binary patch literal 42469 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%0AbX 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 F{vX~DL`eVu literal 0 HcmV?d00001 diff --git a/packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nuspec b/packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nuspec new file mode 100644 index 000000000..61a783b73 --- /dev/null +++ b/packages/NVorbis.0.8.5.0/NVorbis.0.8.5.0.nuspec @@ -0,0 +1,21 @@ + + + + NVorbis + 0.8.5.0 + NVorbis + Andrew Ward + Andrew Ward + http://nvorbis.codeplex.com/license + http://nvorbis.codeplex.com/ + false + A fully managed implementation of a Xiph.org Foundation Ogg Vorbis decoder. + A managed Xiph.org Foundation Ogg Vorbis decoder + - BugFix: Fix occasional crashes streaming tracks on multiple threads + en-US + ogg vorbis xiph audio c# sound .NET + + + + + \ No newline at end of file diff --git a/packages/NVorbis.0.8.5.0/README b/packages/NVorbis.0.8.5.0/README new file mode 100644 index 000000000..6d37a3395 --- /dev/null +++ b/packages/NVorbis.0.8.5.0/README @@ -0,0 +1,123 @@ +NVorbis +------- + +NVorbis is a .Net library for decoding Xiph.org Vorbis files. It is designed to run in +partial trust environments and does not require P/Invoke or unsafe code. + +This implementation is based on the Vorbis specification found on xiph.org. The MDCT +and Huffman codeword generator were borrowed from public domain implementations in +https://github.com/nothings/stb/blob/master/stb_vorbis.c. + +Currently the only container supported is Xiph.org Ogg. Ogg Skeleton and Matroska / WebM +are planned (no ETA, though). RTP support is possible, but not planned. + +To use: + +- Create an instance of NVorbis.VorbisReader (pass the Ogg Vorbis filename in) +- Use these properties to gather data about the logical stream: + - Channels + - SampleRate + - TotalTime - A TimeSpan indicating the total length of the audio data + - DecodedTime - A TimeSpan indicating the last returned sample's timestamp + - NominalBitrate, UpperBitrate, and LowerBitrate + - These are the encoder's reported bitrates + - Vendor - The encoder's vendor string + - Comments - An array of comments in the file (usually tags) +- Call "int ReadSamples(float[], int, int)" to retrieve the next batch of + samples. It will return 0 when the logical Vorbis stream is done. + + +- For NAudio support: + - Reference NVorbis.NAudioSupport.dll + - Create an instance of NVorbis.NAudioSupport.VorbisWaveReader + - VorbisWaveReader implements NAudio.Wave.WaveStream. + +History +------- +0.1 - 08/03/2012 + * Initial Release +0.2 - 08/07/2012 + * Swapped out LGPL code for public domain implementations + * Relicensed under Ms-PL + * Added NAudio support project + * Added test files & app + * Performance improvements +0.3 - 08/08/2012 + * Fixed Page / Packet decode (packets overlapping 2 pages) + * Fixed "no energy" packet handling + * Fixed packet reader not merging when unsolicited packets are added + * Added .gitignore + * Added initial multi-stream support + * Added statistics (see VorbisReader.Stats) +0.4 - 08/14/2012 + * Refactoring to clean up code and make room for later improvements + * Changed lapping algorithm to be simpler + * Switched to higher-performance clipping algorithm + * Some cleanup +0.4.1 - 09/11/2012 + * Fixed a couple Ogg container bugs + * Optimized memory allocations for better performance / memory usage +0.5 - 09/20/2012 + * Added seeking support + * Changed OggPacketReader to use a doubly-linked list for the packet queue / history + * Changed OggPacketReader.GetTotalPageCount() to count pages directly instead of making .AddPacket(...) keep a list + * Fixed a few bugs (mostly race conditions in multi-threaded playback scenarios) + * Added multi-stream support to VorbisWaveReader + * Added several info properties to VorbisWaveReader +0.5.5 - 11/15/2012 + * Added OpenTK support + * Added makefiles for Mono + * Added constructor to NAudioSupport for already opened Stream instances + * Made Ogg container logic thread-safe + * Cleanup & Optimization +0.6.0 - 06/27/2013 + * Remove ACache from project + * Make clipping optional (default: on) + * Set clipping to clamp at +/-.99999994 instead of +/-1 as a courtesy to those not outputing float samples + * Performance improvements for RingBuffer + * Performance improvements in ThreadSafeStream +0.7.0 - 07/15/2013 + * Rewrite Ogg Reader buffering logic to vastly improve memory usage + * Reorganize to more easily support other container types / work with other Ogg stream decoders + * Exposed Ogg reading types + * Performance improvements + * Bugfix: Don't throw on Vorbis streams that only have a single mode +0.7.1 - 07/18/2013 + * Removed use of generics & lambda from Huffman decoder + * Reduced computation by only processing samples that are required for output + * Bugfix: Seeking now works again + * Bugfix: OpenTKSupport.OggStream now only queues as many source buffers as it filled +0.7.2 - 07/22/2013 + * Bugfix: Floor 0 implementation is now correct + * Bugfix: Residue 0 & 1 implementation is now correct + * Bugfix: Seeking back less than the current buffer size no longer corrupts the read buffer +0.7.3 - 08/02/2013 + * Bugfix: Fix residue 1 +0.7.4 - 09/16/2013 + * Bugfix: Some stereo files with sound on only one channel decoded noise on the silent channel. +0.8.0test1 - 09/16/2013 + * Rebuilt container reading infrastructure so it is properly decoupled from the decoder + * Added unit tests for the packet reader, Ogg container reader +0.8.0 - 01/16/2014 + * Minor bugfixing to test1 + * Replaces 0.7.4 as recommended release +0.8.1 - 02/24/2014 + * Bugfix: Threading issues in Ogg reader + * Rewrite StreamReadBuffer (again) for simplicity and correctness + * Add "saved buffer" concept to StreamReadBuffer for multi-threaded performance + * Reduce Ogg reader memory usage + * Add locking for multi-threading support in Ogg reader + * Remove exception-based logic where possible for better performance +0.8.2 - 03/19/2014 + * BugFix: Don't try to copy StreamReadBuffer data when offset is bigger than source + * Add parameter change event to packet provider interface + * Refactored decoder setup so parameter change can be handled + * Rewrote packet peek / get logic for simplicity + * Refactored locking in OggPacketReader / OggContainerReader + * Improved Ogg end of stream handling + * Changed container seek API to use packets instead of indexes to reduce linked list traversals +0.8.3 - 04/29/2014 + * BugFix: Don't set the end of stream flag until the last packet of the page +0.8.4 - 11/20/2014 + * BugFix: Forward seeking when target page ends with partial packet should ignore partial packet + * Changed MDCT to be thread-safe diff --git a/packages/NVorbis.0.8.5.0/lib/NVorbis.XML b/packages/NVorbis.0.8.5.0/lib/NVorbis.XML new file mode 100644 index 000000000..8d4248df0 --- /dev/null +++ b/packages/NVorbis.0.8.5.0/lib/NVorbis.XML @@ -0,0 +1,672 @@ + + + + NVorbis + + + + + A thread-safe, read-only, buffering stream wrapper. + + + + + Provides a interface for a Vorbis logical stream container. + + + + + Gets the list of stream serials found in the container so far. + + + + + Gets whether the container supports seeking. + + + + + Gets the number of bits in the container that are not associated with a logical stream. + + + + + Gets the number of pages that have been read in the container. + + + + + Event raised when a new logical stream is found in the container. + + + + + Initializes the container and finds the first stream. + + True if a valid logical stream is found, otherwise False. + + + + Finds the next new stream in the container. + + True if a new stream was found, otherwise False. + is False. + + + + Retrieves the total number of pages in the container. + + The total number of pages. + is False. + + + + Provides packets on-demand for the Vorbis stream decoder. + + + + + Gets the serial number associated with this stream. + + + + + Gets whether seeking is supported on this stream. + + + + + Gets the number of bits of overhead in this stream's container. + + + + + Retrieves the total number of pages (or frames) this stream uses. + + The page count. + is False. + + + + Retrieves the next packet in the stream. + + The next packet in the stream or null if no more packets. + + + + Retrieves the next packet in the stream but does not advance to the following packet. + + The next packet in the stream or null if no more packets. + + + + Retrieves the packet specified from the stream. + + The index of the packet to retrieve. + The specified packet. + is less than 0 or past the end of the stream. + is False. + + + + Retrieves the total number of granules in this Vorbis stream. + + The number of samples + is False. + + + + Finds the packet index to the granule position specified in the current stream. + + The granule position to seek to. + A callback method that takes the current and previous packets and returns the number of granules in the current packet. + The index of the packet that includes the specified granule position or -1 if none found. + is less than 0 or is after the last granule. + + + + Sets the next packet to be returned, applying a pre-roll as necessary. + + The packet to key from. + The number of packets to return before the indicated packet. + + + + Occurs when the stream is about to change parameters. + + + + + Event data for when a new logical stream is found in a container. + + + + + Creates a new instance of with the specified . + + An instance. + + + + Gets new the instance. + + + + + Gets or sets whether to ignore the logical stream associated with the packet provider. + + + + + Provides an implementation for basic Ogg files. + + + + + Gets the list of stream serials found in the container so far. + + + + + Event raised when a new logical stream is found in the container. + + + + + Creates a new instance with the specified file. + + The full path to the file. + + + + Creates a new instance with the specified stream. Optionally sets to close the stream when disposed. + + The stream to read. + True to close the stream when is called, otherwise False. + + + + Initializes the container and finds the first stream. + + True if a valid logical stream is found, otherwise False. + + + + Disposes this instance. + + + + + Gets the instance for the specified stream serial. + + The stream serial to look for. + An instance. + The specified stream serial was not found. + + + + Finds the next new stream in the container. + + True if a new stream was found, otherwise False. + is False. + + + + Gets the number of pages that have been read in the container. + + + + + Retrieves the total number of pages in the container. + + The total number of pages. + is False. + + + + Gets whether the container supports seeking. + + + + + Gets the number of bits in the container that are not associated with a logical stream. + + + + + A single data packet from a logical Vorbis stream. + + + + + Defines flags to apply to the current packet + + + + + Packet is first since reader had to resync with stream. + + + + + Packet is the last in the logical stream. + + + + + Packet does not have all its data available. + + + + + Packet has a granule count defined. + + + + + Flag for use by inheritors. + + + + + Flag for use by inheritors. + + + + + Flag for use by inheritors. + + + + + Flag for use by inheritors. + + + + + Gets the value of the specified flag. + + + + + Sets the value of the specified flag. + + + + + Creates a new instance with the specified length. + + The length of the packet. + + + + Reads the next byte of the packet. + + The next byte if available, otherwise -1. + + + + Indicates that the packet has been read and its data is no longer needed. + + + + + Attempts to read the specified number of bits from the packet, but may return fewer. Does not advance the position counter. + + The number of bits to attempt to read. + The number of bits actually read. + The value of the bits read. + is not between 0 and 64. + + + + Advances the position counter by the specified number of bits. + + The number of bits to advance. + + + + Resets the bit reader. + + + + + Gets whether the packet was found after a stream resync. + + + + + Gets the position of the last granule in the packet. + + + + + Gets the position of the last granule in the page the packet is in. + + + + + Gets the length of the packet. + + + + + Gets whether the packet is the last one in the logical stream. + + + + + Gets the number of bits read from the packet. + + + + + Gets the number of granules in the packet. If null, the packet has not been decoded yet. + + + + + Reads the specified number of bits from the packet and advances the position counter. + + The number of bits to read. + The value of the bits read. + The number of bits specified is not between 0 and 64. + + + + Reads the next byte from the packet. Does not advance the position counter. + + The byte read from the packet. + + + + Reads the next byte from the packet and advances the position counter. + + The byte read from the packet. + + + + Reads the specified number of bytes from the packet and advances the position counter. + + The number of bytes to read. + A byte array holding the data read. + + + + Reads the specified number of bytes from the packet into the buffer specified and advances the position counter. + + The buffer to read into. + The index into the buffer to start placing the read data. + The number of bytes to read. + The number of bytes read. + is less than 0 or + is past the end of . + + + + Reads the next bit from the packet and advances the position counter. + + The value of the bit read. + + + + Retrieves the next 16 bits from the packet as a and advances the position counter. + + The value of the next 16 bits. + + + + Retrieves the next 32 bits from the packet as a and advances the position counter. + + The value of the next 32 bits. + + + + Retrieves the next 64 bits from the packet as a and advances the position counter. + + The value of the next 64 bits. + + + + Retrieves the next 16 bits from the packet as a and advances the position counter. + + The value of the next 16 bits. + + + + Retrieves the next 32 bits from the packet as a and advances the position counter. + + The value of the next 32 bits. + + + + Retrieves the next 64 bits from the packet as a and advances the position counter. + + The value of the next 64 bits. + + + + Advances the position counter by the specified number of bytes. + + The number of bytes to advance. + + + + Event data for when a logical stream has a parameter change. + + + + + Creates a new instance of . + + The first packet after the parameter change. + + + + Gets the first packet after the parameter change. This would typically be the parameters packet. + + + + + Gets or Sets whether to limit reads to the smallest size possible. + + + + + Gets or Sets the maximum size of the buffer. This is not a hard limit. + + + + + Gets the offset of the start of the buffered data. Reads to offsets before this are likely to require a seek. + + + + + Gets the number of bytes currently buffered. + + + + + Gets the number of bytes the buffer can hold. + + + + + Reads the number of bytes specified into the buffer given, starting with the offset indicated. + + The offset into the stream to start reading. + The buffer to read to. + The index into the buffer to start writing to. + The number of bytes to read. + The number of bytes read. + + + + Tells the buffer that it no longer needs to maintain any bytes before the indicated offset. + + The offset to discard through. + + + + Gets the number of channels in the current selected Vorbis stream + + + + + Gets the sample rate of the current selected Vorbis stream + + + + + Gets the encoder's upper bitrate of the current selected Vorbis stream + + + + + Gets the encoder's nominal bitrate of the current selected Vorbis stream + + + + + Gets the encoder's lower bitrate of the current selected Vorbis stream + + + + + Gets the encoder's vendor string for the current selected Vorbis stream + + + + + Gets the comments in the current selected Vorbis stream + + + + + Gets whether the previous short sample count was due to a parameter change in the stream. + + + + + Gets the number of bits read that are related to framing and transport alone + + + + + Gets or sets whether to automatically apply clipping to samples returned by . + + + + + Gets stats from each decoder stream available + + + + + Gets the currently-selected stream's index + + + + + Reads decoded samples from the current logical stream + + The buffer to write the samples to + The offset into the buffer to write the samples to + The number of samples to write + The number of samples written + + + + Clears the parameter change flag so further samples can be requested. + + + + + Returns the number of logical streams found so far in the physical container + + + + + Searches for the next stream in a concatenated file + + True if a new stream was found, otherwise false. + + + + Switches to an alternate logical stream. + + The logical stream index to switch to + True if the properties of the logical stream differ from those of the one previously being decoded. Otherwise, False. + + + + Gets or Sets the current timestamp of the decoder. Is the timestamp before the next sample to be decoded + + + + + Gets or Sets the current position of the next sample to be decoded. + + + + + Gets the total length of the current logical stream + + + + + Gets the counters for latency and bitrate calculations, as well as overall bit counts + + + + + Gets the calculated bit rate of audio stream data for the everything decoded so far + + + + + Gets the calculated bit rate for the last ~1 second of audio + + + + + Gets the calculated latency per page + + + + + Gets the calculated latency per packet + + + + + Gets the calculated latency per second of output + + + + + Gets the number of bits read that do not contribute to the output audio + + + + + Gets the number of bits read that contribute to the output audio + + + + + Gets the number of pages read so far in the current stream + + + + + Gets the total number of pages in the current stream + + + + + Gets whether the stream has been clipped since the last reset + + + + diff --git a/packages/NVorbis.0.8.5.0/lib/NVorbis.dll b/packages/NVorbis.0.8.5.0/lib/NVorbis.dll new file mode 100644 index 0000000000000000000000000000000000000000..979cd8122db1a1a93808c8b88bad49f1bc493869 GIT binary patch literal 66048 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 literal 0 HcmV?d00001