지난주에 C#으로 프로젝트 용으로 만든 기존 Matlab 8 밴드 이퀄라이저 GUI를 다시 구현하려고합니다. Matlab에서 노래는 동적 배열로 메모리에로드됩니다. 메모리에서 곡을 자유롭게 조작하고 재생할 수 있습니다 (배열).NAudio를 사용하여 Mp3을 배열로 조작
편리하게 이미 Mp3 추출기, 플레이어 및 둘 다 회선과 FFT가 정의 된 NAudio 라이브러리를 찾았습니다. 나는 MP3를 열어 모든 데이터를 배열로 읽을 수 있었지만 (비록 그것이 올바르지는 않을지라도 나는 올바르게 그것에 관해 갈 것이다.) 그러나 몇 가지 예제를 살펴본 후에도, 나는 어떻게 배열을 가져 와서 제대로 재생할 수있는 방식으로 스트림에 다시 씁니다 (필자는 파일에 쓸 필요가 없습니다). 내가, 내가 이렇게 내 MP3 파일의 읽기 발견 된 예는 다음
:
private byte[] CreateInputStream(string fileName)
{
byte[] stream;
if (fileName.EndsWith(".mp3"))
{
WaveStream mp3Reader = new Mp3FileReader(fileName);
songFormat = mp3Reader.WaveFormat; // songFormat is a class field
long sizeOfStream = mp3Reader.Length;
stream = new byte[sizeOfStream];
mp3Reader.Read(stream, 0, (int) sizeOfStream);
}
else
{
throw new InvalidOperationException("Unsupported Exception");
}
return stream;
}
지금은이 아마도 내가 통해 실행으로 결국 비밀 그래서 수레을하려는 원시 오디오 데이터를 포함하는 바이트의 배열 DSP 모듈 그러나 지금 당장은 바이트 배열을 재생할 수 있는지 알아보기 위해 노력하고 있습니다.
Stream outstream = new MemoryStream(stream);
WaveFileWriter wfr = new WaveFileWriter(outstream, songFormat);
// outputStream is an array of bytes and a class variable
wfr.Write(outputStream, 0, (int)outputStream.Length);
WaveFileReader wr = new WaveFileReader(outstream);
volumeStream = new WaveChannel32(wr);
waveOutDevice.Init(volumeStream);
waveOutDevice.Play();
지금은 스트림 끝을지나 읽을 수 없다는 WaveFileReader (outstream)에서 발생하는 오류가 발생합니다. 나는 그것이 내가 올바르게하고있는 것이 아니라는 것을 의심한다. 어떤 통찰력?