Slide 1

Slide 1 text

実践 Realtime API 〜入力として音声データを扱う〜 技術本部 Eight Engineering Unit 藤門 莉生

Slide 2

Slide 2 text

自己紹介 藤門 莉生(Rio Fujimon) - Sansan株式会社 - 23卒(新卒2年目) - Eight の iOSアプリを開発 - X(旧 Twitter):@RioFujimon - iOS開発で主に興味がある領域 - UIKit, SwiftUI - Bluetooth, NFC, Audio, etc

Slide 3

Slide 3 text

Realtime API https://openai.com/index/introducing-the-realtime-api/

Slide 4

Slide 4 text

Realtime API 紹介 開発者はアプリケーションに 高速な音声合成体験 を組み込めるようになった

Slide 5

Slide 5 text

Realtime API を利用するメリット Whisper 音声を テキストに 書き起こす テキスト 解析モデル 目的の 応答を生成 Realtime API

Slide 6

Slide 6 text

Kanagawa.swift で話した内容 目的の 応答を生成 Realtime API https://speakerdeck.com/riofujimon/realtime-api-ru-men 👇以下でスライドを公開中 👇 Swift で Realtime API を扱う基本を中心に話した

Slide 7

Slide 7 text

本日話す内容 目的の 応答を生成 Realtime API 音声データを Realtime API への入力として扱う方法を話す

Slide 8

Slide 8 text

Realtime API Sample App

Slide 9

Slide 9 text

実装を見ていく 󰳕

Slide 10

Slide 10 text

https://platform.openai.com/docs/guides/realtime#audio-formats

Slide 11

Slide 11 text

💡 要点 - 24kHz, PCM16 の 形式に変換処理を 実施して出力する

Slide 12

Slide 12 text

💡 要点 - AVAudioSession を 設定し、有効化する

Slide 13

Slide 13 text

👀 AVAudioPCMBuffer のプロパティを表示してみる

Slide 14

Slide 14 text

💡 要点 - デフォルトでは、 48kHz, 32 bit の形式 - Int16 の値は、nil

Slide 15

Slide 15 text

💡 要点(⭐⭐⭐) 1. AVAudioFormat で24kHz, 16 bit の形式を 作成する 2. 指定の形式に変換するための Converter を 作成する 3. 形式変換後の AVAudioPCMBuffer を 準備する 4. Converter で 変換して AVAudioPCMBuffer に格納する 5. 16bit の値を取得する

Slide 16

Slide 16 text

👀 変換後のAVAudioPCMBuffer のプロパティを表示してみる

Slide 17

Slide 17 text

目的の形式( 16bit PCM Audio, 24kHz, 1channel)に変換完了 🎉

Slide 18

Slide 18 text

💡 要点 - AVAudioEngine を起動する - AVAudioEngine, Stream を停止する

Slide 19

Slide 19 text

💡 要点 - 外部への公開メソッドは 2つのみ - startStreaming() -> AsyncStream - Data 型に変換した PCM16 形式の 音声データを流す - stopStreaming()

Slide 20

Slide 20 text

💡 要点 - startStreaming() -> AsyncStream を呼び出してストリーミングを開始する - Data 型に変換した PCM16 形式の 音声データを取得する - APIClient の sendAudioBuffer(_: Data) で Realtime API に音声データを送信 - stopStreaming() でストリーミングを 停止する

Slide 21

Slide 21 text

💡 要点 - Client Event を作成 - 音声データを送信時は、以下 2つを 指定する - type: input_audio_buffer.append - audio: 24kHz, PCM16, base64エン コードされた音声データの文字列 - WebSocket を利用して Client Event を 送信する ※ 補足 ( https://platform.openai.com/docs/guides/realtime#server-vad-mode ) - Realtime API では、VAD(Voice Activity Detection) がデフォルトで有効

Slide 22

Slide 22 text

今後お話する内容 目的の 応答を生成 Realtime API Realtime API からのレスポンスをを音声としてリアルタイム再生する

Slide 23

Slide 23 text

Thank You For Listening