【问题标题】:captureAudio example in codenameone not working on device simulator代号中的 captureAudio 示例无法在设备模拟器上运行
【发布时间】:2016-11-14 13:04:50
【问题描述】:

我正在尝试代号文档https://gist.githubusercontent.com/codenameone/a347dc9dcadaa759d0cb/raw/089f171a37e43f558ce897a0b51cab46219c37c0/CaptureAudioSample.java中给出的 captureAudio 示例

为了方便,这里复制代码:

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 并尝试在设备模拟器中测试上述代码。但是,当我单击麦克风按钮时,我会看到一个“文件选择器”对话框,其中仅启用了一个取消选项。单击取消时没有任何反应。如果我选择一个 wav 文件,然后单击确定,它会被复制,我可以在模拟器中播放它。模拟器不支持麦克风输入吗?它是否被文件输入取代?还是我做错了什么?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    我们不会从模拟器中的麦克风捕获,因为我们认为文件选择器更便于调试和模拟实际捕获情况。这使我们能够 100% 准确地重现故障/测试用例。

    JavaSE 中的媒体 API 也是“不稳定的”,我们不想再依赖它们了。

    在设备上,您将像往常一样获得录音机界面。

    请注意,图像、视频捕获和从图片库中挑选也是如此。

    【讨论】:

    • 谢谢!但是手机上是否存在标准的录音机接口?对于视频,我知道它确实如此。
    • 如何获取有关录音的更多信息,如采样率、每个样本的位数等?
    • 是的,iOS 中有一个界面,不确定“标准”是否合适。 Capture 不提供其他信息。如果您需要更好的控制,您可以使用 MediaManager 类创建录音机,请注意您仍然受限于支持的文件类型/编解码器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多