using System;
using System.Collections.Generic;
using System.IO;
using System.Windows;
namespace MediaPlayer
{
public partial class MainWindow : Window
{
System.Media.SoundPlayer soundPlayer;
public MainWindow()
{
InitializeComponent();
}
private void startPlay(object sender, RoutedEventArgs e)
{
string filePath = @"C:\Users\jsmin\Desktop\project1\v3\MediaPlayer
(2)\MediaPlayer\MediaPlayer\media\11.wav"; //my wav path
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);//open the file
int length = Convert.ToInt32(fs.Length); //the size of the file
byte[] data = new byte[length]; //make new array
fs.Read(data, 0, length);
List<byte[]> segments = Split(data); //split the data to a list
var memoryStream = new MemoryStream(segments[0], true); //convert to memorystream
soundPlayer = new System.Media.SoundPlayer(memoryStream);
fs.Read(data, 0, length);
memoryStream.Position = 0; // Manually rewind stream
soundPlayer.Stream = null; // Then we have to set stream to null
soundPlayer.Stream = memoryStream; // And set it again, to force it to be loaded again
soundPlayer.Play();
fs.Close();
}
}
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
private List<byte[]> Split(byte[] content) #split to list of byte
{
List<byte[]> record = new List<byte[]>();
int splitLength = 1000;
byte[] spiltResult = new byte[1000];
for (int i = 0; i < content.Length; i = i + splitLength)
{
if (content.Length - i < 1000)
{
splitLength = content.Length - i;
}
Array.Copy(content, i, spiltResult, 0, splitLength);
record.Add(spiltResult);
}
return record;
}
}
}
Этот код получает файл с расширением wav и пытается преобразовать его в байтовый массив, но когда я делаю это, я получаю сообщение: заголовок волны поврежден. Я не понимаю, в чем разница, и как я могу играть в нее.