はじめに
Power Apps ではマイクコントロールで録音した音声を JSON関数を使ってデータ化できることが知られています。 最近では、モバイルのPower Appsアプリを利用した場合でも、この音声のデータ化ができるようになっており、さまざまなシーンでの活用が期待されています。 例えば議事録を作ってOneNoteに保存するようなPower Appsのテンプレートを少し改造して、ミーティングの録音もできるでしょう。
※JSON関数を使って音声をデータ化する場合の方法は以下をご覧ください。
ただし注意しなければいけない点は、データ形式です。
PCのブラウザーまたはAndroid端末の場合には、webm形式で音声がデータ化されます。一方でiOSではaac形式のデータになります。
この形式の違いによって、視聴環境が制限され、録音データ再利用の観点からも使いづらいなーとなっていました。
今回はこのようなデータ形式の違いに由来するもんだいを、Cloudmersive の Video and Media Connector を使って解消してみたいと思います。 サービスの詳細については公式サイトを参照してください。無料枠がありますので、個人ユーザーでも安心です。
Video and Media Services API - Cloudmersive APIs
作ったもの
実験のために最小構成のアプリとフローを用意しました。
アプリには、
だけです。 特別なことはしていませんので、下図を参考にしてみてください。
Power Appsから呼び出される側のフローは次のようなシンプル2ステップです。
- まずPower Appsから受け取ったパラメータ (Data URI) をデコードして、Cloudmersiveのアクションに引き渡す
- 得られた結果の一部、Base 64のコンテンツをPower Appsに文字列として返却
- (この後Power AppsではBase 64文字列と、MIME typeを組み合わせてData URIを生成している)
なかなか結果を見せづらいのですが、実行するとMP3形式の音声データとして以下のような文字列が取得できます。
おわり
非常に簡単にでしたが、Power Appsで録音した音声のフォーマット変換をCloudmersiveのコネクターを利用することで、ノンコーディングで実現できました。
これまではAzure Functions でffmpegを使うのがよく知られていましたが、今回の方法では(プレミアムコネクターだけど)コーディングは不要になります。
Cloudmersiveのコネクターは今回紹介したVideo and Media Service以外にも面白いものがたくさんあるので、ぜひチェックしてみてください!
付録
フローで使った数式を書いておきます。
Convert to MP3 formatの最初のパラメータ
decodeDataUri(triggerBody()['ConvertAudioFiletoMP3format_Inputfiletoperformtheoperationon'])
decodeDataUriの中身は「Power Appsから取得」で追加したものです
ファイル名
concat('test.', split( split( triggerBody()['ConvertAudioFiletoMP3format_Inputfiletoperformtheoperationon'] ,'/' )?[1] ,';' )?[0] )
Power Appsから取得したData URIにはファイル拡張子も含まれているので、これをsplitで取得しています。