コード例 #1
0
        public CarenResult PararCapturaDados()
        {
            //Variavel que vai retornar o resultado.
            CarenResult Resultado = new CarenResult(ResultCode.ER_FAIL, false);

            //Define para parar de capturar os dados.
            StatusCapturandoDados = false;

            //Aguarda um tempo até todos os dados tiverem sido escritos.
            while (Task_ReadDataDispositivo.Status == TaskStatus.Running)
            {
                WinFuncs.SleepNativo(100);
            }

            //Chama o método para parar o dispositivo de captura.
            Resultado = myCaptureAudio.AudioClientConfig.Stop();

            //Verifica se obteve sucesso
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //A operação falhou.

                //Mostra uma mensagem de erro.
                ShowMensagem(
                    "Ocorreu uma falha ao pedir ao dispostivo de captura que parasse. Mensagem de erro -> "
                    + Resultado.ObterMensagem((int)Resultado.HResult), true);

                //Sai do método
                goto Done;
            }

            //Aguarda o escritor de dados terminar de escrever todos os dados.
            while (ListaBuffersAudio.Count != 0)
            {
                WinFuncs.SleepNativo(100);
            }

            //Define para parar de escrveer dados.
            StatusGeral         = false;
            StatusEscritorDados = false;

            //Faz um delay
            WinFuncs.SleepNativo(500);

            //Chama o método para finalizar a criação do arquivo.
            Resultado = FinalizarArquivoWav();

            //Verifica se obteve sucesso
            if (Resultado.StatusCode != ResultCode.SS_OK)
            {
                //A operação falhou.

                //Mostra uma mensagem de erro.
                ShowMensagem(
                    "Ocorreu uma falha ao terminar de definir os dados do header do arquivo final. Mensagem de erro -> "
                    + Resultado.ObterMensagem((int)Resultado.HResult), true);

                //Sai do método
                goto Done;
            }

            //Define sucesso na operação.
            Resultado.AdicionarCodigo(ResultCode.SS_OK, true);

            //Reverte todas as informações.
            WinFuncs._AvRevertMmThreadCharacteristics(myCaptureAudio.HandleTaskPrioridade);
            WinFuncs._TimeEndPeriod(5);

            Done :;

            //Retorna o resultado.
            return(Resultado);
        }