MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Apps で録音した音声をMP3形式に変換する [Cloudmersive]

はじめに

Power Apps ではマイクコントロールで録音した音声を JSON関数を使ってデータ化できることが知られています。 最近では、モバイルのPower Appsアプリを利用した場合でも、この音声のデータ化ができるようになっており、さまざまなシーンでの活用が期待されています。 例えば議事録を作ってOneNoteに保存するようなPower Appsのテンプレートを少し改造して、ミーティングの録音もできるでしょう。

JSON関数を使って音声をデータ化する場合の方法は以下をご覧ください。

qiita.com

ただし注意しなければいけない点は、データ形式です。

PCのブラウザーまたはAndroid端末の場合には、webm形式で音声がデータ化されます。一方でiOSではaac形式のデータになります。

この形式の違いによって、視聴環境が制限され、録音データ再利用の観点からも使いづらいなーとなっていました。

今回はこのようなデータ形式の違いに由来するもんだいを、Cloudmersive の Video and Media Connector を使って解消してみたいと思います。 サービスの詳細については公式サイトを参照してください。無料枠がありますので、個人ユーザーでも安心です。

Video and Media Services API - Cloudmersive APIs

作ったもの

実験のために最小構成のアプリとフローを用意しました。

アプリには、

  • マイクコントロール x1
  • オーディオコントロール x2 (元の音声用、変換後の音声用)
  • ボタン x1 (フロー実行用)

だけです。 特別なことはしていませんので、下図を参考にしてみてください。

f:id:mofumofu_dance:20200824145338p:plain
アプリ側

Power Appsから呼び出される側のフローは次のようなシンプル2ステップです。

  • まずPower Appsから受け取ったパラメータ (Data URI) をデコードして、Cloudmersiveのアクションに引き渡す
  • 得られた結果の一部、Base 64のコンテンツをPower Appsに文字列として返却
  • (この後Power AppsではBase 64文字列と、MIME typeを組み合わせてData URIを生成している)

f:id:mofumofu_dance:20200824145017p:plain
実行されるフロー

なかなか結果を見せづらいのですが、実行するとMP3形式の音声データとして以下のような文字列が取得できます。 f:id:mofumofu_dance:20200824151605p:plain

おわり

非常に簡単にでしたが、Power Appsで録音した音声のフォーマット変換をCloudmersiveのコネクターを利用することで、ノンコーディングで実現できました。

これまではAzure Functions でffmpegを使うのがよく知られていましたが、今回の方法では(プレミアムコネクターだけど)コーディングは不要になります。

Cloudmersiveのコネクターは今回紹介したVideo and Media Service以外にも面白いものがたくさんあるので、ぜひチェックしてみてください!

ascii.jp

付録

フローで使った数式を書いておきます。

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で取得しています。