当前位置: 首页 > news >正文

西樵乐从网站建设江门关键词排名优化

西樵乐从网站建设,江门关键词排名优化,做试用的网站,跨境电商知名网站建设修改OpenAudioCaptureStream启动参数为PCM_32#xff0c;在PC上正常#xff0c;在Android系统#xff0c;读取的的数据计算出的音量值在0.4-0.6之间跳动#xff0c;数据异常。 Audio::FAudioCaptureDeviceParams Params;/** 设置声卡不支持的采样数和通道数开始音频流不会成…修改OpenAudioCaptureStream启动参数为PCM_32在PC上正常在Android系统读取的的数据计算出的音量值在0.4-0.6之间跳动数据异常。 Audio::FAudioCaptureDeviceParams Params;/** 设置声卡不支持的采样数和通道数开始音频流不会成功这里不能修改* Params.NumInputChannels 1;* Params.SampleRate 16000;* * 可以修改PCM数据格式默认是32位浮点数FLOATING_POINT_32* 我这里修改为32位整数PCM_32*/Params.PCMAudioEncoding Audio::EPCMAudioEncoding::PCM_32;// 使用 TFunction 包装成员函数Audio::FOnAudioCaptureFunction OnCapture [this](const void* InAudio, int32 NumFrames, int32 NumChannels, int32 SampleRate, double StreamTime, bool bOverFlow){this-OnAudioCapture(InAudio, NumFrames, NumChannels, SampleRate, StreamTime, bOverFlow);};bool r AudioCapture-OpenAudioCaptureStream(Params, MoveTemp(OnCapture), 4800);修改为FLOATING_POINT_32按照float值读取数据则是正常的。 Audio::FAudioCaptureDeviceParams Params;/** 设置声卡不支持的采样数和通道数开始音频流不会成功这里不能修改* Params.NumInputChannels 1;* Params.SampleRate 16000;* * 可以修改PCM数据格式默认是32位浮点数FLOATING_POINT_32* 修改为32位整数PCM_32在Android系统有问题还是修改为FLOATING_POINT_32*/Params.PCMAudioEncoding Audio::EPCMAudioEncoding::FLOATING_POINT_32;// 使用 TFunction 包装成员函数Audio::FOnAudioCaptureFunction OnCapture [this](const void* InAudio, int32 NumFrames, int32 NumChannels, int32 SampleRate, double StreamTime, bool bOverFlow){this-OnAudioCapture(InAudio, NumFrames, NumChannels, SampleRate, StreamTime, bOverFlow);};bool r AudioCapture-OpenAudioCaptureStream(Params, MoveTemp(OnCapture), 1920); // 48000采样率可以在重采样是整除3全部代码 FxAudioCaptureComponent.h #pragma once#include CoreMinimal.h #include Components/ActorComponent.h #include AudioCaptureDeviceInterface.h #include HAL/ThreadSafeCounter.h #include HAL/Thread.h #include FxAudioCaptureComponent.generated.hUCLASS(ClassGroup (Custom), meta (BlueprintSpawnableComponent)) class UFxAudioCaptureComponent : public UActorComponent {GENERATED_BODY()public:UFxAudioCaptureComponent();UPROPERTY(EditAnywhere, BlueprintReadWrite, Category XML)int ID;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category XML)float Intensity;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category XML)bool bMobile;protected:virtual void BeginPlay() override;virtual void EndPlay(const EEndPlayReason::Type EndPlayReason);// Called every framevirtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;TArrayfloat ResampleAndConvert16KHzMono16Bit(const float* inputData, int inputNumSamples, int inputChannels, int inputSampleRate);public:UFUNCTION(BlueprintPure, Category FxAudioCapture)int GetAudioDataSize();UFUNCTION(BlueprintCallable, Category FxAudioCapture)TArrayuint8 CopyAudioData(int Length, bool bRemove true);UFUNCTION(BlueprintCallable, Category FxAudioCapture)bool StartRecord(float seconds 10.0f);UFUNCTION(BlueprintCallable, Category FxAudioCapture)void StopRecord();UFUNCTION(BlueprintPure, Category FxAudioCapture)bool IsRecording();private:FCriticalSection Mutex;TArrayfloat m_audioData;bool bRecording;float RecordSeconds;TUniquePtrAudio::IAudioCaptureStream AudioCapture;void OnAudioCapture(const void* InAudio, int32 NumFrames, int32 NumChannels, int32 SampleRate, double StreamTime, bool bOverFlow); }; FxAudioCaptureComponent.cpp #include FxAudioCaptureComponent.h #include AudioCaptureDeviceInterface.h #include AudioCaptureCore.h #include AudioMixer.hUFxAudioCaptureComponent::UFxAudioCaptureComponent(): bRecording(false) {PrimaryComponentTick.bCanEverTick true; }void UFxAudioCaptureComponent::BeginPlay() {Super::BeginPlay();IModularFeatures::Get().LockModularFeatureList();TArrayAudio::IAudioCaptureFactory* AudioCaptureStreamFactories IModularFeatures::Get().GetModularFeatureImplementationsAudio::IAudioCaptureFactory(Audio::IAudioCaptureFactory::GetModularFeatureName());IModularFeatures::Get().UnlockModularFeatureList();// For now, just return the first audio capture stream implemented. We can make this configurable at a later point.if (AudioCaptureStreamFactories.Num() 0 AudioCaptureStreamFactories[0] ! nullptr){AudioCapture AudioCaptureStreamFactories[0]-CreateNewAudioCaptureStream();if (!AudioCapture.IsValid()){GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT(CreateNewAudioCaptureStream return null));}}else {GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT(no Audio Capture Stream Factories));} } void UFxAudioCaptureComponent::EndPlay(const EEndPlayReason::Type EndPlayReason) {Super::EndPlay(EndPlayReason);StopRecord(); } void UFxAudioCaptureComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) {Super::TickComponent(DeltaTime, TickType, ThisTickFunction); } int UFxAudioCaptureComponent::GetAudioDataSize() {int len 0;Mutex.Lock();len m_audioData.Num();Mutex.Unlock();return len; } TArrayuint8 UFxAudioCaptureComponent::CopyAudioData(int numSamples, bool bRemove) {TArrayuint8 Array;Mutex.Lock();if (0 numSamples numSamples m_audioData.Num()) {for (int i 0; i numSamples; i) {int16_t sample16Bit static_castint16_t(m_audioData[i] * 32767.0f);// 将16位样本存储到Array中Array.Push(static_castuint8_t(sample16Bit 0xFF));Array.Push(static_castuint8_t((sample16Bit 8) 0xFF));}if (bRemove) {m_audioData.RemoveAt(0, numSamples);}}Mutex.Unlock();return Array; } bool UFxAudioCaptureComponent::StartRecord(float seconds) {StopRecord();RecordSeconds seconds;if (AudioCapture.IsValid()){Audio::FAudioCaptureDeviceParams Params;/** 设置声卡不支持的采样数和通道数开始音频流不会成功这里不能修改* Params.NumInputChannels 1;* Params.SampleRate 16000;* * 可以修改PCM数据格式默认是32位浮点数FLOATING_POINT_32* 修改为32位整数PCM_32在Android系统有问题还是修改为FLOATING_POINT_32*/Params.PCMAudioEncoding Audio::EPCMAudioEncoding::FLOATING_POINT_32;// 使用 TFunction 包装成员函数Audio::FOnAudioCaptureFunction OnCapture [this](const void* InAudio, int32 NumFrames, int32 NumChannels, int32 SampleRate, double StreamTime, bool bOverFlow){this-OnAudioCapture(InAudio, NumFrames, NumChannels, SampleRate, StreamTime, bOverFlow);};bool r AudioCapture-OpenAudioCaptureStream(Params, MoveTemp(OnCapture), 1920); // 48000采样率可以在重采样是整除3if (r) {r AudioCapture-StartStream();if (!r) {GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT(StartStream return false));}}else {GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT(OpenAudioCaptureStream return false));}bRecording r;}return IsRecording(); } void UFxAudioCaptureComponent::StopRecord() {if (bRecording AudioCapture.IsValid()){AudioCapture-StopStream();AudioCapture-CloseStream();}bRecording false; }void UFxAudioCaptureComponent::OnAudioCapture(const void* InAudio, int32 NumFrames, int32 NumChannels, int32 SampleRate, double StreamTime, bool bOverFlow) {// GEngine-AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(OnAudioCapture - %d,%d,%d,%f,%d), NumFrames, NumChannels, SampleRate, (float)StreamTime, bOverFlow ? 1 : 0));// 按照16Khz和Mono重采样数据TArrayfloat data ResampleAndConvert16KHzMono16Bit(static_castconst float*(InAudio), NumFrames, NumChannels, SampleRate);// 计算强度float total 0;for (float val : data) {total FMath::Abs(val);}Intensity total / (float)(data.Num());// 拷贝数据Mutex.Lock();m_audioData.Append(data.GetData(), data.Num());Mutex.Unlock(); }bool UFxAudioCaptureComponent::IsRecording() {if (!AudioCapture.IsValid()) {return false;}if (!bRecording) {return false;}if (!AudioCapture-IsCapturing()) {return false;}return true; } TArrayfloat UFxAudioCaptureComponent::ResampleAndConvert16KHzMono16Bit(const float* inputData, int inputNumSamples, int inputChannels, int inputSampleRate) {int targetSampleRate 16000;// 计算重采样的步长double resampleRate static_castdouble(inputSampleRate) / targetSampleRate;// 临时存储单声道数据std::vectorfloat monoSamples;int id 0;for (int i 0; i inputNumSamples; i) {float sampleValue 0;// 如果是多声道转换为单声道if (inputChannels 1) {float monoValue 0;for (int j 0; j inputChannels; j) {monoValue inputData[id];}// 取平均值以避免溢出sampleValue monoValue / inputChannels;}else {sampleValue inputData[id];}monoSamples.push_back(sampleValue);}// 重采样TArrayfloat resampledSamples;int targetNumSamples static_castint(inputNumSamples / resampleRate);for (int i 0; i targetNumSamples; i) {double srcIndex i * resampleRate;int srcIndexInt static_castint(srcIndex);double frac srcIndex - srcIndexInt;// 线性插值float sample1 monoSamples[srcIndexInt];float sample2 monoSamples[std::min(srcIndexInt 1, inputNumSamples - 1)];float resampledValue (1.0 - frac) * sample1 frac * sample2;resampledSamples.Push(resampledValue);}return resampledSamples; }
http://www.w-s-a.com/news/901390/

