Azure cognitive method is not returning anything

Eduardo Gomez 3,426 Reputation points
2022-10-22T16:37:04.61+00:00

I have a button, that calls a method, to transcribe a WAV into text, the method works and I can see all the text in the output Window.

   public async Task<string?> ConvertToTextAsync(string FilePath, string FileName) {  
     
               List<char> Characers = new();  
     
               StringBuilder builder = new();  
     
               //Configure speech service  
     
               var config = SpeechConfig.FromSubscription  
                   (ConstantsHelpers.AZURE_KEY, ConstantsHelpers.AZURE_REGION);  
     
               config.EnableDictation();  
     
               //Configure speech recognition  
     
               var taskCompleteionSource = new TaskCompletionSource<int>();  
     
               using var audioConfig = AudioConfig.FromWavFileInput(FilePath);  
               if (!string.IsNullOrEmpty(FileName)) {  
                   using var speechRecognizer = new SpeechRecognizer(config, audioConfig);  
     
                   speechRecognizer.Recognized += (sender, e) => {  
                       if (e.Result.Reason == ResultReason.RecognizedSpeech) {  
                           foreach (var item in e.Result.Text) {  
                               Characers.Add(item);  
                           }  
                       }  
                   };  
     
                   speechRecognizer.SessionStarted += (sender, e) => {  
     
                       Debug.WriteLine("--------> started");  
     
                   };  
     
                   speechRecognizer.SessionStopped += (sender, e) => {  
     
                       Debug.WriteLine("-----------> stooped");  
     
                       foreach (var item in Characers) {  
                           builder.Append(item);  
                       }  
     
                       Debug.WriteLine(builder.ToString());  
                   };  
     
                   await speechRecognizer.StartContinuousRecognitionAsync()  
                       .ConfigureAwait(false);  
     
                   Task.WaitAny(new[] { taskCompleteionSource.Task });  
     
                   await speechRecognizer.StopContinuousRecognitionAsync()  
                       .ConfigureAwait(false);  
     
                   return builder.ToString();  
               }  
     
               return null;  
           }  
       }  
   }  

I also have a mechanism, to enable and disable a button, based of if I am Working or not

   public AsyncCommand StartCommand { get; set; }  
     
           private string? _SelectedItem;  
     
           public string SelectedItem {  
               get => _SelectedItem!;  
               set {  
                   if (_SelectedItem != value) {  
                       _SelectedItem = value;  
                       StartCommand.RaiseCanExecuteChanged();  
                   }  
               }  
           }  
     
     
           private bool _IsBusy;  
           public bool IsBusy {  
               get { return _IsBusy; }  
               set {  
                   if (_IsBusy != value) {  
                       _IsBusy = value;  
                       StartCommand.RaiseCanExecuteChanged();  
                   }  
               }  
           }  
     
     
           public AudioPageViewModel() {  
               InitListLanguages();  
               AzureTranscription = new AzureTranscriptionService();  
               DialogHelper = new DialogHelper();  
               FolderHelper = new FolderHelper();  
               AudioHelper = new AudioHelper();  
               CanShow = Visibility.Hidden;  
               PickFileCommad = new Command(PickFileAction);  
               StartCommand = new AsyncCommand(StartAction, CanStartAction);  
           }  
     
           private async Task StartAction() {  
     
               IsBusy = true;  
               CanShow = Visibility.Visible;  
     
               var FileWithoutExtension = Path.GetFileNameWithoutExtension  
                   (FilePath);  
     
               var AudioPath = FolderHelper.CreateFolder(ConstantsHelpers.AUDIO);  
     
               var DocumentPath = FolderHelper.CreateFolder();  
     
               var AudioFileNamePath = Path.Combine(AudioPath, $"{FileWithoutExtension}{ConstantsHelpers.WAV}");  
     
               var ConvertedAudioPath = AudioHelper.Converter(FilePath!, AudioFileNamePath);  
     
               var DocumentName = Path.Combine(DocumentPath, $"{FileWithoutExtension}{ConstantsHelpers.DOCX}");  
     
               var res = await AzureTranscription.ConvertToTextAsync(ConvertedAudioPath,  
                               FileWithoutExtension!);  
     
               if (!string.IsNullOrEmpty(res)) {  
     
     
                   IsBusy = false;  
                   StartCommand.RaiseCanExecuteChanged();  
                   CanShow = Visibility.Hidden;  
               }  

The problem is, the button never gets enabled again after finishing the work, so this must mean that I am failing to return

Update

public async Task ConvertToTextAsync(string FilePath, string FileName, string Lang) {

        List<char> Characers = new();  

        StringBuilder builder = new();  

        var config = SpeechConfig.FromSubscription  
            (ConstantsHelpers.AZURE_KEY, ConstantsHelpers.AZURE_REGION);  

        //Configure speech recognition  

        var taskCompleteionSource = new TaskCompletionSource<int>();  

        using var audioConfig = AudioConfig.FromWavFileInput(FilePath);  
        if (!string.IsNullOrEmpty(FileName)) {  
            using var speechRecognizer = new SpeechRecognizer(config, audioConfig);  

            config.EnableDictation();  
            config.SpeechRecognitionLanguage = Lang;  


            speechRecognizer.Recognized += (sender, e) => {  
                if (e.Result.Reason == ResultReason.RecognizedSpeech) {  
                    foreach (var item in e.Result.Text) {  
                        Characers.Add(item);  
                    }  
                }  
            };  

            speechRecognizer.SessionStarted += (sender, e) => {  

                Debug.WriteLine("-----------> started");  
            };  

            speechRecognizer.SessionStopped += (sender, e) => {  

                Debug.WriteLine("-----------> stooped");  

                foreach (var item in Characers) {  
                    builder.Append(item);  
                }  

                Debug.WriteLine(builder.ToString());  
            };  


            await speechRecognizer.StartContinuousRecognitionAsync()  
                .ConfigureAwait(false);  

            Task.WaitAny(new[] { taskCompleteionSource.Task });  

            await speechRecognizer.StopContinuousRecognitionAsync()  
                .ConfigureAwait(false);  
        }  
    }  
}  

