WeChat パブリック アカウントの録音ファイルを再生して保存します (amr ファイルを mp3 に変換)

WeChat パブリック アカウントの録音ファイルを再生して保存します (amr ファイルを mp3 に変換)

オーディオトランスコーディングツール。主にWeChat音声のAMR形式をMP3形式に変換し、HTML5のオーディオタグで再生できるようにするために使用されます。

1. WeChatが提供するインターフェースを呼び出して、録音のInputStreamバイトストリームを取得します。

パブリックInputStream getInputStream(String mediaId) {
    InputStream は null です。
    試す {
        文字列 URL_DOWNLOAD_TEMP_MEDIA = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
        文字列 url = URL_DOWNLOAD_TEMP_MEDIA.replace("ACCESS_TOKEN", "accessToken を取得するには独自のコードを記述してください").replace("MEDIA_ID", mediaId);
        URL urlGet = 新しいURL(url);
        HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
        http.setRequestMethod("GET"); // GETリクエストである必要があります http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        出力を true に設定します。
        入力を true に設定します。
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); // 接続タイムアウト 30 秒 System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 読み取りタイムアウト 30 秒 http.connect();
        // ファイルを取得してバイト ストリームに変換します is = http.getInputStream();
    } キャッチ (例外 e) {
        e.printStackTrace();
    }
    戻り値は;
}

2. 取得したバイトストリームをamrファイルとして保存する

パブリック文字列downloadMediaId(HttpServletRequestリクエスト、文字列mediaId) {
    文字列 relfilePath = null;
    入力ストリーム inputStream = getInputStream(mediaId);
    ファイル出力ストリーム ファイル出力ストリーム = null;
    試す {
        // サーバー リソース保存パス String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/" + DateUtil.getYear() + "/wxmedia/audio/";
        savePath = savePath + "audio/"; 
        文字列ファイル名 = String.valueOf(System.currentTimeMillis()) + ".amr";
        relfilePath = "upload/" + DateUtil.getYear() + "/wxmedia/audio/" + ファイル名;
        ファイル file = new File(savePath);
        ファイルが存在する場合(){
            ファイル.mkdirs();
        }
        バイト[]データ = 新しいバイト[1024];
        長さ = 0;
        fileOutputStream = 新しい FileOutputStream(savePath + ファイル名);
        ((len = inputStream.read(data)) != -1) の間 {
            // 結果が間違っているかどうかを判定します if (new String(data).indexOf("errmsg") > -1) {
                null を返します。
            }
            fileOutputStream.write(データ、0、長さ);
        }
    } キャッチ (IOException e) {
        e.printStackTrace();
    ついに
        入力ストリームが null の場合
            試す {
                入力ストリームを閉じます。
            } キャッチ (IOException e) {
                e.printStackTrace();
            }
        }
        ファイル出力ストリームが null ではない場合
            試す {
                ファイル出力ストリームを閉じます。
            } キャッチ (IOException e) {
                e.printStackTrace();
            }
        }
    }
    relfilePath を返します。
}

3. 保存したamrファイルをmp3ファイルに変換する

パブリック void amrToMp3(文字列ソースパス、文字列ターゲットパス) {
    ファイルソース = new File(sourcePath);
    ファイルターゲット = new File(targetPath);
    AudioUtils.amrToMp3(ソース、ターゲット);
}

4. 必要なjarパッケージの依存関係

<!--amr ファイルからオーディオ マップ ファイルへ-->
<依存関係>
    <groupId>com.github.dadiyang</groupId>
    <artifactId>ジャベ</artifactId>
    <バージョン>1.0.3</バージョン>
</依存関係>

オーディオトランスコーディングツール

これは JAVE プロジェクトの修正に基づいており、JAVE は ffmpeg に依存しているため、Linux/Windows/Mac プラットフォームをサポートしており、ffmpeg がサポートするすべてのファイル形式の変換に適用できます。詳細については、JAVEの公式ドキュメントを参照してください。

原理

初期化中に、現在の動作環境を判別し、bin ディレクトリ内の対応する ffmpeg 実行可能ファイルを一時ディレクトリにコピーし、ファイルの種類と構成に応じて Runtime.getRuntime().exec(cmd) を介して ffmpeg の対応するトランスコーディング コマンドを実行します。

JAVE プロジェクトの問題

