0

私はJavaが初めてで、英語も上手ではありません。レコードの振幅を測定するアプリを書きたいです。このアプリは、振幅が常に 0 であるという事実を除いて機能します。現在、いくつかの Web サイトを読みましたが、答えが見つかりませんでした。誰かが私を助けてくれたら本当にうれしいです。

package com.example.volumeswitcher;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaRecorder;
import android.media.MediaRecorder.OnInfoListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Vibrator;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnInfoListener {
    WindowManager.LayoutParams lp;
    Button messe;
    MediaRecorder micro;
    int ampli;
    TextView tv1;
    TextView tv2;
    String amplitext;
    Vibrator vibr;
    Environment e;
    String mFileName;
    int i;
    Boolean recording;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window w = getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        setContentView(R.layout.activity_main);
        micro = null;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    public void onBtnClicked(View v) {
            startRecording();
        }

    protected void startRecording() {
        if (micro == null){
            i ++;
            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mFileName += "/audiorecord"+ i +".3gp";
            micro = new MediaRecorder();

            micro.setAudioSource(MediaRecorder.AudioSource.MIC);
            micro.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            micro.setOutputFile(mFileName);
            micro.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            micro.setMaxDuration(2000);

              try {

                micro.prepare();
            } catch (IllegalStateException e) {
                Toast.makeText(getApplicationContext(), "IllegalStateException called", Toast.LENGTH_LONG).show();


            } catch (IOException e) {
                Toast.makeText(getApplicationContext(), "prepare() failed", Toast.LENGTH_LONG).show();

            }

              micro.start();
              micro.getMaxAmplitude();
              ampli = micro.getMaxAmplitude();
              tv1 = (TextView) findViewById(R.id.textView1);
              tv1.setText(Integer.toString(ampli));

        }

          micro.setOnInfoListener(new OnInfoListener() {
            @Override
            public void onInfo(MediaRecorder mr, int what, int extra) {
                if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
                    micro.stop();
                    recording = false;
                    micro.release();
                    micro = null;
                }
            }
        });
    }

    @Override
    public void onInfo(MediaRecorder mr, int what, int extra) {
        // TODO Auto-generated method stub

    }
}

ご協力ありがとうございました!

4

1 に答える 1

0

私は同じ問題を抱えており、奇妙なことに、最大振幅を取得しようとするときに時間間隔を1秒以上に変更すると、正常に機能しますが、何が原因かわかりません...

于 2013-12-29T18:53:41.240 に答える