我在无线电数据模式解码程序中使用 javax.sound.sampled 包。要使用该程序,用户将无线电接收器中的音频输入到 PC 的线路输入中。用户还需要使用他们的混音器程序来选择线路作为录音输入。问题是有些用户不知道如何执行此操作,有时其他程序也会更改录音输入设置。所以我的问题是我的程序如何检测线路是否设置为录音输入?如果我的程序检测到录音输入设置不正确,是否可以更改录音输入设置?
谢谢你的时间。
伊恩
嗨,我正在尝试编写一个将播放摩尔斯电码的应用程序.我只是想知道java中是否有默认的系统声音,如是一些嘟嘟声,还是我必须从互联网上下载一些声音文件?
我有一个带有多个输出的声卡,并使用 ALSA 将它们映射到 2 个独立的立体声通道。配置工作正常,并允许我,例如使用扬声器测试在它们上播放音频。
我现在想使用 AudioSystem API 在 Java 程序中使用这 2 个立体声输出。但是,立体声 1 和立体声 2 不会使用 MixerInfo 显示。
我真的不明白 Java 如何决定使用 AudioSystem API 公开哪些“设备”。我目前正在 Ubuntu 11.10 系统上对此进行测试。
这是使用的 asound.conf:
#/etc/asound.conf
pcm_slave.fourchannels {
pcm "hw:0,0"
channels 4
}
pcm.stereo1 {
type plug
slave.pcm {
type dshare
ipc_key 87882222
slave fourchannels
bindings [ 0 1 ]
}
}
pcm.stereo2 {
type plug
slave.pcm {
type dshare
ipc_key 87882222
slave fourchannels
bindings [ 2 3 ]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用来显示可用输入和输出的代码:
Mixer.Info[] mixers = …Run Code Online (Sandbox Code Playgroud) 我想用我自己的样本以编程方式创建一个小型音库,并通过标准的 Sun JDK Midi Synthesizer 播放它们。
已经读过它们是 Beatnik 格式的,但我找不到规范。
此外,我真的不需要将音库存储为文件,因为如果有一种方法可以在使用音库播放其中的乐器之前以编程方式从样本创建音库,那就可以了。
有任何想法吗?
2021 年 1 月 21 日更新:由于支持 Java 7 sf2-soundbanks!所以不要再想那些beatnik的东西了,反正这家公司已经不在了。这是规范:http : //www.synthfont.com/sfspec24.pdf
我写了一个简单的类来在一个简单的游戏中播放音频文件.它适用于枪声或爆炸等小声音,但当我尝试将它用于背景音乐时,我收到了此错误:"无法分配剪辑数据:请求的缓冲区太大." 我假设这意味着文件太大,但我怎么能解决这个问题呢?资源:
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class Sound{
private Clip clip;
public Sound(String filepath){
System.out.println(filepath);
File file = new File(filepath);
try {
clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(file);
clip.open(inputStream);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
public void play(){
System.out.println("play");
if(clip.isActive()){
clip.stop();
}
clip.setFramePosition(0);
clip.start();
}
public void stop(){
clip.stop();
}
public void loop(){
if(!clip.isActive()){
clip.setFramePosition(0);
clip.loop(Clip.LOOP_CONTINUOUSLY);
}else{
System.out.println("ALREADY PLAYING");
}
}
public boolean getActive(){return clip.isActive();}
}
Run Code Online (Sandbox Code Playgroud) 如何使用Java擦除wav文件的静音(低于阈值)部分?有人说"从PCM数据中提取样本".我怎样才能做到这一点?
我是一名学习 Java 的学生,正在为我的简历做一个独立的项目。我决定做一个 Java 计算器,因为我知道组成它的大部分组件。我不知道该怎么做的一件事是在按钮按下时添加声音。我对 Audiostream 输入的内容有一个模糊的想法。但是我的计算器上的每个按钮都需要独特的声音。现在我的计算器还没有完全完成(监听器还没有工作。)我只是想知道将我的 .wav 文件合并到按钮按下的最佳方法是什么。提前致谢。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator {
//instance variables
JFrame frame;
JPanel mainPanel, northPanel, southPanel;
JTextField numberLabel;
JButton backspace, multiply, divide, add, subtract, equal; //four function buttons
JButton one, two, three, four, five, six, seven, eight, nine, zero; //number buttons
JButton posOrNeg, decimal, leftParenthese, rightParenthese;
//constructor
public Calculator()
{
//create it
frame = new JFrame();
mainPanel = new JPanel(); //contains both panels
mainPanel.setForeground(Color.BLACK);
mainPanel.setBackground(Color.DARK_GRAY);
northPanel = new JPanel(new …Run Code Online (Sandbox Code Playgroud) 过去几周我一直在阅读 Java Sound API,但我仍然不知道这是否可行。我之所以这么问是因为我想编写一个程序,该程序将通过系统的声音数据传送到输出线路,例如计算机的扬声器或耳机插孔,并将该数据写入音频文件。
从我读迄今约javax.sound.sampled,好像我可以从数据只读Mixer通过TargetDataLine; 然而,在编写了一个测试程序(下面提供)来查询我的系统以获取可用的混合器,然后查询这些混合器以获取可用的目标和源数据线;我意识到我所有的输出混音器除了我的默认混音器只支持SourceDataLines。此外,我无法判断TargetDataLine计算机的默认混音器(我有一台 Macbook pro)是否可以读取从其他应用程序发送到混音器的音频数据。所以在我深入研究这个项目之前,我想弄清楚是否有可能访问其他应用程序通过混音器发送的声音。
import javax.sound.sampled.*;
import java.util.Scanner;
public class Capture {
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_RESET = "\u001B[m";
private Mixer mixer;
public Capture() {
Mixer.Info[] installedMixers = AudioSystem.getMixerInfo();
for(int n = 0; n < installedMixers.length; n++) {
System.out.println(ANSI_GREEN + "[" + n + "] " + ANSI_RESET + …Run Code Online (Sandbox Code Playgroud) 我正在使用 Gervill 的软件合成器加载 SF2 音库,并从 Midi 键盘播放音乐,我想知道是否可以通过 ASIO 播放输出,可能是通过JAsioHost。我一直在尝试查看 Gervill 源代码以查找原始音频数据何时实际传递给音频驱动程序,但我似乎无法找到它,即使那样,我也不确定这是否是正确的做法。
我使用的链是使用 SF2loader 将声音字体加载到默认合成器中,然后我使用通道 noteOn 方法播放音符。
我写了一个代码来读取WAV文件(大小约为80 MB)并播放它.问题是声音播放严重(极端滞后).你能告诉我这是什么问题吗?
这是我的代码:(我doPlay在Jframe构造函数中调用函数)
private void doPlay(final String path) {
try {
stopPlay();
InputStream is = new FileInputStream(path);
InputStream bufferedIn = new BufferedInputStream(is);
AudioInputStream ais = AudioSystem.getAudioInputStream(bufferedIn);
AudioFormat format = ais.getFormat();
// this is the value of format.
// PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip)AudioSystem.getLine(info);
clip.open(ais);
clip.start();
} catch (Exception e) {
stopPlay();
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)