{"id":28860,"date":"2021-06-02T11:51:00","date_gmt":"2021-06-02T08:51:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28860"},"modified":"2021-10-17T16:31:27","modified_gmt":"2021-10-17T13:31:27","slug":"conversion-de-voz-a-texto-con-amazon-transcribe-en-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/conversion-de-voz-a-texto-con-amazon-transcribe-en-php\/","title":{"rendered":"Conversi\u00f3n de voz a texto con Amazon Transcribe en PHP"},"content":{"rendered":"<p>Recientemente, estaba trabajando en un proyecto en el que me presentaron el servicio <a href=\"https:\/\/aws.amazon.com\/transcribe\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Transcribe<\/a>. Quer\u00edamos agregar la funci\u00f3n de convertir voz en texto en nuestra aplicaci\u00f3n. Y descubrimos que Amazon Transcribe es la mejor opci\u00f3n. Amazon Transcribe utiliza un proceso de aprendizaje profundo llamado reconocimiento autom\u00e1tico de voz (ASR) para convertir la voz en texto de forma r\u00e1pida y precisa.<\/p>\n<p>En este art\u00edculo, le muestro c\u00f3mo convertir voz en texto usando Amazon Transcribe en PHP. Usaremos el paquete AWS SDK oficial creado para la programaci\u00f3n PHP.<\/p>\n<h3>Empezando<\/h3>\n<p>Para comenzar, debe tener una <a href=\"https:\/\/aws.amazon.com\/console\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cuenta de AWS<\/a>. Inicie sesi\u00f3n en su cuenta de AWS y obtenga sus credenciales de seguridad. Necesitaremos estas credenciales en la parte posterior del tutorial.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" alt=\"Conversi\u00f3n de voz a texto con Amazon Transcribe en PHP\" ><\/a><\/p>\n<p>Despu\u00e9s de esto, instale la biblioteca <a href=\"https:\/\/github.com\/aws\/aws-sdk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP de AWS SDK<\/a> con el comando Composer:<\/p>\n<pre><code>composer require aws\/aws-sdk-php<\/code><\/pre>\n<p>Para convertir el discurso en texto, necesita que sus archivos multimedia est\u00e9n listos. Los formatos de medios permitidos son <code>mp3 | mp4 | wav | flac<\/code>. Adem\u00e1s de esto, hay varios idiomas disponibles para convertir su discurso en texto. Puede ver todos los idiomas admitidos y aspectos b\u00e1sicos sobre los par\u00e1metros en su <a href=\"https:\/\/docs.aws.amazon.com\/transcribe\/latest\/dg\/API_StartTranscriptionJob.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentaci\u00f3n<\/a>. El usuario puede convertir el habla de los idiomas admitidos en texto.<\/p>\n<p>Al integrar Amazon Transcribe en la aplicaci\u00f3n, tenemos que construir el flujo de la siguiente manera:<\/p>\n<ul>\n<li>Cargue el archivo multimedia en S3 Bucket.<\/li>\n<li>Cree una instancia de un cliente de Amazon Transcribe.<\/li>\n<li>Inicie un trabajo de transcripci\u00f3n de Amazon Transcribe pasando la URL de medios de S3 y una identificaci\u00f3n de trabajo \u00fanica.<\/li>\n<li>El servicio Amazon Transcribe puede tardar unos minutos en finalizar el proceso de traducci\u00f3n. As\u00ed que esp\u00e9ralo.<\/li>\n<li>Descargue el archivo de texto despu\u00e9s de que AWS complete el trabajo de transcripci\u00f3n.<\/li>\n<\/ul>\n<p>Veamos c\u00f3mo manejar este flujo con el c\u00f3digo PHP real.<\/p>\n<h3>Conversi\u00f3n de voz a texto con Amazon Transcribe en PHP<\/h3>\n<p>Al principio, cree un formulario HTML donde los usuarios puedan navegar por el archivo multimedia y presionar el bot\u00f3n enviar. Una vez enviado, tomamos el archivo multimedia para su procesamiento posterior y finalmente enviamos un texto de traducci\u00f3n al navegador en formato de archivo &#8216;.txt&#8217;.<\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"audio\" accept=\"audio\/*,video\/*\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>En el extremo de PHP, debe enviar el archivo multimedia al servicio de AWS para su procesamiento, por lo que debe incluir el entorno de AWS de la siguiente manera.<\/p>\n<pre><code>&lt;?php\nrequire 'vendor\/autoload.php';\n\u00a0\u00a0\nuse AwsS3S3Client;\nuse AwsTranscribeServiceTranscribeServiceClient;\n\u00a0\n\/\/ submission code<\/code><\/pre>\n<p>Despu\u00e9s de esto, cargue el archivo multimedia en el dep\u00f3sito de S3. Y tome la URL de S3 de los medios cargados.<\/p>\n<pre><code>if (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_mime_types = ['audio\/wav', 'audio\/mpeg', 'video\/mp4', 'audio\/x-flac'];\n\u00a0\u00a0\u00a0\u00a0if (!in_array($_FILES['audio']['type'], $arr_mime_types)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die('File type is not allowed');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$region = 'PASS_REGION';\n\u00a0\u00a0\u00a0\u00a0$access_key = 'ACCESS_KEY';\n\u00a0\u00a0\u00a0\u00a0$secret_access_key = 'SECRET_ACCESS_KEY';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Instantiate an Amazon S3 client.\n\u00a0\u00a0\u00a0\u00a0$s3 = new S3Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region'\u00a0 =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$bucketName = 'PASS_BUCKET_NAME';\n\u00a0\u00a0\u00a0\u00a0$key = basename($_FILES['audio']['name']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ upload file on S3 Bucket\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $s3-&gt;putObject([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Bucket' =&gt; $bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Key'\u00a0\u00a0\u00a0 =&gt; $key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Body'\u00a0\u00a0 =&gt; fopen($_FILES['audio']['tmp_name'], 'r'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ACL'\u00a0\u00a0\u00a0 =&gt; 'public-read',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$audio_url = $result-&gt;get('ObjectURL');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Amazon Transcribe service start here\n\u00a0\u00a0\u00a0\u00a0}\u00a0 catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Aseg\u00farese de reemplazar los marcadores de posici\u00f3n con los valores reales. A continuaci\u00f3n, debemos pasar la URL de los medios cargados al servicio Amazon Transcribe. Tambi\u00e9n requiere una identificaci\u00f3n de trabajo \u00fanica que crear\u00e9 usando el <code>uniqid()<\/code>m\u00e9todo.<\/p>\n<pre><code>\/\/ Create Amazon Transcribe Client\n$awsTranscribeClient = new TranscribeServiceClient([\n\u00a0\u00a0\u00a0\u00a0'region' =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n\/\/ Start a Transcription Job\n$job_id = uniqid();\n$transcriptionResult = $awsTranscribeClient-&gt;startTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'LanguageCode' =&gt; 'en-US',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Media' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'MediaFileUri' =&gt; $audio_url,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id,\n]);\n\u00a0\n$status = array();\nwhile(true) {\n\u00a0\u00a0\u00a0\u00a0$status = $awsTranscribeClient-&gt;getTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($status-&gt;get('TranscriptionJob')['TranscriptionJobStatus'] == 'COMPLETED') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0sleep(5);\n}\n\u00a0\n\/\/ download the txt file<\/code><\/pre>\n<p>En el c\u00f3digo anterior, creamos una instancia de Amazon Transcribe Client e iniciamos el trabajo de Transcripci\u00f3n. Es posible que el proceso de traducci\u00f3n demore unos minutos. Lo he manejado usando el m\u00e9todo while loop y sleep(). Estoy verificando si el proceso se completa despu\u00e9s de cada 5 segundos y rompiendo el ciclo al finalizar el proceso.<\/p>\n<p>Puede ver este proceso de transcripci\u00f3n en el panel de AWS en <strong>Amazon Transcribe-&gt; Trabajos de transcripci\u00f3n<\/strong> como se muestra en la captura de pantalla a continuaci\u00f3n.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20376-6081e7c8394ba.png\" alt=\"Conversi\u00f3n de voz a texto con Amazon Transcribe en PHP\" ><\/a><\/p>\n<p>Finalmente, descargue el archivo usando el siguiente c\u00f3digo.<\/p>\n<pre><code>$url = $status-&gt;get('TranscriptionJob')['Transcript']['TranscriptFileUri'];\n$curl = curl_init();\ncurl_setopt($curl, CURLOPT_URL, $url);\ncurl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($curl, CURLOPT_HEADER, false);\n$data = curl_exec($curl);\nif (curl_errno($curl)) {\n\u00a0\u00a0\u00a0\u00a0$error_msg = curl_error($curl);\n\u00a0\u00a0\u00a0\u00a0echo $error_msg;\n}\ncurl_close($curl);\n$arr_data = json_decode($data);\n\u00a0\n\/\/ download a file\n$file = $job_id.\".txt\";\n$txt = fopen($file, \"w\") or die(\"Unable to open file!\");\nfwrite($txt, $arr_data-&gt;results-&gt;transcripts[0]-&gt;transcript);\nfclose($txt);\n\u00a0\nheader('Content-Description: File Transfer');\nheader('Content-Disposition: attachment; filename='.basename($file));\nheader('Expires: 0');\nheader('Cache-Control: must-revalidate');\nheader('Pragma: public');\nheader('Content-Length: '. filesize($file));\nheader(\"Content-Type: text\/plain\");\nreadfile($file);\nexit();<\/code><\/pre>\n<p>Este c\u00f3digo env\u00eda el archivo de texto generado al navegador para que el usuario pueda descargarlo.<\/p>\n<h3>C\u00f3digo de muestra final<\/h3>\n<p>El c\u00f3digo escrito arriba est\u00e1 en trozos. Si desea un c\u00f3digo completo junto, entonces es el siguiente.<\/p>\n<pre><code>&lt;?php\nset_time_limit(0);\n\u00a0\nrequire 'vendor\/autoload.php';\n\u00a0\u00a0\nuse AwsS3S3Client;\nuse AwsTranscribeServiceTranscribeServiceClient;\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_mime_types = ['audio\/wav', 'audio\/mpeg', 'video\/mp4', 'audio\/x-flac'];\n\u00a0\u00a0\u00a0\u00a0if (!in_array($_FILES['audio']['type'], $arr_mime_types)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0die('File type is not allowed');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$region = 'PASS_REGION';\n\u00a0\u00a0\u00a0\u00a0$access_key = 'ACCESS_KEY';\n\u00a0\u00a0\u00a0\u00a0$secret_access_key = 'SECRET_ACCESS_KEY';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Instantiate an Amazon S3 client.\n\u00a0\u00a0\u00a0\u00a0$s3 = new S3Client([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region'\u00a0 =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$bucketName = 'PASS_BUCKET_NAME';\n\u00a0\u00a0\u00a0\u00a0$key = basename($_FILES['audio']['name']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ upload file on S3 Bucket\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$result = $s3-&gt;putObject([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Bucket' =&gt; $bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Key'\u00a0\u00a0\u00a0 =&gt; $key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Body'\u00a0\u00a0 =&gt; fopen($_FILES['audio']['tmp_name'], 'r'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ACL'\u00a0\u00a0\u00a0 =&gt; 'public-read',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$audio_url = $result-&gt;get('ObjectURL');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Create Amazon Transcribe Client\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$awsTranscribeClient = new TranscribeServiceClient([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region' =&gt; $region,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'version' =&gt; 'latest',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'credentials' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key'\u00a0\u00a0\u00a0 =&gt; $access_key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; $secret_access_key\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Start a Transcription Job\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$job_id = uniqid();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$transcriptionResult = $awsTranscribeClient-&gt;startTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'LanguageCode' =&gt; 'en-US',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Media' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'MediaFileUri' =&gt; $audio_url,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$status = array();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0while(true) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$status = $awsTranscribeClient-&gt;getTranscriptionJob([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'TranscriptionJobName' =&gt; $job_id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($status-&gt;get('TranscriptionJob')['TranscriptionJobStatus'] == 'COMPLETED') {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sleep(5);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$url = $status-&gt;get('TranscriptionJob')['Transcript']['TranscriptFileUri'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$curl = curl_init();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt($curl, CURLOPT_URL, $url);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt($curl, CURLOPT_HEADER, false);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = curl_exec($curl);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (curl_errno($curl)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$error_msg = curl_error($curl);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $error_msg;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_close($curl);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_data = json_decode($data);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ download a file\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$file = $job_id.\".txt\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$txt = fopen($file, \"w\") or die(\"Unable to open file!\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fwrite($txt, $arr_data-&gt;results-&gt;transcripts[0]-&gt;transcript);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fclose($txt);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Content-Description: File Transfer');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Content-Disposition: attachment; filename='.basename($file));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Expires: 0');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Cache-Control: must-revalidate');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Pragma: public');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header('Content-Length: '. filesize($file));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0header(\"Content-Type: text\/plain\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0readfile($file);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit();\n\u00a0\u00a0\u00a0\u00a0}\u00a0 catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;\n&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"audio\" accept=\"audio\/*,video\/*\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Submit\" \/&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Espero que comprenda c\u00f3mo convertir voz en texto usando Amazon Transcribe en PHP. Comparta sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/conversion-de-texto-a-voz-con-amazon-polly-en-php\/\" title=\"Conversi\u00f3n de texto a voz con Amazon Polly en PHP\">Conversi\u00f3n de texto a voz con Amazon Polly en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/cargar-archivos-en-amazon-s3-mediante-aws-php-sdk\/\" title=\"Cargar archivos en Amazon S3 mediante AWS PHP SDK\">Cargar archivos en Amazon S3 mediante AWS PHP SDK<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-cargar-un-archivo-a-s3-usando-el-sistema-de-archivos-laravel\/\" title=\"C\u00f3mo cargar un archivo a S3 usando el sistema de archivos Laravel\">C\u00f3mo cargar un archivo a S3 usando el sistema de archivos Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQuiere convertir voz en texto usando Amazon Transcribe en PHP? Amazon Transcribe utiliza un proceso de aprendizaje profundo llamado voz autom\u00e1tica<\/p>\n","protected":false},"author":1,"featured_media":21623,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[271],"tags":[849],"class_list":["post-28860","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=28860"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28860\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21623"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=28860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}