codenameone 中的 captureAudio 示例无法在设备模拟器上运行
captureAudio example in codenameone not working on device simulator
我正在尝试 codenameone 文档中给出的 captureAudio 示例 https://gist.githubusercontent.com/codenameone/a347dc9dcadaa759d0cb/raw/089f171a37e43f558ce897a0b51cab46219c37c0/CaptureAudioSample.java
为方便起见,将代码复制到这里:
Form hi = new Form("Capture", BoxLayout.y());
hi.setToolbar(new Toolbar());
Style s = UIManager.getInstance().getComponentStyle("Title");
FontImage icon = FontImage.createMaterial(FontImage.MATERIAL_MIC, s);
FileSystemStorage fs = FileSystemStorage.getInstance();
String recordingsDir = fs.getAppHomePath() + "recordings/";
fs.mkdir(recordingsDir);
try {
for(String file : fs.listFiles(recordingsDir)) {
MultiButton mb = new MultiButton(file.substring(file.lastIndexOf("/") + 1));
mb.addActionListener((e) -> {
try {
Media m = MediaManager.createMedia(recordingsDir + file, false);
m.play();
} catch(IOException err) {
Log.e(err);
}
});
hi.add(mb);
}
hi.getToolbar().addCommandToRightBar("", icon, (ev) -> {
try {
String file = Capture.captureAudio();
if(file != null) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MMM-dd-kk-mm");
String fileName =sd.format(new Date());
String filePath = recordingsDir + fileName;
Util.copy(fs.openInputStream(file), fs.openOutputStream(filePath));
MultiButton mb = new MultiButton(fileName);
mb.addActionListener((e) -> {
try {
Media m = MediaManager.createMedia(filePath, false);
m.play();
} catch(IOException err) {
Log.e(err);
}
});
hi.add(mb);
hi.revalidate();
}
} catch(IOException err) {
Log.e(err);
}
});
} catch(IOException err) {
Log.e(err);
}
hi.show();
我正在使用 Intellij 并尝试在设备模拟器中测试上述代码。但是当我单击麦克风按钮时,我看到一个 'file chooser' 对话框,其中只启用了一个取消选项。单击取消没有任何反应。如果我选择一个 wav 文件然后单击确定,它会被复制并且我可以在模拟器中播放它。模拟器不支持麦克风输入吗?它会被文件输入取代吗?还是我做错了什么?
我们不在模拟器中从麦克风中捕捉,因为我们认为文件选择器更便于调试和模拟实际捕捉案例。这使我们能够 100% 准确地重现 failures/test 个案例。
此外,JavaSE 中的媒体 API 是 "flaky",我们不想再依赖它们了。
在设备上,您将像往常一样获得录音机界面。
请注意,图像、视频捕获和从图片库中挑选也是如此。
我正在尝试 codenameone 文档中给出的 captureAudio 示例 https://gist.githubusercontent.com/codenameone/a347dc9dcadaa759d0cb/raw/089f171a37e43f558ce897a0b51cab46219c37c0/CaptureAudioSample.java
为方便起见,将代码复制到这里:
Form hi = new Form("Capture", BoxLayout.y());
hi.setToolbar(new Toolbar());
Style s = UIManager.getInstance().getComponentStyle("Title");
FontImage icon = FontImage.createMaterial(FontImage.MATERIAL_MIC, s);
FileSystemStorage fs = FileSystemStorage.getInstance();
String recordingsDir = fs.getAppHomePath() + "recordings/";
fs.mkdir(recordingsDir);
try {
for(String file : fs.listFiles(recordingsDir)) {
MultiButton mb = new MultiButton(file.substring(file.lastIndexOf("/") + 1));
mb.addActionListener((e) -> {
try {
Media m = MediaManager.createMedia(recordingsDir + file, false);
m.play();
} catch(IOException err) {
Log.e(err);
}
});
hi.add(mb);
}
hi.getToolbar().addCommandToRightBar("", icon, (ev) -> {
try {
String file = Capture.captureAudio();
if(file != null) {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MMM-dd-kk-mm");
String fileName =sd.format(new Date());
String filePath = recordingsDir + fileName;
Util.copy(fs.openInputStream(file), fs.openOutputStream(filePath));
MultiButton mb = new MultiButton(fileName);
mb.addActionListener((e) -> {
try {
Media m = MediaManager.createMedia(filePath, false);
m.play();
} catch(IOException err) {
Log.e(err);
}
});
hi.add(mb);
hi.revalidate();
}
} catch(IOException err) {
Log.e(err);
}
});
} catch(IOException err) {
Log.e(err);
}
hi.show();
我正在使用 Intellij 并尝试在设备模拟器中测试上述代码。但是当我单击麦克风按钮时,我看到一个 'file chooser' 对话框,其中只启用了一个取消选项。单击取消没有任何反应。如果我选择一个 wav 文件然后单击确定,它会被复制并且我可以在模拟器中播放它。模拟器不支持麦克风输入吗?它会被文件输入取代吗?还是我做错了什么?
我们不在模拟器中从麦克风中捕捉,因为我们认为文件选择器更便于调试和模拟实际捕捉案例。这使我们能够 100% 准确地重现 failures/test 个案例。
此外,JavaSE 中的媒体 API 是 "flaky",我们不想再依赖它们了。
在设备上,您将像往常一样获得录音机界面。
请注意,图像、视频捕获和从图片库中挑选也是如此。