解魔方的机器人攻略27 – 让萝卜头开口说话
由 动力老男孩 发表于 2010/06/05 21:32:06上次提到了“甜美的声音”,今天介绍一下如何让萝卜头发出声音。NXT的发声装置就是盒子上那个小喇叭,因为喇叭质量不是很高,所以别太指望萝卜头能演奏世界名曲。从开发角度来说,NXT内置了很多种发声的方式,详细内容可以参考leJOS中文教程 – 播放声音。例如,我们用下面的代码就可以让NXT蜂鸣两声:
Sound.twoBeeps();
NXT还可以直接播放8位的wav文件,播放命令是:
Sound.playSample(new File("Start.wav"));
下面介绍一下如何制作这样的wav文件。
首先要录制声音,用手头的任意录音工具都可以,例如手机,mp3,其实电脑本身也可以录音。萝卜头一共需要三句台词:“开始”、“结束”和“出错啦”。可以一次录完,把三段声音录在一起,每句台词之间留一点停顿,后期容易裁剪。
录好音之后,一般会生成*.wav或者*.mp3的文件。这种直接录好的文件一般都是双声道,而且采样频率比较高。这种高级音频萝卜头是没法识别的,要适当压缩成萝卜头可以处理的格式。
强烈推荐一款叫“CoolEdit”的音频处理工具,打开录好的音频文件,可以看到有声音的部分是波形图,中间停顿的部分几乎是平的直线。可以用鼠标拖动选择相应的音频,然后在菜单中选择“选中部分另存为..”,保存的格式选择“Wave PCM unsigned 8 bit,8000HZ,64kbps,单声道”,就可以生成相应的wav文件了。最后可以生成以下三个文件:
下面把这几个文件下载到NXT中,在命令行中运行:E:\lejos_nxj\bin\nxjbrowse.bat。如果萝卜头开机的话,这个工具的“download”功能,依次把三个文件都保存到NXT中。
最后在程序的相应地方加入播放代码即可,上一篇中已经看到了出错信息的播放,“开始”和“结束”的播放程序为:
if(hasCube && isChaotic) { //The cube is read, init the error status hasError = false; //Play some sound to notice the "Start" Thread.sleep(1000); Sound.twoBeeps(); Thread.sleep(1000); Sound.playSample(new File("Start.wav")); //Ignore solve cube codes...... if(!hasError) { //The cube has been solved isChaotic = false; Sound.playSample(new File("End.wav")); Thread.sleep(1000); //Rotate the cube two circles for annoucement Robot.RotateBottom(8); } }
不錯, 收官了.
哈哈哈哈哈哈,终于等到这一天了!
O(∩_∩)O谢谢