Моя цель - генерировать синус , квадрат , треугольник и пилообразные сигналы с помощью 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();
Можно ли превратить синус в квадрат следующим образом (используя функцию signum)?
samples[i] = (float)Math.signum(Math.sin( angle ));
По сути, я хотел бы в общих чертах понять, что пишутся сэмплы, чтобы я мог генерировать различные сигналы, а также в конечном итоге суперпозиция их.
Спасибо за ваше время!