相关文章:

  • 阳泉软件定制网站建设网站可以做多语言的吗
  • 建设网站的目的及功能定位主要包括哪些内容百度关键词优化
  • 开一个小程序要多少钱宁波seo网络推广外包报价
  • 网站备案最新备案号电子商务网站建设的规章制度
  • wordpress制作单页网站导航页面鞍山信息港招聘信息
  • 屏蔽ip地址访问网站自己做衣服的网站
  • 网站建设 域名业务 邮箱哪里有网站建设中心
  • 免费网站赚钱重庆建设摩托车股份有限公司
  • 合肥水运建设工程监理网站自己买服务器能在wordpress建网站
  • wordpress积分商城主题整站seo排名要多少钱
  • 鲜花网站建设的利息分析网站设计与制作专业
  • 深圳网站建设排名做网站的公司高创
  • 杭州哪家做外贸网站全国物流网站有哪些平台
  • 企业网站建设个人博客鞍山晟宇网站建设
  • 广东省自然资源厅网站h5移动端网站模板下载
  • 网站建设和安全管理制度云南九泰建设工程有限公司官方网站
  • 网站的关键词和描述做外贸家纺资料网站
  • 绥化市建设工程网站招投标地址链接怎么生成
  • 网站制作设计发展前景网页链接制作生成二维码
  • 廊坊哪里有制作手机网站的企业网站建设费用财务处理
  • 手机网站建设书籍工商咨询服务
  • 麻花星空影视传媒制作公司网站美食网站网站建设定位
  • 网站的切图是谁来做学会网站 建设
  • 交通局网站建设方案答辩ppt模板免费下载 素材
  • 个人摄影网站推介网手机版
  • 有哪些免费的视频网站网站开发和竞价
  • 学校网站如何做广州商城型网站建设
  • 微网站建设哪家便宜易优建站系统
  • 推荐做木工的视频网站毕业设计做的网站抄袭
  • 网站导航页面制作wordpress调用文章阅读量