Advertisement
Guest User

failure

a guest
Nov 26th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.36 KB | None | 0 0
  1. XAML-файл:
  2.  
  3. <Window
  4. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  5. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  6. xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
  7. xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
  8. xmlns:dvc="namespace:System.Windows.Forms.DataVisualization.Charting"
  9. xmlns:Design="clr-namespace:System.Drawing.Design;assembly=System.Drawing.Design" x:Class="WpfApplication1.MainWindow"
  10. Title="MainWindow" Height="445.523" Width="702.612">
  11.  
  12. <Grid Background="#FF343434">
  13. <Menu Height="25" VerticalAlignment="Top" Background="#FF494949" Foreground="White" Opacity="0.7">
  14. <MenuItem Header="File">
  15. <MenuItem Header="Open File" Background="#FF4F4F4F" Click="MenuItem_Click_1" >
  16. <MenuItem Header="*.wav" Background="#FF4F4F4F" />
  17. <MenuItem Header="*.flac" Background="#FF4F4F4F" />
  18. <MenuItem Header="*.mp3" Background="#FF4F4F4F" />
  19. </MenuItem>
  20. <MenuItem Header="Exit" Background="#FF4F4F4F" Height="25" />
  21. </MenuItem>
  22. <MenuItem Header="View" />
  23. </Menu>
  24. <Button x:Name="play" HorizontalAlignment="Left" Margin="639,21,0,0" VerticalAlignment="Top" Width="56" Background="{x:Null}" BorderThickness="0" Click="Button_Click_1">
  25. <Image Height="25" Source="play.png" Width="25"/>
  26. </Button>
  27. <Button x:Name="pause" HorizontalAlignment="Left" Margin="639,52,0,0" VerticalAlignment="Top" Width="56" Background="{x:Null}" BorderThickness="0" Click="Button_Click_2">
  28. <Image Height="24" Source="pause.png" Width="24"/>
  29. </Button>
  30. <Button x:Name="stop" HorizontalAlignment="Left" Margin="639,82,0,0" VerticalAlignment="Top" Width="56" Background="{x:Null}" BorderThickness="0" Click="Button_Click_4">
  31. <Image Height="24" Source="stop.png" Width="24"/>
  32. </Button>
  33. <wfi:WindowsFormsHost Name="windowsFormsHost1" Margin="0,21,56,304">
  34.  
  35. </wfi:WindowsFormsHost>
  36. </Grid>
  37. </Window>
  38.  
  39. CS-файл:
  40.  
  41. using System;
  42. using System.Collections.Generic;
  43. using System.Linq;
  44. using System.Text;
  45. using System.Threading.Tasks;
  46. using System.Windows;
  47. using System.Windows.Forms;
  48. using System.Data;
  49. using System.IO;
  50. using System.Collections;
  51. using System.Design;
  52. using System.Drawing;
  53. using System.Drawing.Design;
  54. using System.Windows.Controls;
  55. using System.Windows.Data;
  56. using System.Windows.Documents;
  57. using System.Windows.Input;
  58. using System.Windows.Media;
  59. using System.Windows.Media.Imaging;
  60. using System.Windows.Navigation;
  61. using System.Windows.Shapes;
  62.  
  63. namespace WpfApplication1
  64. {
  65. /// <summary>
  66. /// Interaction logic for MainWindow.xaml
  67. /// </summary>
  68. public partial class MainWindow : Window
  69. {
  70. private MediaPlayer mediaPlayer = new MediaPlayer();
  71.  
  72. public MainWindow()
  73. {
  74. InitializeComponent();
  75.  
  76. System.Windows.Forms.PictureBox picturebox1 = new System.Windows.Forms.PictureBox();
  77. windowsFormsHost1.Child = picturebox1;
  78. picturebox1.Paint += new System.Windows.Forms.PaintEventHandler(picturebox1_Paint);
  79. }
  80.  
  81. void picturebox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
  82. {
  83. System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\Temp\test.jpg");
  84. System.Drawing.Point ulPoint = new System.Drawing.Point(0, 0);
  85. e.Graphics.DrawImage(bmp, ulPoint);
  86. }
  87.  
  88. byte[] buffer = new byte[4];//Будем с его помощью переводить байты в int
  89. ArrayList Amp = new ArrayList(1000);//Будем хранить значения амплитуды звука
  90. int volume = 0;//Будем использовать для хранения каждого 2400 сэмпла
  91. int currentVolume = 0;//Вспомогательный элемент
  92.  
  93. private void MenuItem_Click_1(object sender, RoutedEventArgs e)
  94. {
  95. Amp.Clear();//очищаем массив от предыдущих данных
  96. Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
  97. dlg.Filter = "*.wav|*.wav"; // Filter files by extension
  98.  
  99. // Show open file dialog box
  100. Nullable<bool> result = dlg.ShowDialog();
  101.  
  102. // Process open file dialog box results
  103. if (result == true)
  104. {
  105. // Open document
  106. string filename = dlg.FileName;
  107. mediaPlayer.Open(new Uri(dlg.FileName));
  108.  
  109. FileStream fs = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
  110. fs.Seek(44, SeekOrigin.Begin);//Перематываем 44 байта от начала файла - заголовок
  111. bool end = false;
  112. while (!end)
  113. {
  114. for (int i = 0; i < 2400; i++)
  115. {//Берём каждый 2400 сэмпл, или 20 сэмплов в секунду для файла с качеством
  116. //звука 48000
  117. if (fs.Read(buffer, 0, 4) == 4)//Считываем 4 байта в buffer
  118. {//если кол-во считанных байт меньше 4, значит, найден конец файла, заканчиваем чтение
  119. currentVolume = BitConverter.ToInt16(buffer, 0);
  120. if (volume < currentVolume)//Из 2400 берём самое большое значение,
  121. volume = currentVolume;//чтобы случайно не пропустить пик
  122. }
  123. else
  124. {
  125. end = true;
  126. break;
  127. }
  128. }
  129. Amp.Add(volume);//Добавляем в массив
  130. volume = 0;//Обнуляем
  131. }
  132.  
  133. Width = Amp.Count;//подгоняем ширину графика под кол-во данных
  134. Bitmap bmp = new Bitmap(windowsFormsHost1.picturebox1.Width, windowsFormsHost1.picturebox1.Height);//создаём в оперативной памяти новый рисунок
  135. Graphics gr = Graphics.FromImage(bmp);
  136. System.Drawing.Pen RedPen = new System.Drawing.Pen(System.Drawing.Color.Green, 1);
  137. for (int i = 0; i < Amp.Count; i++)
  138. {//рисуем наш график
  139. gr.DrawLine(RedPen, i, bmp.Height, i, bmp.Height - bmp.Height * Convert.ToInt32(Amp[i]) / 32767);
  140. }
  141. windowsFormsHost1.picturebox1 = bmp;
  142. }
  143. }
  144.  
  145. private void Button_Click_1(object sender, RoutedEventArgs e)
  146. {
  147. mediaPlayer.Play();
  148. }
  149.  
  150. private void Button_Click_2(object sender, RoutedEventArgs e)
  151. {
  152. mediaPlayer.Pause();
  153. }
  154.  
  155. private void Button_Click_4(object sender, RoutedEventArgs e)
  156. {
  157. mediaPlayer.Stop();
  158. }
  159. }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement