Example #1
0
        static unsafe SoftwareBitmap ColorizeMelspectrogram(SoftwareBitmap bwSpectrogram)
        {
            using (BitmapBuffer buffer = bwSpectrogram.LockBuffer(BitmapBufferAccessMode.Write))
            {
                using var reference = buffer.CreateReference();
                IMemoryBufferByteAccess memoryBuffer = reference.As <IMemoryBufferByteAccess>();
                memoryBuffer.GetBuffer(out byte *dataInBytes, out uint capacity);

                // Edit the BGRA Plane
                BitmapPlaneDescription bufferLayout = buffer.GetPlaneDescription(0);
                for (int i = 0; i < bufferLayout.Height; i++)
                {
                    for (int j = 0; j < bufferLayout.Width; j++)
                    {
                        int pixel = bufferLayout.StartIndex + bufferLayout.Stride * i + 4 * j;
                        //Lines below can be tweaked for different custom color filters
                        //Blue
                        dataInBytes[pixel + 0] = (byte)((255 - dataInBytes[pixel + 0]) / 2);
                        //Green
                        dataInBytes[pixel + 1] = (byte)(dataInBytes[pixel + 1] / 2);
                        //Red
                        //dataInBytes[pixel + 2] = (byte)(dataInBytes[pixel + 2]);
                        //Alpha - must leave each pixel at max
                        dataInBytes[bufferLayout.StartIndex + bufferLayout.Stride * i + 4 * j + 3] = (byte)255;
                    }
                }
            }
            return(bwSpectrogram);
        }
Example #2
0
        //unsafe private void M_AudioGraph_QuantumProcessed(AudioGraph sender, object args)
        //{
        //}

        unsafe private void M_AudioGraph_QuantumStarted(AudioGraph sender, object args)
        {
            // draw every n frames
            //if (fctr++ % 5 == 0)
            //{
            using (AudioFrame audioFrame = this.m_AudioFrameOutputNode.GetFrame())
                using (AudioBuffer audioBuffer = audioFrame.LockBuffer(AudioBufferAccessMode.Read))
                    using (IMemoryBufferReference memBufferRef = audioBuffer.CreateReference())
                    {
                        IMemoryBufferByteAccess byteAccess = memBufferRef as IMemoryBufferByteAccess;

                        byte *byteBuffer;
                        uint  capacity;

                        byteAccess.GetBuffer(out byteBuffer, out capacity);

                        float *floatBuffer = (float *)byteBuffer;

                        for (int i = 0; i < this.m_AudioGraph.SamplesPerQuantum * this.m_AudioGraph.EncodingProperties.ChannelCount; i++)
                        {
                            this.m_QuantumSamples[i] = floatBuffer[i];
                        }

                        this.m_Capacity = capacity;
                        this.m_abCap    = audioBuffer.Capacity;
                        this.m_abLen    = audioBuffer.Length;
                    }
            AudioCanvas.Invalidate();
            //}
        }
Example #3
0
 public BufferMemoryManager(IMemoryBuffer buffer)
 {
     reference = buffer?.CreateReference() ?? throw new ArgumentNullException(nameof(buffer));
     if (reference is IMemoryBufferByteAccess)
     {
         byteAccess = (IMemoryBufferByteAccess)reference;
     }
     else
     {
         reference.Dispose();
         throw new ArgumentException("buffer does not implment IMemoryBufferByteAccess");
     }
 }