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"

Office Holiday

Epic Games' offices will be on holiday from June 22nd to July 7th. During this period support will be limited. Our offices will reopen on Monday, July 8th. 

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
435 16 16 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
Viewable by all users

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