我已经写出了这些我认为应该成功生成适当波形的公式。我如何将其与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;
}
}
答案 0 :(得分:1)
我是通过创建一个实现TargetDataLine的类来实现的。大多数要覆盖的方法都可以忽略。数据从TargetDataLine.read()方法提供给SourceDataLine。您将从TargetDataLine中查询您的公式,以填充传递给SDL的数据缓冲区。
我假设您已经知道以适当的字节格式将音频值转换为PCM数据。
我使用了波表,并使用公式来生成波表中的数据,但您的公式应该没问题。只需要让它们映射到位分辨率(16位?)和fps速率(44100 Hz?)。