WaveLib.dll: файл недоступен или повреждён - C#
Формулировка задачи:
Доброе время суток пишу диплом по работе со звуком необходимо подключить библиотеку WaveLib.dll но выскакивает ошибка что к файлу нету доступа или он поврежден, что делать не знаю в инете ничего не нашёл.
WaveLib.dll нужна мне для воспроизвидения звука по данным извлеченным из аудио сигнала. Работаю отталкиваясь от этой темы NAudio - воспроизвести мелодию по значениям амплитуд из wav-файла
вот мой код
По возможности скиньте рабочий WaveLib.dll или подскажите вариант реализации через nAudio
var header = new WavHeader();
//Размер заголовка
var headerSize = Marshal.SizeOf(header);//Предоставляет коллекцию методов для выделения неуправляемой памяти
var fileStream = new FileStream("house_tex.wav", FileMode.Open, FileAccess.Read);// чтение
var buffer = new byte[headerSize];
fileStream.Read(buffer, 0, headerSize);//Выполняет чтение блока байтов из потока и запись данных в заданный буфер
// Чтобы не считывать каждое значение заголовка по отдельности,
// воспользуемся выделением unmanaged блока памяти
var headerPtr = Marshal.AllocHGlobal(headerSize);
// Копируем считанные байты из файла в выделенный блок памяти
Marshal.Copy(buffer, 0, headerPtr, headerSize);
// Преобразовываем указатель на блок памяти к нашей структуре
Marshal.PtrToStructure(headerPtr, header);
var pcmLength = (int)fileStream.Length;
var _leftBuffer = new byte[pcmLength / 2];
var bytesRead = fileStream.Read(buffer, 0, pcmLength);
int index = 0;
for (int i = 0; i < bytesRead; i += 4)
{
_leftBuffer[index] = buffer[i];
index++;
_leftBuffer[index] = buffer[i + 1];
index++;
}
//var player = new WaveLib.WaveOutPlayer(-1, new WaveLib.WaveFormat(header.SampleRate, header., header.NumChannels), _leftBuffer.Length, 1, (data, size) =>
//{
// byte [] b = _leftBuffer ;
// System . Runtime . InteropServices . Marshal . Copy ( b , 0 , data , size );
// });Решение задачи: «WaveLib.dll: файл недоступен или повреждён»
textual
Листинг программы
using System;
using System.Windows.Forms;
using NAudio.Wave;
namespace FirstTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private WaveFileReader wave = null;
private DirectSoundOut output = null;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave File (*.wav)|*.wav;";
if (open.ShowDialog() != DialogResult.OK) return;
DisposeWave();
wave = new WaveFileReader(open.FileName);
output = new DirectSoundOut();
output.Init(new WaveChannel32(wave));
output.Play();
pauseButton.Enabled = true;
}
private void pauseButton_Click(object sender, EventArgs e)
{
if (output != null)
{
if (output.PlaybackState == PlaybackState.Playing) output.Pause();
else if (output.PlaybackState == PlaybackState.Paused) output.Play();
}
}
private void DisposeWave()
{
if (output != null)
{
if (output.PlaybackState == PlaybackState.Playing) output.Stop();
output.Dispose();
output = null;
}
if (wave != null)
{
wave.Dispose();
wave = null;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DisposeWave();
}
}
}