2016-12-02 3 views
0

アンドロイドデバイスのローカルファイルシステムのファイルからオーディオ入力ストリームを取得しようとしています。アンドロイドのロケールファイルからオーディオ入力ストリームを取得

これは、このライブラリを使用してオーディオファイルの波形を表示できるようにするためです。

https://github.com/newventuresoftware/WaveformControl/blob/master/app/src/main/java/com/newventuresoftware/waveformdemo/MainActivity.java#L125

プロジェクトの例では、この入力ストリームは、後でバイト配列に変換され、波の映像及び音声をペイントするためにそれを使用してどこに渡されるよう

InputStream is = getResources().openRawResource(R.raw.jinglebells); 

ようrawResourceを使用します。

しかし、私は

InputStream is = new InputFileSystem(new File(filePath)); 

をした。しかし、これは正常に動作するようには思えないとき。生成された画像は間違っており、実際に再生されたものとはまったく同じものではありません。

これは、入力ストリームを取得してバイト配列に変換する、そのライブラリ内の関数の本体です。私が処理され、そのライブラリに渡す取得したいと思い

private short[] getAudioSample() throws IOException { 
    // If i replace this part with new FileInput(new File(filePath)) 
    // the generated "samples" from it does not work properly with the library. 
    InputStream is = getResources().openRawResource(R.raw.jinglebells); 
    byte[] data; 
    try { 
     data = IOUtils.toByteArray(is); 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
    ShortBuffer sb = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); 
    short[] samples = new short[sb.limit()]; 
    sb.get(samples); 
    return samples; 
} 

サウンドファイルは、以下のような構成

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
+0

this awesome github repoは '新しいファイル(filePathに)を'使用するコード、および完全な説明を含め、[MCVE]を提供してください、ここから撮影することができます「正しく機能していない」とはどういう意味ですか? – CommonsWare

+0

私は基本的にファイルからオーディオ入力ストリームを取得する必要があります。 – user1017674

+0

ファイルはresourcesディレクトリにありますか、それともダウンロードしていますか? –

答えて

0

とMediaRecorderによって作成された基本的にはそのライブラリは、PCMサンプルが必要です。 MediaRecorderで直接生成された3gpのFileInputStreamを使用して、それをカットすることはありません。

私がしたのは、MediaExtractorとMediaCodecを使って3gpのオーディオデータをサンプルでPCMサンプルに変換することでした。それがそのライブラリに送られます。そして、すべてが働いていた=)

オーディオデータを符号化のロジックはほとんど直接

関連する問題