public static void DisposePCM(PCMSample Sample) { Sample.Context.Dispose(); AL.SourceStop(Sample.Source); AL.DeleteSource(Sample.Source); AL.DeleteBuffer(Sample.Buffer); }
public int Update(PCMSample sample) { fixed(byte *p = sample.SampleData) { return(QueueAudio(p, (size_t)sample.SampleData.Length)); } }
public int Update(PCMSample sample) { fixed(byte *p = sample.SampleData) { return(UpdateAudio((IntPtr)p, (uint)sample.SampleData.Length)); } }
public static bool IsSoundPlaying(PCMSample Sample) { AL.GetSource(Sample.Source, ALGetSourcei.SourceState, out int State); return((ALSourceState)State == ALSourceState.Playing); }
private static byte[] ConvertRawPCMFile(int OutputSampleRate, int OutputChannels, byte[] PCMSamples, PCMSample PCMSampleSize, int PCMSampleRate, int PCMChannels) { int NumPCMSamples = (PCMSamples.Length / (int)PCMSampleSize / PCMChannels); float PCMDuraton = NumPCMSamples / (float)PCMSampleRate; int NumOutputSamples = (int)(PCMDuraton * OutputSampleRate); //Ensure that samble buffer is aligned to write chunk size NumOutputSamples = (NumOutputSamples / WriteBufferSize) * WriteBufferSize; float[][] OutSamples = new float[OutputChannels][]; for (int ch = 0; ch < OutputChannels; ch++) { OutSamples[ch] = new float[NumOutputSamples]; } for (int sampleNumber = 0; sampleNumber < NumOutputSamples; sampleNumber++) { float rawSample = 0.0f; for (int ch = 0; ch < OutputChannels; ch++) { int sampleIndex = (sampleNumber * PCMChannels) * (int)PCMSampleSize; if (ch < PCMChannels) { sampleIndex += (ch * (int)PCMSampleSize); } switch (PCMSampleSize) { case PCMSample.EightBit: rawSample = ByteToSample(PCMSamples[sampleIndex]); break; case PCMSample.SixteenBit: rawSample = ShortToSample((short)(PCMSamples[sampleIndex + 1] << 8 | PCMSamples[sampleIndex])); break; } OutSamples[ch][sampleNumber] = rawSample; } } return(GenerateFile(OutSamples, OutputSampleRate, OutputChannels)); }