我正在使用RecogenerIntent开发一个android应用程序。ACTION\u RECOGNIZE\u SPEECH,,,我的问题是我不知道如何创建缓冲区来捕获用户输入的语音。我读了很多关于堆栈溢出的文章,但我不明白如何将缓冲区和识别服务调用包含回代码中。我将如何回放保存到缓冲区中的内容。
这是我的代码:
public class Voice extends Activity implements OnClickListener {
byte[] sig = new byte[500000] ;
int sigPos = 0 ;
ListView lv;
static final int check =0;
protected static final String TAG = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.voice);
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
"com.domain.app");
SpeechRecognizer recognizer = SpeechRecognizer
.createSpeechRecognizer(this.getApplicationContext());
RecognitionListener listener = new RecognitionListener() {
@Override
public void onResults(Bundle results) {
ArrayList<String> voiceResults = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
if (voiceResults == null) {
Log.e(TAG, "No voice results");
} else {
Log.d(TAG, "Printing matches: ");
for (String match : voiceResults) {
Log.d(TAG, match);
}
}
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.d(TAG, "Ready for speech");
}
@Override
public void onError(int error) {
Log.d(TAG,
"Error listening for speech: " + error);
}
@Override
public void onBeginningOfSpeech() {
Log.d(TAG, "Speech starting");
}
@Override
public void onBufferReceived(byte[] buffer) {
// TODO Auto-generated method stub
TextView display=(TextView)findViewById (R.id.Text1);
display.setText("True");
System.arraycopy(buffer, 0, sig, sigPos, buffer.length) ;
sigPos += buffer.length ;
}
@Override
public void onEndOfSpeech() {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int eventType, Bundle params) {
// TODO Auto-generated method stub
}
@Override
public void onPartialResults(Bundle partialResults) {
// TODO Auto-generated method stub
}
@Override
public void onRmsChanged(float rmsdB) {
// TODO Auto-generated method stub
}
};
recognizer.setRecognitionListener(listener);
recognizer.startListening(intent);
startActivityForResult(intent,check);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
Android语音识别API(从API级别17开始)不提供捕获音频的可靠方法。
您可以使用“buffer received”回调,但请注意
RecognitionListener谈到onBufferReceived:
收到更多声音。此功能的目的是允许向用户提供有关捕获音频的反馈。无法保证将调用此方法。
缓冲区:包含代表单声道音频流的大端16位整数序列的缓冲区。采样率取决于实现。
和认可服务。回调表示关于bufferReceived:
服务应该在收到声音时调用此方法。此功能的目的是允许就捕获的音频向用户提供反馈。
缓冲区:包含代表单声道音频流的大端16位整数序列的缓冲区。采样率取决于实现。
因此,此回调用于有关捕获的音频的反馈,而不一定是捕获的音频本身,也就是说,出于可视化目的,可能是它的简化版本。此外,“无法保证会调用此方法”,即Google Voice Search可能会在v1中提供此方法,但随后决定在v2中删除它。
还要注意,在识别过程中可以多次调用此方法。但是,如果缓冲区表示完整录制的音频或仅表示自上次调用以来的片段,则没有文档记录。(我假设是后者,但您需要使用语音识别器进行测试。)
问题内容: 在编写用于OpenGL库的Matrix类时,我遇到了一个问题,即使用Java数组还是使用Buffer策略存储数据(JOGL为Matrix操作提供直接缓冲区复制)。为了对此进行分析,我编写了一个小型性能测试程序,该程序比较了Arrays vs Buffers和Direct Buffers上循环和批量操作的相对速度。 我想在这里与您分享我的结果(因为我发现它们很有趣)。请随时发表评论和/或
我正在尝试构建一个同时使用Google协议缓冲区和使用Gradle的Kotlin的项目。我希望将proto文件编译成Java源代码,然后从我的Kotlin代码中调用它。 我的源文件是这样排列的: 这是我的构建。gradle文件: 当我运行时,我在期间收到一堆“未解决的引用”错误。之后,我可以看到没有生成Java源文件,因此似乎根本没有调用原始编译器。 如果我删除了apply插件:“kotlin”行
问题内容: 我有一个内存泄漏,我已经将其隔离到错误配置的直接字节缓冲区。 GC收集包含这些缓冲区但不处理缓冲区本身的对象。如果实例化包含缓冲区的瞬态对象足够多,则会得到以下令人鼓舞的消息: 我一直在寻找这个问题,显然 和 不工作。 问题答案: 我怀疑您的应用程序某处有对ByteBuffer实例的引用,这阻止了它被垃圾回收。 直接ByteBuffer的缓冲内存是在普通堆之外分配的(以便GC不会移
如何将语言模型集成到tensorflow语音识别体系结构中? 在Tensorflow中建立字符级语音识别有很多例子(例如。https://github.com/nervanasystems/neon, https://github.com/buriburisuri/speech-to-text-wavenet),这很有趣,但实际上毫无用处,除非集成了语言模型。我找不到使用语言模型的示例。 如何集成
给定一个Geopandas GeoDataFrame,我想提取GeoDataFrame的总边界,由单元缓冲。 通过,我可以访问整个DataFrame中组合几何的非缓冲边界。我想到的一种方法是取这些边界,将它们转换为Shapely多边形,然后缓冲它。
两者都是序列化库,由谷歌开发人员开发。他们之间有什么大的区别吗?将使用协议缓冲区的代码转换为使用FlatBuffers需要大量工作吗?