Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
実践 Realtime API 〜入力として音声データを扱う〜
Search
RioFujimon
November 13, 2024
Programming
110
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実践 Realtime API 〜入力として音声データを扱う〜
Sansan × YUMEMI iOS ランチタイム LT での発表資料
RioFujimon
November 13, 2024
More Decks by RioFujimon
See All by RioFujimon
iOSDC2026登壇資料.pdf
riofujimon
0
220
Foundation Models を 活用するための Tips
riofujimon
1
460
2025.01.17_Sansan × DMM.swift
riofujimon
4
1.1k
Realtime API 入門
riofujimon
0
410
Let's learn code review
riofujimon
3
1.4k
Other Decks in Programming
See All in Programming
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
100
Verilogで学ぶCPU自作入門
uyuki234
8
4.2k
Workers Cache を知る
syumai
0
370
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
290
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
R8 の設定見直しでアプリサイズ削減
andpad
0
220
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
530
ActionController meets Protocol Buffers
sorah
0
560
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
800
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Believing is Seeing
oripsolob
1
250
GraphQLとの向き合い方2022年版
quramy
50
15k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
790
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Designing for humans not robots
tammielis
254
26k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
First, design no harm
axbom
PRO
2
1.3k
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