Tag: javasound

如何将SourceDataLine的内容写入文件?

我正在修改播放音频数据的应用程序,以便将数据写入文件。 当前实现时,动态填充字节数组,每次填充时,此缓冲区的内容都写入SourceDataLine。 我基本上想要将缓冲区写入指定格式的文件中。 我已经阅读了这个官方教程,并且发现这段代码已被剪切,用于将音频数据写入文件: File fileOut = new File(someNewPathName); AudioFileFormat.Type fileType = fileFormat.getType(); if (AudioSystem.isFileTypeSupported(fileType, audioInputStream)) { AudioSystem.write(audioInputStream, fileType, fileOut); } 我从API文档中看到我可以使用TargetDataLine构造一个AudioInputStream,但在我的例子中我有一个SourceDataLine。 我不知道如何将我的字节数组中的数据导入TargetDataLine,因为它实现了read()方法而不是write()。 AudioInputStream的其他用途以及其他文档将其视为从文件中读取的一种方式,因此我对它与AudioSystem.write()的使用感到有些困惑。 那么,如何将数据从SourceDataLine或直接从缓冲区获取到TargetDataLine或AudioInputStream中,以便将其写入文件?

如何从MIDI序列获取音符开/关信息?

我希望在播放MIDI序列中收到音符开/关事件的通知,以在基于屏幕的(钢琴)键盘上显示音符。 下面的代码在播放MIDI文件时添加MetaEventListener和ControllerEventListener ,但仅在轨道的开头和结尾显示一些消息。 我们怎样才能听取关于MIDI事件的注释和注释? import java.io.File; import javax.sound.midi.*; import javax.swing.JOptionPane; class PlayMidi { public static void main(String[] args) throws Exception { /* This MIDI file can be found at.. https://drive.google.com/open?id=0B5B9wDXIGw9lR2dGX005anJsT2M&authuser=0 */ File path = new File(“I:\\projects\\EverLove.mid”); Sequence sequence = MidiSystem.getSequence(path); Sequencer sequencer = MidiSystem.getSequencer(); sequencer.open(); MetaEventListener mel = new MetaEventListener() { @Override public void meta(MetaMessage […]

帧率与采样率

采样率和帧率之间有什么区别? 我尝试检查一首歌,并使用java找到了采样率和帧率。它们具有相同的值,这让我感到困惑。 框架由多个样本组成? 谢谢

音频:更改字节数组中的样本量

我正在使用这种方法将wav文件读取到字节数组(如下所示) 。 现在我把它存储在我的字节数组中,我想改变音量。 private byte[] getAudioFileData(final String filePath) { byte[] data = null; try { final ByteArrayOutputStream baout = new ByteArrayOutputStream(); final File file = new File(filePath); final AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); byte[] buffer = new byte[4096]; int c; while ((c = audioInputStream.read(buffer, 0, buffer.length)) != -1) { baout.write(buffer, 0, c); } audioInputStream.close(); baout.close(); data […]

如何在Java中对多声道声音输入进行采样

我意识到这可能是相对利基,但也许这就是为什么这是好的问题无论如何。 我正在寻找一个硬件多输入录音控制台(例如Alesis IO 26)来接收Adat lightpipe 8声道输入来进行信号处理。 由于我还没有获得该设备并且需要弄清楚这是否可行(预算问题),我想问一下是否有人有任何经验来获取Java中的所有这8个数据输入? 我已经看过很多使用Javax.sound.sampled库录制声音的例子,但是我找不到任何超过2的多声道信息。我感兴趣的是将8个声道单独作为单声道源采样到对它们执行一些简单的DSP。 硬件设备会被视为一个混音器吗? 8个通道表示为8行? 我希望我的术语合适。 如果有人可以向我指出任何相关信息,我将不胜感激。 谢谢!

Java剪辑不起作用

有人可以帮我理解为什么下面这段代码不起作用? 我通过调用方法start()启动剪辑。 此方法为剪辑创建一个新线程以运行。 然而,不,它似乎没有发挥任何作用。 编译代码时没有任何错误…… public class Audio { private Clip clip; private Thread thread; public Audio (String audioFile) { AudioInputStream audioStream = null; URL audioURL = this.getClass().getClassLoader().getResource(audioFile); // Obtain audio input stream from the audio file and load the information // into main memory using the URL path retrieved from above. try { audioStream […]

返回音频文件类型列表

回答这个问题: 我想创建一个java程序,其中有一个combobox,显示文件夹中所有可用文件的标题 另一种实现答案的方法引起了我的注意; 使用AudioSystem.getAudioFileTypes()返回指定文件夹中所有支持的音频文件。 我是一个相当缺乏经验的编码员,我无法将这种方法整合到我给出的答案中 File someFolder = new File(“pathname”); Object[] wavFiles = someFolder.listFiles(wavExtensionFilenameFilter); JComboBox songComboBox = new JComboBox(wavFiles); 有人能告诉我这是怎么做的吗?

音频不会在Jar中播放,但会在eclipse中播放

当我运行JAR时,声音不会播放,但是当我在eclipse中运行它时它就会播放。 这是我加载剪辑的地方: public void init(){ System.out.println(“grabbing Music”); String currentDir = new File(“”).getAbsolutePath(); name=new File(currentDir+”\\music\\”).list(); clip=new Clip[name.length]; soundFile=new File[name.length]; for(int x=0;x<name.length;x++){ System.out.println(currentDir+"\\music\\"+name[x]); try { soundFile[x]= new File(currentDir+"\\music\\"+name[x]); AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile[x]); DataLine.Info info= new DataLine.Info(Clip.class, sound.getFormat()); clip[x] = (Clip) AudioSystem.getLine(info); clip[x].open(sound); clip[x].addLineListener(new LineListener(){ public void update(LineEvent event) { if (event.getType() == LineEvent.Type.STOP) { event.getLine().close(); } } […]

我如何一次播放两个声音?

当我尝试在applet中同时播放两个声音时,它将无法正常工作。 我正在使用AudioClip 。 甚至可以在小程序中一次播放两个声音吗?

Java Applet:基本鼓组

我正在尝试编写一个有四个按钮的applet,所有按钮都播放一个简短的音频文件。 目标是尝试让用户成功点击按钮任意次,从而创建一个节拍。 这是我的尝试: import java.awt.*; import java.applet.*; import java.awt.event.*; import javax.swing.*; public class drumKit extends JApplet { private JButton snareButton; private JButton hiHatButton; private JButton bassButton; private JButton cymbalsButton; private AudioClip snare; private AudioClip hiHat; private AudioClip bass; private AudioClip cymbals; public void init() { setLayout (new FlowLayout()); sampleButtons(); snare = getAudioClip(getDocumentBase(), “Snare.wav”); hiHat = […]