Uwp 在C+中实现iba效果+;
我想实现一个UWP听力图自定义效果 我在C#中成功地实现了它。我跟着。 但这种C#实现很难优化 <>我想用C++代替C语言来实现这个效果。 但是我找不到好的教程。我把我的解决方案添加到C++ Windows运行时组件项目中。我添加了一个实现IBasicAudioEffect的类 以下是我的ProcessFrame方法实现:Uwp 在C+中实现iba效果+;,uwp,c++-cx,Uwp,C++ Cx,我想实现一个UWP听力图自定义效果 我在C#中成功地实现了它。我跟着。 但这种C#实现很难优化 我想用C++代替C语言来实现这个效果。 但是我找不到好的教程。我把我的解决方案添加到C++ Windows运行时组件项目中。我添加了一个实现IBasicAudioEffect的类 以下是我的ProcessFrame方法实现: void PanningCustomEffect::ProcessFrame(ProcessAudioFrameContext^ context) { if (_fram
void PanningCustomEffect::ProcessFrame(ProcessAudioFrameContext^ context)
{
if (_frame == nullptr)
{
if (context == nullptr)
{
throw ref new InvalidArgumentException("context");
}
_frame = context->InputFrame;
}
AudioBuffer^ inputBuffer = _frame->LockBuffer(AudioBufferAccessMode::ReadWrite);
IMemoryBufferReference^ inputReference = inputBuffer->CreateReference();
// TODO: here
}
我有3个问题:
- 我如何获得IMemoryBufferByteAccess的引用
- 那么我如何访问样本的浮点值呢
- 如何在我的方法结束时正确清理内存/销毁对象,以避免内存泄漏
AudioBuffer^ buffer = _frame->LockBuffer(AudioBufferAccessMode::ReadWrite);
IMemoryBufferReference^ bufferReference = buffer->CreateReference();
ComPtr<IMemoryBufferByteAccess> memoryBufferByteAccess;
if (reinterpret_cast<IUnknown*>(bufferReference)->QueryInterface(IID_PPV_ARGS(&memoryBufferByteAccess)) != S_OK)
{
throw ref new Platform::InvalidCastException("Unable to get the IMemoryBufferByteAccess interface.");
}
BYTE* data;
UINT32 capacity;
memoryBufferByteAccess->GetBuffer(&data, &capacity);
float* floatData = (float*)data;
const int floatCapacity = capacity / sizeof(float);
for (int i = 0; i < floatCapacity; i++)
{
float sample = floatData[i];
// ...
floatData[i] = sample;
}
delete bufferReference;
delete buffer;
AudioBuffer^buffer=\u frame->LockBuffer(AudioBufferAccessMode::ReadWrite);
IMemoryBufferReference^bufferReference=buffer->CreateReference();
ComPtr memoryBufferByteAccess;
if(reinterpret_cast(bufferReference)->查询接口(IID_PPV_ARGS(&memoryBufferByteAccess))!=S_OK)
{
throw ref new Platform::InvalidCastException(“无法获取IMemoryBufferByteAccess接口”);
}
字节*数据;
UINT32容量;
memoryBufferByteAccess->GetBuffer(&data,&capacity);
浮点*浮点数据=(浮点*)数据;
常量int floatCapacity=容量/sizeof(float);
对于(int i=0;i
与您的问题无关,但为什么要将此类API用于音频效果?请使用。自动引用计数应该负责清理。我无法使用safe_cast。我使用了reinterpret_cast和QueryInterface()来代替。我是否应该使用Release()?@MichaelChourdakis我正在UWP平台上用C#开发一个音频创建应用程序。它大量使用音频图API。我试图重写C++中的一些性能关键组件…我在Windows GiTuub中发布了这个请求: