首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中的音频音量控制(增加或减少)

Java中的音频音量控制(增加或减少)
EN

Stack Overflow用户
提问于 2009-06-04 23:20:27
回答 3查看 81.9K关注 0票数 24

如何使用Java增加传出wav音频流的音量?我遇到了各种Java TTS引擎和合成语音的输出量的问题。有没有API调用或doo-hickey.jar可以用来提升音量?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-05 00:23:16

如果您使用的是Java Sound API,则可以使用MASTER_GAIN控件设置音量。

代码语言:javascript
复制
import javax.sound.sampled.*;

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(
    new File("some_file.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
FloatControl gainControl = 
    (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(-10.0f); // Reduce volume by 10 decibels.
clip.start();
票数 42
EN

Stack Overflow用户

发布于 2009-06-04 23:41:13

您可以使用GainControl调整音量,在打开线路后尝试执行以下操作

代码语言:javascript
复制
FloatControl volume= (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); 
票数 11
EN

Stack Overflow用户

发布于 2013-07-06 19:07:44

代码语言:javascript
复制
public final class VolumeControl
{

    private VolumeControl(){}

    private static LinkedList<Line> speakers = new LinkedList<Line>();

    private final static void findSpeakers()
    {
        Mixer.Info[] mixers = AudioSystem.getMixerInfo();

        for (Mixer.Info mixerInfo : mixers)
        {
            if(!mixerInfo.getName().equals("Java Sound Audio Engine")) continue;

            Mixer mixer         = AudioSystem.getMixer(mixerInfo);
            Line.Info[] lines   = mixer.getSourceLineInfo();

            for (Line.Info info : lines)
            {

                try 
                {
                    Line line = mixer.getLine(info);
                    speakers.add(line);

                }
                catch (LineUnavailableException e)      { e.printStackTrace();                                                                                  } 
                catch (IllegalArgumentException iaEx)   {                                                                                                       }
            }
        }
    }

    static
    {
        findSpeakers();
    }

    public static void setVolume(float level)
    {
        System.out.println("setting volume to "+level);
        for(Line line : speakers)
        {
            try
            {
                line.open();
                FloatControl control = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN);
                control.setValue(limit(control,level));
            }
            catch (LineUnavailableException e) { continue; }
            catch(java.lang.IllegalArgumentException e) { continue; }



        }
    }

    private static float limit(FloatControl control,float level)
    { return Math.min(control.getMaximum(), Math.max(control.getMinimum(), level)); }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/953598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档