正如Iftah在这个回答中所说的那样,我可以通过将Intent传递给Uri来获取由Android中的Speech Recoginition录制的音频:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// the recording url is in getData:
Uri audioUri = data.getData();
}
Run Code Online (Sandbox Code Playgroud)
这里Intent data有我想要的没有问题.
这一切都完美无缺,但是这个解决方案为用户提示何时发言,我不想这样解决问题我让我的活动实现了RecognitionListener:
public class MainActivity extends AppCompatActivity implements RecognitionListener {
private SpeechRecognizer speech = null;
private Intent recognizerIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "sv_SE");
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "sv_SE");
recognizerIntent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR");
recognizerIntent.putExtra("android.speech.extra.GET_AUDIO", true);
speech = SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
speech.startListening(recognizerIntent);
}
@Override
public void onReadyForSpeech(Bundle params) …Run Code Online (Sandbox Code Playgroud) 考虑到例如一个 unsigned char 将总是被提升为一个 int 我可以假设如果我在转换结果之前不强制转换为 unsigned char 将始终是实现定义的吗?
例如:
unsigned char c = 0x0F;
unsigned int a = c >> 2;
Run Code Online (Sandbox Code Playgroud)
这里c在向右移动之前将被提升为 int。因此,转换将是实现定义的,具体取决于编译器。
正确的方法是:
unsigned int a = (unsigned char)c >> 2;
Run Code Online (Sandbox Code Playgroud)
我的问题是,这种说法是否正确:
如果不转换为无符号类型,则对任何小于 int 的数据类型进行任何转换都将是实现定义的?
我有3个标签,我在这张图片中互相放置:
但是现在它们被放置在左侧,我不希望它们被放置在水平中心.以下是水平放置的可视格式代码:
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[label][label2][label3]|",
options: [],
metrics: nil,
views: views)
Run Code Online (Sandbox Code Playgroud)
无论我测试什么,我都无法让他们集中,任何想法?
我尝试找到一个列出所有可能性的好答案(也许只有一种?)。
那么考虑到有符号数和无符号数,C 语言中导致 UB 移位的方法有哪些?