相关疑难解决方法(0)

2454
推荐指数
25
解决办法
111万
查看次数

Java和0xff的值是什么?

我有以下Java代码:

byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;
Run Code Online (Sandbox Code Playgroud)

打印时结果是254,但我不知道这段代码是如何工作的.如果&运算符只是按位,那么为什么它不会产生一个字节而是一个整数呢?

java byte integer bitwise-and

91
推荐指数
3
解决办法
10万
查看次数

如何计算java中音频信号的电平/幅度/ db?

我想在java中为麦克风创建一个音频电平表来检查输入的大小.它应该看起来像操作系统之一.我不是在询问gui.它只是计算出来的字节流中的音频电平

n = targetDataLine.read( tempBuffer , 0 , tempBuffer.length );
Run Code Online (Sandbox Code Playgroud)

所以我已经有一些正在运行的东西,但它甚至没有接近我操作系统的水平仪(窗口)它卡在中间.我有0到100之间的值是好的,但在中间音量,无论输入多么大,它都会在60左右.

这是我现在计算的方式:

            amplitude = 0;
        for (int j = 0; j < tempBuffer.length; j = j +2 ){
            if (tempBuffer[j] > tempBuffer[j+1])
                amplitude = amplitude + tempBuffer[j] - tempBuffer[j+1];
            else amplitude = amplitude + tempBuffer[j + 1] - tempBuffer[j];
        }
        amplitude = amplitude / tempBuffer.length * 2;
Run Code Online (Sandbox Code Playgroud)

是否有更好/更精确的方法来计算音频电平来监控它?或者我可能犯了一个重大错误?

那是我的Audioformat:

public static AudioFormat getAudioFormat(){
    float sampleRate = 20000.0F;
    //8000,11025,16000,22050,44100
    int sampleSizeInBits = 16;
    //8,16
    int channels = 1;
    //1,2
    boolean signed …
Run Code Online (Sandbox Code Playgroud)

java audio javasound javax.sound.sampled

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

如何在Java或C中监视/采样输出音频?

最近我一直在试验我在计算机上播放的音频的实时可视化(通过任何任意程序,如Spotify),但我一直在使用SoundFlower将输出音频输入到假行中.

我想知道的是,如果有一种C/C++或Java原生的方式,它将允许我捕获发送到我的计算机的任何音频(我正在使用Mac),以类似于我的方式可以捕获一行(IE是一个连续填充PCM数据的样本缓冲区).

除了读取输出数据外,我不想模仿SoundFlower的其他功能.

c c++ java audio

6
推荐指数
1
解决办法
546
查看次数

傅立叶变换字节数组

我对Java不太熟悉,所以请保持简单.但是,我会尝试理解你发布的所有内容.这是我的问题.

我编写了代码来记录来自外部麦克风的音频并将其存储在.wav中.存储此文件与存档目的相关.我需要做的是存储音频的FFT.

我的方法是将wav文件作为一个字节数组加载并转换它,问题是1.我需要摆脱一个标题,但我应该能够做到这一点而且2.我得到了一个字节数组,但我在网上找到的大多数(如果不是全部)FFT算法都尝试使用复杂/两个双数组修补我的项目工作.

我试图解决这两个问题,最后能够将我的FFT数组绘制成图形,当我发现它只是给我回"0"时..wav文件很好,我可以毫无问题地播放它.我想也许把字节转换成双打对我来说是个问题,所以这是我的方法(我知道它不漂亮)

byte ByteArray[] = Files.readAllBytes(wav_path);
String s = new String(ByteArray);
double[] DoubleArray = toDouble(ByteArray);
// build 2^n array, fill up with zeroes
boolean exp = false;
int i = 0;
int pow = 0;
while (!exp) {
    pow = (int) Math.pow(2, i);
    if (pow > ByteArray.length) {
        exp = true;
    } else {
        i++;
    }
}
System.out.println(pow);
double[] Filledup = new double[pow];
for (int j = 0; j < DoubleArray.length; j++) {
    Filledup[j] = DoubleArray[j];
    System.out.println(DoubleArray[j]);
} …
Run Code Online (Sandbox Code Playgroud)

java arrays audio byte fft

4
推荐指数
1
解决办法
2074
查看次数

将FFT应用于java中的录音

我在这个网站上看到过与此类似的类似问题,但我的问题有点不同.我用来捕获音频的代码就是这个.我想简单地获取捕获的音频并用256点应用FFT.

我意识到这line count = line.read(buffer, 0, buffer.length);会将音频分解为"块".

我也可以在这里找到我正在使用的FFT .

我的问题是:

  1. 我想知道是否有办法将FFT应用于整个录音而不仅仅是缓冲量.
  2. 我看到FFT的代码需要一个实部和虚部,我如何通过音频文件从代码中获取实部和虚部.

java audio signal-processing fft

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

Java的声音API不适用于所有.WAV文件?

我目前在使用javax.sound.sampled图书馆时遇到了麻烦.这是我用来播放音频文件的MCV代码:

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

public class Foo
{
    public static void main(String[] args)
    {
        try
        {
            File f = new File("alarm.wav");
            AudioInputStream ais = AudioSystem.getAudioInputStream(f);
            Clip clip = AudioSystem.getClip();

            clip.open(ais);
            clip.start();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码有时会抛出一个UnsupportedAudioFileException.

基本上,我有5个.WAV文件,我知道这些文件没有损坏,因为当我在我的音乐播放软件中打开它们时它们完全没问题.但是,Java程序仅适用于其中的3个.

Oracle在此提及对此文件格式的支持.如何确保所有.WAV文件都与Java的音频API兼容?是否有一种万无一失的播放.WAV文件的方式,如果由于某种原因他们没有适当的编码?

java audio exception

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