我在这里找不到任何相关的帖子(但是互联网上的其他小帖子),所以这里是:
AudioManager.setMicrophoneMute(boolean)在我测试的某些特定设备上没有做任何事情:谷歌Nexus S,三星Galaxy S和摩托罗拉Milestone.在任何其他设备上它运作良好.
它甚至保持其"状态"并返回一个布尔值,好像它被静音\取消静音,但它没有静音 - 麦克风继续记录 - 在GSM通话和AudioRecord编程录音中.没有指示性日志消息.
我也搞乱了权限(android.permission.MODIFY_AUDIO_SETTINGS,android.permission.RECORD_AUDIO),这里没什么新东西.
还有其他人遇到过吗?有没有人有解决方法或神奇的解决方案?如果我使用AudioRecord,我只是为这些设备实现自己的"静音" - 我不会传递录制的缓冲区.但它无法帮助我在GSM呼叫中静音麦克风,这是我需要的.
谢谢
----------------更新----------------
见下文.
小智 5
嗨,我有同样的问题,我想模拟来电屏幕.并且在该屏幕内有一个执行静音的按钮,AudioManager.setMicrophoneMute(boolean)可以在大多数手机上使用,但不能在所有手机上使用.我找到了解决它的方法.我模拟免提套件上的按静音按钮.它对我有用希望它也会帮助你这里是代码:
Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);
buttonUp.putExtra(Intent.EXTRA_KEY_EVENT,new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK));
getBaseContext().sendOrderedBroadcast(buttonUp,"android.permission.CALL_PRIVILEGED");
Run Code Online (Sandbox Code Playgroud)
我有这个问题,因为我想编辑包含AAC音频数据的M4A文件.我希望能够合并它们并添加静音作为填充.由于不同设备每帧的毫秒数差异,我决定将麦克风静音并录制一秒静音,然后在我需要填充静音时反复重复.(M4A + AAC静音比原始PCM更复杂).
不幸的是,我在Android设备上遇到了许多静音差异.这是我学到的:
在我的例子中,为了生成一个静音文件,给定设备使用每帧的适当毫秒数(因此它与其他音频文件合并时兼容),我使用类似于这样的代码:
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int oldAudioMode = audioManager.getMode();
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setMicrophoneMute(true);
MediaRecorder mediaRecorder = new MediaRecorder();
int bitRate = 1000 * 160;
mediaRecorder.setAudioEncodingBitRate(bitRate);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(silenceFile.getAbsolutePath());
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setAudioSamplingRate(44100);
try {
mediaRecorder.prepare();
} catch (IOException ioe) {
throw new RuntimeException("could not prepare mediarecorder to create silence file",ioe);
}
mediaRecorder.start();
audioManager.setMicrophoneMute(true); //re-mute for devices like HTC Flyer that unmute
try {
Thread.sleep(SILENCE_LENGTH_MILLIS);
} catch (InterruptedException ie) {
throw new RuntimeException("could not record silence file", ie);
}
mediaRecorder.stop();
audioManager.setMicrophoneMute(false);
audioManager.setMode(oldAudioMode);
int currentVersion = android.os.Build.VERSION.SDK_INT;
if (currentVersion <= android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
//cut out beginning half second and use that, since it's always silent on Gingerbread
} else {
//Honeycomb and up
//Take end of audio and use that--if the device unmuted itself there may be a little noise at the beginning
}
Run Code Online (Sandbox Code Playgroud)
这是一个完整的解决方案?不会.有些设备不会静音.如果您尝试静音,其他设备(如前面提到的HP Touchpad)会导致所有新问题.希望这些技巧至少可以帮助人们在大多数Android设备上静音.
没有找到解决办法。如果录制的音频用作数据缓冲区,请使用静音 PCM 数据(用零填充)。如果您需要以编程方式将常规电话静音,请告知用户此设备需要从通话屏幕手动静音。
我认为这是最终的答案,但请给我一个惊喜。
| 归档时间: |
|
| 查看次数: |
10630 次 |
| 最近记录: |