ffmpeg は動作環境に依存します。JAVE プロジェクトは ffmpeg をカプセル化します。上記の原則により、Java が ffmpeg を呼び出すことが可能になり、クロスプラットフォームがサポートされます。

  • このプロジェクトは古く、メンテナンスされなくなりました。公式サイトの最新バージョンは2009年にリリースされました。依存しているffmpegはすでに古くなっており、使用できない場合が多いです。
  • EncoderException: ストリーム マッピング
  • 公開されたMavenリポジトリはなく、JAVE自体はMavenプロジェクトではない。
  • Macではサポートされていません

このプロジェクトの特徴

このプロジェクトは上記の問題を解決するために作成されました。

  • これは Maven プロジェクトであり、中央リポジトリに公開されています。
  • プロジェクトが依存する ffmpeg 実行ファイルが使用可能であることが検証されています (ユニットテストに簡単な検証方法が提供されています)
  • AMR を MP3 に変換する際の EncoderException: ストリーム マッピングを解決しました
  • Linux/Windows/Macプラットフォームをサポート

拡張機能

プログラムがリソース ファイルをコピーして ffmpeg 実行可能ファイルを取得できない場合、または組み込みの ffmpeg がオペレーティング システムをサポートしていない場合は、環境変数を使用するか、Java で System.setProperty("ffmpeg.home", "ffmpeg 実行可能ファイルが配置されているディレクトリ") を設定することで、システムにインストールされている使用可能な ffmpeg ファイルのディレクトリを指定できます。

System.setProperty("ffmpeg.home", "/usr/local/bin/") など

WeChatパブリックアカウント録音ファイルの再生と保存(amrファイルをmp3に変換)に関するこの記事はこれで終わりです。より関連性の高いWeChatパブリックアカウント録音コンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • PHP は AMR オーディオ ファイルを MP3 形式に変換します
  • Python は ffmpy を使用して AMR 形式のオーディオを MP3 形式に変換する例
  • asp.net オーディオ変換 .amr から .mp3 へ (ffmpeg 変換方法を使用)
  • asp.net オーディオ変換 .amr から .mp3 へ (Qiniu 変換方式を使用)

<<:  CentOS 7 に mysql5.7 の解凍バージョンをインストールするチュートリアル

>>:  Windows での Tomcat サーバーのインストールに関するチュートリアル

推薦する

vue+elementUI で埋め込みテーブルを実装する方法の例

大学 4 年生のときのインターンシップ中に、表内のデータの番号をクリックすると、そのデータの下に新し...

Linux resolv.conf の簡単な分析

1. はじめにresolv.conf は、さまざまなオペレーティング システムのドメイン ネーム シ...

HTML と CSS に関する基本的なメモ (フロントエンドでは必読)

HTMLに触れた当初はレイアウトにいつもテーブルを使っていましたが、とても面倒で見た目も悪かったの...

アリババの中秋節ロゴとウェブサイトのデザインプロセス

<br />まずアイデアを考え、次にスケッチを描き、次にマウスでスケッチし、最後にフラッ...

webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...

Docker で Redis センチネル モードを構成する方法 (複数のサーバー上)

目次序文状態DockerをインストールするRedisのマスターノードとスレーブノードを構成する序文以...

MySQL 8.0 の新機能: ハッシュ結合

MySQL 開発チームは、2019 年 10 月 14 日に MySQL 8.0.18 GA バージ...

Dockerはdockerfileを使用してnode.jsアプリケーションを起動します

Dockerfileの作成expressによって自動的に作成されたディレクトリを例にとると、ディレク...

ZabbixはPSK共有キーを使用してサーバーとエージェント間の通信を暗号化します。

Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...

MySQL マルチインスタンス インストール ブート自動起動サービス設定プロセス

1.MySQLの複数インスタンスMySQL マルチインスタンスとは、1 台以上のマシン上で複数の M...

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

MySQL 時間差関数 (TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数 (date_add、day、date_format、str_to_date)

1. 時間差関数(TIMESTAMPDIFF、DATEDIFF) MySQLを使用して時間差を計算...

RoughViz を使用して Vue.js でスケッチされたチャートを視覚化する方法

導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...

ウェブページ内のFlash SWFファイルを変更する方法

これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...

WeChatアプレットのスクロールビューは、プルアップ時にデータの読み込みを重複させるソリューションを実装しています。

WeChat アプレットのスクロール ビューでは、プルアップして読み込むときにバグが多く発生します...