我的目标是使用Android的AudioTrack类生成正弦、square、三角和锯齿信号。
我做了一个基于教程的尝试。它的工作相对良好,虽然我并不总是确定产生的频率与所针对的频率对应的准确程度。
我想做正方形、三角形等功能。本教程只实现正弦。因此,我的问题是:
样本到底是如何工作的?
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 ));基本上,我想从根本上理解正在编写的示例,这样我就可以生成各种信号并最终实现superposition。
谢谢您抽时间见我!
发布于 2011-10-15 02:58:52
我知道这是一年前的事但是..。是的,先生应该工作得很好。抛开角度,增加生意。
这个代码叠加了两个信号--一个正方形和一个不同频率的三角形。
int rate = 44100;
AudioDevice device = new AndroidAudioDevice( );
float samples[] = new float[1024];
while( true )
{
for( int i = 0; i < samples.length; i++ )
{
samples[i] = (float)(0.5*Math.signum(Math.sin(550*2*Math.PI*i/rate))+0.5*Math.asin(Math.sin(450*2*Math.PI*i/rate)));
}
device.writeSamples( samples );
}顺便说一句,一个更好的方法可能是:((550.0*2*i/rate)%2<0?-1:1)
https://stackoverflow.com/questions/3986248
复制相似问题