60デシベルを越えたら、画像にアニメーションを与えたいと思っています。SoundlevelMeterのrun()で
ImageView Monster1=(ImageView)FightActivity.this.findViewById(R.id.Monster1);といったようにイメージビューをとることができません。
どのような形で60デシベルを越えたら、fightactivityのimageviewにアニメーションを加えることができるでしょうか
SoundLevelMeter import java.nio.ByteBuffer; import android.content.Intent; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.util.Log; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.Toast; import static com.example.apponozawa.anasuto.R.id.Monster1; public class SoundLevelMeter implements Runnable { private static final int SAMPLE_RATE = 8000; private int bufferSize; private AudioRecord audioRecord; private boolean isRecording; private boolean isPausing; private double baseValue; static double DB; public interface SoundLevelMeterListener { void onMeasure(double DB); } private SoundLevelMeterListener listener; public SoundLevelMeter() { bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); listener = null; isRecording = true; baseValue = 12.0; pause(); } public void setListener(SoundLevelMeterListener l) { listener = l; } @Override public void run() { android.os.Process .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); resume(); short[] buffer = new short[bufferSize]; while (isRecording) { if (!isPausing) { int read = audioRecord.read(buffer, 0, bufferSize); if (read < 0) { throw new IllegalStateException(); } int maxValue = 0; for (int i = 0; i < read; i++) { maxValue = Math.max(maxValue, buffer[i]); } DB = 20.0 * Math.log10(maxValue / baseValue); Log.d("SoundLevelMeter", "dB:" + DB); if(DB>=60){ // ImageView Monster1=(ImageView)FightActivity.this.findViewById(R.id.Monster1); // TranslateAnimation translate=new TranslateAnimation(0,700,0,700); // translate.setDuration(3000); // Monster1.startAnimation(translate); } // if(DB>=60){ // audioRecord.stop(); // } if (listener != null) { listener.onMeasure(DB); } } try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } audioRecord.stop(); audioRecord.release(); } public void stop() { isRecording = false; } public void pause() { if (!isPausing) audioRecord.stop(); isPausing = true; } public void resume() { if (isPausing) audioRecord.startRecording(); isPausing = false; } public void setBaseValue(double value) { baseValue = value; }
Main activity import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; public class MainActivity extends AppCompatActivity { private Button buttonpushme; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // ?? buttonpushme = (Button) findViewById(R.id.startbutton); buttonpushme.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClassName("com.example.apponozawa.anasuto","com.example.apponozawa.anasuto.FightActivity"); startActivity(intent); } }); } //? @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } // @Override // public void onClick(View v){ // if(v.getId()==R.id.button); // Intent inten=new Intent(thi) // } }
Fight activity import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; public class FightActivity extends AppCompatActivity { private Button Voicebutton; public static double volume; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fight_1); Voicebutton = (Button) findViewById(R.id.voicebutton); //声を出すボタンが押されたら Voicebutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // ImageView img=(ImageView)findViewById(R.id.Monster1); ImageView baloon=(ImageView)FightActivity.this.findViewById(R.id.ballon1); baloon.setVisibility(View.VISIBLE); SoundLevelMeter sm=new SoundLevelMeter(); Thread th1=new Thread(sm); th1.start(); // if (sm.DB>50){ // TranslateAnimation translate=new TranslateAnimation(0,700,0,700); // translate.setDuration(3000); // img.startAnimation(translate); // } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } // @Override // public boolean onOptionsItemSelected(MenuItem item) { // // Handle action bar item clicks here. The action bar will // // automatically handle clicks on the Home/Up button, so long // // as you specify a parent activity in AndroidManifest.xml. // int id = item.getItemId(); // // //noinspection SimplifiableIfStatement // if (id == R.id.action_settings) { // return true; // } // // return super.onOptionsItemSelected(item); // } } ```
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。