я пытаюсь конвертировать soundPlayer из wav в байтовый массив и получаю - System.InvalidOperationException: «заголовок волны поврежден». - PullRequest
0 голосов
/ 08 марта 2020
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 и пытается преобразовать его в байтовый массив, но когда я делаю это, я получаю сообщение: заголовок волны поврежден. Я не понимаю, в чем разница, и как я могу играть в нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...