【Text to Speech】Azure Cognitive ServiceとPower Platformを連携してみよう

# はじめに
こんにちは！出戻りガツオ🐟です。
AI時代が到来し、ワクワクしますね♬

AIをもっと楽しみたい！という方向けに、
**推しのAzure AI Service**を紹介させてください！

**learn**や**Bing AI**でも調査できる時代かもしれませんが、
とりあえずやりたい！という人向けに **「こうやればいいのか！」** ということに繋がれば何よりです！

# Azure Applied AI Services
Azure Applied AI Servicesは多様です。

 - Azure Bot Service
 - Azure Form Recognizer
 - Azure Cognitive Search
 - Azure Metrics Advisor
 - Azure Video Indexer
 - Azure Immersive Reader
 - Azure Cognitive Services
 - Azure Machine Learning

https://azure.microsoft.com/ja-jp/products/applied-ai-services/

今回ご紹介するのは **「Azure Cognitive Services」**

https://azure.microsoft.com/ja-jp/products/cognitive-services/

現在進行形でPower Appsを作成しており、

 - Text to speech
 - Speech to text
 - Azure OpenAI
 
これを組み合わせた作品にしようと思っています！
作りながら同時に **アウトプット！** ということで経験をシェアしていこうかと！

今回のテーマは**Text to speech**!
**文字から音声を生成する**AI Serviceになります。

# Azure Cognitive Service
Azureのサービスの一つとしてC#やPythonを使った連携も出来ますし、
APIを使った連携も可能。

https://azure.microsoft.com/ja-jp/products/cognitive-services/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/526535fd-056b-e844-1775-c127ec25a4e4.png)

Power AppsでもAI Builderが使えますが、
さらに多くのサービスに拡張することができます。

Azure + Power Platformで可能性は∞！！
**Power Apps** + **Power Automate**で楽しんでいこうと思います！

# 必要なもの
 - Azure サブスクリプション
 - Power Platform 開発環境
 - Azure OpenAIが使える状態になっていること（申請が必要です）
 - ワクワクした気持ち

# Text to speech
今回は「Text to speech」を使って、
**Power AppsでLabelのテキストを読み上げするアプリ**を
作っていきます。

ちょうど今日完成したものがこちら！

https://twitter.com/DemodoriGatsuo/status/1641727412475142144

上記の動画に限らず、音声の設定も色々な種類に変えられます。

例を見るには*Cognitive ServiceのSpeech Studio*が最適です！
どんな音声なのか、などサンプルが聞けたりみれますよ♪

https://speech.microsoft.com/portal

# Azureでリソースを作成する

まずはCognitive Servicesのリソースを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/ecef2562-1c37-7ff3-b0c1-6f8c85e2ad4e.png)
上記のようなマークです。
※Azureのリソースの作成方法などは今回割愛します。

この中で使うサービスは **「音声サービス」(Speech Service)** です。

このリソースを作成することにより、独自のAPIを作成して、
自分好みのAI活用が実現できます。

詳しくは[「AI-900: Microsoft Azure AI Fundamentals」のラーニングパス](https://learn.microsoft.com/ja-jp/certifications/exams/ai-900/)をオススメします。

# Text to speechをPower Automateで使うには
音声サービスがアクティブなので、やることは単純です。
POSTでURIにHTTP要求を発信します。

ヘッダーは

|key|value
|---|---
|Ocp-Apim-Subscription-Key|自分のサブスクリプションキー
|Content-Type|application/ssml+xml
|X-Microsoft-OutputFormat|audio-16khz-128kbitrate-mono-mp3

上記を設定します。

## SSMLとは
Speech Synthesis Markup Languageというマークアップ言語です。
XMLベースマークアップ言語になります。

この言語によって
 - 言葉
 - 性別
 - スピーカーのモデル
を設定することができます。

今回は下記の設定です。

|param|value
|---|---
|language|English US
|Gender|Male
|Model|ChristopherNeural

Modelは **事前構築済みのニューラル音声** です。
驚くほど自然な読み上げを実現することが出来ます。

今回使用しているのは事前構築済みの音声ですが、カスタムモデルも作成ができますので
物凄い技術だなと圧巻です。

ちなみに上記の情報は、Speech Studioの他のモデルにも変えることができます。
詳しくは下記をご参照ください。

https://learn.microsoft.com/ja-jp/azure/cognitive-services/speech-service/get-started-text-to-speech?tabs=windows%2Cterminal&pivots=programming-language-rest

エスケープ文字があり、若干わかりづらいですが、
`lang` `gender` `name`を設定すれば、モデルを変えることがわかります。

# Power Appsの設定
今回はボタンコントロールで、Label1のTextを引数にして、コンテキスト変数に音声データを格納します。
戻り値は`base64`形式なので、オーディオ要素のMediaプロパティは、
数式の先頭に`data:audio/mpeg;base64,`を追加すれば上手く機能します。

```PowerFx:Media
data:audio/mpeg;base64,(戻り値のテキスト)
```

# Power Automateの設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c2521846-2bab-ac5b-9235-2d669f9a35c0.png)

ボタンの`OnSelectプロパティ`にPower Automateを設定します。
Label1のTextをフローに渡します。

## Power Automate
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/83502736-c29c-f8dc-c29f-985238402a75.png)

### HTTPの設定

|config|Value
|---|---
|方法|POST
|URI| https://{Cognitive ServiceのRegion}.tts.speech.microsoft.com/cognitiveservices/v1

Body
```
<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Male'
    name='en-US-ChristopherNeural'>
        @{triggerBody()['text']}
</voice></speak>
```

HTTP要求が成功するとオブジェクト値が返ってくるので`body`の中の`$content`を抽出します。

Power Automateの戻り値は下記の通りとなります。
```
@{body('HTTP')?['$content']}
```

実行することによって`base64`形式の文字列が返ってきます。
私の環境ではフローの完了までとても速いです。

👆に掲載したTwitterの動画で、試しにSteve Jobsの名演説を流してみてください。

凄くクリアに聞こえます。ニューラル音声恐るべしです。

# 今後の展望
今回はText to speechを紹介しましたが、
 - Azure OpenAI
 - Speech to text
にも触れていきます。

検証しているのは、English Reading Appsなので、
AIを叩いて英語学習を楽しんでみる予定です！

今後のQiitaにもご注目ください！

いつかこのネタで登壇するつもりです🐟✨

お読みいただきありがとうございました！