4

まだ初心者の Java 開発者ですが、Android アプリを構築する必要があります。

1 指定された URL から 1 つの mp3 をストリーミングし、次に

2 は、mp3 ストリームからボリュームやサウンド周波数データを抽出します。

3 は、#2 のデータからライト ショーを駆動します。

#1 に対する可能な解決策があり、#2 に取り組んでいます。

私が見るべきSDKの特定のクラスを提案できる人はいますか?

ストリームされた mp3 ファイルから周波数や音量のデータを抽出し、調査して学習できる既存の Android プロジェクトは github やその他の場所にありますか?

4

3 に答える 3

0

派生ボリューム レベルで取得できるように、読み取りの基礎となるバッファーを公開する必要があります。これは、ボリュームの RMS レベルを公開しない可能性のある「MediaPlayer」以外の API を使用することを意味する場合があります。

MP3 でバッファリングされた読み取りを実行するたびに、次の方法でボリュームから x 軸、y 軸のデータを生成できます。

while (mIsPlaying) {
    double sum = 0;
    int readSize = mRecorder.read(mBuffer, 0, mBuffer.length);
    for (int i = 0; i < readSize; i++) {
        output.writeShort(mBuffer[i]);
        sum += mBuffer[i] * mBuffer[i];
    }
// PrBar needs RMS as int
//log base2 for the rms expression on the Volume from the mic
    if (readSize > 0) {
        mProgressBar.setProgress((int)Math.sqrt( sum / readSize ));
        handleRMS((Math.log(Math.sqrt( sum / readSize ))/Math.log(2))); 


    }
}

...

private void handleRMS(double rms){

    rmscnt++;
    rmssum += rms;
    if(rms > rmsmax)rmsmax=rms;
    if(rms< rmsmin)rmsmin=rms;
    double myamt=(rmsmax - rmsmin) / 10 +rmsmin;
    if (rms < myamt) decile++; 
    if(rmscnt % 5 ==0){
        if (rmssum / 5 < myamt) {                                       
        if( Long.valueOf(System.currentTimeMillis())
          - tslist.get(tslist.size()-1) - segmenttime > 0 ){
            tslist.add(Long.valueOf(System.currentTimeMillis()));
        };
    };
    rmssum = 0;
}
}
   * feature - select the TS corresponding to a 'pause' in the speech stream       *   arriving from microphone        * ''pause' in algorythm and

正弦波パターンの通常の RMS ボリューム レベル * 正弦波に照らして RMS の最後の読み取り値を観察します * 最小値と最大値は、波形の「y 軸」の値です * 「myamt」フィールドはしきい値の上限です。現在、デルタ (最大 - 最小) の 10 パーセント * 実際には、一時停止には、いくつかの構成値より * 小さい AVG を持つ一連の隣接する RMS 値が必要です。* 一時停止の TS が受け入れられると、スピーチ内の別の一時停止を探す前に * 経過する必要がある時間の別の最小値があります。* 役立つヒント - RMS 値の 5 ~ 10% で「十分位数」を増やす必要があります。* そうしないと、発話の一時停止を識別するのに十分な量のイベントがレーダーにありません。

バッファを公開するには、「MediaPlayer」API の代わりに、「AudioTrack」などを使用して mp3 を処理する必要がある場合があります。サンプルについては、 gitでこのプロジェクトにアクセスできると思います

RMS とハンドラーの説明はこちら

于 2014-01-01T20:39:42.517 に答える