double* Oscillator::fillWhiteNoiseBuffer(int bufferLength) { _currentPhase = 0.0; _bufferLength = bufferLength; if(_buffer != nullptr) delete _buffer; _buffer = new double[_bufferLength]; for(int i = 0; i < _bufferLength; ++i) { _buffer[i] = generateWhiteNoise(); } return _buffer; }
void NoiseGenerator::generatePerlinNoise ( int seed, int width, int height ) { this->width = width; this->height = height; srand(seed); generatedNoise = getArray(); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { generatedNoise[x][y] = 0; } } int numOctaves = 8; float*** octaves = new float**[numOctaves]; for (int i = 0; i < numOctaves; i++) { octaves[i] = new float*[width]; for (int j = 0; j < width; j++) { octaves[i][j] = new float[height]; } } float** baseNoise = generateWhiteNoise(); for (int i = 0; i < numOctaves; i++) { octaves[i] = generateSmoothNoise(baseNoise, i); } float amplitude = 1.0f; float totalAmplitude = 0.0f; float persistence = 0.5f; for (int i = numOctaves - 1; i >= 0; i--) { amplitude *= persistence; totalAmplitude += amplitude; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { generatedNoise[x][y] += octaves[i][x][y] * amplitude; } } } for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { generatedNoise[x][y] /= totalAmplitude; } } }