标签: javasound

使用Java Sound API进行多通道USB录制?

我正在尝试使用Snow Leopard上的Java Sound录制/处理来自三个usb麦克风的一些音频(但如果修复了某些内容,可以切换到Windows).问题是,当我尝试使用与usb麦克风相对应的混音器时,Java Sound告诉我该行不受支持.具体来说,它说...

可用的搅拌机:

Java声音音频引擎

USBMIC Serial#041270067

内置输入内置麦克风

Soundflower(2ch)

Soundflower(16ch)

线程"AWT-EventQueue-0"中的异常java.lang.IllegalArgumentException:Line unsupported:interface TargetDataLine支持格式PCM_SIGNED 96000.0 Hz,8位,立体声,2字节/帧,

...当我要求它选择USBMIC调音台时:

  Mixer mixer = AudioSystem.
          getMixer(mixerInfo[1]);
Run Code Online (Sandbox Code Playgroud)

我已经尝试将音频格式与麦克风(16位,44100Hz,立体声)的确切规格相匹配,但没有任何区别.

问题出在这里:

 final TargetDataLine line = (TargetDataLine)
        mixer.getLine(info);
Run Code Online (Sandbox Code Playgroud)

似乎混音器和TargetDataLine彼此不喜欢.有没有办法让这两个人"匹配"并相处?

我正在使用的麦克风确实有点奇怪.它们被用于名为SingStar的卡拉OK视频游戏中.麦克风本身具有标准的单声道输入连接器,插入一个小集线器(两个到集线器),将它们转换为单个公头usb连接器.但是,除了陌生之外,它们似乎与Audacity一起作为单独的频道完美地工作,所以用它们进行多声道录音显然是可能的,也许不是用Java.

我还考虑使用像Soundflower这样的程序,在不同程序之间共享音频.但是,我不确定这是否会起作用,因为我无法看到如何将USB麦克风输入到Soundflower,然后将它们传输到Java中.一个快速的实验告诉我,我可以从麦克风中录制Audacity中的音频,通过Soundflower将其输出,然后在我的Java程序中处理.不过,我想要做的就是让它全部用Java实现.

有人熟悉这类问题吗?

java usb record microphone javasound

45
推荐指数
1
解决办法
3244
查看次数

用Java读取MIDI文件

我正在尝试将.MID文件读入Java程序,并希望将每个音符/和弦分开,以便在某种UI上显示它们.我在Java中使用Sequencer API并没有太多运气,并且尝试直接使用MidiFileReader对我来说也不起作用.我会附上我在这里使用的代码,如果有人想看到的话:

package miditest;
import java.io.File;
import java.io.IOException;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;

