Zdravím
- vytvořte aplikaci, která bude zpracovávát zvuk nahrávaného z mikrofonu v reálném čase. Zpracování zvuku bude probíhat v časové oblasti a výsledkem bude frekvenční spektrum. Zdrojový kód pro zachytávání zvuku zvukové karty je uložen v souboru Recorder.cs, kde jsou všechny potřebné metody okomentovány. Pro správnou funkčnost této třídy musíte do do projektu zakomponovat knihovnu NAudio.dll, která je také součástí přílohy. http://msdn.microsoft.com/en-us/library/7314433t%28v=vs.80%29.aspx
- algoritmus pro zpracování zvuku je libovolny, je však doporučeno použít algoritmus rychlé fourierovy transformace FFT, který je uložený v souboru FFT.cs, zde doporučuji použít metodu RealFFT()
- výsledek vykreslete do aplikace typu WinForm (Formulářová aplikace) - Doporučuji použít Microsoft.Chart komponentu, která je určena pro vykreslování grafů. http://www.microsoft.com/downloads/cs-cz/details.aspx?familyid=130f7986-bf49-4fe5-9ca8-910ae6ea442c
- v aplikaci bude vykreslen jak původní signál tak spektrum do hlavního formulářového okna
- aplikace umožní detekci prahové hodnoty signálu - pomocí UpDown uživatelského prvku
- při detekci překročení prahové hodnoty dojde k vykreslení informace o překročení v určitém čase na obrazovku
- součástí přílohy je také třída, která vytváří druhé vlákno a používá v sobě synchronizaci pomocí třídy EventWaitHandle, což usnaďňuje poměrně velkou část řešení projektu, na studentovi tedy pouze zbývá tento kód pochopit a zakomponovat správně do svého uživatelského rozhranní
http://www.ulozto.cz/xXSvCvt/prilohy-zip
http://www.youtube.com/watch?v=fpwuqDVwcsM&feature=player_embedded
Můj postup:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//public Boolean AutoScale {get;set;}
//změna rozsahu osy X1
if(chart1.Series[0].Points.Count > 30)
{
if (chart1.Series[0].Points.Count > 30)
chart1.Series[0].Points.RemoveAt(0);
chart1.ChartAreas["Default"].AxisX.Minimum = 0;
chart1.ChartAreas["Default"].AxisX.Maximum = 2000;
}
//změna rozsahu osy Y1
//změna rozsahu osy X2
if (chart2.Series[0].Points.Count > 30)
{
if (chart2.Series[0].Points.Count > 30)
chart2.Series[0].Points.RemoveAt(0);
chart2.ChartAreas["Default"].AxisX.Minimum = 0;
chart2.ChartAreas["Default"].AxisX.Maximum = 500;
}
//změna rozsahu osy Y2
}
//graf pro vykreslení zvuku v časové oblasti
private void chart1_Click(object sender, EventArgs e)
{
}
//graf pro vykreslení frekvenčního spektra
private void chart2_Click(object sender, EventArgs e)
{
RealFFT();
}
//tlačítko pro uzavření aplikace
private void button1_Click(object sender, EventArgs e)
{
}
//tlačítko pro zastavení nahrávání
private void button2_Click(object sender, EventArgs e)
{
}
//tlačítko pro spouštění nahrávání
private void button3_Click(object sender, EventArgs e)
{
}
//tlačítko pro FFT
private void button4_Click(object sender, EventArgs e)
{
}
//vybrané zařízení
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
//nastavení limitu
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
}
//zisk
private void progressBar1_Click(object sender, EventArgs e)
{
}
//napěťová špička
private void label1_Click(object sender, EventArgs e)
{
}
}
}