我正在使用Codename One录制麦克风输入并将其播放回连接的耳机。
首先,如果我将麦克风的音频录制到文件中,并在录制结束时播放,则按预期工作。这就是为什么基于这个2014 question我实现了2个周期性任务(定时器和时间任务),只要2个文件:一个用于录制,一个用于播放。我将周期性任务周期设置为100毫秒到几秒之间的值,但结果在Android设备上很糟糕。确实有随机的差距,它根本不光滑,也不可理解。
我认为每个句点写入文件的开销太高,因此导致了这种行为。所以using proper high-level Codename One methods似乎不太可能。
然后在2014年的同一个问题中,请求者建议从录制媒体创建输入流并将其用作播放媒体的输入。但是,方法MediaManager.createMediaRecorderStream()
似乎不再可用。我尝试将用于录制音频的文件用作通过fs.openInputStream(recFilepath)
播放媒体的InputStream,但它没有在设备上输出任何声音或错误。
所以我的问题是我是否能用裸露的Codename One实现我的目标,还是必须使用原生界面?此外,Shai(在2014年上面提到的问题中)写道,MediaManager.createMediaRecorderStream()
的第二种方法可能适用于某些平台:这些平台中的Android平台,还是仅针对iOS平台?
任何帮助表示感谢,并且对于不发布代码感到抱歉,因为一旦尝试似乎无效,我就会立即清除它。所以我真的搞砸了我的代码,现在我没有做任何我最初的目标。
干杯,
答案 0 :(得分:1)
据我所知,Android在当天没有支持媒体输入流,后来只允许直接捕获输入作为未压缩的WAV,这使得全双工使用变得不切实际。这可能已经改变,因为我记得他们对媒体库进行了一些改革。
我不确定这是否在我们的更高级代码中公开。除了使用本机接口之外,您还可以通过分叉和黑客攻击来帮助我们改进Codename One,例如这是Android项目中的相关代码:
这是Codename One的贡献指南,它涵盖了在模拟器中运行,但这是一个良好的开端:https://www.codenameone.com/blog/how-to-use-the-codename-one-sources.html
您可以在Android设备上测试您的更改,并在此处提供说明:https://www.codenameone.com/blog/debug-a-codename-one-app-on-an-android-device.html