mirror of
https://github.com/Gigaslav/HL2Overcharged.git
synced 2026-09-15 20:12:37 +03:00
580 lines
21 KiB
C#
580 lines
21 KiB
C#
/*===============================================================================================
|
|
GenerateTone Example
|
|
Copyright (c), Firelight Technologies Pty, Ltd 2004-2016.
|
|
|
|
This example shows how simply play generated tones using FMOD::System::payDSP instead of
|
|
manually connecting and disconnecting DSP units.
|
|
===============================================================================================*/
|
|
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
using System.Data;
|
|
|
|
namespace generatetone
|
|
{
|
|
public class GenerateTone : System.Windows.Forms.Form
|
|
{
|
|
private FMOD.System system = null;
|
|
private FMOD.Channel channel = null;
|
|
private FMOD.DSP dsp = null;
|
|
|
|
private System.Windows.Forms.Button exit_button;
|
|
private System.Windows.Forms.Button sineWave;
|
|
private System.Windows.Forms.Button squareWave;
|
|
private System.Windows.Forms.Button triangleWave;
|
|
private System.Windows.Forms.Button sawWave;
|
|
private System.Windows.Forms.Button whiteNoise;
|
|
private System.Windows.Forms.Button stopChannel;
|
|
private System.Windows.Forms.StatusBar statusBar;
|
|
private System.Windows.Forms.Label label;
|
|
private System.Windows.Forms.Timer timer;
|
|
private System.Windows.Forms.GroupBox groupBox1;
|
|
private System.Windows.Forms.GroupBox groupBox2;
|
|
private System.Windows.Forms.GroupBox groupBox3;
|
|
private System.Windows.Forms.TrackBar trackBarVolume;
|
|
private System.Windows.Forms.TrackBar trackBarFrequency;
|
|
private System.Windows.Forms.TrackBar trackBarPan;
|
|
private System.ComponentModel.IContainer components;
|
|
|
|
public GenerateTone()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
protected override void Dispose( bool disposing )
|
|
{
|
|
if( disposing )
|
|
{
|
|
FMOD.RESULT result;
|
|
|
|
/*
|
|
Shut down
|
|
*/
|
|
if (dsp != null)
|
|
{
|
|
result = dsp.release();
|
|
ERRCHECK(result);
|
|
}
|
|
if (system != null)
|
|
{
|
|
result = system.close();
|
|
ERRCHECK(result);
|
|
result = system.release();
|
|
ERRCHECK(result);
|
|
}
|
|
|
|
if (components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
}
|
|
base.Dispose( disposing );
|
|
}
|
|
|
|
#region Windows Form Designer generated code
|
|
/// <summary>
|
|
/// Required method for Designer support - do not modify
|
|
/// the contents of this method with the code editor.
|
|
/// </summary>
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
this.sineWave = new System.Windows.Forms.Button();
|
|
this.squareWave = new System.Windows.Forms.Button();
|
|
this.triangleWave = new System.Windows.Forms.Button();
|
|
this.sawWave = new System.Windows.Forms.Button();
|
|
this.whiteNoise = new System.Windows.Forms.Button();
|
|
this.stopChannel = new System.Windows.Forms.Button();
|
|
this.exit_button = new System.Windows.Forms.Button();
|
|
this.statusBar = new System.Windows.Forms.StatusBar();
|
|
this.label = new System.Windows.Forms.Label();
|
|
this.timer = new System.Windows.Forms.Timer(this.components);
|
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
|
this.trackBarVolume = new System.Windows.Forms.TrackBar();
|
|
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
|
this.trackBarFrequency = new System.Windows.Forms.TrackBar();
|
|
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
|
this.trackBarPan = new System.Windows.Forms.TrackBar();
|
|
this.groupBox1.SuspendLayout();
|
|
((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).BeginInit();
|
|
this.groupBox2.SuspendLayout();
|
|
((System.ComponentModel.ISupportInitialize)(this.trackBarFrequency)).BeginInit();
|
|
this.groupBox3.SuspendLayout();
|
|
((System.ComponentModel.ISupportInitialize)(this.trackBarPan)).BeginInit();
|
|
this.SuspendLayout();
|
|
//
|
|
// sineWave
|
|
//
|
|
this.sineWave.Location = new System.Drawing.Point(8, 32);
|
|
this.sineWave.Name = "sineWave";
|
|
this.sineWave.Size = new System.Drawing.Size(280, 32);
|
|
this.sineWave.TabIndex = 0;
|
|
this.sineWave.Text = "Play a sine wave";
|
|
this.sineWave.Click += new System.EventHandler(this.sineWave_Click);
|
|
//
|
|
// squareWave
|
|
//
|
|
this.squareWave.Location = new System.Drawing.Point(8, 72);
|
|
this.squareWave.Name = "squareWave";
|
|
this.squareWave.Size = new System.Drawing.Size(280, 32);
|
|
this.squareWave.TabIndex = 1;
|
|
this.squareWave.Text = "Play a square wave";
|
|
this.squareWave.Click += new System.EventHandler(this.squareWave_Click);
|
|
//
|
|
// triangleWave
|
|
//
|
|
this.triangleWave.Location = new System.Drawing.Point(8, 112);
|
|
this.triangleWave.Name = "triangleWave";
|
|
this.triangleWave.Size = new System.Drawing.Size(280, 32);
|
|
this.triangleWave.TabIndex = 2;
|
|
this.triangleWave.Text = "Play a triangle wave";
|
|
this.triangleWave.Click += new System.EventHandler(this.triangleWave_Click);
|
|
//
|
|
// sawWave
|
|
//
|
|
this.sawWave.Location = new System.Drawing.Point(8, 152);
|
|
this.sawWave.Name = "sawWave";
|
|
this.sawWave.Size = new System.Drawing.Size(280, 32);
|
|
this.sawWave.TabIndex = 3;
|
|
this.sawWave.Text = "Play a saw wave";
|
|
this.sawWave.Click += new System.EventHandler(this.sawWave_Click);
|
|
//
|
|
// whiteNoise
|
|
//
|
|
this.whiteNoise.Location = new System.Drawing.Point(8, 192);
|
|
this.whiteNoise.Name = "whiteNoise";
|
|
this.whiteNoise.Size = new System.Drawing.Size(280, 32);
|
|
this.whiteNoise.TabIndex = 4;
|
|
this.whiteNoise.Text = "Play a white noise";
|
|
this.whiteNoise.Click += new System.EventHandler(this.whiteNoise_Click);
|
|
//
|
|
// stopChannel
|
|
//
|
|
this.stopChannel.Location = new System.Drawing.Point(8, 232);
|
|
this.stopChannel.Name = "stopChannel";
|
|
this.stopChannel.Size = new System.Drawing.Size(280, 32);
|
|
this.stopChannel.TabIndex = 5;
|
|
this.stopChannel.Text = "Stop channel";
|
|
this.stopChannel.Click += new System.EventHandler(this.stopChannel_Click);
|
|
//
|
|
// exit_button
|
|
//
|
|
this.exit_button.Location = new System.Drawing.Point(112, 488);
|
|
this.exit_button.Name = "exit_button";
|
|
this.exit_button.Size = new System.Drawing.Size(72, 24);
|
|
this.exit_button.TabIndex = 12;
|
|
this.exit_button.Text = "Exit";
|
|
this.exit_button.Click += new System.EventHandler(this.exit_button_Click);
|
|
//
|
|
// statusBar
|
|
//
|
|
this.statusBar.Location = new System.Drawing.Point(0, 515);
|
|
this.statusBar.Name = "statusBar";
|
|
this.statusBar.Size = new System.Drawing.Size(296, 24);
|
|
this.statusBar.TabIndex = 13;
|
|
//
|
|
// label
|
|
//
|
|
this.label.Location = new System.Drawing.Point(0, 0);
|
|
this.label.Name = "label";
|
|
this.label.Size = new System.Drawing.Size(296, 32);
|
|
this.label.TabIndex = 14;
|
|
this.label.Text = "Copyright (c) Firelight Technologies 2004-2016";
|
|
this.label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
|
//
|
|
// timer
|
|
//
|
|
this.timer.Enabled = true;
|
|
this.timer.Interval = 10;
|
|
this.timer.Tick += new System.EventHandler(this.timer_Tick);
|
|
//
|
|
// groupBox1
|
|
//
|
|
this.groupBox1.Controls.Add(this.trackBarVolume);
|
|
this.groupBox1.Location = new System.Drawing.Point(8, 272);
|
|
this.groupBox1.Name = "groupBox1";
|
|
this.groupBox1.Size = new System.Drawing.Size(280, 64);
|
|
this.groupBox1.TabIndex = 15;
|
|
this.groupBox1.TabStop = false;
|
|
this.groupBox1.Text = "Channel Volume";
|
|
//
|
|
// trackBarVolume
|
|
//
|
|
this.trackBarVolume.Location = new System.Drawing.Point(8, 16);
|
|
this.trackBarVolume.Maximum = 1024;
|
|
this.trackBarVolume.Name = "trackBarVolume";
|
|
this.trackBarVolume.Size = new System.Drawing.Size(264, 45);
|
|
this.trackBarVolume.TabIndex = 0;
|
|
this.trackBarVolume.TickStyle = System.Windows.Forms.TickStyle.None;
|
|
this.trackBarVolume.Scroll += new System.EventHandler(this.trackBarVolume_Scroll);
|
|
//
|
|
// groupBox2
|
|
//
|
|
this.groupBox2.Controls.Add(this.trackBarFrequency);
|
|
this.groupBox2.Location = new System.Drawing.Point(8, 344);
|
|
this.groupBox2.Name = "groupBox2";
|
|
this.groupBox2.Size = new System.Drawing.Size(280, 64);
|
|
this.groupBox2.TabIndex = 16;
|
|
this.groupBox2.TabStop = false;
|
|
this.groupBox2.Text = "Channel Frequency";
|
|
//
|
|
// trackBarFrequency
|
|
//
|
|
this.trackBarFrequency.Location = new System.Drawing.Point(8, 16);
|
|
this.trackBarFrequency.Maximum = 88200;
|
|
this.trackBarFrequency.Name = "trackBarFrequency";
|
|
this.trackBarFrequency.Size = new System.Drawing.Size(264, 45);
|
|
this.trackBarFrequency.TabIndex = 1;
|
|
this.trackBarFrequency.TickStyle = System.Windows.Forms.TickStyle.None;
|
|
this.trackBarFrequency.Scroll += new System.EventHandler(this.trackBarFrequency_Scroll);
|
|
//
|
|
// groupBox3
|
|
//
|
|
this.groupBox3.Controls.Add(this.trackBarPan);
|
|
this.groupBox3.Location = new System.Drawing.Point(8, 416);
|
|
this.groupBox3.Name = "groupBox3";
|
|
this.groupBox3.Size = new System.Drawing.Size(280, 64);
|
|
this.groupBox3.TabIndex = 17;
|
|
this.groupBox3.TabStop = false;
|
|
this.groupBox3.Text = "Channel Pan";
|
|
//
|
|
// trackBarPan
|
|
//
|
|
this.trackBarPan.Location = new System.Drawing.Point(8, 16);
|
|
this.trackBarPan.Maximum = 512;
|
|
this.trackBarPan.Minimum = -512;
|
|
this.trackBarPan.Name = "trackBarPan";
|
|
this.trackBarPan.Size = new System.Drawing.Size(264, 45);
|
|
this.trackBarPan.TabIndex = 1;
|
|
this.trackBarPan.TickStyle = System.Windows.Forms.TickStyle.None;
|
|
this.trackBarPan.Scroll += new System.EventHandler(this.trackBarPan_Scroll);
|
|
//
|
|
// GenerateTone
|
|
//
|
|
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
|
|
this.ClientSize = new System.Drawing.Size(296, 539);
|
|
this.Controls.Add(this.groupBox3);
|
|
this.Controls.Add(this.groupBox2);
|
|
this.Controls.Add(this.groupBox1);
|
|
this.Controls.Add(this.label);
|
|
this.Controls.Add(this.statusBar);
|
|
this.Controls.Add(this.exit_button);
|
|
this.Controls.Add(this.stopChannel);
|
|
this.Controls.Add(this.whiteNoise);
|
|
this.Controls.Add(this.sawWave);
|
|
this.Controls.Add(this.triangleWave);
|
|
this.Controls.Add(this.squareWave);
|
|
this.Controls.Add(this.sineWave);
|
|
this.Name = "GenerateTone";
|
|
this.Text = "Generate Tone Example";
|
|
this.Load += new System.EventHandler(this.GenerateTone_Load);
|
|
this.groupBox1.ResumeLayout(false);
|
|
((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).EndInit();
|
|
this.groupBox2.ResumeLayout(false);
|
|
((System.ComponentModel.ISupportInitialize)(this.trackBarFrequency)).EndInit();
|
|
this.groupBox3.ResumeLayout(false);
|
|
((System.ComponentModel.ISupportInitialize)(this.trackBarPan)).EndInit();
|
|
this.ResumeLayout(false);
|
|
|
|
}
|
|
#endregion
|
|
|
|
[STAThread]
|
|
static void Main()
|
|
{
|
|
Application.Run(new GenerateTone());
|
|
}
|
|
|
|
private void GenerateTone_Load(object sender, System.EventArgs e)
|
|
{
|
|
uint version = 0;
|
|
FMOD.RESULT result;
|
|
|
|
/*
|
|
Create a System object and initialize.
|
|
*/
|
|
result = FMOD.Factory.System_Create(ref system);
|
|
ERRCHECK(result);
|
|
result = system.getVersion(ref version);
|
|
ERRCHECK(result);
|
|
|
|
if (version < FMOD.VERSION.number)
|
|
{
|
|
MessageBox.Show("Error! You are using an old version of FMOD " + version.ToString("X") + ". This program requires " + FMOD.VERSION.number.ToString("X") + ".");
|
|
Application.Exit();
|
|
}
|
|
result = system.init(32, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
|
|
ERRCHECK(result);
|
|
}
|
|
|
|
private void sineWave_Click(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
float pan = 0, frequency = 0;
|
|
|
|
if (channel != null)
|
|
{
|
|
channel.stop();
|
|
}
|
|
|
|
if (dsp != null)
|
|
{
|
|
dsp.release();
|
|
}
|
|
|
|
/*
|
|
Create an oscillator DSP unit for the tone.
|
|
*/
|
|
result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp);
|
|
ERRCHECK(result);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f); /* musical note 'A' */
|
|
ERRCHECK(result);
|
|
|
|
result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel);
|
|
ERRCHECK(result);
|
|
channel.setVolume(0.5f);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 0);
|
|
ERRCHECK(result);
|
|
channel.setPaused(false);
|
|
|
|
channel.getFrequency(ref frequency);
|
|
channel.getPan(ref pan);
|
|
|
|
trackBarVolume.Value = 512;
|
|
trackBarFrequency.Value = (int)frequency;
|
|
trackBarPan.Value = (int)(pan * 512);
|
|
}
|
|
|
|
private void squareWave_Click(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
float pan = 0, frequency = 0;
|
|
|
|
if (channel != null)
|
|
{
|
|
channel.stop();
|
|
}
|
|
if (dsp != null)
|
|
{
|
|
dsp.release();
|
|
}
|
|
|
|
/*
|
|
Create an oscillator DSP unit for the tone.
|
|
*/
|
|
result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp);
|
|
ERRCHECK(result);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f); /* musical note 'A' */
|
|
ERRCHECK(result);
|
|
|
|
result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel);
|
|
ERRCHECK(result);
|
|
channel.setVolume(0.125f);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 1);
|
|
ERRCHECK(result);
|
|
channel.setPaused(false);
|
|
|
|
channel.getFrequency(ref frequency);
|
|
channel.getPan(ref pan);
|
|
|
|
trackBarVolume.Value = 128;
|
|
trackBarFrequency.Value = (int)frequency;
|
|
trackBarPan.Value = (int)(pan * 512);
|
|
}
|
|
|
|
private void triangleWave_Click(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
float pan = 0, frequency = 0;
|
|
|
|
if (channel != null)
|
|
{
|
|
channel.stop();
|
|
}
|
|
if (dsp != null)
|
|
{
|
|
dsp.release();
|
|
}
|
|
|
|
/*
|
|
Create an oscillator DSP unit for the tone.
|
|
*/
|
|
result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp);
|
|
ERRCHECK(result);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f); /* musical note 'A' */
|
|
ERRCHECK(result);
|
|
|
|
result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel);
|
|
ERRCHECK(result);
|
|
channel.setVolume(0.5f);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 2);
|
|
ERRCHECK(result);
|
|
channel.setPaused(false);
|
|
|
|
channel.getFrequency(ref frequency);
|
|
channel.getPan(ref pan);
|
|
|
|
trackBarVolume.Value = 512;
|
|
trackBarFrequency.Value = (int)frequency;
|
|
trackBarPan.Value = (int)(pan * 512);
|
|
}
|
|
|
|
private void sawWave_Click(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
float pan = 0, frequency = 0;
|
|
|
|
if (channel != null)
|
|
{
|
|
channel.stop();
|
|
}
|
|
if (dsp != null)
|
|
{
|
|
dsp.release();
|
|
}
|
|
|
|
/*
|
|
Create an oscillator DSP unit for the tone.
|
|
*/
|
|
result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp);
|
|
ERRCHECK(result);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f); /* musical note 'A' */
|
|
ERRCHECK(result);
|
|
|
|
result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel);
|
|
ERRCHECK(result);
|
|
channel.setVolume(0.125f);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 4);
|
|
ERRCHECK(result);
|
|
channel.setPaused(false);
|
|
|
|
channel.getFrequency(ref frequency);
|
|
channel.getPan(ref pan);
|
|
|
|
trackBarVolume.Value = 128;
|
|
trackBarFrequency.Value = (int)frequency;
|
|
trackBarPan.Value = (int)(pan * 512);
|
|
}
|
|
|
|
private void whiteNoise_Click(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
float pan = 0, frequency = 0;
|
|
|
|
if (channel != null)
|
|
{
|
|
channel.stop();
|
|
}
|
|
if (dsp != null)
|
|
{
|
|
dsp.release();
|
|
}
|
|
|
|
/*
|
|
Create an oscillator DSP unit for the tone.
|
|
*/
|
|
result = system.createDSPByType(FMOD.DSP_TYPE.OSCILLATOR, ref dsp);
|
|
ERRCHECK(result);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.RATE, 440.0f); /* musical note 'A' */
|
|
ERRCHECK(result);
|
|
|
|
result = system.playDSP(FMOD.CHANNELINDEX.REUSE, dsp, true, ref channel);
|
|
ERRCHECK(result);
|
|
channel.setVolume(0.25f);
|
|
result = dsp.setParameter((int)FMOD.DSP_OSCILLATOR.TYPE, 5);
|
|
ERRCHECK(result);
|
|
channel.setPaused(false);
|
|
|
|
channel.getFrequency(ref frequency);
|
|
channel.getPan(ref pan);
|
|
|
|
trackBarVolume.Value = 256;
|
|
trackBarFrequency.Value = (int)frequency;
|
|
trackBarPan.Value = (int)(pan * 512);
|
|
}
|
|
|
|
private void stopChannel_Click(object sender, System.EventArgs e)
|
|
{
|
|
if (channel != null)
|
|
{
|
|
channel.stop();
|
|
}
|
|
}
|
|
|
|
private void trackBarVolume_Scroll(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
|
|
if (channel != null)
|
|
{
|
|
float volume = (float)(trackBarVolume.Value) / 1024.0f;
|
|
|
|
result = channel.setVolume(volume);
|
|
ERRCHECK(result);
|
|
}
|
|
}
|
|
|
|
private void trackBarFrequency_Scroll(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
|
|
if (channel != null)
|
|
{
|
|
result = channel.setFrequency((float)trackBarFrequency.Value);
|
|
ERRCHECK(result);
|
|
}
|
|
}
|
|
|
|
private void trackBarPan_Scroll(object sender, System.EventArgs e)
|
|
{
|
|
FMOD.RESULT result;
|
|
|
|
if (channel != null)
|
|
{
|
|
float pan = (float)(trackBarPan.Value) / 512.0f;
|
|
|
|
result = channel.setPan(pan);
|
|
}
|
|
}
|
|
|
|
private void exit_button_Click(object sender, System.EventArgs e)
|
|
{
|
|
Application.Exit();
|
|
}
|
|
|
|
private void timer_Tick(object sender, System.EventArgs e)
|
|
{
|
|
float frequency = 0, volume = 0, pan = 0;
|
|
bool playing = false;
|
|
|
|
if (channel != null)
|
|
{
|
|
channel.getFrequency(ref frequency);
|
|
channel.getVolume(ref volume);
|
|
channel.getPan(ref pan);
|
|
channel.isPlaying(ref playing);
|
|
}
|
|
|
|
statusBar.Text = "Channel " + (playing ? "playing" : "stopped") + " : Frequency " + frequency + " Volume " + volume + " Pan " + pan;
|
|
|
|
if (system != null)
|
|
{
|
|
system.update();
|
|
}
|
|
}
|
|
|
|
private void ERRCHECK(FMOD.RESULT result)
|
|
{
|
|
if (result != FMOD.RESULT.OK)
|
|
{
|
|
timer.Stop();
|
|
MessageBox.Show("FMOD error! " + result + " - " + FMOD.Error.String(result));
|
|
Environment.Exit(-1);
|
|
}
|
|
}
|
|
}
|
|
}
|