2012-08-16 4 views
14

マイクでサウンドをキャプチャしてヘッドフォンで再生する機能を持つアンドロイドアプリを構築しています。このために、私は "AudioRecord"と "AudioTrack"を使用しました。以下は私が使用しているコードの一部です(理解のためだけ)Android:サウンドをmp3形式で録音する

mInBufferSize = AudioRecord.getMinBufferSize(mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat); 
mOutBufferSize = AudioTrack.getMinBufferSize(mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat); 
mAudioInput = new AudioRecord(MediaRecorder.AudioSource.MIC, 
      mSampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat, 
      mInBufferSize); 
mAudioOutput = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate, 
      AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat, 
      mOutBufferSize, AudioTrack.MODE_STREAM); 

しかし、主な問題は、着信音をmp3形式で録音することです。私はgitの上アドバンスここで

答えて

10

おかげで、あなたは、Android用のMP3ボイスレコーダーサンプルのソースコードを見つけることができます...本当に感謝します、これで私を助けてください。

Checkoutこのソースコード。

+0

、私は聞くことができませんよ私のために働きましたヘッドホンの音。これらの両方のプロセスを「AudioTrack」を使用してサウンドを再生し、mp3に録音するなど、parellelにすることはできますか?お返事ありがとうございます – user609239

+0

Media Player Classをヘッドフォンで聞くことができます。 –

+0

ええ、MediaPlayerは録音完了後には便利ですが、この場合は音を出して録音するのが私の知る限り – user609239

0

これは)

outputFile = Environment.getExternalStorageDirectory() 
      .getAbsolutePath() + "/myrecording.mp3"; 
    myAudioRecorder = new MediaRecorder(); 
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
    myAudioRecorder.setOutputFile(outputFile);` 

myAudioRecorder.prepare(私のための仕事です。 myAudioRecorder.start(); `

+2

これはmp3を記録しません。ファイルの拡張子はファイル形式ではなくmo3になります。 –

34

MediaRecorderを使用して.mp3ファイルを保存するための回避策があります。ここで重要な部分はsetOuputFormatsetAudioEncoderある

recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setOutputFile(Environment.getExternalStorageDirectory() 
     .getAbsolutePath() + "/myrecording.mp3"); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
recorder.prepare(); 
recorder.start(); 

:ここでは、方法です。あなたがMediaRecorder.OutputFormat.MPEG_4MediaRecorder.AudioEncoder.AACを一緒に使用している場合、MediaRecorderは再生可能なmp3を記録しているようです。これが誰かを助けることを願っています。あなたはむしろAudioRecorderクラスを使用したい場合は

はもちろん、私は、以下のリンクソースコードチラグがうまく動作するはずだと思う - https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid(あなたは、日本語から英語へのそれの一部を翻訳する必要があるかもしれませんが)

編集:ブルーノとして、いくつかのコメントで指摘された、これは MP3のファイルをエンコードしません。エンコーディングはまだAACです。しかし、上記のコードで.mp3拡張子を使用して保存したサウンドを再生しようとすると、ほとんどのメディアプレーヤーが実際のエンコーディングを検出するほどスマートなので、問題なく再生されます。

+0

私は、ほとんどの開発者がmp3を記録するのがどれほど簡単か分からないことに驚いています!ありがとう! – nat101

+0

AudioEnconder.ACCを使用すると、いくつかのデバイスにいくつかの奇妙な影響があります...何らかの理由で、Android 6.0搭載のLenovo Tab3でオーディオを速く録音することがありました。私はMediaRecorder.AudioEncoder.AMR_NBを使用して終了し、私のためにうまくいった。 – velval

+2

申し訳ありませんが、これはMP3エンコードファイルを生成しません。彼らはまだMP3ファイルの拡張子に名前を付けるだけで、私は銀河のs6のleakで –

0

レコーダーのoutputformatMediaRecorder.OutputFormat.DEFAULTと設定します。私はこれを使用し、結果のオーディオファイルはmp3です。

+0

こんにちは。私はこれを試して、結果を私のLinux開発ホストに引き渡しました。結果ファイルのファイルには、/home/sjs/AudioDemo.mp3:ISOメディア、MPEG v4システム、3GPPがあります。すなわち、ファイルはmp4ファイルである。端末はAndroid 6.0.1を実行しているNexus 7でした。ごめんなさい、ありがとうございます。 –

0

これは

本当に良い答えだと私はそれを受け入れる準備ができていますが、問題は、それが「AudioTrack」、私はこのコードを使用した後の平均に影響を与えることがある
mediaRecorder = new MediaRecorder(); 
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() 
    .getAbsolutePath() + "/record.mp3"); 
mediaRecorder.prepare(); 
mediaRecorder.start(); 
関連する問題