私はこの質問の変形に対して提案されたすべての回答を見てきましたが、どれも役に立ちませんでした。私のアプリはモールス信号を教えることになっています。動作しない唯一の部分はPlayer.javaファイルです。このファイルは、モールス信号の「文字」オブジェクトを受け取り、そのコードを読み取り、一連のトーン(res.rawフォルダーに.mp3sとして保存されている)を再生することになっています。このコードの適切なビットは、playSound(int pfile、Context pcontext)関数です。ここにあります:
package com.ewg.morseCode;
import java.io.IOException;
import com.ewg.morseCode.morse_alphabet.letter;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
public class Player extends Activity{
public static boolean finished = false;
public static class player{
public int dit;
public int dah;
public player(){
this.dit = R.raw.morse_dit;
this.dah = R.raw.morse_dah;
}
//////PERTINENT BIT//////
private void playSound(int pfile, Context pcontext){
final int file = pfile;
final Context context = pcontext;
MediaPlayer mp =MediaPlayer.create(context, file);
mp.start();
while(mp.isPlaying()){
}
mp.reset();
mp.release();
mp = null;
}
//////END PERTINENT BIT//////
public void pause(int dur){
finished = false;
CountDownTimer timer1 = new CountDownTimer(dur, dur){
public void onTick(long blah){
}
public void onFinish(){
finished = true;
}
}.start();
while(finished = false){
}
}
public void play(letter x, Context context) throws Exception{
Exception e = new Exception();
for(int i = 0; i< x.code.length-1; i++){
switch(x.code[i]){
case 0:
playSound(dit, context);
pause(49);
break;
case 1:
playSound(dah, context);
pause(49);
break;
default:
throw(e);
}
}
}
}
}
悪いコーディングで申し訳ありませんが、私はまだスクリプトキディです。
編集これは、プレーヤークラス@Geobitsを呼び出すコードです。
player player = new player();
letter Letter = morse_alphabet.hardLetters.get(0);//Letter has a String name property of "b" and a int[] code property of {1, 0, 0, 0}
try {
player.play(Letter, context);//context =main_activity.this
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}