スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

楽器アプリを作ってみよう!③

どんな楽器アプリを考えているかというと、端末の傾きで音程を決めるアプリです。

左右に傾けて音程をコントロールできれば面白いかな? という単純な発想です。

さてさて、端末の傾きを調べるとなると....加速度センサーを使用する必要がでてきました。

とりあえず、実際に作って調べてみよう。

という事で、以下のコードを書いて動かしてみました。



package app.SensorTest;

import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;

public class SensorTest extends Activity implements SensorEventListener {
    private boolean   registeredSensor = false;
    private SensorManager sensorManager;
    private MainView    view;
    
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        view = new MainView(this);
        setContentView(view);
    }


 @Override
    protected void onResume()
    {
        super.onResume();

  List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
  if (sensors.size() > 0) {
   Sensor sensor = sensors.get(0);
   registeredSensor = sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);
  }
     
    }

 @Override
    protected void onPause()
    {
        if (registeredSensor)
        {
      sensorManager.unregisterListener(this);
      registeredSensor = false;
        }
        super.onPause();
    }

 
 
 @Override
 public void onAccuracyChanged(Sensor arg0, int arg1) {
  // TODO 自動生成されたメソッド・スタブ
  
 }

 @Override
 public void onSensorChanged(SensorEvent event) {
  view.setData(event.values);
  view.invalidate();
 }
}

package app.SensorTest;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.*;

public class MainView extends View {

 private float data[] = {0,0,0};
 
 public MainView(Context context) {
  super(context);
 }

 public void setData(float[] fdata)
 {
  data[0] = fdata[0];
  data[1] = fdata[1];
  data[2] = fdata[2];
 }
 
 protected void onDraw(Canvas Canvas)
 {
  Paint paint = new Paint();
  paint.setColor(Color.WHITE);
  Canvas.drawText(String.valueOf(data[0]), 0, 20, paint);
  Canvas.drawText(String.valueOf(data[1]), 0, 40, paint);
  Canvas.drawText(String.valueOf(data[2]), 0, 60, paint);
 }

}



実際に調べてみると、机の上に置いているだけでも、かなり値が変化します。

ちょっと予想していなかったので、びっくりです。

移動平均等でデータの変化が緩やかになるようにしないと、楽器としてキビシイかな.....という感じでした。

実際に音程を決める処理を組むときには、工夫が必要です。
スポンサーサイト

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
アフィリエイト・SEO対策
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。