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); } }
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); }