bool IAudioStreamProvider.ReadStream(INativeAudioBuffer targetBuffer) { if (openmpt_module == IntPtr.Zero) { return(false); } int count = openmpt_module_read_interleaved_stereo( openmpt_module, SampleRate, BufferSize >> 1, // Buffer size per channel audioBuffer ); if (count == 0) { return(false); } targetBuffer.LoadData( SampleRate, audioBuffer, count << 1, // Number of samples (left + right) AudioDataLayout.LeftRight, AudioDataElementType.Short ); return(true); }
public static void LoadData <T>( this INativeAudioBuffer buffer, int sampleRate, T[] data, int dataLength, AudioDataLayout dataLayout, AudioDataElementType dataElementType) where T : struct { if (dataLength < 0) { throw new ArgumentOutOfRangeException("dataLength", "Data length cannot be negative"); } if (dataLength > data.Length) { throw new ArgumentOutOfRangeException("dataLength", "Data length cannot exceed the specified arrays length."); } int itemSize = Marshal.SizeOf(typeof(T)); using (PinnedArrayHandle pinned = new PinnedArrayHandle(data)) { buffer.LoadData( sampleRate, pinned.Address, itemSize * dataLength, dataLayout, dataElementType); } }
bool IAudioStreamProvider.ReadStream(INativeAudioBuffer targetBuffer) { if (!OggVorbis.IsStreamValid(this.strOvStr)) { return(false); } AudioData audioDataRes = this.audioData.Res; PcmData pcm; bool eof = !OggVorbis.StreamChunk(this.strOvStr, out pcm); if (eof) { OggVorbis.EndStream(ref this.strOvStr); if (this.looped) { OggVorbis.BeginStreamFromMemory(audioDataRes.OggVorbisData, out this.strOvStr); if (pcm.DataLength == 0) { eof = !OggVorbis.StreamChunk(this.strOvStr, out pcm); } else { eof = false; } } } if (pcm.DataLength > 0) { targetBuffer.LoadData( pcm.SampleRate, pcm.Data, pcm.DataLength, pcm.ChannelCount == 1 ? AudioDataLayout.Mono : AudioDataLayout.LeftRight, AudioDataElementType.Short); } return(pcm.DataLength != 0 && !eof); }
bool IAudioStreamProvider.ReadStream(INativeAudioBuffer targetBuffer) { if (!OggVorbis.IsStreamValid(this.strOvStr)) return false; AudioData audioDataRes = this.audioData.Res; PcmData pcm; bool eof = !OggVorbis.StreamChunk(this.strOvStr, out pcm); if (eof) { OggVorbis.EndStream(ref this.strOvStr); if (this.looped) { OggVorbis.BeginStreamFromMemory(audioDataRes.OggVorbisData, out this.strOvStr); if (pcm.DataLength == 0) eof = !OggVorbis.StreamChunk(this.strOvStr, out pcm); else eof = false; } } if (pcm.DataLength > 0) { targetBuffer.LoadData( pcm.SampleRate, pcm.Data, pcm.DataLength, pcm.ChannelCount == 1 ? AudioDataLayout.Mono : AudioDataLayout.LeftRight, AudioDataElementType.Short); } return pcm.DataLength != 0 && !eof; }