java - Java中如何合成声音?

标签 java audio pulseaudio

我正在尝试在 Ubuntu 11.10 笔记本电脑上用 Java 编写自定义合成器。这是我的代码:

package com.sibbo.audio;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;

public class Audio {
    public static void main(String[] args) throws LineUnavailableException {
        byte[] data = new byte[16000 * 2];

        sinus(data);

        AudioFormat format = new AudioFormat(16000, 8, 1, true, true);
        Clip c = javax.sound.sampled.AudioSystem.getClip();
        c.open(format, data, 0, data.length); // throws IllegalArgumentException
    }

    private static void sinus(byte[] data) {
        for (int i = 0; i < data.length; i++) {
            data[i] = (byte) (Math.sin(i / 200.0) * 127);
        }
    }
}

在标记行处,它抛出异常,指出:“格式无效”。如何确定哪些音频格式是合法的?我已经尝试过切换有符号/无符号和小/大端的 boolean 值。

最佳答案

我认为错误消息的意思是相反的。它并不是提示系统不支持 AudioFormat,而是它无法将您的数据解析为这种格式。来自 Javadoc :

Throws:
IllegalArgumentException - if the buffer size does not represent an integral number of sample frames, or if format is not fully specified or invalid

关于java - Java中如何合成声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280402/

相关文章:

java - 对 Liskov 替换原则的合规性进行单元测试是一种好的做法吗?

javascript - 使用 Web Audio API 改变音频速度而不改变音高

Javascript 函数 navigator.getUserMedia 在 Safari 5 中未定义?

java - 在Ubuntu上通过PulseAudio从Java播放音频文件时出错

java - "Accessing the Client Using JNLP API"示例,部署在 GlassFish 上时出现错误 : FailedDownload Exception,

java - 为什么总是 threadPoolExecutor.getActiveCount() <= MaximumPoolSize/2?

android - 音频显示未播放Android

c - PulseAudio API - 无麦克风信号

Java 过滤列表到泛型类型 T