public void ThreadBeep(double amplitude, double Frequency, int Duration, WaveTypes waveType, bool applyWaveTable = true, bool applyAdsr = true) { new Task( new Action(() => { BeepBeepWave(amplitude, Frequency, Duration, waveType, applyWaveTable, applyAdsr); })).Start(); }
public float GetWaveYPos(Vector3 position, float timeSinceStart) { if (isMoving) { return(WaveTypes.SinXWave(position, speed, scale, waveDistance, noiseStrength, noiseWalk, timeSinceStart)); } else { return(0f); } }
public void appendWaveTypesMenu(WaveTypes it, ToolStripDropDown menu) { var u = this; Menu_AppendItem( menu, Utils.WaveTypesToStringR(it), ((_, __) => { u.Wave = it; u.ExpireSolution(true); }), true, u.Wave == it); }
/// <summary> /// Creates basic audio waves /// </summary> /// <param name="waveType"></param> /// <param name="waveAttributes"></param> /// <returns></returns> static public WaveChunk MakeWave(WaveTypes waveType, WaveAttributes waveAttributes) { switch (waveType) { case WaveTypes.SineWave: return(MakeSineWave(waveAttributes)); case WaveTypes.Square: return(MakeSquareWave(waveAttributes)); case WaveTypes.Sawtooth: return(MakeSawtooth(waveAttributes)); case WaveTypes.Triangle: return(MakeTriangle(waveAttributes)); case WaveTypes.WhiteNoise: return(MakeWhiteNoise(waveAttributes)); default: throw new ArgumentException("Not a valid wave type"); } }
/// <summary> /// Amplitude on scale from 0.0 to 1.0 /// </summary> /// <param name="amp"></param> /// <param name="Frequency"></param> /// <param name="Duration">msec</param> /// <param name="waveType"></param> public void BeepBeepWave(double amplitude, double Frequency, int Duration, WaveTypes waveType, bool applyWaveTable = true, bool applyAdsr = true) { double DeltaFT = 2 * Math.PI * Frequency / 44100.0; // used for sinusoid generation int freqPeriod = (int)(44100 / Frequency); int totalSamples = 441 * Duration / 10; short Sample = 0; int Bytes = totalSamples * 8; using (MemoryStream MS = new MemoryStream(Bytes)) { using (BinaryWriter BW = new BinaryWriter(MS)) { waveType = WaveTypes.Sin; //A =2; double amplFreqPeriod = amplitude;// (A / freqPeriod); // used when doing 16 bit pcm wav double dblSample = 0; for (int T = 0; T < totalSamples; T++) { if (waveType == WaveTypes.Triangle) { int tMod = T % freqPeriod; //triangle wave if (tMod < freqPeriod / 2) { dblSample = (Math.Abs((T % freqPeriod) * (2 * amplFreqPeriod))); // } else { dblSample = amplitude - (Math.Abs((T % freqPeriod) * (amplFreqPeriod))); } } else if (waveType == WaveTypes.Square) { dblSample = ((T % freqPeriod) < (amplFreqPeriod / 2) ? amplitude : 0); } else if (waveType == WaveTypes.RawWavetable) { dblSample = amplitude; // let wavetable apply shaping } else if (waveType == WaveTypes.Sin) { dblSample = 50 * DeltaFT + (amplitude * Math.Sin(DeltaFT * T)); //sine } else if (waveType == WaveTypes.Sawtooth) { dblSample = (Math.Abs((T % freqPeriod)) * (amplFreqPeriod)); //sawtooth wave } //apply wavetable synthesis int waveTableIndex = 0; if (applyWaveTable) { waveTableIndex = (int)(((double)WaveTable.Length) / ((double)freqPeriod)) * (T % freqPeriod); dblSample *= WaveTable[waveTableIndex]; } if (applyAdsr) { // apply ADSR to overall waveform waveTableIndex = (int)(T * (((double)AdsrTable.Length) / totalSamples)); // index into ADSR table = total # of samples / tableLength dblSample *= AdsrTable[waveTableIndex]; } Single sSamp = System.Convert.ToSingle(dblSample); //if (T % 1 == 0) System.Diagnostics.Debug.WriteLine(T + ": " + sSamp); BW.Write(sSamp); //BW.Write(sSamp);// (if writing 2 channels) } BW.Flush(); MS.Seek(0, SeekOrigin.Begin); byte[] bytes = MS.ToArray(); //var waveFileReader = new RawSourceWaveStream(MS, WaveFormat.CreateIeeeFloatWaveFormat(44100,1)); var waveFileReader = new RawSourceWaveStream(bytes, 0, bytes.Length, msp.WaveFormat); msp.AddMixerInput(waveFileReader); //OutputDevice.Init(msp); OutputDevice.Play(); System.Threading.Thread.Sleep(Duration); } } //memorystream } //end function
public static string WaveTypesToStringR(WaveTypes d) => d.ToString().Replace("_", " ");
public void SpawnOneTick(EnemyStrength enemyStrength, ref ConcurrentQueue <SpawnObject> spawnQueue, WaveTypes waveType, float innerRadius = 1600f / 64f, float outerRadius = 2000f / 64f, float sideLength = 4000f / 64f) { EnemySpawnObject enemySpawn = new EnemySpawnObject(); var rand = new Random(); var entropy = (float)rand.NextDouble(); if (waveType == WaveTypes.Ring) { //Set enemy spawn using MATH POWAH //https://stackoverflow.com/questions/9048095/create-random-number-within-an-annulus //theta = random.uniform(0,2*pi) float theta = (float)rand.NextDouble() * (float)Math.PI * 2f; //A = 2/(r_max*r_max - r_min*r_min) float A = 2 / (outerRadius * outerRadius - innerRadius * innerRadius); //r = sqrt(2*random.uniform(0,1)/A + r_min*r_min) float r = (float)Math.Sqrt( 2 * rand.NextDouble() / (double)A + (double)innerRadius * (double)outerRadius); var spawnPosition = new Vector2(r * (float)Math.Cos(theta), r * (float)Math.Sin(theta)); enemySpawn.InitialPosition = spawnPosition; } else if (waveType == WaveTypes.Corners) { var entropy2 = (float)rand.NextDouble(); if (entropy2 >= .5) { if (entropy >= .5) { enemySpawn.InitialPosition = new Vector2(sideLength / 2 + entropy, sideLength / 2 + entropy); } else { enemySpawn.InitialPosition = new Vector2(-sideLength / 2 + entropy, -sideLength / 2 + entropy); } } else { if (entropy >= .5) { enemySpawn.InitialPosition = new Vector2(-sideLength / 2 + entropy, sideLength / 2 + entropy); } else { enemySpawn.InitialPosition = new Vector2(sideLength / 2 + entropy, -sideLength / 2 + entropy); } } } else if (waveType == WaveTypes.InsideOut) { enemySpawn.InitialPosition = new Vector2(entropy, -entropy); } var enemyType = "alien_tick"; enemySpawn.Radius = .4f; enemySpawn.InitialRestitution = 0f; switch (enemyStrength) { case EnemyStrength.Easy: enemySpawn.EnemyType = enemyType; enemySpawn.Speed = 9f; enemySpawn.Damage = 2f; enemySpawn.InitialHealth = 10f; break; case EnemyStrength.EasyMedium: enemySpawn.EnemyType = enemyType; enemySpawn.Speed = 10f; enemySpawn.Damage = 5f; enemySpawn.InitialHealth = 10f; break; case EnemyStrength.Medium: enemySpawn.EnemyType = enemyType; enemySpawn.Speed = 11f; enemySpawn.Damage = 10f; enemySpawn.InitialHealth = 15f; break; case EnemyStrength.Hard: enemySpawn.EnemyType = enemyType; enemySpawn.Speed = 12f; enemySpawn.Damage = 25f; enemySpawn.InitialHealth = 25f; break; case EnemyStrength.VeryHard: enemySpawn.EnemyType = enemyType; enemySpawn.Speed = 13f; enemySpawn.Damage = 35f; enemySpawn.InitialHealth = 30f; break; } spawnQueue.Enqueue(enemySpawn); }