Графическое отображение высоты звука (частоты)

Я хочу изобразить высоту звука в виде графика.

В настоящее время я могу построить график амплитуды. График ниже создан на основе данных, возвращаемых getUnscaledAmplitude () :

alt text

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
byte[] bytes = new byte[(int) (audioInputStream.getFrameLength()) * (audioInputStream.getFormat().getFrameSize())];
audioInputStream.read(bytes);

// Get amplitude values for each audio channel in an array.
graphData = type.getUnscaledAmplitude(bytes, 1);


public int[][] getUnscaledAmplitude(byte[] eightBitByteArray, int nbChannels)
{
    int[][] toReturn = new int[nbChannels][eightBitByteArray.length / (2 * nbChannels)];
    int index = 0;

    for (int audioByte = 0; audioByte < eightBitByteArray.length;)
    {
        for (int channel = 0; channel < nbChannels; channel++)
        {
            // Do the byte to sample conversion.
            int low = (int) eightBitByteArray[audioByte];
            audioByte++;
            int high = (int) eightBitByteArray[audioByte];
            audioByte++;
            int sample = (high << 8) + (low & 0x00ff);

            toReturn[channel][index] = sample;
        }
        index++;
    }

    return toReturn;
}

Но мне нужно показать высоту звука, а не амплитуду. Быстрое преобразование Фурье , похоже, помогает понять тон, но для этого нужно знать больше переменных, чем у меня есть сырые байты, и оно очень сложное и математическое.

Есть ли способ сделать это?

34
задан Amy B 16 January 2011 в 22:52
поделиться