Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- XAML-файл:
- <Window
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
- xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
- xmlns:dvc="namespace:System.Windows.Forms.DataVisualization.Charting"
- xmlns:Design="clr-namespace:System.Drawing.Design;assembly=System.Drawing.Design" x:Class="WpfApplication1.MainWindow"
- Title="MainWindow" Height="445.523" Width="702.612">
- <Grid Background="#FF343434">
- <Menu Height="25" VerticalAlignment="Top" Background="#FF494949" Foreground="White" Opacity="0.7">
- <MenuItem Header="File">
- <MenuItem Header="Open File" Background="#FF4F4F4F" Click="MenuItem_Click_1" >
- <MenuItem Header="*.wav" Background="#FF4F4F4F" />
- <MenuItem Header="*.flac" Background="#FF4F4F4F" />
- <MenuItem Header="*.mp3" Background="#FF4F4F4F" />
- </MenuItem>
- <MenuItem Header="Exit" Background="#FF4F4F4F" Height="25" />
- </MenuItem>
- <MenuItem Header="View" />
- </Menu>
- <Button x:Name="play" HorizontalAlignment="Left" Margin="639,21,0,0" VerticalAlignment="Top" Width="56" Background="{x:Null}" BorderThickness="0" Click="Button_Click_1">
- <Image Height="25" Source="play.png" Width="25"/>
- </Button>
- <Button x:Name="pause" HorizontalAlignment="Left" Margin="639,52,0,0" VerticalAlignment="Top" Width="56" Background="{x:Null}" BorderThickness="0" Click="Button_Click_2">
- <Image Height="24" Source="pause.png" Width="24"/>
- </Button>
- <Button x:Name="stop" HorizontalAlignment="Left" Margin="639,82,0,0" VerticalAlignment="Top" Width="56" Background="{x:Null}" BorderThickness="0" Click="Button_Click_4">
- <Image Height="24" Source="stop.png" Width="24"/>
- </Button>
- <wfi:WindowsFormsHost Name="windowsFormsHost1" Margin="0,21,56,304">
- </wfi:WindowsFormsHost>
- </Grid>
- </Window>
- CS-файл:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Forms;
- using System.Data;
- using System.IO;
- using System.Collections;
- using System.Design;
- using System.Drawing;
- using System.Drawing.Design;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace WpfApplication1
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- private MediaPlayer mediaPlayer = new MediaPlayer();
- public MainWindow()
- {
- InitializeComponent();
- System.Windows.Forms.PictureBox picturebox1 = new System.Windows.Forms.PictureBox();
- windowsFormsHost1.Child = picturebox1;
- picturebox1.Paint += new System.Windows.Forms.PaintEventHandler(picturebox1_Paint);
- }
- void picturebox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
- {
- System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\Temp\test.jpg");
- System.Drawing.Point ulPoint = new System.Drawing.Point(0, 0);
- e.Graphics.DrawImage(bmp, ulPoint);
- }
- byte[] buffer = new byte[4];//Будем с его помощью переводить байты в int
- ArrayList Amp = new ArrayList(1000);//Будем хранить значения амплитуды звука
- int volume = 0;//Будем использовать для хранения каждого 2400 сэмпла
- int currentVolume = 0;//Вспомогательный элемент
- private void MenuItem_Click_1(object sender, RoutedEventArgs e)
- {
- Amp.Clear();//очищаем массив от предыдущих данных
- Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.Filter = "*.wav|*.wav"; // Filter files by extension
- // Show open file dialog box
- Nullable<bool> result = dlg.ShowDialog();
- // Process open file dialog box results
- if (result == true)
- {
- // Open document
- string filename = dlg.FileName;
- mediaPlayer.Open(new Uri(dlg.FileName));
- FileStream fs = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
- fs.Seek(44, SeekOrigin.Begin);//Перематываем 44 байта от начала файла - заголовок
- bool end = false;
- while (!end)
- {
- for (int i = 0; i < 2400; i++)
- {//Берём каждый 2400 сэмпл, или 20 сэмплов в секунду для файла с качеством
- //звука 48000
- if (fs.Read(buffer, 0, 4) == 4)//Считываем 4 байта в buffer
- {//если кол-во считанных байт меньше 4, значит, найден конец файла, заканчиваем чтение
- currentVolume = BitConverter.ToInt16(buffer, 0);
- if (volume < currentVolume)//Из 2400 берём самое большое значение,
- volume = currentVolume;//чтобы случайно не пропустить пик
- }
- else
- {
- end = true;
- break;
- }
- }
- Amp.Add(volume);//Добавляем в массив
- volume = 0;//Обнуляем
- }
- Width = Amp.Count;//подгоняем ширину графика под кол-во данных
- Bitmap bmp = new Bitmap(windowsFormsHost1.picturebox1.Width, windowsFormsHost1.picturebox1.Height);//создаём в оперативной памяти новый рисунок
- Graphics gr = Graphics.FromImage(bmp);
- System.Drawing.Pen RedPen = new System.Drawing.Pen(System.Drawing.Color.Green, 1);
- for (int i = 0; i < Amp.Count; i++)
- {//рисуем наш график
- gr.DrawLine(RedPen, i, bmp.Height, i, bmp.Height - bmp.Height * Convert.ToInt32(Amp[i]) / 32767);
- }
- windowsFormsHost1.picturebox1 = bmp;
- }
- }
- private void Button_Click_1(object sender, RoutedEventArgs e)
- {
- mediaPlayer.Play();
- }
- private void Button_Click_2(object sender, RoutedEventArgs e)
- {
- mediaPlayer.Pause();
- }
- private void Button_Click_4(object sender, RoutedEventArgs e)
- {
- mediaPlayer.Stop();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement