【发布时间】:2022-12-19 16:55:32
【问题描述】:
我正在尝试在电视上的 Android 应用程序中使用 Watson Speech to Text API。我在电视模拟器上试了一下,在虚拟遥控器上启用麦克风后,应用程序可以正常工作。但是当我在真实硬件上试用该应用程序时,它根本没有记录我的演讲。
所以我所做的是添加在"How to check if android microphone is available for use?" 的验证答案中找到的一段代码。然后我在我的类 extendind GLSurfaceView 的 onKeyDown() 函数中添加了代码,以检查是否按下了键盘的中心键。在这种情况下,应用程序会检查设备是否有麦克风,然后根据麦克风的可用性显示适当的消息。
代码清单 1: 检查麦克风
public class OpenGLView extends GLSurfaceView
{
//constructors and other member functions here
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
if(getMicrophoneAvailable(ctx))
{
Toast.makeText(Display.getInstance().getContext(), "Microphone available!", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Display.getInstance().getContext(), "Microphone not available!", Toast.LENGTH_SHORT).show();
}
}
return super.onKeyDown(keyCode, event);
}
}
我在启用和不启用麦克风的情况下在模拟器上尝试了修改后的应用程序。吐司说“麦克风可用!”是唯一一个显示。当我在我的 Android TV 设备上尝试时也是如此。我从 "How to check if android microphone is available for use?" 获得的代码无法正常工作,或者麦克风可用性和激活在 Android TV 上不同。我希望以后。这就是我来这里的原因。
我想知道如何以编程方式启用麦克风。我认为这是可以做到的,因为可以通过按下中间的 DPAD 按钮在电视最左上角的菜单中启用语音助手菜单。
我使用的 Android TV 设备上没有麦克风,但麦克风位于遥控器上,如下图所示(左上角的麦克风孔):
另请注意,我正在加载麦克风以这种方式进行录音。
代码清单 3:加载并启动麦克风
MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile("file.3gp");
mediaRecorder.prepare();
mediaRecorder.start();
【问题讨论】: