按钮按下时声音大小的问题:

3

我目前正在开发一款输入法,其中有按钮点击的声音。在设置屏幕中有一个选项可以更改声音的音量。SeekBar值从0.0到1.0。现在,我尝试让用户在设置屏幕中配置按钮音量,之后获取该值并将其保存为mSoundVol参数。因此,对于点击声音,我编写了以下方法:

 float soundVolume;
 int maxVolume, sound;

        switch (primaryCode) {
            case Keyboard.KEYCODE_DELETE:
                maxVolume = mAudioManager.getStreamMaxVolume(mAudioManager.FX_KEYPRESS_DELETE);
                sound = mAudioManager.FX_KEYPRESS_DELETE;
                Log.d(TAG+ "-volume", "chosen sound: mAudioManager.FX_KEYPRESS_DELETE");
                break;
            case ASCII_ENTER:
                maxVolume = mAudioManager.getStreamMaxVolume(mAudioManager.FX_KEYPRESS_RETURN);
                sound = mAudioManager.FX_KEYPRESS_RETURN;
                Log.d(TAG+ "-volume", "chosen sound: mAudioManager.FX_KEYPRESS_RETURN");
                break;
            case ASCII_SPACE:
                maxVolume = mAudioManager.getStreamMaxVolume(mAudioManager.FX_KEYPRESS_SPACEBAR);
                sound = mAudioManager.FX_KEYPRESS_SPACEBAR;
                Log.d(TAG+ "-volume", "chosen sound: mAudioManager.FX_KEYPRESS_SPACEBAR");
                break;
            default:
                maxVolume = mAudioManager.getStreamMaxVolume(mAudioManager.FX_KEYPRESS_STANDARD);
                sound = mAudioManager.FX_KEYPRESS_STANDARD;
                Log.d(TAG + "-volume", "chosen sound: mAudioManager.FX_KEYPRESS_STANDARD");
        }

        soundVolume = maxVolume * mSoundVol;
        Log.d(TAG+ "-volume", "current max volume: " + maxVolume + " current volume setting: " +mSoundVol * 100 +"%" + " volume result: " + soundVolume);
        mAudioManager.playSoundEffect(sound, soundVolume);

但是由于某些原因,这并没有改变用户听到的声音大小。

有人能告诉我在AudioManager方面我做错了什么吗?

谢谢。

2个回答

1

你需要使用这个方法来获得更准确的结果

AudioManager audioManager = 
    (AudioManager)getSystemService(Context.AUDIO_SERVICE);

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);

编辑

以这个FLAg为例

AudioManager.FLAG_PLAY_SOUND

这意味着每当用户按下音量按钮时,将输出一个蜂鸣声。

编辑2

以下是代码的实现

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             AudioManager.getStreamMaxVolume(),
                             AudioManager.FLAG_PLAY_SOUND);

我不明白,如果我想执行与playSoundEffect方法相同的操作,我该怎么做? - Emil Adz
是的,但您需要根据您的代码调整片段。 - Nadir Belhaj
我尝试应用您的解决方案,但这会改变按钮点击的声音,并且每次我按下按钮时都会显示音量条。如果您仔细看,我正在使用FX_KEYPRESS常量而不是流常量。也许这就是原因。 - Emil Adz
而不是使用playSoundEffect方法播放声音并调整音量,我做了这个:mAudioManager.setStreamVolume(sound, (int)soundVolume , sound); mAudioManager.playSoundEffect(sound); - Emil Adz
3个参数应该是一个标志,就像这个 AudioManager.FLAG_PLAY_SOUND。 - Nadir Belhaj
显示剩余5条评论

0

我的情况下解决方案如下:

 float soundVolume;
        int maxVolume, sound;

        switch (primaryCode) {
            case Keyboard.KEYCODE_DELETE:
                sound = mAudioManager.FX_KEYPRESS_DELETE;
                break;
            case ASCII_ENTER:
                sound = mAudioManager.FX_KEYPRESS_RETURN;
                break;
            case ASCII_SPACE:
                sound = mAudioManager.FX_KEYPRESS_SPACEBAR;
                break;
            default:
                sound = mAudioManager.FX_KEYPRESS_STANDARD;
                break;
        }
        maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        soundVolume = maxVolume * mSoundVol;
        mAudioManager.setStreamVolume(AudioManager.STREAM_SYSTEM , (int)(soundVolume * 1.5) , 0);
        mAudioManager.playSoundEffect(sound);

重要的是将setStreamVolume方法的最后一个参数传递为0,这样此操作仅更改音量而不播放任何其他声音或显示音量UI。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接