Ejemplo n.º 1
0
 public static void DisposePCM(PCMSample Sample)
 {
     Sample.Context.Dispose();
     AL.SourceStop(Sample.Source);
     AL.DeleteSource(Sample.Source);
     AL.DeleteBuffer(Sample.Buffer);
 }
Ejemplo n.º 2
0
 public int Update(PCMSample sample)
 {
     fixed(byte *p = sample.SampleData)
     {
         return(QueueAudio(p, (size_t)sample.SampleData.Length));
     }
 }
Ejemplo n.º 3
0
 public int Update(PCMSample sample)
 {
     fixed(byte *p = sample.SampleData)
     {
         return(UpdateAudio((IntPtr)p, (uint)sample.SampleData.Length));
     }
 }
Ejemplo n.º 4
0
 public static bool IsSoundPlaying(PCMSample Sample)
 {
     AL.GetSource(Sample.Source, ALGetSourcei.SourceState, out int State);
     return((ALSourceState)State == ALSourceState.Playing);
 }
Ejemplo n.º 5
0
        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));
        }