PythonでAzure OpenAI Realtime APIを試す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/a88565ce-20c6-fb32-b980-ff4a1df2ef27.png)
作成日：2024年11月24日(日)
更新日：2024年11月30日(土)

## １．はじめに

OpenAIが2024年5月13日(月)の「Spring Update」で発表(*1)した「Advanced Voice Mode」は、感情表現、会話のスムーズさ、そしてカットイン（会話の割り込み）機能において、素晴らしい技術革新を実現しました。
発表から4ヶ月ほどの沈黙期間を経て、これらの技術が「ChatGPT Plus」の「Advanced Voice Mode」として商用サービスで提供されたことは、大きな前進だと考えています。

生成AI関連の調査をしていると、このような革新的な技術を実際に試してみたくなります。企業向けのサービス提供においては、機密性を重視するお客様のニーズに応えるため、専用線接続のAzure OpenAIでの実装が最適な選択肢です。とりわけ、開発者に広く親しまれているPythonで実装されたものを動かしてみたいところです。

そこで、時間は経ってしまいましたが、2024年10月1日(火)からGitHubで公開されている[Azure-Samples/aoai-realtime-audio-sdk](https://github.com/Azure-Samples/aoai-realtime-audio-sdk)のサンプルソースを動かしてみたいと思います。

(*1) [5月13日 OpenAI が ChatGPTアップデートを発表！イベント内容のまとめ](https://www.ragate.co.jp/blog/articles/20977)

https://www.ragate.co.jp/blog/articles/20977


## ２．aoai-realtime-audio-sdkとは

aoai-realtime-audio-sdkは、Azure OpenAIのリアルタイム音声機能を活用する.NET、Java、JavaScript、Python用のSDKです。音声入力のストリーミング処理、テキスト生成、音声合成を一連のフローとして実現し、特に低レイテンシーでのリアルタイム音声処理を特徴としています。このSDKは、Microsoftが2024年10月1日（火）に公開した Azure OpenAI ServiceのGPT-4 Realtime APIを活用するためのサンプルコードとライブラリのセットです。リアルタイムの音声入出力に対応しており、カスタマーサポート、音声アシスタント、リアルタイム翻訳などの用途に最適です。MITライセンスで提供されています。

※AOAI: Microsoft社内でAzure OpenAIを略す際に一般的に使用される略称

https://github.com/Azure-Samples/aoai-realtime-audio-sdk


## ３．利用するモデル

Azure OpenAI Realtime APIは2024年11月24日(日)時点で、米国東部 2（East US2）とスウェーデン中部（Sweden Central）の[2つのリージョンでのみ提供](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models?tabs=python-secure%2Cglobal-standard%2Cstandard-chat-completions#gpt-4o-realtime-preview)されています。

外為法（外国為替及び外国貿易法）のリスト規制やEAR（Export Administration Regulations）に基づく輸出国規制を気にされている方もいらっしゃるかもしれませんが、残念ながら、gpt-4o-realtime-previewモデルはグローバル標準リージョンでのみ提供されています。

最近のOpenAIの言語モデルはサーバ設置リージョンと推論モデル実行リージョンという考え方があり、gpt-4o-realtime-previewモデルのサーバは米国東部 2（East US2）とスウェーデン中部（Sweden Central）のみ、さらに生成AIが推論を実行するリージョンがデプロイの種類で決まります。そして推論を実行するリージョンは「グローバル標準」しか選択できません。
したがって、**推論モデルの実行地域を正確に特定することはできません**（おそらく米国またはスウェーデンと推測されます）。

| No | リージョン（サーバーが設置されるリージョン） | デプロイの種類(標準) | デプロイの種類(グローバル標準) |
| --- | --- | --- | --- |
| 1 | 米国東部 2（East US2） | × | ○ |
| 2 | スウェーデン中部（Sweden Central） | × | ○ |

https://learn.microsoft.com/en-us/azure/ai-services/openai/realtime-audio-quickstart?pivots=ai-foundry-portal

![aoai_models.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/244903a4-2c50-5703-7518-0f6405b97979.png)

![aoai_models_deployment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/ab90fc71-614e-9cb2-57be-a872e2be34e3.png)

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/realtime-audio-quickstart?pivots=programming-language-ai-studio

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models?tabs=python-secure%2Cglobal-standard%2Cstandard-chat-completions#gpt-4o-realtime-preview

## ４．構築

構築方法は[Azure-Samples/aoai-realtime-audio-sdk/blob/main/python/samples/README.md](https://github.com/Azure-Samples/aoai-realtime-audio-sdk/blob/main/python/samples/README.md)に記載されています。

https://github.com/Azure-Samples/aoai-realtime-audio-sdk/blob/main/python/samples/README.md

**①aoai-realtime-audio-sdkのデプロイ**

デプロイに私はTortoise Gitを使用しました。

![aoai_sdk_clone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/fca27ab0-f761-ffd0-5422-2e53a73f11b2.png)

![aoai_sdk_clone_finish.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3764962/5cce2e59-c333-c765-1794-1f9186fff6d9.png)

**②仮想環境の構築**

aoai-realtime-audio-sdk\python\samplesフォルダにて、Python標準の仮想環境を構築します。
Python-3.11.9を使用して仮想環境を構築しました。
次の工程で依存関係のあるパッケージをインストールする際にbashまたはPowerShellが必要となるため、PowerShellで作業を進めました。

```
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows

PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> venv\Scripts\activate.ps1
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python -V
Python 3.11.9
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>

```

**③依存関係パッケージのダウンロード**

サンプルプログラムのパッケージ依存関係の解決には**download-wheel.ps1**と**pip install -r requirements.txt**、**pip install rtclient-0.5.1-py3-none-any.whl**の３つのコマンドを実行します。
※rtclient-0.5.1-py3-none-any.whlについてはなぜrequirements.txtに入れなかったのかと突っ込みたくなりますが、まぁ、[Azure-Samples/aoai-realtime-audio-sdk/blob/main/python/samples/README.md](https://github.com/Azure-Samples/aoai-realtime-audio-sdk/blob/main/python/samples/README.md)に従います。

**download-wheel.ps1の実行**

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> .\download-wheel.ps1
Downloading rtclient-0.5.1-py3-none-any.whl...
Downloaded rtclient-0.5.1-py3-none-any.whl to .\rtclient-0.5.1-py3-none-any.whl
All artifacts downloaded successfully.
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

**pip install -r requirements.txtの実行**

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> pip install -r requirements.txt
Collecting python-dotenv (from -r requirements.txt (line 1))
  Using cached python_dotenv-1.0.1-py3-none-any.whl.metadata (23 kB)
Collecting soundfile (from -r requirements.txt (line 2))
  Using cached soundfile-0.12.1-py2.py3-none-win_amd64.whl.metadata (14 kB)
Collecting numpy (from -r requirements.txt (line 3))
  Downloading numpy-2.1.3-cp311-cp311-win_amd64.whl.metadata (60 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.8/60.8 kB 544.1 kB/s eta 0:00:00
Collecting scipy (from -r requirements.txt (line 4))
  Downloading scipy-1.14.1-cp311-cp311-win_amd64.whl.metadata (60 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.8/60.8 kB 3.2 MB/s eta 0:00:00
Collecting cffi>=1.0 (from soundfile->-r requirements.txt (line 2))
  Downloading cffi-1.17.1-cp311-cp311-win_amd64.whl.metadata (1.6 kB)
Collecting pycparser (from cffi>=1.0->soundfile->-r requirements.txt (line 2))
  Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
Using cached python_dotenv-1.0.1-py3-none-any.whl (19 kB)
Using cached soundfile-0.12.1-py2.py3-none-win_amd64.whl (1.0 MB)
Downloading numpy-2.1.3-cp311-cp311-win_amd64.whl (12.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.9/12.9 MB 46.7 MB/s eta 0:00:00
Downloading scipy-1.14.1-cp311-cp311-win_amd64.whl (44.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.8/44.8 MB 31.1 MB/s eta 0:00:00
Downloading cffi-1.17.1-cp311-cp311-win_amd64.whl (181 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 181.4/181.4 kB ? eta 0:00:00
Using cached pycparser-2.22-py3-none-any.whl (117 kB)
Installing collected packages: python-dotenv, pycparser, numpy, scipy, cffi, soundfile
Successfully installed cffi-1.17.1 numpy-2.1.3 pycparser-2.22 python-dotenv-1.0.1 scipy-1.14.1 soundfile-0.12.1

[notice] A new release of pip is available: 24.0 -> 24.3.1
[notice] To update, run: python.exe -m pip install --upgrade pip
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python.exe -m pip install --upgrade pip
Requirement already satisfied: pip in q:\onedrive\git\aoai-realtime-audio-sdk\python\samples\venv\lib\site-packages (24.0)
Collecting pip
  Downloading pip-24.3.1-py3-none-any.whl.metadata (3.7 kB)
Downloading pip-24.3.1-py3-none-any.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 10.5 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 24.0
    Uninstalling pip-24.0:
      Successfully uninstalled pip-24.0
Successfully installed pip-24.3.1
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

**pip install rtclient-0.5.1-py3-none-any.whlの実行**

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> pip install rtclient-0.5.1-py3-none-any.whl
Processing q:\onedrive\git\aoai-realtime-audio-sdk\python\samples\rtclient-0.5.1-py3-none-any.whl
Collecting aiohttp (from rtclient==0.5.1)
  Downloading aiohttp-3.11.7-cp311-cp311-win_amd64.whl.metadata (8.0 kB)
Collecting azure-identity (from rtclient==0.5.1)
  Downloading azure_identity-1.19.0-py3-none-any.whl.metadata (80 kB)

...省略

Downloading PyJWT-2.10.0-py3-none-any.whl (23 kB)
Downloading requests-2.32.3-py3-none-any.whl (64 kB)
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Downloading certifi-2024.8.30-py3-none-any.whl (167 kB)
Downloading charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl (101 kB)
Downloading pywin32-308-cp311-cp311-win_amd64.whl (6.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.6/6.6 MB 79.7 MB/s eta 0:00:00
Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)
Installing collected packages: pywin32, urllib3, typing-extensions, six, PyJWT, propcache, portalocker, multidict, idna, frozenlist, charset-normalizer, certifi, attrs, annotated-types, aiohappyeyeballs, yarl, requests, pydantic-core, cryptography, aiosignal, pydantic, azure-core, aiohttp, msal, msal-extensions, azure-identity, rtclient
Successfully installed PyJWT-2.10.0 aiohappyeyeballs-2.4.3 aiohttp-3.11.7 aiosignal-1.3.1 annotated-types-0.7.0 attrs-24.2.0 azure-core-1.32.0 azure-identity-1.19.0 certifi-2024.8.30 charset-normalizer-3.4.0 cryptography-43.0.3 frozenlist-1.5.0 idna-3.10 msal-1.31.1 msal-extensions-1.2.0 multidict-6.1.0 portalocker-2.10.1 propcache-0.2.0 pydantic-2.10.1 pydantic-core-2.27.1 pywin32-308 requests-2.32.3 rtclient-0.5.1 six-1.16.0 typing-extensions-4.12.2 urllib3-2.2.3 yarl-1.18.0
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

仮想環境を作成する度にpipのアップデートを行うのが面倒な場合は、仮想環境に入る前にget-pip.pyを使用してpip本体をアップデートしておくことをお勧めします。

```
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows

PS Q:\OneDrive\Git> curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
PS Q:\OneDrive\Git>
PS Q:\OneDrive\Git>python get-pip.py
Collecting pip
  Using cached pip-24.3.1-py3-none-any.whl.metadata (3.7 kB)
Collecting wheel
  Downloading wheel-0.45.1-py3-none-any.whl.metadata (2.3 kB)
Using cached pip-24.3.1-py3-none-any.whl (1.8 MB)
Downloading wheel-0.45.1-py3-none-any.whl (72 kB)
Installing collected packages: wheel, pip
  Attempting uninstall: pip
    Found existing installation: pip 24.0
    Uninstalling pip-24.0:
      Successfully uninstalled pip-24.0
Successfully installed pip-24.3.1 wheel-0.45.1

PS Q:\OneDrive\Git>
```

**④環境変数ファイルの設定**

サンプルプロプログラムにAzure OpenAIのエンドポイントやAPIキーを与えるために環境設定ファイルの.envを作成します。
環境変数ファイルはaoai-realtime-audio-sdk\python\samples\development.envにサンプルがありますのでこちらをコピーします。

development.envを.envファイルにコピー

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> cp .\development.env .\.env
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

.envファイルの編集

```
AZURE_OPENAI_ENDPOINT=https://xxxxx.openai.azure.com/
AZURE_OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AZURE_OPENAI_DEPLOYMENT=gpt-4o-realtime-preview
OPENAI_API_KEY=<your-openai-key>
```

※AZURE_OPENAI_ENDPOINT、AZURE_OPENAI_API_KEY、AZURE_OPENAI_DEPLOYMENTは[Azureポータル]⇒[Azure OpenAI Service]⇒<名称＞⇒[リソース管理]⇒[キーとエンドポイント]で確認できます。
AZURE_OPENAI_ENDPOINTのxxxxxはAzure OpenAI Service名です。

## ５．サンプルの実行

aoai-realtime-audio-sdk\python\samplesにはいくつかのサンプルがあります。

| No | サンプルプログラム | 説明 |
| --- | --- | --- |
| 1 | low_level_sample.py | 動作を確認するためのサンプルプログラムのようです。 |
| 2 | client_sample.py | 入力音声に対して応答するサンプルプログラムのようです。 |
| 3 | client_sample_no_vad.py | instructions(システムプロンプトを与えて入力音声に対して応答するサンプルプログラムのようです。 |

①**low_level_sample.py (動作を確認するためのサンプルプログラム)**

　python .\low_level_sample.py .\input\arc-easy-q237-tts.flac azureというコマンドで実行できます。
　モデル名や音声の開始時間、終了時間、会話したログだけが表示されます。

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python .\low_level_sample.py .\input\arc-easy-q237-tts.flac azure
Session Created Message
  Model: gpt-4o-realtime-preview-2024-10-01
  Session Id: sess_AWuN1txqZO7NWa92qtuqy
Unknown Message
Input Audio Buffer Speech Started Message
  Item Id: item_AWuN10AeiLltQR5ggJs3P
  Audio Start [ms]: 96
Input Audio Buffer Speech Stopped Message
  Item Id: item_AWuN10AeiLltQR5ggJs3P
  Audio End [ms]: 800
Input Audio Buffer Committed Message
  Item Id: item_AWuN10AeiLltQR5ggJs3P
Conversation Item Created Message
  Id: item_AWuN10AeiLltQR5ggJs3P
  Previous Id: None
  Role: user
  [0]:
    Content Type: input_audio
  Audio Transcript: None
Response Created Message
  Response Id: resp_AWuN23oTBCIhCl4jRfNFF
  Output Items:
Input Audio Buffer Speech Started Message
  Item Id: item_AWuN2wNRvAarBfBCYp1JY
  Audio Start [ms]: 832
Response Done Message
  Response Id: resp_AWuN23oTBCIhCl4jRfNFF
  Status Details: {"type":"cancelled","reason":"turn_detected"}
```

**②client_sample.py (入力音声に対して応答するサンプルプログラム)**

　このプログラムを以下の引数で実行するとinput\arc-easy-q237-tts.flacというサンプル音声を使ってoutputフォルダに結果を出力します。

　**python .\client_sample.py .\input\arc-easy-q237-tts.flac output/ azure**

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python .\client_sample.py .\input\arc-easy-q237-tts.flac output/ azure
Configuring Session...Done
[response=resp_AWuyG9MGYPuE0njJaVFA0] Response completed (cancelled)
[input_item=item_AWuyFfJtcG1IBR9ZsmSJr] Transcript: Question

[input_item=item_AWuyFfJtcG1IBR9ZsmSJr] Audio Start [ms]: 96
[input_item=item_AWuyFfJtcG1IBR9ZsmSJr] Audio End [ms]: 800
[response=resp_AWuyGfQYojZMfH7O5QT2F] Received item item_AWuyGQ5gbS3mx6RF302sB
[input_item=item_AWuyGKjkuCyHwGSn7vi6Q] Transcript: Which would most help pollinators find flowers that are pollinated at night? Option A, shape. Option B, color. Option C, size. Option D, fragrance.

[input_item=item_AWuyGKjkuCyHwGSn7vi6Q] Audio Start [ms]: 832
[input_item=item_AWuyGKjkuCyHwGSn7vi6Q] Audio End [ms]: 9664
[response=resp_AWuyGfQYojZMfH7O5QT2F][item=item_AWuyGQ5gbS3mx6RF302sB] Audio received with length: 609600
[response=resp_AWuyGfQYojZMfH7O5QT2F][item=item_AWuyGQ5gbS3mx6RF302sB] Audio Transcript: The correct answer is D. Fragrance. Pollinators that are active at night, like moths or bats, rely more on the fragrance of flowers to locate them in the darkness, since visual cues like color are less effective.
[response=resp_AWuyGfQYojZMfH7O5QT2F] Response completed (completed)
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

arc-easy-q237-tts.flacをWhisperで文字起こししたもの(Whisperについての説明は割愛しますが音声ファイルから高精度で文字起こしできるAPIです)

input/arc-easy-q237-tts.flac

https://www.youtube.com/watch?v=PJoLCRVbG9o

```
Question. Which would most help pollinators find flowers that are pollinated at night? Option A, shape. Option B, color. Option C, size. Option D, fragrance.
```

こちらは日本語訳です

```
質問。夜間に受粉する花を花粉媒介者(昆虫)が見つけるのに最も役立つのはどれでしょうか。オプション A は形です。オプション B は色です。オプション C は大きさです。オプション D は香りです。
```


output\item_AWuXyBJXgivyRC17GbQCu_0.audio_transcript.txt

```
The most helpful factor for pollinators finding flowers at night would be option D: fragrance.
Since it's dark, visual cues like shape, color, and size are less useful, so a strong fragrance can guide nocturnal pollinators to the flowers.
```

```
夜間に花を見つける花粉媒介者(昆虫)にとって最も役立つ要素は、オプション D の「香り」です。
暗いため、形、色、大きさなどの視覚的な手がかりはあまり役に立ちません。そのため、強い香りが夜行性の花粉媒介者を花に誘導することができます。
```

output\item_AWuXyBJXgivyRC17GbQCu_0.wav

https://www.youtube.com/watch?v=gtLdn3iZsto

**③client_sample_no_vad.py (instructions(システムプロンプトを与えて入力音声に対して応答するサンプルプログラム)**

instructions(システムプロンプト)を利用して、ちょっとエキサイティングに昆虫の世界を覗くように答えてもらいます。

python .\client_sample_no_vad.py .\input\arc-easy-q237-tts.flac .\test_instructions_for_LMM.txt .\output_no_vad\ azure

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python .\client_sample_no_vad.py .\input\arc-easy-q237-tts.flac .\test_instructions_for_LMM.txt .\output_no_vad\ azure
Configuring Session...Done
[input_item=item_AWvBrghrDwKorXxbWPOSC] Transcript: Question. Which would most help pollinators find flowers that are pollinated at night? Option A, shape. Option B, color. Option C, size. Option D, fragrance.

[input_item=item_AWvBrghrDwKorXxbWPOSC] Audio Start [ms]: None
[input_item=item_AWvBrghrDwKorXxbWPOSC] Audio End [ms]: None
[response=resp_AWvBrOpwRGjYZgWJF5kCu] Received item item_AWvBrPu16mUBjWglKwo02
[response=resp_AWvBrOpwRGjYZgWJF5kCu][item=item_AWvBrPu16mUBjWglKwo02] Audio received with length: 818400
[response=resp_AWvBrOpwRGjYZgWJF5kCu][item=item_AWvBrPu16mUBjWglKwo02] Audio Transcript: Get ready for a fascinating journey into the world of nocturnal pollinators! The most helpful clue for these night-time adventurers is... Option D: Fragrance! Yes, it's the alluring scents that guide these pollinators to their floral treasures in the dark!
[response=resp_AWvBrOpwRGjYZgWJF5kCu] Response completed (completed)
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

 .\test_instructions_for_LMM.txt

```
Please answer in an exciting way assuming that the pollinators are human.
```

日本語訳

```
花粉媒介者が人間であると仮定して、エキサイティングな方法で答えてください。
```

output_no_vad\item_AWvBrPu16mUBjWglKwo02_0.audio_transcript.txt

```
Get ready for a fascinating journey into the world of nocturnal pollinators!
The most helpful clue for these night-time adventurers is...
Option D: Fragrance! Yes, it's the alluring scents that guide these pollinators to their floral treasures in the dark!
```

output_no_vad\item_AWvBrPu16mUBjWglKwo02_0.wav

https://www.youtube.com/watch?v=ke6xIB1n_JI

**サッカー中継のように答えてもらいました。**

python .\client_sample_no_vad.py .\input\arc-easy-q237-tts.flac .\test_instructions_for_LMM_soccer.txt .\output_no_vad\ azure

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python .\client_sample_no_vad.py .\input\arc-easy-q237-tts.flac .\test_instructions_for_LMM_soccer.txt .\output_no_vad\ azure
Configuring Session...Done
[response=resp_AWvPoEQxdPRzxVrX5Cr9r] Received item item_AWvPoKJ5wki2WE5Sffa7I
[input_item=item_AWvPnBe6b9cKjlPPKYqWB] Transcript: Question. Which would most help pollinators find flowers that are pollinated at night? Option A, shape. Option B, color. Option C, size. Option D, fragrance.

[input_item=item_AWvPnBe6b9cKjlPPKYqWB] Audio Start [ms]: None
[input_item=item_AWvPnBe6b9cKjlPPKYqWB] Audio End [ms]: None
[response=resp_AWvPoEQxdPRzxVrX5Cr9r] Response completed (completed)
[response=resp_AWvPoEQxdPRzxVrX5Cr9r][item=item_AWvPoKJ5wki2WE5Sffa7I] Audio received with length: 933600
[response=resp_AWvPoEQxdPRzxVrX5Cr9r][item=item_AWvPoKJ5wki2WE5Sffa7I] Audio Transcript: And it's a thrilling moment as we dive into the question! Which option would most help nocturnal pollinators find flowers? There's the whistle—option D, fragrance, takes the lead! Yes, folks, it's the scent that guides those nighttime pollinators straight to the flowers, securing a vital goal for nature!
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

 .\test_instructions_for_LMM_soccer.txt

```
Answer in an exciting way, just like in a live soccer match.

```

日本語訳

```
サッカー中継のようにエキサイティングな方法で答えてください。
```

output_no_vad\item_AWvPoKJ5wki2WE5Sffa7I_0.audio_transcript.txt

```
And it's a thrilling moment as we dive into the question! Which option would most help nocturnal pollinators find flowers?
There's the whistle—option D, fragrance, takes the lead! Yes, folks, it's the scent that guides those nighttime pollinators straight to the flowers, securing a vital goal for nature!
```

output_no_vad\item_AWvPoKJ5wki2WE5Sffa7I_0.wav

https://www.youtube.com/watch?v=IFu-TDcfks4

日本語でサッカー中継のように答えてもらいました。

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python .\client_sample_no_vad.py .\input\arc-easy-q237-tts.flac .\test_instructions_for_LMM_soccer_ja.txt .\output_no_vad\ azure
Configuring Session...Done
[input_item=item_AWvVLr5RqrmYZKTPMN1PX] Transcript: Question. Which would most help pollinators find flowers that are pollinated at night? Option A, shape. Option B, color. Option C, size. Option D, fragrance.

[input_item=item_AWvVLr5RqrmYZKTPMN1PX] Audio Start [ms]: None
[input_item=item_AWvVLr5RqrmYZKTPMN1PX] Audio End [ms]: None
[response=resp_AWvVL0MLVRwRTjxAWqtvn] Received item item_AWvVLfxICrn0JPXQuZBGE
[response=resp_AWvVL0MLVRwRTjxAWqtvn][item=item_AWvVLfxICrn0JPXQuZBGE] Audio received with length: 1240800
[response=resp_AWvVL0MLVRwRTjxAWqtvn][item=item_AWvVLfxICrn0JPXQuZBGE] Audio Transcript: さあ、試合は最高潮です！夜行性 の花粉媒介者が花を見つけるために最も役立つのはどれでしょうか？果たして、選ぶべきはAの形状か、Bの色か、Cの大きさか、それ ともDの香りか！？注目の答えは…Dの香りです！夜に活動する花粉媒介者たちは、香りによって花を見つけるのです！これは見逃せな いポイントでしたね！
[response=resp_AWvVL0MLVRwRTjxAWqtvn] Response completed (completed)
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

output_no_vad\item_AWvVLfxICrn0JPXQuZBGE_0.audio_transcript.txt

```
さあ、試合は最高潮です！夜行性の花粉媒介者が花を見つけるために最も役立つのはどれでしょうか？
果たして、選ぶべきはAの形状か、Bの色か、Cの大きさか、それともDの香りか！？注目の答えは…Dの香りです！
夜に活動する花粉媒介者たちは、香りによって花を見つけるのです！これは見逃せないポイントでしたね！
```

output_no_vad\item_AWvVLfxICrn0JPXQuZBGE_0.wav

https://www.youtube.com/watch?v=h_y9a_6lH-o

## ６．サンプル実行時ののトラブルシュート

※こちらのエラーが出力された場合は、「pip install rtclient-0.5.1-py3-none-any.whl」を実行しているか確認してください。

```
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples> python .\client_sample.py
Traceback (most recent call last):
  File "Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples\client_sample.py", line 10, in <module>
    from azure.core.credentials import AzureKeyCredential
ModuleNotFoundError: No module named 'azure'
(venv) PS Q:\OneDrive\Git\aoai-realtime-audio-sdk\python\samples>
```

## ７．参考URL

https://github.com/Azure-Samples/aoai-realtime-audio-sdk

https://zenn.dev/headwaters/articles/44d4152b85cac1

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/realtime-audio-quickstart?pivots=programming-language-ai-studio

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models?tabs=python-secure%2Cglobal-standard%2Cstandard-chat-completions#gpt-4o-realtime-preview

https://www.ragate.co.jp/blog/articles/20977

https://learn.microsoft.com/en-us/azure/ai-services/openai/realtime-audio-quickstart?pivots=ai-foundry-portal