声音 - 什么是原始声音数据?

时间:2014-03-14 15:33:01

标签: audio decode

我有代码解码MP3并使用所有'值'填充数组。 我的问题是:这些价值观是什么?它们是频率吗?他们是振幅吗? 这是代码:

File file = new File(song.getFilepath());
                if (file.exists()) {
                    AudioInputStream in = AudioSystem.getAudioInputStream(file);
                    AudioInputStream din = null;
                    AudioFormat baseFormat = in.getFormat();
                    AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
                            baseFormat.getSampleRate(),
                            16,
                            baseFormat.getChannels(),
                            baseFormat.getChannels() * 2,
                            baseFormat.getSampleRate(),
                            false);
                    din = AudioSystem.getAudioInputStream(decodedFormat, in);
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    byte[] data = new byte[4096];
                    SourceDataLine line = getLine(decodedFormat);

                    int nBytesRead = 0, nBytesWritten = 0;
                    while (nBytesRead != -1) {
                        nBytesRead = din.read(data, 0, data.length);
                        if (nBytesRead != -1) {
                            nBytesWritten = line.write(data, 0, nBytesRead);
                            out.write(data, 0, nBytesRead);
                        }
                    }
                    byte[] audio = out.toByteArray();
                    System.err.println(audio.length);
                    for (byte b : audio) {
                        System.err.println(b);
                    }
                }

我获得了大约40,000,000个数字(字节数组长度)的3分钟歌曲,但我不知道它们是什么?

1 个答案:

答案 0 :(得分:2)

它们是振幅。通常,每个幅度为16位(2个字节,范围从-32768到32767),并且有两个通道(左和右)。在这种情况下,一个声音样本跨越四个字节。 例: 100,0,2,1 表示左幅度为100(32767),右边为258。