0

通話を録音するアプリケーションを開発しようとしています。

出力音を録音すると、非常に有線に聞こえます-電子音ではなく、他の人の声です。

ここに私のコードがあります:

public class MainActivity extends Activity implements OnClickListener {
private Boolean Recording;
private Button btn_REC;
private MediaRecorder mrec;
private File audiofile = null;
private static final String TAG = "SoundRecordingDemo";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    Recording = false;
    mrec = new MediaRecorder();
    btn_REC = (Button) findViewById(R.id.btn_record);
    btn_REC.setOnClickListener(this);
}

@Override
public void onClick(View v)
{
    if (!Recording)
    {
        try
        {
            startRecording();
            Recording = true;
        }
        catch (IOException e1)
        {
            e1.printStackTrace();
        }

        btn_REC.setText("RECORDING");
    }


    else
    {       
        stopRecording();
        btn_REC.setText("RECORD");
    }


}

protected void startRecording() throws IOException {
    mrec.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK);
    mrec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    if (audiofile == null) {
        File sampleDir = Environment.getExternalStorageDirectory();
        try {
            audiofile = File.createTempFile("ibm", ".3gp", sampleDir);
        } catch (IOException e) {
            Log.e(TAG, "sdcard access error");
            return;
        }
    }
    mrec.setOutputFile(audiofile.getAbsolutePath());
    mrec.prepare();
    mrec.start();
}

protected void stopRecording() {
    mrec.stop();
    mrec.release();
    processaudiofile();
}

protected void processaudiofile() {
    ContentValues values = new ContentValues(3);
    long current = System.currentTimeMillis();
    values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName());
    values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
    values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
    values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath());
    ContentResolver contentResolver = getContentResolver();

    Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Uri newUri = contentResolver.insert(base, values);

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
}

}

AudioSource をアップリンクまたは音声通話に変更しようとしても、同じです。これを MIC に定義すると、すべて正常に動作しますが、電話をかけると、まだこの奇妙な音が始まります...

何かご意見は?

ありがとう!

4

2 に答える 2

0

もう一度、レコード機能を呼び出します。

 mrec.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK);

デバイスに大きく依存するものです。

一部のデバイスはアップリンクを許可せず、一部はダウンリンクをブロックし、一部は音声通話を許可しません。それでも、あらゆる種類のオーディオソースを許可するデバイスがあります。

例:アップリンクとダウンリンクを許可するMotoデバイスを使用しています。ただし、両方を同時に使用することはできません。つまり、音声通話です。つまり、自分の声を録音することも、送信者の声を録音することもできます。

この動作を確認するには、別の受話器を試してみてください

于 2013-03-02T20:44:44.810 に答える