コード例 #1
0
        private static unsafe void CopyPropertyFromFileToQueue(AudioStream *pThis, AudioFileProperty fileProp, AudioQueueProperty queueProp)
        {
            int      size   = sizeof(uint);
            OSStatus status = API.AudioFileGetPropertyInfo(pThis->AudioFile, fileProp, &size, null);

            if (status == 0 && size > 0)
            {
                void *pData = (void *)Marshal.AllocHGlobal(size);

                API.AudioFileGetProperty(pThis->AudioFile, fileProp, &size, pData);
                API.AudioQueueSetProperty(pThis->Queue, queueProp, pData, size);

                Marshal.FreeHGlobal((IntPtr)pData);
            }
        }
コード例 #2
0
        private static unsafe void CreateQueue(AudioStream *pThis)
        {
            int dataFormatSize = sizeof(AudioStreamBasicDescription);
            AudioStreamBasicDescription *pDataFormat = &pThis->DataFormat;

            OSStatus status = API.AudioFileGetProperty(pThis->AudioFile, AudioFileProperty.DataFormat, &dataFormatSize, pDataFormat);

            API.CheckStatus(status);

            status = API.AudioQueueNewOutput(pDataFormat, OnReadBuffer, pThis, null, null, 0, &pThis->Queue);
            API.CheckStatus(status);

            dataFormatSize = sizeof(int);
            int *pMaxPacketSize = &pThis->MaxPacketSize;

            status = API.AudioFileGetProperty(pThis->AudioFile, AudioFileProperty.PacketSizeUpperBound, &dataFormatSize, pMaxPacketSize);
            API.CheckStatus(status);

            DeriveBufferSize(&pThis->DataFormat, pThis->MaxPacketSize, 0.5, &pThis->BufferByteSize, &pThis->NumPacketsToRead);
        }