播放生成的声音J2ME
问题描述:
我对Android的这个代码,可以播放自定义声音,它工作正常:播放生成的声音J2ME
AudioTrack output = new AudioTrack(AudioManager.STREAM_MUSIC, baudRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT, bufferSize, AudioTrack.MODE_STATIC);
output.write(myGeneratedWaveform, 0, myGeneratedWaveform.length);
output.play();
我怎样才能实现与J2ME一样吗?
我正在检查Manager.createPlayer(...)的API,但没有找到示例代码。
任何帮助将是apreciated。
编辑: 我有一个PCM编码波形阵列。我希望用诺基亚Series 40重现这一点。但是我总结说这种格式不支持这种格式,只有AMR。所以,一个开源的库可以将PCM转换为AMR。
答
请检查场景7的JSR-135 Overview:从介质中回放存储在JAR中。
InputStream is = getClass().getResourceAsStream("audio.wav");
Player p = Manager.createPlayer(is, "audio/X-wav");
p.start();
答
J2ME内置音乐播放器能够播放任何输入流,而不仅仅是从媒体存储中捕获的一个。我的意思是,您可以创建原始字节数组,它以某种音频格式表示您的声音数据,然后将其表示为输入流,就像播放预先存储的音频文件一样播放它。
byte[] data; // your audio data, let us say it represents content of a proper wav-file
Player player = Manager.createPlayer(new ByteArrayInputStream(data), "audio/x-wav");
player.start();
就是这样。顺便说一句,您可以简单地使用旧版本的JFugue,它可以使用上述技巧为J2ME编译。您将获得由音乐字符串生成的MIDI输出,例如“Cmaj G I [长笛] C” - 可能对耳朵训练midlet很方便,等等。任何有兴趣的人都可以查看http://code.google.com/p/jfugue2me/