public class Main {
    public static void main(String[] args) throws InvalidMidiDataException, IOException, MidiUnavailableException{
    Sequence sequence = MidiSystem.getSequence(new File("test.mid"));

    // Create a sequencer for the sequence
    Sequencer sequencer = MidiSystem.getSequencer();
    sequencer.open();
    sequencer.setSequence(sequence);

    // Start playing
    sequencer.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

java audio midi javasound

32
推荐指数
1
解决办法
3万
查看次数

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

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

java audio javasound

21
推荐指数
2
解决办法
7万
查看次数

如何使用Java Sound中的音频样本数据?

这个问题通常被问到是另一个问题的一部分,但事实证明答案很长.我决定在这里回答它,所以我可以在其他地方链接到它.

虽然我不知道Java此时可以为我们生成音频样本的方式,但如果将来发生变化,这可能是一个适合它的地方.我知道JavaFX有一些这样的东西,例如AudioSpectrumListener,但仍然不能直接访问样本.


我正在javax.sound.sampled用于播放和/或录制,但我想对音频做些什么.

也许我想直观地展示它或以某种方式处理它.

如何使用Java Sound访问音频样本数据?

也可以看看:

java audio javasound audio-processing javax.sound.sampled

18
推荐指数
1
解决办法
9775
查看次数

录制时检测静音

在Java中开始录制操作时,如何检测静音?什么是PCM数据?如何在Java中计算PCM数据?

我找到了解决方案:

package bemukan.voiceRecognition.speechToText;

import javax.sound.sampled.*;
import java.io.*;

public class RecordAudio {
    private File audioFile;
    protected boolean running;
    private ByteArrayOutputStream out;
    private AudioInputStream inputStream;
    final static float MAX_8_BITS_SIGNED = Byte.MAX_VALUE;
    final static float MAX_8_BITS_UNSIGNED = 0xff;
    final static float MAX_16_BITS_SIGNED = Short.MAX_VALUE;
    final static float MAX_16_BITS_UNSIGNED = 0xffff;
    private AudioFormat format;
    private float level;
    private int frameSize;

    public RecordAudio(){
         getFormat();
    }

    private AudioFormat getFormat() {
        File file = new File("src/Facebook/1.wav");
        AudioInputStream stream;
        try {
            stream = AudioSystem.getAudioInputStream(file);
            format=stream.getFormat();
            frameSize=stream.getFormat().getFrameSize();
            return …
Run Code Online (Sandbox Code Playgroud)

java audio speech-recognition javasound

17
推荐指数
1
解决办法
2万
查看次数

我在哪里可以下载mp3plugin.jar来播放Java代码中的MP3?

我需要在Linux环境下使用Java代码播放MP3文件(Ubuntu 11.04).

我试图从http://www.oracle.com/technetwork/java/javase/download-137625.html下载MP3plugin.jar文件,但我在列表中看不到它.

注意:"我下载了sun Java Media Framework"

java mp3 jmf javasound ubuntu-11.04

16
推荐指数
1
解决办法
2万
查看次数

从Java加入两个WAV文件?

在Java 1.6中连接两个WAV文件的最简单方法是什么?(等频和所有,没什么特别的.)

(这可能太简单了,但今天我的Google-fu在这个问题上似乎很弱.)

java audio javasound

15
推荐指数
1
解决办法
3万
查看次数

Java音频可视化器 - 如何捕获扬声器的实时声音输出?

tl; dr对于未来的读者,使用Java或C#无法(现在)录制实时音频.使用C++,因为它提供了大量的音频api.


我的目标是获得在Windows机器上播放的当前声音,并像图形音频可视化器一样分析声音(获得音量属性和Hz(基数和高音)).当我说当前声音时,我的意思是如果要播放Youtube视频或Spotify歌曲,这个程序会读取该音频输出.我无意播放声音,但实时捕捉它并将其可视化.

在尝试这样做时,我阅读了如何构建音频波形显示,并探讨了如何将音频文件转换为字节数组(一行).这没有用,因为它不会得到当前的声音.我还阅读了如何捕获音频,以及这个java访问声音教程,这些都没有回答我的问题,因为它们都需要加载歌曲文件.

我根本就不理解这一点.我完全无能为力,任何帮助都会受到赞赏.

编辑:我做了一些更多的环顾四周,这个来源第二个答案让我得出结论:我可以找到所有的音频设备,看看哪一个产生声音.我不知道在那之后该怎么办.

编辑2(再次编辑):从实验和环顾四周,我在下面编写了这段代码.我认为这让我朝着我想要的方向前进,但我不知道如何完成它.

    Mixer.Info[] mixers = AudioSystem.getMixerInfo();
    for (Mixer.Info mixerInfo : mixers) {
        Mixer mixer = AudioSystem.getMixer(mixerInfo);
        try {
            mixer.open();
            Line.Info[] lines = mixer.getTargetLineInfo();
            for (Line.Info linfo : lines) {

                Line line = AudioSystem.getLine(linfo);

                //here I'm opening the line, but I don't know how to grab data
                line.open();

            }
        } catch (LineUnavailableException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

我使用了这个来源:在混音器行中检查音频播放的级别 …

java audio javasound output

15
推荐指数
1
解决办法
2747
查看次数

我怎么知道我是否在事件发送线程上?

1.考虑我的代码是在我的JPanel的某些行上,我是否自动在EDT上?

2.对于不属于GUI,JPanels或其他视图类,简单逻辑类的所有其他类的同名问题.

3.如果我有JPanel我正在播放音乐,那么音乐应该在事件发送线程上运行还是在非EDT的其他线程上运行(因为我没有遇到任何运行问题)来自EDT)?

注意:我想要一般规则如何在不使用SwingUtilities.isEventDispatchThread()
Thanks的情况下了解它

java swing javasound jpanel event-dispatch-thread

14
推荐指数
2
解决办法
7677
查看次数

Java中的正弦波声音发生器

在Java中以任何频率生成正弦波声音的最简单方法是什么?样本大小超过2个字节会有所帮助,但这并不重要.

谢谢

java audio trigonometry javasound wave

13
推荐指数
3
解决办法
4万
查看次数