x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

IVoiceCapture Get data return 0 on android , while capturing state is OK

With regard to this Bug UE-58340 , not sure if its related or not, but on Hawuii G8 , IVoiceCapture->GetCaptureState() return 0 and in the same time VoiceCapture>IsCapturing() is returing true , no errors from states at all, while on other devices works fine. I even tested it on another Hawuii G8 device with the same results , is it a low level bug inside engine related to hardware or what ?

I hope to get any answers from Community.

I was sure 100% from all permissions and .ini settings.

Here is my HeaderFile .

 // Fill out your copyright notice in the Description page of Project Settings.
 
 #pragma once
 
 #include "CoreMinimal.h"
 #include "Components/ActorComponent.h"
 
 #include "Runtime/Online/Voice/Public/VoiceModule.h"
 #include "VolumeCapture.generated.h"
 
 
 UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
 class MYPROJECT2_API UVolumeCapture : public UActorComponent
 {
     GENERATED_BODY()
 
 public:    
     // Sets default values for this component's properties
     UVolumeCapture();
 
 protected:
     // Called when the game starts
     virtual void BeginPlay() override;
 
 public:    
     // Called every frame
     virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
     TSharedPtr<IVoiceCapture> VoiceCapture_V;    
     uint32 VoiceCaptureBytesAvailable;
     TArray<uint8> VoiceCaptureBuffer;
     UPROPERTY(EditAnywhere, BlueprintReadWrite)
         float VoiceCaptureVolume;
 };

And here is my CPP file

 // Fill out your copyright notice in the Description page of Project Settings.
 
 #include "VolumeCapture.h"
 #include "Platform.h"
 
 
 
 // Sets default values for this component's properties
 UVolumeCapture::UVolumeCapture()
 {
     // Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features
     // off to improve performance if you don't need them.
     PrimaryComponentTick.bCanEverTick = true;
 
     // ...
 }
 
 
 // Called when the game starts
 void UVolumeCapture::BeginPlay()
 {
     Super::BeginPlay();
     VoiceCapture_V = FVoiceModule::Get().CreateVoiceCapture();
 
     bool Success = VoiceCapture_V.IsValid(); //VoiceCapture->Start();
     if (Success)
     {
         VoiceCapture_V->Start();
         UE_LOG(LogTemp, Warning, TEXT("Voice capture started successfully"));
         GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, "Voice capture started successfully");
     }
     else
     {
         UE_LOG(LogTemp, Warning, TEXT("Voice capture not started successfully"));
         GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, "Voice capture starting failed");
     }
 }
 
 
 // Called every frame
 void UVolumeCapture::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
 {
     Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
     if (!VoiceCapture_V.IsValid())
     {
         UE_LOG(LogTemp, Warning, TEXT("Voice capture is not valid; skipping the rest of voice capture tick"));
         //GEngine->AddOnScreenDebugMessage(-1, 0.1f, FColor::Red, "Voice Capture is not valid");
         return;
     }
     else
     {
         //GEngine->AddOnScreenDebugMessage(-1, 0.1f, FColor::Green, "valid");
     }
     if (VoiceCapture_V->IsCapturing())
         GEngine->AddOnScreenDebugMessage(-1, 0.05f, FColor::Black, "Capturing data right now");
     else
         GEngine->AddOnScreenDebugMessage(-1, 0.05f, FColor::Black, "Not Capturing");
 
     
     
     EVoiceCaptureState::Type CaptureState = VoiceCapture_V->GetCaptureState(VoiceCaptureBytesAvailable);    
 
     UE_LOG(LogTemp, Warning, TEXT("Bytes available: %d\nCapture state: %s"), VoiceCaptureBytesAvailable, EVoiceCaptureState::ToString(CaptureState));
 
     FString NewString = FString::FromInt(VoiceCaptureBytesAvailable);
     GEngine->AddOnScreenDebugMessage(-1, 0.05f, FColor::Black, NewString);
     VoiceCaptureBuffer.Reset();
     
     if (CaptureState == EVoiceCaptureState::Ok && VoiceCaptureBytesAvailable > 0)
     {
         int16_t VoiceCaptureSample;
         uint32 VoiceCaptureReadBytes;
         float VoiceCaptureTotalSquared = 0;
 
         VoiceCaptureBuffer.SetNumUninitialized(VoiceCaptureBytesAvailable);
 
         VoiceCapture_V->GetVoiceData(VoiceCaptureBuffer.GetData(), VoiceCaptureBytesAvailable, VoiceCaptureReadBytes);
 
         for (int i = 0; i < VoiceCaptureBuffer.Num() / 2; i++)
         {
             VoiceCaptureSample = VoiceCaptureBuffer[i];  //(VoiceCaptureBuffer[i] << 8) | VoiceCaptureBuffer[i];
             VoiceCaptureTotalSquared += ((float)VoiceCaptureSample * (float)VoiceCaptureSample);
         }
 
         float VoiceCaptureMeanSquare = (2 * (VoiceCaptureTotalSquared / VoiceCaptureBuffer.Num()));
         float VoiceCaptureRms = FMath::Sqrt(VoiceCaptureMeanSquare);
         float VoiceCaptureFinalVolume = ((VoiceCaptureMeanSquare / 32768.0) * 20.f);
 
         VoiceCaptureVolume = VoiceCaptureFinalVolume;
 
         GEngine->AddOnScreenDebugMessage(-1, 0.05f, FColor::Blue, FString::Printf(TEXT("VoiceCaptureVolume: %f"), VoiceCaptureVolume));
     }
 
     if (CaptureState == EVoiceCaptureState::Error)
     {
         GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Emerald, "ERROR");
     }
     if (CaptureState == EVoiceCaptureState::NoData)
     {
         GEngine->AddOnScreenDebugMessage(-1, 0.05f, FColor::Emerald, "NoData");
     }
     if (CaptureState == EVoiceCaptureState::NotCapturing)
     {
         GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Emerald, "NotCapturing");
     }
     if (CaptureState == EVoiceCaptureState::UnInitialized)
     {
         GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Emerald, "UnInitialized");
     }
     if (CaptureState == EVoiceCaptureState::Stopping)
     {
         GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Emerald, "Stopping");
     }
     if (CaptureState == EVoiceCaptureState::BufferTooSmall)
     {
         GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Emerald, "BufferTooSmall");
     }
 }    
 
 
 


Product Version: UE 4.19
Tags:
more ▼

asked Jun 25 '18 at 11:00 PM in C++ Programming

avatar image

Omar Vector
425 16 15 29

avatar image Omar Vector Jun 26 '18 at 08:09 PM

I really need help in that please

avatar image Omar Vector Jun 27 '18 at 01:26 PM

UP, I need serious help plz

avatar image Omar Vector Jul 02 '18 at 03:51 AM

Help plz, how I suppose to solve this

avatar image Omar Vector Jul 05 '18 at 03:08 AM

up, I need help plz

avatar image Omar Vector Jul 21 '18 at 12:25 PM

UP :( , I need help

avatar image Omar Vector Jul 24 '18 at 07:03 PM

UP ,need help in this

(comments are locked)
10|2000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

Up to 5 attachments (including images) can be used with a maximum of 5.2 MB each and 5.2 MB total.

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question