質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Gemini

Geminiは、Googleが開発した生成AIサービス。マルチモーダルAIモデルのため、複数の異なる種類のデータも同時に処理することができます。また、高度な推論性能を持ち、コード生成も優れている点も特徴です。

Q&A

0回答

57閲覧

SwiftUI上のGemini APIを用いた音声ファイル処理機能に対するエラーが解決しない

eiradino2

総合スコア6

Gemini

Geminiは、Googleが開発した生成AIサービス。マルチモーダルAIモデルのため、複数の異なる種類のデータも同時に処理することができます。また、高度な推論性能を持ち、コード生成も優れている点も特徴です。

0グッド

0クリップ

投稿2024/11/03 07:18

実現したいこと

SwiftUIでGemini APIを用いて、クライアント側から入力された音声ファイルを文字起こしする機能を作っています。

発生している問題・分からないこと

このコードを書くとまず

Argument type 'Data' does not conform to expected type 'ThrowingPartsRepresentable'

というエラーが出ます。

そして

Insert ' as! ThrowingPartsRepresentable'

という提案がなされ、その通りにして実行すると

[GoogleGenerativeAI] Model models/gemini-pro initialized. To enable additional logging, add -GoogleGenerativeAIDebugLogEnabled as a launch argument in Xcode.
Could not cast value of type 'Foundation.Data' (0x1e0347de8) to 'GoogleGenerativeAI.ThrowingPartsRepresentable' (0x103052738).

というエラーがコンソール上に表示されてしまいます

エラーメッセージ

error

1[GoogleGenerativeAI] Model models/gemini-pro initialized. To enable additional logging, add `-GoogleGenerativeAIDebugLogEnabled` as a launch argument in Xcode. 2Could not cast value of type 'Foundation.Data' (0x1e0347de8) to 'GoogleGenerativeAI.ThrowingPartsRepresentable' (0x103052738).

該当のソースコード

Swift

1import SwiftUI 2import GoogleGenerativeAI 3import UniformTypeIdentifiers 4 5struct ContentView: View { 6 7 @State private var selectedFile: URL? = nil 8 @State private var isPickerPresented = false 9 @State private var transcriptionResult: String? = nil 10 11 var body: some View { 12 VStack { 13 Button(action: { 14 isPickerPresented.toggle() // Toggle to present file picker 15 }) { 16 Text("ファイルを選択") 17 .padding() 18 } 19 .fileImporter( 20 isPresented: $isPickerPresented, 21 allowedContentTypes: [.audio], 22 allowsMultipleSelection: false 23 ) { result in 24 switch result { 25 case .success(let urls): 26 selectedFile = urls.first 27 case .failure(let error): 28 print("Error selecting file: \(error.localizedDescription)") 29 } 30 } 31 32 if let selectedFile = selectedFile { 33 Text("選択されたファイル: \(selectedFile.lastPathComponent)") 34 .padding() 35 36 // Save selected file button 37 Button(action: { 38 Task { 39 await runGemini(fileURL: selectedFile) 40 } 41 }) { 42 Text("ファイルを保存") 43 .padding() 44 } 45 46 if let transcriptionResult = transcriptionResult { 47 Text("Transcription Result: \(transcriptionResult)") 48 .padding() 49 } 50 } else { 51 Text("ファイルが選択されていません") 52 .padding() 53 } 54 } 55 } 56 57 func runGemini(fileURL: URL) async { 58 // Setup the model 59 let model = GenerativeModel( 60 name: "models/gemini-pro", 61 apiKey: APIKey.default 62 ) 63 64 do { 65 let data = try Data(contentsOf: fileURL) 66 let response = try await model.generateContent( 67 "この音声ファイルを文字起こししてください", data 68 ) 69 transcriptionResult = response.text 70 } catch { 71 print("Error during transcription: \(error)") 72 // より詳細なエラー処理 73 } 74 } 75} 76 77#Preview { 78 ContentView() 79} 80

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

一次情報まで遡ったが、文字の処理と画像処理にのみ終始しており、Swift上で音声ファイルを処理する方法は見つけられなかった

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問