App-MHFS
view release on metacpan or search on metacpan
share/public_html/static/music_worklet_inprogress/decoder/deps/miniaudio/miniaudio.h view on Meta::CPAN
MA_API float ma_sound_group_get_directional_attenuation_factor(const ma_sound_group* pGroup);
MA_API void ma_sound_group_set_fade_in_pcm_frames(ma_sound_group* pGroup, float volumeBeg, float volumeEnd, ma_uint64 fadeLengthInFrames);
MA_API void ma_sound_group_set_fade_in_milliseconds(ma_sound_group* pGroup, float volumeBeg, float volumeEnd, ma_uint64 fadeLengthInMilliseconds);
MA_API float ma_sound_group_get_current_fade_volume(ma_sound_group* pGroup);
MA_API void ma_sound_group_set_start_time_in_pcm_frames(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInFrames);
MA_API void ma_sound_group_set_start_time_in_milliseconds(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInMilliseconds);
MA_API void ma_sound_group_set_stop_time_in_pcm_frames(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInFrames);
MA_API void ma_sound_group_set_stop_time_in_milliseconds(ma_sound_group* pGroup, ma_uint64 absoluteGlobalTimeInMilliseconds);
MA_API ma_bool32 ma_sound_group_is_playing(const ma_sound_group* pGroup);
MA_API ma_uint64 ma_sound_group_get_time_in_pcm_frames(const ma_sound_group* pGroup);
#endif /* MA_NO_ENGINE */
#ifdef __cplusplus
}
#endif
#endif /* miniaudio_h */
/*
This is for preventing greying out of the implementation section.
*/
#if defined(Q_CREATOR_RUN) || defined(__INTELLISENSE__) || defined(__CDT_PARSER__)
#define MINIAUDIO_IMPLEMENTATION
#endif
/************************************************************************************************************************************************************
*************************************************************************************************************************************************************
IMPLEMENTATION
*************************************************************************************************************************************************************
************************************************************************************************************************************************************/
#if defined(MINIAUDIO_IMPLEMENTATION) || defined(MA_IMPLEMENTATION)
#ifndef miniaudio_c
#define miniaudio_c
#include <assert.h>
#include <limits.h> /* For INT_MAX */
#include <math.h> /* sin(), etc. */
#include <stdarg.h>
#include <stdio.h>
#if !defined(_MSC_VER) && !defined(__DMC__)
#include <strings.h> /* For strcasecmp(). */
#include <wchar.h> /* For wcslen(), wcsrtombs() */
#endif
#ifdef _MSC_VER
#include <float.h> /* For _controlfp_s constants */
#endif
#ifdef MA_WIN32
#include <windows.h>
#else
#include <stdlib.h> /* For malloc(), free(), wcstombs(). */
#include <string.h> /* For memset() */
#include <sched.h>
#include <sys/time.h> /* select() (used for ma_sleep()). */
#include <pthread.h>
#endif
#include <sys/stat.h> /* For fstat(), etc. */
#ifdef MA_EMSCRIPTEN
#include <emscripten/emscripten.h>
#endif
#if !defined(MA_64BIT) && !defined(MA_32BIT)
#ifdef _WIN32
#ifdef _WIN64
#define MA_64BIT
#else
#define MA_32BIT
#endif
#endif
#endif
#if !defined(MA_64BIT) && !defined(MA_32BIT)
#ifdef __GNUC__
#ifdef __LP64__
#define MA_64BIT
#else
#define MA_32BIT
#endif
#endif
#endif
#if !defined(MA_64BIT) && !defined(MA_32BIT)
#include <stdint.h>
#if INTPTR_MAX == INT64_MAX
#define MA_64BIT
#else
#define MA_32BIT
#endif
#endif
/* Architecture Detection */
#if defined(__x86_64__) || defined(_M_X64)
#define MA_X64
#elif defined(__i386) || defined(_M_IX86)
#define MA_X86
#elif defined(__arm__) || defined(_M_ARM) || defined(__arm64) || defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)
#define MA_ARM
#endif
/* Intrinsics Support */
#if defined(MA_X64) || defined(MA_X86)
#if defined(_MSC_VER) && !defined(__clang__)
/* MSVC. */
#if _MSC_VER >= 1400 && !defined(MA_NO_SSE2) /* 2005 */
#define MA_SUPPORT_SSE2
#endif
/*#if _MSC_VER >= 1600 && !defined(MA_NO_AVX)*/ /* 2010 */
/* #define MA_SUPPORT_AVX*/
/*#endif*/
#if _MSC_VER >= 1700 && !defined(MA_NO_AVX2) /* 2012 */
#define MA_SUPPORT_AVX2
#endif
#else
/* Assume GNUC-style. */
#if defined(__SSE2__) && !defined(MA_NO_SSE2)
#define MA_SUPPORT_SSE2
share/public_html/static/music_worklet_inprogress/decoder/deps/miniaudio/miniaudio.h view on Meta::CPAN
if (format != ma_format_unknown) {
ma_device_info_add_native_data_format(pDeviceInfo, format, channels, sampleRate, 0);
}
counter += 1;
}
}
#else
{
struct audio_swpar fdPar;
ma_format format;
ma_uint32 channels;
ma_uint32 sampleRate;
if (ioctl(fd, AUDIO_GETPAR, &fdPar) < 0) {
return MA_ERROR;
}
format = ma_format_from_swpar__audio4(&fdPar);
if (format == ma_format_unknown) {
return MA_FORMAT_NOT_SUPPORTED;
}
if (deviceType == ma_device_type_playback) {
channels = fdPar.pchan;
} else {
channels = fdPar.rchan;
}
sampleRate = fdPar.rate;
pDeviceInfo->nativeDataFormatCount = 0;
ma_device_info_add_native_data_format(pDeviceInfo, format, channels, sampleRate, 0);
}
#endif
return MA_SUCCESS;
}
static ma_result ma_context_enumerate_devices__audio4(ma_context* pContext, ma_enum_devices_callback_proc callback, void* pUserData)
{
const int maxDevices = 64;
char devpath[256];
int iDevice;
MA_ASSERT(pContext != NULL);
MA_ASSERT(callback != NULL);
/*
Every device will be named "/dev/audioN", with a "/dev/audioctlN" equivalent. We use the "/dev/audioctlN"
version here since we can open it even when another process has control of the "/dev/audioN" device.
*/
for (iDevice = 0; iDevice < maxDevices; ++iDevice) {
struct stat st;
int fd;
ma_bool32 isTerminating = MA_FALSE;
ma_strcpy_s(devpath, sizeof(devpath), "/dev/audioctl");
ma_itoa_s(iDevice, devpath+strlen(devpath), sizeof(devpath)-strlen(devpath), 10);
if (stat(devpath, &st) < 0) {
break;
}
/* The device exists, but we need to check if it's usable as playback and/or capture. */
/* Playback. */
if (!isTerminating) {
fd = open(devpath, O_RDONLY, 0);
if (fd >= 0) {
/* Supports playback. */
ma_device_info deviceInfo;
MA_ZERO_OBJECT(&deviceInfo);
ma_construct_device_id__audio4(deviceInfo.id.audio4, sizeof(deviceInfo.id.audio4), "/dev/audio", iDevice);
if (ma_context_get_device_info_from_fd__audio4(pContext, ma_device_type_playback, fd, &deviceInfo) == MA_SUCCESS) {
isTerminating = !callback(pContext, ma_device_type_playback, &deviceInfo, pUserData);
}
close(fd);
}
}
/* Capture. */
if (!isTerminating) {
fd = open(devpath, O_WRONLY, 0);
if (fd >= 0) {
/* Supports capture. */
ma_device_info deviceInfo;
MA_ZERO_OBJECT(&deviceInfo);
ma_construct_device_id__audio4(deviceInfo.id.audio4, sizeof(deviceInfo.id.audio4), "/dev/audio", iDevice);
if (ma_context_get_device_info_from_fd__audio4(pContext, ma_device_type_capture, fd, &deviceInfo) == MA_SUCCESS) {
isTerminating = !callback(pContext, ma_device_type_capture, &deviceInfo, pUserData);
}
close(fd);
}
}
if (isTerminating) {
break;
}
}
return MA_SUCCESS;
}
static ma_result ma_context_get_device_info__audio4(ma_context* pContext, ma_device_type deviceType, const ma_device_id* pDeviceID, ma_device_info* pDeviceInfo)
{
int fd = -1;
int deviceIndex = -1;
char ctlid[256];
ma_result result;
MA_ASSERT(pContext != NULL);
/*
We need to open the "/dev/audioctlN" device to get the info. To do this we need to extract the number
from the device ID which will be in "/dev/audioN" format.
*/
if (pDeviceID == NULL) {
/* Default device. */
share/public_html/static/music_worklet_inprogress/decoder/deps/miniaudio/miniaudio.h view on Meta::CPAN
if (origin > 0x7FFFFFFF) {
return MA_OUT_OF_RANGE;
}
result = fseek((FILE*)file, (int)offset, whence);
#endif
#else
result = fseek((FILE*)file, (long int)offset, whence);
#endif
if (result != 0) {
return MA_ERROR;
}
return MA_SUCCESS;
}
static ma_result ma_default_vfs_tell__stdio(ma_vfs* pVFS, ma_vfs_file file, ma_int64* pCursor)
{
ma_int64 result;
MA_ASSERT(file != NULL);
MA_ASSERT(pCursor != NULL);
(void)pVFS;
#if defined(_WIN32)
#if defined(_MSC_VER) && _MSC_VER > 1200
result = _ftelli64((FILE*)file);
#else
result = ftell((FILE*)file);
#endif
#else
result = ftell((FILE*)file);
#endif
*pCursor = result;
return MA_SUCCESS;
}
#if !defined(_MSC_VER) && !((defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 1) || defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE)) && !defined(MA_BSD)
int fileno(FILE *stream);
#endif
static ma_result ma_default_vfs_info__stdio(ma_vfs* pVFS, ma_vfs_file file, ma_file_info* pInfo)
{
int fd;
struct stat info;
MA_ASSERT(file != NULL);
MA_ASSERT(pInfo != NULL);
(void)pVFS;
#if defined(_MSC_VER)
fd = _fileno((FILE*)file);
#else
fd = fileno((FILE*)file);
#endif
if (fstat(fd, &info) != 0) {
return ma_result_from_errno(errno);
}
pInfo->sizeInBytes = info.st_size;
return MA_SUCCESS;
}
#endif
static ma_result ma_default_vfs_open(ma_vfs* pVFS, const char* pFilePath, ma_uint32 openMode, ma_vfs_file* pFile)
{
if (pFile == NULL) {
return MA_INVALID_ARGS;
}
*pFile = NULL;
if (pFilePath == NULL || openMode == 0) {
return MA_INVALID_ARGS;
}
#if defined(MA_WIN32) && defined(MA_WIN32_DESKTOP) && !defined(MA_NO_WIN32_FILEIO)
return ma_default_vfs_open__win32(pVFS, pFilePath, openMode, pFile);
#else
return ma_default_vfs_open__stdio(pVFS, pFilePath, openMode, pFile);
#endif
}
static ma_result ma_default_vfs_open_w(ma_vfs* pVFS, const wchar_t* pFilePath, ma_uint32 openMode, ma_vfs_file* pFile)
{
if (pFile == NULL) {
return MA_INVALID_ARGS;
}
*pFile = NULL;
if (pFilePath == NULL || openMode == 0) {
return MA_INVALID_ARGS;
}
#if defined(MA_WIN32) && defined(MA_WIN32_DESKTOP) && !defined(MA_NO_WIN32_FILEIO)
return ma_default_vfs_open_w__win32(pVFS, pFilePath, openMode, pFile);
#else
return ma_default_vfs_open_w__stdio(pVFS, pFilePath, openMode, pFile);
#endif
}
static ma_result ma_default_vfs_close(ma_vfs* pVFS, ma_vfs_file file)
{
if (file == NULL) {
return MA_INVALID_ARGS;
}
#if defined(MA_WIN32) && defined(MA_WIN32_DESKTOP) && !defined(MA_NO_WIN32_FILEIO)
return ma_default_vfs_close__win32(pVFS, file);
#else
return ma_default_vfs_close__stdio(pVFS, file);
#endif
}
( run in 1.982 second using v1.01-cache-2.11-cpan-99c4e6809bf )