Код: Выделить всё
void OnAudioFilterRead(float[] data, int channels)
{
if (playing)
{
data = PlaySineWave(freq, realAmp, data, channels);
}
else
{
data = new float[0];
}
}
public float[] PlaySineWave(float frequency, float amplitude, float[] data, int channels)
{
double phaseIncrement = frequency / sampleRate;
for (int sample = 0; sample < data.Length; sample += channels)
{
float value = Mathf.Sin((float)phase * 2 * Mathf.PI) * amplitude * saturation;
phase = (phase + phaseIncrement) % 1;
for (int chan = 0; chan < channels; chan++)
{
data[sample + chan] = value;
}
}
return data;
}
Код: Выделить всё
public float[] PlaySineWave(float[] frequency, float amplitude, float[] data, int channels)
{
data = new float[data.Length];
for (int i = 0; i < frequency.Length; i++)
{
double phaseIncrement = frequency[i] / sampleRate;
for (int sample = 0; sample < data.Length; sample += channels)
{
float value = Mathf.Sin((float)phase * 2 * Mathf.PI) * amplitude * saturation;
phase = (phase + phaseIncrement) % 1;
for (int chan = 0; chan < channels; chan++)
{
data[sample + chan] += value;
}
}
}
return data;
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... de-the-dat
Мобильная версия