Android 莫尔斯密码发声器3:速度和声音设定
2018-12-20 本文已影响12人
silencefun
1布局
输入框下两个seekbar来实现对声音和速度的调控
在输入框输入英文或数字,开始按钮开始播放。
2实现逻辑
直接上代码
EditText et_input;
TextView tv_start;
private static int volume = 100;
private static int speed = 100;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_start = findViewById(R.id.tv_start);
et_input = findViewById(R.id.et_input);
((SeekBar) findViewById(R.id.cfg_volume)).setProgress(volume);
((SeekBar) findViewById(R.id.cfg_speed)).setProgress(250 - speed);
tv_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (et_input.getText().toString() != null && et_input.getText().toString().length() > 0) {
volume = ((SeekBar) findViewById(R.id.cfg_volume)).getProgress();
speed = 250 - ((SeekBar) findViewById(R.id.cfg_speed)).getProgress();
final Morse beeper = new Morse(speed, volume);
handler.post(new Runnable() {
@Override
public void run() {
beeper.sendCode(et_input.getText().toString());
}
});
}
}
});
}
代买比较简单,就是每次点击的时候,初始化一个Morse对象
public Morse(int dur, int vol) {
this.dur = dur;
gen = new ToneGenerator(AudioManager.STREAM_ALARM, vol);
}
在 Morse 的构造方法中实例化一个ToneGenerator对象,来控制发声操作等。
需要注意不能连续点击,否则会出错。AudioFlinger could not create track, status: -12
相当同时多个对象在操作。
实现了第一步的发音操作,细节还有很多没有完善优化。
但是搜集资料查看的一些实现的方式是把发音的音频文件放到raw资源目录下,使用这个声音来播放,这样感觉输出保存音频文件的时候相对而言应该比较方便,暂时(2018年12月20日 )还没又找到怎么把ToneGenerator发出声音保存下来。
待完善部分(TODO LIST):
1.容错控制完善
2.优化实现技巧
3.随机生成100组数字,保存图片
4.数码长码短码的切换
5.单个的字词翻译 存储