----------------------------------------------------------------

private async Task StartAction() {

        IsBusy = true;  
        CanShow = Visibility.Visible;  

        var FileWithoutExtension = Path.GetFileNameWithoutExtension  
            (FilePath);  

        var AudioPath = FolderHelper.CreateFolder(ConstantsHelpers.AUDIO);  

        var DocumentPath = FolderHelper.CreateFolder();  

        var AudioFileNamePath = Path.Combine(AudioPath, $"{FileWithoutExtension}{ConstantsHelpers.WAV}");  

        var ConvertedAudioPath = AudioHelper.Converter(FilePath!, AudioFileNamePath);  

        var DocumentName = Path.Combine(DocumentPath, $"{FileWithoutExtension}{ConstantsHelpers.DOCX}");  

        await AzureTranscription.ConvertToTextAsync(ConvertedAudioPath,  
                       FileWithoutExtension!, SelectedItem);  

        IsBusy = false;  
        StartCommand.RaiseCanExecuteChanged();  
        CanShow = Visibility.Hidden;  

    }  

But it doesn't re-enable the button

and this is strange, because if I do something like

private async Task StartAction() {

        IsBusy = true;  
        CanShow = Visibility.Visible;  

        var FileWithoutExtension = Path.GetFileNameWithoutExtension  
            (FilePath);  

        var AudioPath = FolderHelper.CreateFolder(ConstantsHelpers.AUDIO);  

        var DocumentPath = FolderHelper.CreateFolder();  

        var AudioFileNamePath = Path.Combine(AudioPath, $"{FileWithoutExtension}{ConstantsHelpers.WAV}");  

        var ConvertedAudioPath = AudioHelper.Converter(FilePath!, AudioFileNamePath);  

        var DocumentName = Path.Combine(DocumentPath, $"{FileWithoutExtension}{ConstantsHelpers.DOCX}");  

        //await AzureTranscription.ConvertToTextAsync(ConvertedAudioPath,  
        //FileWithoutExtension!, SelectedItem);  

        await Task.Delay(5);  

        IsBusy = false;  
        StartCommand.RaiseCanExecuteChanged();  
        CanShow = Visibility.Hidden;  

my button gets enabled after 5 seconds

C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,962 questions
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.