1

我已经写出了这些公式,我认为它们应该能够成功地生成适当的波形。我如何将它与 java 声音库集成来为每个声音库创建测试音?

import java.lang.Math;

public class SoundWaves 
{
    int WAV_MULTI = 25;
    int amplitude;
    double frequency;
    int time;
    double sineWave;
    double sawWave;
    double squareWave;

    SoundWave ( int a, int f, int t)
    {
    }

    double makeSineWave ( int a,  int f, int t)
    {
        sineWave = a * Math.sin(2*PI*f*t); //passing amplitude frequency and time
        return sineWave;
    }

    double makeSawTooth (int a, int f, int t)
    {
        for ( int i = 1; i < WAV_MULTI; i++)
        {
            sawWave = sawWave + (Math.sin((2*PI*f*(i*t)/i); 
        }   
        return sawWave;
    }

    double makeSquareWave (int a, int f, int t)
        {
            for ( int i = 1; i < WAV_MULTI; i++)
            {
            if ( i%2 != 0 )
            squareWave = squareWave + (Math.sin((2*PI*f* (i*t)/i);  
            }   
            return squareWave;
        }
}
4

1 回答 1

1

我通过创建一个实现 TargetDataLine 的类来做到这一点。大多数要覆盖的方法都可以忽略。数据从 TargetDataLine.read() 方法馈送到 SourceDataLine。将从 TargetDataLine 查询您的公式以填充传递给 SDL 的数据缓冲区。

我假设您已经知道如何以适当的字节格式将音频值转换为 PCM 数据。

我使用了一个波表,并使用公式来生成波表中的数据,但你的公式应该没问题。只需让它们映射到位数分辨率(16 位?)和 fps 速率(44100 Hz?)。

于 2012-12-04T07:35:46.907 回答