Моя цель — генерировать синусоидальные, квадратные, треугольные и пилообразные сигналы с помощью Android AudioTrack Класс.
Я предпринял попытку на основе учебника. Он работает относительно хорошо, хотя я не всегда уверен, насколько точно генерируемая частота соответствует заданной частоте.
Я хотел бы сделать квадратные, треугольные и т.д. функции. Учебник реализует только синус. Поэтому мой вопрос:
Как именно работает образец
new Thread( new Runnable( )
{
public void run( )
{
final float frequency = 440;
float increment = (float)(2*Math.PI) * frequency / 44100; // angular increment for each sample
float angle = 0;
AudioDevice device = new AndroidAudioDevice( );
float samples[] = new float[1024];
while( true )
{
for( int i = 0; i < samples.length; i++ )
{
samples[i] = (float)Math.sin( angle );
angle += increment;
}
device.writeSamples( samples );
}
}
} ).start();
Могу ли я преобразовать синус в квадрат следующим образом (используя сигнум-функцию)?
samples[i] = (float)Math.signum(Math.sin( angle ));
По сути, я хотел бы фундаментально понять написанные образцы, чтобы я мог генерировать различные сигналы, а также в конечном итоге накладывать их.
Спасибо за ваше время!