audioファイルの長さを取得する方法
###背景を簡単に説明
LINE Messaging APIを使って、チャネルトークという弊社ウェブ接客チャットツールとLINE公式アカウントを連動※させる際に、音声ファイルの長さ(duration)を取得するところでつまづいたので、共有。
※LINE公式アカウントでのエンドユーザーとの対話を、接客チャットプラットフォームであるチャネルトークで返信、声かけが可能になる。
サイトに設置した接客チャットからの問い合わせと、LINE公式アカウントからの問い合わせに、チャネルトークの管理者画面から対応可能
チャネルトークでアップロードされた音声ファイルをLINE公式アカウントでエンドユーザ側からも見えるように同期するのに、Messaging APIに音声ファイルを送るのだが音声ファイルの長さ(duration)も送らなくてはならない。
##実装方法
ただ、この音声ファイルの長さをファイルから取得するようなAPIはない。
でも方法は簡単。自分で実装すれば良い。
音声ファイルから取得できる総フレーム数とフレームレートから計算すれば良い。
File file = new File(fileUrl);
try {
// 音声ファイルのmetadataを取得する準備
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
// 音声ファイルの総フレーム数
long length = stream.getFrameLength();
AudioFormat format = stream.getFormat();
// frame -> 1秒あたりに処理するフレーム数
float frame = format.getSampleRate();
// 総フレーム数➗1秒あたりに処理するフレーム数 = 長さ
int duration = (int)(length/frame);
} catch (UnsupportedAudioFileException e) {
return false;
}
色々探さないで、素直に最初からこれやればよかったかも。。。
とりあえず思ったよりも簡単でした!