Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実践 Realtime API 〜入力として音声データを扱う〜
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
RioFujimon
November 13, 2024
Programming
1
97
実践 Realtime API 〜入力として音声データを扱う〜
Sansan × YUMEMI iOS ランチタイム LT での発表資料
RioFujimon
November 13, 2024
Tweet
Share
More Decks by RioFujimon
See All by RioFujimon
Foundation Models を 活用するための Tips
riofujimon
1
330
2025.01.17_Sansan × DMM.swift
riofujimon
3
910
Realtime API 入門
riofujimon
0
370
Let's learn code review
riofujimon
3
1.2k
Other Decks in Programming
See All in Programming
20260315 AWSなんもわからん🥲
chiilog
2
170
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
360
Windows on Ryzen and I
seosoft
0
360
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
570
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
180
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.6k
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
120
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
160
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
500
20260228_JAWS_Beginner_Kansai
takuyay0ne
5
610
CSC307 Lecture 15
javiergs
PRO
0
260
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
230
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
110
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
82
Discover your Explorer Soul
emna__ayadi
2
1.1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
410
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
Practical Orchestrator
shlominoach
191
11k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
68
38k
Docker and Python
trallard
47
3.8k
Crafting Experiences
bethany
1
93
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Become a Pro
speakerdeck
PRO
31
5.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
実践 Realtime API 〜入力として音声データを扱う〜 技術本部 Eight Engineering Unit 藤門 莉生
自己紹介 藤門 莉生(Rio Fujimon) - Sansan株式会社 - 23卒(新卒2年目) - Eight
の iOSアプリを開発 - X(旧 Twitter):@RioFujimon - iOS開発で主に興味がある領域 - UIKit, SwiftUI - Bluetooth, NFC, Audio, etc
Realtime API https://openai.com/index/introducing-the-realtime-api/
Realtime API 紹介 開発者はアプリケーションに 高速な音声合成体験 を組み込めるようになった
Realtime API を利用するメリット Whisper 音声を テキストに 書き起こす テキスト 解析モデル 目的の
応答を生成 Realtime API
Kanagawa.swift で話した内容 目的の 応答を生成 Realtime API https://speakerdeck.com/riofujimon/realtime-api-ru-men 👇以下でスライドを公開中 👇 Swift
で Realtime API を扱う基本を中心に話した
本日話す内容 目的の 応答を生成 Realtime API 音声データを Realtime API への入力として扱う方法を話す
Realtime API Sample App
実装を見ていく
https://platform.openai.com/docs/guides/realtime#audio-formats
💡 要点 - 24kHz, PCM16 の 形式に変換処理を 実施して出力する
💡 要点 - AVAudioSession を 設定し、有効化する
👀 AVAudioPCMBuffer のプロパティを表示してみる
💡 要点 - デフォルトでは、 48kHz, 32 bit の形式 - Int16
の値は、nil
💡 要点(⭐⭐⭐) 1. AVAudioFormat で24kHz, 16 bit の形式を 作成する 2.
指定の形式に変換するための Converter を 作成する 3. 形式変換後の AVAudioPCMBuffer を 準備する 4. Converter で 変換して AVAudioPCMBuffer に格納する 5. 16bit の値を取得する
👀 変換後のAVAudioPCMBuffer のプロパティを表示してみる
目的の形式( 16bit PCM Audio, 24kHz, 1channel)に変換完了 🎉
💡 要点 - AVAudioEngine を起動する - AVAudioEngine, Stream を停止する
💡 要点 - 外部への公開メソッドは 2つのみ - startStreaming() -> AsyncStream<Data> -
Data 型に変換した PCM16 形式の 音声データを流す - stopStreaming()
💡 要点 - startStreaming() -> AsyncStream<Data> を呼び出してストリーミングを開始する - Data 型に変換した
PCM16 形式の 音声データを取得する - APIClient の sendAudioBuffer(_: Data) で Realtime API に音声データを送信 - stopStreaming() でストリーミングを 停止する
💡 要点 - 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) がデフォルトで有効
今後お話する内容 目的の 応答を生成 Realtime API Realtime API からのレスポンスをを音声としてリアルタイム再生する
Thank You For Listening