mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-22 19:58:39 -05:00
Upgraded RtAudio to v5.0.0, WASAPI is now the default audio backend on Windows
This commit is contained in:
parent
3a5b30dda8
commit
5460863608
@ -190,8 +190,8 @@ IF (WIN32)
|
||||
|
||||
# Audio device selection is not mandatory, dummy audio device is used if none are compiled in.
|
||||
# Can also compile support for more than one simultaneously.
|
||||
set(USE_AUDIO_DS ON CACHE BOOL "Include support for DirectSound")
|
||||
set(USE_AUDIO_WASAPI OFF CACHE BOOL "Include support for WASAPI Audio")
|
||||
set(USE_AUDIO_DS OFF CACHE BOOL "Include support for DirectSound")
|
||||
set(USE_AUDIO_WASAPI ON CACHE BOOL "Include support for WASAPI Audio")
|
||||
# TODO:
|
||||
# set(USE_AUDIO_ASIO OFF CACHE BOOL "Include support for ASIO Audio")
|
||||
|
||||
|
212
external/rtaudio/FunctionDiscoveryKeys_devpkey.h
vendored
212
external/rtaudio/FunctionDiscoveryKeys_devpkey.h
vendored
@ -1,212 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
|
||||
Module Name:
|
||||
|
||||
devpkey.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Defines property keys for the Plug and Play Device Property API.
|
||||
|
||||
Author:
|
||||
|
||||
Jim Cavalaris (jamesca) 10-14-2003
|
||||
|
||||
Environment:
|
||||
|
||||
User-mode only.
|
||||
|
||||
Revision History:
|
||||
|
||||
14-October-2003 jamesca
|
||||
|
||||
Creation and initial implementation.
|
||||
|
||||
20-June-2006 dougb
|
||||
|
||||
Copied Jim's version replaced "DEFINE_DEVPROPKEY(DEVPKEY_" with "DEFINE_PROPERTYKEY(PKEY_"
|
||||
|
||||
--*/
|
||||
|
||||
//#include <devpropdef.h>
|
||||
|
||||
//
|
||||
// _NAME
|
||||
//
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_NAME, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac, 10); // DEVPROP_TYPE_STRING
|
||||
|
||||
//
|
||||
// Device properties
|
||||
// These PKEYs correspond to the old setupapi SPDRP_XXX properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DeviceDesc, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 2); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_HardwareIds, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 3); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_CompatibleIds, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 4); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Service, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 6); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Class, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 9); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ClassGuid, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 10); // DEVPROP_TYPE_GUID
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Driver, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 11); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ConfigFlags, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 12); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Manufacturer, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 13); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_FriendlyName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_LocationInfo, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 15); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_PDOName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 16); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Capabilities, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 17); // DEVPROP_TYPE_UNINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_UINumber, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 18); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_UpperFilters, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 19); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_LowerFilters, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 20); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_BusTypeGuid, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 21); // DEVPROP_TYPE_GUID
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_LegacyBusType, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 22); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_BusNumber, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 23); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_EnumeratorName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 24); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Security, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 25); // DEVPROP_TYPE_SECURITY_DESCRIPTOR
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_SecuritySDS, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 26); // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DevType, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 27); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Exclusive, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 28); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Characteristics, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 29); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Address, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 30); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_UINumberDescFormat, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 31); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_PowerData, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 32); // DEVPROP_TYPE_BINARY
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicy, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 33); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyDefault, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 34); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyOverride, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 35); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_InstallState, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 36); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_LocationPaths, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 37); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_BaseContainerId, 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 38); // DEVPROP_TYPE_GUID
|
||||
|
||||
//
|
||||
// Device properties
|
||||
// These PKEYs correspond to a device's status and problem code
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DevNodeStatus, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 2); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ProblemCode, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 3); // DEVPROP_TYPE_UINT32
|
||||
|
||||
//
|
||||
// Device properties
|
||||
// These PKEYs correspond to device relations
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_EjectionRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 4); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_RemovalRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 5); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_PowerRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 6); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_BusRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 7); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Parent, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 8); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Children, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 9); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Siblings, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 10); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_TransportRelations, 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 11); // DEVPROP_TYPE_STRING_LIST
|
||||
|
||||
//
|
||||
// Other Device properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Reported, 0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 2); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Legacy, 0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 3); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_InstanceId, 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 256); // DEVPROP_TYPE_STRING
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ContainerId, 0x8c7ed206, 0x3f8a, 0x4827, 0xb3, 0xab, 0xae, 0x9e, 0x1f, 0xae, 0xfc, 0x6c, 2); // DEVPROP_TYPE_GUID
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ModelId, 0x80d81ea6, 0x7473, 0x4b0c, 0x82, 0x16, 0xef, 0xc1, 0x1a, 0x2c, 0x4c, 0x8b, 2); // DEVPROP_TYPE_GUID
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_FriendlyNameAttributes, 0x80d81ea6, 0x7473, 0x4b0c, 0x82, 0x16, 0xef, 0xc1, 0x1a, 0x2c, 0x4c, 0x8b, 3); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ManufacturerAttributes, 0x80d81ea6, 0x7473, 0x4b0c, 0x82, 0x16, 0xef, 0xc1, 0x1a, 0x2c, 0x4c, 0x8b, 4); // DEVPROP_TYPE_UINT32
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_PresenceNotForDevice, 0x80d81ea6, 0x7473, 0x4b0c, 0x82, 0x16, 0xef, 0xc1, 0x1a, 0x2c, 0x4c, 0x8b, 5); // DEVPROP_TYPE_BOOLEAN
|
||||
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_Numa_Proximity_Domain, 0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 1); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DHP_Rebalance_Policy, 0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 2); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_Numa_Node, 0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 3); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_BusReportedDeviceDesc, 0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 4); // DEVPROP_TYPE_STRING
|
||||
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_InstallInProgress, 0x83da6326, 0x97a6, 0x4088, 0x94, 0x53, 0xa1, 0x92, 0x3f, 0x57, 0x3b, 0x29, 9); // DEVPROP_TYPE_BOOLEAN
|
||||
|
||||
//
|
||||
// Device driver properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverDate, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 2); // DEVPROP_TYPE_FILETIME
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverVersion, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 3); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverDesc, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 4); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverInfPath, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 5); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSection, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 6); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSectionExt, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 7); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_MatchingDeviceId, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 8); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverProvider, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 9); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverPropPageProvider, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 10); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverCoInstallers, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 11); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerTags, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 12); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerExceptions, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 13); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverRank, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 14); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_DriverLogoLevel, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 15); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_NoConnectSound, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 17); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_GenericDriverInstalled, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 18); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_AdditionalSoftwareRequested, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 19);// DEVPROP_TYPE_BOOLEAN
|
||||
|
||||
//
|
||||
// Device safe-removal properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_SafeRemovalRequired, 0xafd97640, 0x86a3, 0x4210, 0xb6, 0x7c, 0x28, 0x9c, 0x41, 0xaa, 0xbe, 0x55, 2); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_Device_SafeRemovalRequiredOverride, 0xafd97640, 0x86a3, 0x4210, 0xb6, 0x7c, 0x28, 0x9c, 0x41, 0xaa, 0xbe, 0x55, 3);// DEVPROP_TYPE_BOOLEAN
|
||||
|
||||
|
||||
//
|
||||
// Device properties that were set by the driver package that was installed
|
||||
// on the device.
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_DrvPkg_Model, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 2); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DrvPkg_VendorWebSite, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 3); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DrvPkg_DetailedDescription, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 4); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DrvPkg_DocumentationLink, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 5); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DrvPkg_Icon, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 6); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_DrvPkg_BrandingIcon, 0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 7); // DEVPROP_TYPE_STRING_LIST
|
||||
|
||||
//
|
||||
// Device setup class properties
|
||||
// These PKEYs correspond to the old setupapi SPCRP_XXX properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_UpperFilters, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 19); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_LowerFilters, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 20); // DEVPROP_TYPE_STRING_LIST
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_Security, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 25); // DEVPROP_TYPE_SECURITY_DESCRIPTOR
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_SecuritySDS, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 26); // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_DevType, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 27); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_Exclusive, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 28); // DEVPROP_TYPE_UINT32
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_Characteristics, 0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 29); // DEVPROP_TYPE_UINT32
|
||||
|
||||
//
|
||||
// Device setup class properties
|
||||
// These PKEYs correspond to registry values under the device class GUID key
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_Name, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 2); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassName, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 3); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_Icon, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 4); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassInstaller, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 5); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_PropPageProvider, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 6); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoInstallClass, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 7); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoDisplayClass, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 8); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_SilentInstall, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 9); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoUseClass, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 10); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_DefaultService, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 11); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_IconPath, 0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 12); // DEVPROP_TYPE_STRING_LIST
|
||||
|
||||
//
|
||||
// Other Device setup class properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassCoInstallers, 0x713d1703, 0xa2e2, 0x49f5, 0x92, 0x14, 0x56, 0x47, 0x2e, 0xf3, 0xda, 0x5c, 2); // DEVPROP_TYPE_STRING_LIST
|
||||
|
||||
//
|
||||
// Device interface properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceInterface_FriendlyName, 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 2); // DEVPROP_TYPE_STRING
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceInterface_Enabled, 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 3); // DEVPROP_TYPE_BOOLEAN
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceInterface_ClassGuid, 0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 4); // DEVPROP_TYPE_GUID
|
||||
|
||||
//
|
||||
// Device interface class properties
|
||||
//
|
||||
DEFINE_PROPERTYKEY(PKEY_DeviceInterfaceClass_DefaultInterface, 0x14c83a99, 0x0b3f, 0x44b7, 0xbe, 0x4c, 0xa1, 0x78, 0xd3, 0x99, 0x05, 0x64, 2); // DEVPROP_TYPE_STRING
|
||||
|
||||
|
||||
|
||||
|
180
external/rtaudio/RtAudio.cpp
vendored
180
external/rtaudio/RtAudio.cpp
vendored
@ -1,4 +1,4 @@
|
||||
/************************************************************************/
|
||||
/************************************************************************/
|
||||
/*! \class RtAudio
|
||||
\brief Realtime audio i/o C++ classes.
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
|
||||
|
||||
RtAudio: realtime audio i/o C++ classes
|
||||
Copyright (c) 2001-2016 Gary P. Scavone
|
||||
Copyright (c) 2001-2017 Gary P. Scavone
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
@ -38,13 +38,14 @@
|
||||
*/
|
||||
/************************************************************************/
|
||||
|
||||
// RtAudio: Version 4.1.2
|
||||
// RtAudio: Version 5.0.0
|
||||
|
||||
#include "RtAudio.h"
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <climits>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
|
||||
// Static variable definitions.
|
||||
@ -92,12 +93,12 @@ const unsigned int RtApi::SAMPLE_RATES[] = {
|
||||
//
|
||||
// *************************************************** //
|
||||
|
||||
std::string RtAudio :: getVersion( void ) throw()
|
||||
std::string RtAudio :: getVersion( void )
|
||||
{
|
||||
return RTAUDIO_VERSION;
|
||||
}
|
||||
|
||||
void RtAudio :: getCompiledApi( std::vector<RtAudio::Api> &apis ) throw()
|
||||
void RtAudio :: getCompiledApi( std::vector<RtAudio::Api> &apis )
|
||||
{
|
||||
apis.clear();
|
||||
|
||||
@ -209,7 +210,7 @@ RtAudio :: RtAudio( RtAudio::Api api )
|
||||
throw( RtAudioError( errorText, RtAudioError::UNSPECIFIED ) );
|
||||
}
|
||||
|
||||
RtAudio :: ~RtAudio() throw()
|
||||
RtAudio :: ~RtAudio()
|
||||
{
|
||||
if ( rtapi_ )
|
||||
delete rtapi_;
|
||||
@ -427,6 +428,9 @@ void RtApi :: setStreamTime( double time )
|
||||
|
||||
if ( time >= 0.0 )
|
||||
stream_.streamTime = time;
|
||||
#if defined( HAVE_GETTIMEOFDAY )
|
||||
gettimeofday( &stream_.lastTickTimestamp, NULL );
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int RtApi :: getStreamSampleRate( void )
|
||||
@ -1940,10 +1944,12 @@ struct JackHandle {
|
||||
:client(0), drainCounter(0), internalDrain(false) { ports[0] = 0; ports[1] = 0; xrun[0] = false; xrun[1] = false; }
|
||||
};
|
||||
|
||||
#if !defined(__RTAUDIO_DEBUG__)
|
||||
static void jackSilentError( const char * ) {};
|
||||
#endif
|
||||
|
||||
RtApiJack :: RtApiJack()
|
||||
{
|
||||
:shouldAutoconnect_(true) {
|
||||
// Nothing to do here.
|
||||
#if !defined(__RTAUDIO_DEBUG__)
|
||||
// Turn off Jack's internal error reporting.
|
||||
@ -2354,6 +2360,8 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
|
||||
// here.
|
||||
if ( stream_.doConvertBuffer[mode] ) setConvertInfo( mode, 0 );
|
||||
|
||||
if ( options && options->flags & RTAUDIO_JACK_DONT_CONNECT ) shouldAutoconnect_ = false;
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
error:
|
||||
@ -2443,7 +2451,7 @@ void RtApiJack :: startStream( void )
|
||||
const char **ports;
|
||||
|
||||
// Get the list of available ports.
|
||||
if ( stream_.mode == OUTPUT || stream_.mode == DUPLEX ) {
|
||||
if ( shouldAutoconnect_ && (stream_.mode == OUTPUT || stream_.mode == DUPLEX) ) {
|
||||
result = 1;
|
||||
ports = jack_get_ports( handle->client, handle->deviceName[0].c_str(), NULL, JackPortIsInput);
|
||||
if ( ports == NULL) {
|
||||
@ -2467,7 +2475,7 @@ void RtApiJack :: startStream( void )
|
||||
free(ports);
|
||||
}
|
||||
|
||||
if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) {
|
||||
if ( shouldAutoconnect_ && (stream_.mode == INPUT || stream_.mode == DUPLEX) ) {
|
||||
result = 1;
|
||||
ports = jack_get_ports( handle->client, handle->deviceName[1].c_str(), NULL, JackPortIsOutput );
|
||||
if ( ports == NULL) {
|
||||
@ -3859,8 +3867,7 @@ private:
|
||||
// In order to satisfy WASAPI's buffer requirements, we need a means of converting sample rate
|
||||
// between HW and the user. The convertBufferWasapi function is used to perform this conversion
|
||||
// between HwIn->UserIn and UserOut->HwOut during the stream callback loop.
|
||||
// This sample rate converter favors speed over quality, and works best with conversions between
|
||||
// one rate and its multiple.
|
||||
// This sample rate converter works best with conversions between one rate and its multiple.
|
||||
void convertBufferWasapi( char* outBuffer,
|
||||
const char* inBuffer,
|
||||
const unsigned int& channelCount,
|
||||
@ -3872,40 +3879,129 @@ void convertBufferWasapi( char* outBuffer,
|
||||
{
|
||||
// calculate the new outSampleCount and relative sampleStep
|
||||
float sampleRatio = ( float ) outSampleRate / inSampleRate;
|
||||
float sampleRatioInv = ( float ) 1 / sampleRatio;
|
||||
float sampleStep = 1.0f / sampleRatio;
|
||||
float inSampleFraction = 0.0f;
|
||||
|
||||
outSampleCount = ( unsigned int ) roundf( inSampleCount * sampleRatio );
|
||||
outSampleCount = ( unsigned int ) std::roundf( inSampleCount * sampleRatio );
|
||||
|
||||
// frame-by-frame, copy each relative input sample into it's corresponding output sample
|
||||
for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )
|
||||
// if inSampleRate is a multiple of outSampleRate (or vice versa) there's no need to interpolate
|
||||
if ( floor( sampleRatio ) == sampleRatio || floor( sampleRatioInv ) == sampleRatioInv )
|
||||
{
|
||||
unsigned int inSample = ( unsigned int ) inSampleFraction;
|
||||
|
||||
switch ( format )
|
||||
// frame-by-frame, copy each relative input sample into it's corresponding output sample
|
||||
for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )
|
||||
{
|
||||
case RTAUDIO_SINT8:
|
||||
memcpy( &( ( char* ) outBuffer )[ outSample * channelCount ], &( ( char* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( char ) );
|
||||
break;
|
||||
case RTAUDIO_SINT16:
|
||||
memcpy( &( ( short* ) outBuffer )[ outSample * channelCount ], &( ( short* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( short ) );
|
||||
break;
|
||||
case RTAUDIO_SINT24:
|
||||
memcpy( &( ( S24* ) outBuffer )[ outSample * channelCount ], &( ( S24* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( S24 ) );
|
||||
break;
|
||||
case RTAUDIO_SINT32:
|
||||
memcpy( &( ( int* ) outBuffer )[ outSample * channelCount ], &( ( int* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( int ) );
|
||||
break;
|
||||
case RTAUDIO_FLOAT32:
|
||||
memcpy( &( ( float* ) outBuffer )[ outSample * channelCount ], &( ( float* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( float ) );
|
||||
break;
|
||||
case RTAUDIO_FLOAT64:
|
||||
memcpy( &( ( double* ) outBuffer )[ outSample * channelCount ], &( ( double* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( double ) );
|
||||
break;
|
||||
}
|
||||
unsigned int inSample = ( unsigned int ) inSampleFraction;
|
||||
|
||||
// jump to next in sample
|
||||
inSampleFraction += sampleStep;
|
||||
switch ( format )
|
||||
{
|
||||
case RTAUDIO_SINT8:
|
||||
memcpy( &( ( char* ) outBuffer )[ outSample * channelCount ], &( ( char* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( char ) );
|
||||
break;
|
||||
case RTAUDIO_SINT16:
|
||||
memcpy( &( ( short* ) outBuffer )[ outSample * channelCount ], &( ( short* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( short ) );
|
||||
break;
|
||||
case RTAUDIO_SINT24:
|
||||
memcpy( &( ( S24* ) outBuffer )[ outSample * channelCount ], &( ( S24* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( S24 ) );
|
||||
break;
|
||||
case RTAUDIO_SINT32:
|
||||
memcpy( &( ( int* ) outBuffer )[ outSample * channelCount ], &( ( int* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( int ) );
|
||||
break;
|
||||
case RTAUDIO_FLOAT32:
|
||||
memcpy( &( ( float* ) outBuffer )[ outSample * channelCount ], &( ( float* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( float ) );
|
||||
break;
|
||||
case RTAUDIO_FLOAT64:
|
||||
memcpy( &( ( double* ) outBuffer )[ outSample * channelCount ], &( ( double* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( double ) );
|
||||
break;
|
||||
}
|
||||
|
||||
// jump to next in sample
|
||||
inSampleFraction += sampleStep;
|
||||
}
|
||||
}
|
||||
else // else interpolate
|
||||
{
|
||||
// frame-by-frame, copy each relative input sample into it's corresponding output sample
|
||||
for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )
|
||||
{
|
||||
unsigned int inSample = ( unsigned int ) inSampleFraction;
|
||||
float inSampleDec = inSampleFraction - inSample;
|
||||
unsigned int frameInSample = inSample * channelCount;
|
||||
unsigned int frameOutSample = outSample * channelCount;
|
||||
|
||||
switch ( format )
|
||||
{
|
||||
case RTAUDIO_SINT8:
|
||||
{
|
||||
for ( unsigned int channel = 0; channel < channelCount; channel++ )
|
||||
{
|
||||
char fromSample = ( ( char* ) inBuffer )[ frameInSample + channel ];
|
||||
char toSample = ( ( char* ) inBuffer )[ frameInSample + channelCount + channel ];
|
||||
char sampleDiff = ( char ) ( ( toSample - fromSample ) * inSampleDec );
|
||||
( ( char* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RTAUDIO_SINT16:
|
||||
{
|
||||
for ( unsigned int channel = 0; channel < channelCount; channel++ )
|
||||
{
|
||||
short fromSample = ( ( short* ) inBuffer )[ frameInSample + channel ];
|
||||
short toSample = ( ( short* ) inBuffer )[ frameInSample + channelCount + channel ];
|
||||
short sampleDiff = ( short ) ( ( toSample - fromSample ) * inSampleDec );
|
||||
( ( short* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RTAUDIO_SINT24:
|
||||
{
|
||||
for ( unsigned int channel = 0; channel < channelCount; channel++ )
|
||||
{
|
||||
int fromSample = ( ( S24* ) inBuffer )[ frameInSample + channel ].asInt();
|
||||
int toSample = ( ( S24* ) inBuffer )[ frameInSample + channelCount + channel ].asInt();
|
||||
int sampleDiff = ( int ) ( ( toSample - fromSample ) * inSampleDec );
|
||||
( ( S24* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RTAUDIO_SINT32:
|
||||
{
|
||||
for ( unsigned int channel = 0; channel < channelCount; channel++ )
|
||||
{
|
||||
int fromSample = ( ( int* ) inBuffer )[ frameInSample + channel ];
|
||||
int toSample = ( ( int* ) inBuffer )[ frameInSample + channelCount + channel ];
|
||||
int sampleDiff = ( int ) ( ( toSample - fromSample ) * inSampleDec );
|
||||
( ( int* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RTAUDIO_FLOAT32:
|
||||
{
|
||||
for ( unsigned int channel = 0; channel < channelCount; channel++ )
|
||||
{
|
||||
float fromSample = ( ( float* ) inBuffer )[ frameInSample + channel ];
|
||||
float toSample = ( ( float* ) inBuffer )[ frameInSample + channelCount + channel ];
|
||||
float sampleDiff = ( toSample - fromSample ) * inSampleDec;
|
||||
( ( float* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RTAUDIO_FLOAT64:
|
||||
{
|
||||
for ( unsigned int channel = 0; channel < channelCount; channel++ )
|
||||
{
|
||||
double fromSample = ( ( double* ) inBuffer )[ frameInSample + channel ];
|
||||
double toSample = ( ( double* ) inBuffer )[ frameInSample + channelCount + channel ];
|
||||
double sampleDiff = ( toSample - fromSample ) * inSampleDec;
|
||||
( ( double* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// jump to next in sample
|
||||
inSampleFraction += sampleStep;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5195,6 +5291,8 @@ Exit:
|
||||
// Various revisions for RtAudio 4.0 by Gary Scavone, April 2007
|
||||
// Changed device query structure for RtAudio 4.0.7, January 2010
|
||||
|
||||
#include <mmsystem.h>
|
||||
#include <mmreg.h>
|
||||
#include <dsound.h>
|
||||
#include <assert.h>
|
||||
#include <algorithm>
|
||||
@ -5275,8 +5373,8 @@ RtApiDs :: RtApiDs()
|
||||
|
||||
RtApiDs :: ~RtApiDs()
|
||||
{
|
||||
if ( coInitialized_ ) CoUninitialize(); // balanced call.
|
||||
if ( stream_.state != STREAM_CLOSED ) closeStream();
|
||||
if ( coInitialized_ ) CoUninitialize(); // balanced call.
|
||||
}
|
||||
|
||||
// The DirectSound default output is always the first device.
|
||||
@ -8695,8 +8793,10 @@ RtAudio::DeviceInfo RtApiOss :: getDeviceInfo( unsigned int device )
|
||||
info.nativeFormats |= RTAUDIO_SINT8;
|
||||
if ( mask & AFMT_S32_LE || mask & AFMT_S32_BE )
|
||||
info.nativeFormats |= RTAUDIO_SINT32;
|
||||
#ifdef AFMT_FLOAT
|
||||
if ( mask & AFMT_FLOAT )
|
||||
info.nativeFormats |= RTAUDIO_FLOAT32;
|
||||
#endif
|
||||
if ( mask & AFMT_S24_LE || mask & AFMT_S24_BE )
|
||||
info.nativeFormats |= RTAUDIO_SINT24;
|
||||
|
||||
@ -9023,7 +9123,7 @@ bool RtApiOss :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned
|
||||
}
|
||||
|
||||
// Verify the sample rate setup worked.
|
||||
if ( abs( srate - sampleRate ) > 100 ) {
|
||||
if ( abs( srate - (int)sampleRate ) > 100 ) {
|
||||
close( fd );
|
||||
errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support sample rate (" << sampleRate << ").";
|
||||
errorText_ = errorStream_.str();
|
||||
|
74
external/rtaudio/RtAudio.h
vendored
74
external/rtaudio/RtAudio.h
vendored
@ -10,7 +10,7 @@
|
||||
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
|
||||
|
||||
RtAudio: realtime audio i/o C++ classes
|
||||
Copyright (c) 2001-2016 Gary P. Scavone
|
||||
Copyright (c) 2001-2017 Gary P. Scavone
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
@ -45,11 +45,11 @@
|
||||
#ifndef __RTAUDIO_H
|
||||
#define __RTAUDIO_H
|
||||
|
||||
#define RTAUDIO_VERSION "4.1.2"
|
||||
#define RTAUDIO_VERSION "5.0.0"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <exception>
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
|
||||
/*! \typedef typedef unsigned long RtAudioFormat;
|
||||
@ -86,6 +86,7 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi
|
||||
- \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency.
|
||||
- \e RTAUDIO_HOG_DEVICE: Attempt grab device for exclusive use.
|
||||
- \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only).
|
||||
- \e RTAUDIO_JACK_DONT_CONNECT: Do not automatically connect ports (JACK only).
|
||||
|
||||
By default, RtAudio streams pass and receive audio data from the
|
||||
client in an interleaved format. By passing the
|
||||
@ -117,6 +118,9 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi
|
||||
If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to
|
||||
open the "default" PCM device when using the ALSA API. Note that this
|
||||
will override any specified input or output device id.
|
||||
|
||||
If the RTAUDIO_JACK_DONT_CONNECT flag is set, RtAudio will not attempt
|
||||
to automatically connect the ports of the client to the audio device.
|
||||
*/
|
||||
typedef unsigned int RtAudioStreamFlags;
|
||||
static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1; // Use non-interleaved buffers (default = interleaved).
|
||||
@ -124,6 +128,7 @@ static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2; // Attempt to s
|
||||
static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4; // Attempt grab device and prevent use by others.
|
||||
static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread.
|
||||
static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only).
|
||||
static const RtAudioStreamFlags RTAUDIO_JACK_DONT_CONNECT = 0x20; // Do not automatically connect ports (JACK only).
|
||||
|
||||
/*! \typedef typedef unsigned long RtAudioStreamStatus;
|
||||
\brief RtAudio stream status (over- or underflow) flags.
|
||||
@ -195,7 +200,7 @@ typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer,
|
||||
*/
|
||||
/************************************************************************/
|
||||
|
||||
class RtAudioError : public std::exception
|
||||
class RtAudioError : public std::runtime_error
|
||||
{
|
||||
public:
|
||||
//! Defined RtAudioError types.
|
||||
@ -214,25 +219,22 @@ class RtAudioError : public std::exception
|
||||
};
|
||||
|
||||
//! The constructor.
|
||||
RtAudioError( const std::string& message, Type type = RtAudioError::UNSPECIFIED ) throw() : message_(message), type_(type) {}
|
||||
|
||||
//! The destructor.
|
||||
virtual ~RtAudioError( void ) throw() {}
|
||||
RtAudioError( const std::string& message,
|
||||
Type type = RtAudioError::UNSPECIFIED )
|
||||
: std::runtime_error(message), type_(type) {}
|
||||
|
||||
//! Prints thrown error message to stderr.
|
||||
virtual void printMessage( void ) const throw() { std::cerr << '\n' << message_ << "\n\n"; }
|
||||
virtual void printMessage( void ) const
|
||||
{ std::cerr << '\n' << what() << "\n\n"; }
|
||||
|
||||
//! Returns the thrown error message type.
|
||||
virtual const Type& getType(void) const throw() { return type_; }
|
||||
virtual const Type& getType(void) const { return type_; }
|
||||
|
||||
//! Returns the thrown error message string.
|
||||
virtual const std::string& getMessage(void) const throw() { return message_; }
|
||||
|
||||
//! Returns the thrown error message as a c-style string.
|
||||
virtual const char* what( void ) const throw() { return message_.c_str(); }
|
||||
virtual const std::string getMessage(void) const
|
||||
{ return std::string(what()); }
|
||||
|
||||
protected:
|
||||
std::string message_;
|
||||
Type type_;
|
||||
};
|
||||
|
||||
@ -375,7 +377,7 @@ class RtAudio
|
||||
};
|
||||
|
||||
//! A static function to determine the current RtAudio version.
|
||||
static std::string getVersion( void ) throw();
|
||||
static std::string getVersion( void );
|
||||
|
||||
//! A static function to determine the available compiled audio APIs.
|
||||
/*!
|
||||
@ -383,7 +385,7 @@ class RtAudio
|
||||
the enumerated list values. Note that there can be more than one
|
||||
API compiled for certain operating systems.
|
||||
*/
|
||||
static void getCompiledApi( std::vector<RtAudio::Api> &apis ) throw();
|
||||
static void getCompiledApi( std::vector<RtAudio::Api> &apis );
|
||||
|
||||
//! The class constructor.
|
||||
/*!
|
||||
@ -401,10 +403,10 @@ class RtAudio
|
||||
If a stream is running or open, it will be stopped and closed
|
||||
automatically.
|
||||
*/
|
||||
~RtAudio() throw();
|
||||
~RtAudio();
|
||||
|
||||
//! Returns the audio API specifier for the current instance of RtAudio.
|
||||
RtAudio::Api getCurrentApi( void ) throw();
|
||||
RtAudio::Api getCurrentApi( void );
|
||||
|
||||
//! A public function that queries for the number of audio devices available.
|
||||
/*!
|
||||
@ -412,7 +414,7 @@ class RtAudio
|
||||
is called, thus supporting devices connected \e after instantiation. If
|
||||
a system error occurs during processing, a warning will be issued.
|
||||
*/
|
||||
unsigned int getDeviceCount( void ) throw();
|
||||
unsigned int getDeviceCount( void );
|
||||
|
||||
//! Return an RtAudio::DeviceInfo structure for a specified device number.
|
||||
/*!
|
||||
@ -435,7 +437,7 @@ class RtAudio
|
||||
client's responsibility to verify that a device is available
|
||||
before attempting to open a stream.
|
||||
*/
|
||||
unsigned int getDefaultOutputDevice( void ) throw();
|
||||
unsigned int getDefaultOutputDevice( void );
|
||||
|
||||
//! A function that returns the index of the default input device.
|
||||
/*!
|
||||
@ -445,7 +447,7 @@ class RtAudio
|
||||
client's responsibility to verify that a device is available
|
||||
before attempting to open a stream.
|
||||
*/
|
||||
unsigned int getDefaultInputDevice( void ) throw();
|
||||
unsigned int getDefaultInputDevice( void );
|
||||
|
||||
//! A public function for opening a stream with the specified parameters.
|
||||
/*!
|
||||
@ -498,7 +500,7 @@ class RtAudio
|
||||
If a stream is not open, this function issues a warning and
|
||||
returns (no exception is thrown).
|
||||
*/
|
||||
void closeStream( void ) throw();
|
||||
void closeStream( void );
|
||||
|
||||
//! A function that starts a stream.
|
||||
/*!
|
||||
@ -528,10 +530,10 @@ class RtAudio
|
||||
void abortStream( void );
|
||||
|
||||
//! Returns true if a stream is open and false if not.
|
||||
bool isStreamOpen( void ) const throw();
|
||||
bool isStreamOpen( void ) const;
|
||||
|
||||
//! Returns true if the stream is running and false if it is stopped or not open.
|
||||
bool isStreamRunning( void ) const throw();
|
||||
bool isStreamRunning( void ) const;
|
||||
|
||||
//! Returns the number of elapsed seconds since the stream was started.
|
||||
/*!
|
||||
@ -565,7 +567,7 @@ class RtAudio
|
||||
unsigned int getStreamSampleRate( void );
|
||||
|
||||
//! Specify whether warning messages should be printed to stderr.
|
||||
void showWarnings( bool value = true ) throw();
|
||||
void showWarnings( bool value = true );
|
||||
|
||||
protected:
|
||||
|
||||
@ -616,7 +618,7 @@ struct CallbackInfo {
|
||||
|
||||
// Default constructor.
|
||||
CallbackInfo()
|
||||
:object(0), callback(0), userData(0), errorCallback(0), apiInfo(0), isRunning(false), doRealtime(false) {}
|
||||
:object(0), callback(0), userData(0), errorCallback(0), apiInfo(0), isRunning(false), doRealtime(false), priority(0) {}
|
||||
};
|
||||
|
||||
// **************************************************************** //
|
||||
@ -824,22 +826,22 @@ protected:
|
||||
//
|
||||
// **************************************************************** //
|
||||
|
||||
inline RtAudio::Api RtAudio :: getCurrentApi( void ) throw() { return rtapi_->getCurrentApi(); }
|
||||
inline unsigned int RtAudio :: getDeviceCount( void ) throw() { return rtapi_->getDeviceCount(); }
|
||||
inline RtAudio::Api RtAudio :: getCurrentApi( void ) { return rtapi_->getCurrentApi(); }
|
||||
inline unsigned int RtAudio :: getDeviceCount( void ) { return rtapi_->getDeviceCount(); }
|
||||
inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); }
|
||||
inline unsigned int RtAudio :: getDefaultInputDevice( void ) throw() { return rtapi_->getDefaultInputDevice(); }
|
||||
inline unsigned int RtAudio :: getDefaultOutputDevice( void ) throw() { return rtapi_->getDefaultOutputDevice(); }
|
||||
inline void RtAudio :: closeStream( void ) throw() { return rtapi_->closeStream(); }
|
||||
inline unsigned int RtAudio :: getDefaultInputDevice( void ) { return rtapi_->getDefaultInputDevice(); }
|
||||
inline unsigned int RtAudio :: getDefaultOutputDevice( void ) { return rtapi_->getDefaultOutputDevice(); }
|
||||
inline void RtAudio :: closeStream( void ) { return rtapi_->closeStream(); }
|
||||
inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); }
|
||||
inline void RtAudio :: stopStream( void ) { return rtapi_->stopStream(); }
|
||||
inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); }
|
||||
inline bool RtAudio :: isStreamOpen( void ) const throw() { return rtapi_->isStreamOpen(); }
|
||||
inline bool RtAudio :: isStreamRunning( void ) const throw() { return rtapi_->isStreamRunning(); }
|
||||
inline bool RtAudio :: isStreamOpen( void ) const { return rtapi_->isStreamOpen(); }
|
||||
inline bool RtAudio :: isStreamRunning( void ) const { return rtapi_->isStreamRunning(); }
|
||||
inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); }
|
||||
inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); }
|
||||
inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); }
|
||||
inline void RtAudio :: setStreamTime( double time ) { return rtapi_->setStreamTime( time ); }
|
||||
inline void RtAudio :: showWarnings( bool value ) throw() { rtapi_->showWarnings( value ); }
|
||||
inline void RtAudio :: showWarnings( bool value ) { rtapi_->showWarnings( value ); }
|
||||
|
||||
// RtApi Subclass prototypes.
|
||||
|
||||
@ -912,6 +914,8 @@ public:
|
||||
unsigned int firstChannel, unsigned int sampleRate,
|
||||
RtAudioFormat format, unsigned int *bufferSize,
|
||||
RtAudio::StreamOptions *options );
|
||||
|
||||
bool shouldAutoconnect_;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
4
external/rtaudio/readme
vendored
4
external/rtaudio/readme
vendored
@ -1,6 +1,6 @@
|
||||
RtAudio - a set of C++ classes that provide a common API for realtime audio input/output across Linux (native ALSA, JACK, PulseAudio and OSS), Macintosh OS X (CoreAudio and JACK), and Windows (DirectSound, ASIO and WASAPI) operating systems.
|
||||
|
||||
By Gary P. Scavone, 2001-2016.
|
||||
By Gary P. Scavone, 2001-2017 (and many other developers!)
|
||||
|
||||
This distribution of RtAudio contains the following:
|
||||
|
||||
@ -34,7 +34,7 @@ LEGAL AND ETHICAL:
|
||||
The RtAudio license is similar to the MIT License.
|
||||
|
||||
RtAudio: a set of realtime audio i/o C++ classes
|
||||
Copyright (c) 2001-2016 Gary P. Scavone
|
||||
Copyright (c) 2001-2017 Gary P. Scavone
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
|
Loading…
Reference in New Issue
Block a user