Files
UnrealEngineUWP/Engine/Source/Runtime/AudioCaptureCore/Public/AudioCaptureDeviceInterface.h
Josh Markiewicz d79515867d Copying //UE4/Dev-Online to Dev-Main (//UE4/Dev-Main)
- Up to CL8320930 from DevOnline and 8311605 Merge Down from Main
- skipped some Fortnite content/plugins/code where it tried to reintegrate files that had been moved pending investigation
#rb none

[CL 8321295 by Josh Markiewicz in Main branch]
2019-08-26 18:35:22 -04:00

88 lines
2.7 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Features/IModularFeature.h"
namespace Audio
{
struct FCaptureDeviceInfo
{
FString DeviceName;
int32 InputChannels;
int32 PreferredSampleRate;
bool bSupportsHardwareAEC;
};
const int32 DefaultDeviceIndex = INDEX_NONE;
struct FAudioCaptureDeviceParams
{
// set to true to use this device's built-in echo cancellation, if possible.
bool bUseHardwareAEC;
// Set this to INDEX_NONE
int32 DeviceIndex;
FAudioCaptureDeviceParams()
: bUseHardwareAEC(false)
, DeviceIndex(DefaultDeviceIndex)
{
}
};
typedef TFunction<void(const float* InAudio, int32 NumFrames, int32 NumChannels, double StreamTime, bool bOverFlow)> FOnCaptureFunction;
class IAudioCaptureStream : public IModularFeature
{
public:
IAudioCaptureStream() {}
virtual ~IAudioCaptureStream() {}
// Returns the audio capture device information at the given Id.
virtual bool GetCaptureDeviceInfo(FCaptureDeviceInfo& OutInfo, int32 DeviceIndex) = 0;
// Opens the audio capture stream with the given parameters
virtual bool OpenCaptureStream(const FAudioCaptureDeviceParams& InParams, FOnCaptureFunction InOnCapture, uint32 NumFramesDesired) = 0;
// Closes the audio capture stream
virtual bool CloseStream() = 0;
// Start the audio capture stream
virtual bool StartStream() = 0;
// Stop the audio capture stream
virtual bool StopStream() = 0;
// Abort the audio capture stream (stop and close)
virtual bool AbortStream() = 0;
// Get the stream time of the audio capture stream
virtual bool GetStreamTime(double& OutStreamTime) = 0;
// Get the sample rate in use by the stream.
virtual int32 GetSampleRate() const = 0;
// Returns if the audio capture stream has been opened.
virtual bool IsStreamOpen() const = 0;
// Returns true if the audio capture stream is currently capturing audio.
virtual bool IsCapturing() const = 0;
// This is the callback for querying audio from the input device.
virtual void OnAudioCapture(void* InBuffer, uint32 InBufferFrames, double StreamTime, bool bOverflow) = 0;
// Returns the total amount of audio devices.
virtual bool GetInputDevicesAvailable(TArray<FCaptureDeviceInfo>& OutDevices) = 0;
};
class IAudioCaptureFactory : public IModularFeature
{
public:
IAudioCaptureFactory() {}
virtual ~IAudioCaptureFactory() {}
// IModularFeature name. Use this to register an implementation of IAudioCaptureDevice.
static FName GetModularFeatureName()
{
static FName AudioCaptureFeatureName = FName(TEXT("AudioCaptureStream"));
return AudioCaptureFeatureName;
}
virtual TUniquePtr<IAudioCaptureStream> CreateNewAudioCaptureStream() = 0;
};
} // namespace Audio