Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут ІКНІКафедра АСУ
ЗВІТ
До лабораторної роботи № 4На тему: «Робота з мікрофоном»З дисципліни: «Методи і засоби комп’ютерних інформаційних технологій»
Львів – 2018
Хід роботи
Код програми:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using NAudio.Wave;
using NAudio;
using System.IO;
using NAudio.FileFormats;
using NAudio.CoreAudioApi;
namespace naudio_mic_realtime_visualisation
{
public partial class Form1 : Form
{
int n = 4000; // number of x-axis pints
//Stopwatch time = new Stopwatch();
WaveIn wi;
WaveFileWriter writer;
Queue<double> myQ;
public Form1()
{
InitializeComponent();
myQ = new Queue<double>(Enumerable.Repeat(0.0, n).ToList()); // fill myQ w/ zeros
chart1.ChartAreas[0].AxisY.Minimum = -15000;
chart1.ChartAreas[0].AxisY.Maximum = 15000;
}
private void Form1_Load(object sender, EventArgs e)
{
//-------
}
void wi_DataAvailable(object sender, WaveInEventArgs e)
{
for (int i = 0; i < e.BytesRecorded; i += 2)
{
myQ.Enqueue(BitConverter.ToInt16(e.Buffer, i));
myQ.Dequeue();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
chart1.Series["Series1"].Points.DataBindY(myQ);
}
catch
{
Console.WriteLine("No bytes recorded");
}
}
//Отримання даних із вхідного буфера
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
}
else
{
//запис даних із буфера у файл
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
}
}
//кінець запису
private void waveIn_RecordingStopped(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler(waveIn_RecordingStopped), sender, e);
}
else
{
wi.Dispose();
wi = null;
writer.Close();
writer = null;
}
}
void StopRecording()
{
MessageBox.Show("StopRecording");
wi.StopRecording();
}
//-----------------------------------
private void button1_Click(object sender, EventArgs e) // start button
{
string str = textBox1.Text;
string Y = textBox4.Text;
int y = System.Convert.ToInt32(Y);
string filename = textBox2.Text;
chart1.ChartAreas[0].AxisY.Minimum = -y;
chart1.ChartAreas[0].AxisY.Maximum = y;
wi = new WaveIn();
wi.DeviceNumber = System.Convert.ToInt32(str); // choose a device
//прикріплення до події DataAvailable обробника, який виникає при наявності даних для запису
wi.DataAvailable += waveIn_DataAvailable;
//прикріплення обробника завершення запису
wi.RecordingStopped += new EventHandler<NAudio.Wave.StoppedEventArgs>(waveIn_RecordingStopped);
writer = new WaveFileWriter(filename, wi.WaveFormat);
wi.StartRecording();
wi.WaveFormat = new WaveFormat(4, 16, 1); // (44100, 16, 1);
wi.DataAvailable += new EventHandler<WaveInEventArgs>(wi_DataAvailable);
timer1.Enabled = true;
//time.Start();
}
private void button2_Click(object sender, EventArgs e) // stop button
{
if (wi != null)
{
StopRecording();
}
}
private void label4_Click(object sender, EventArgs e)
{
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
}
}
}
Результат роботи програми:
/
Висновок
Виконуючи лабораторну роботу було розроблено програму для взаємодії із мікрофоном та для візуалізації звукових коливань.