Hello everybody,
I'm currently working on SFML.Net to expand with mp3 support. Therefore I wrote a Stream class which uses NLayer MpegFile to decode the mp3.
public class Mp3StreamSFML
: SoundStream
{ private MpegFile mp3file
; private int currentBufferSize
; private short[] currentBuffer
; public Mp3StreamSFML
(String _filename
) { mp3file
= new MpegFile
(_filename
); Initialize
((uint)mp3file
.Channels,
(uint)mp3file
.SampleRate); currentBufferSize
= 0; currentBuffer
= new short[currentBufferSize
]; } #region implemented abstract members of SoundStream protected override bool OnGetData
(out short[] samples
) { if (currentBufferSize
<= mp3file
.Position) { byte[] buffer
= new byte[512]; if (mp3file
.ReadSamples(buffer,
0, buffer
.Length) > 0) { Array
.Resize(ref currentBuffer, currentBuffer
.Length + (buffer
.Length / 2)); Buffer
.BlockCopy(buffer,
0, currentBuffer, currentBufferSize, buffer
.Length); currentBufferSize
= currentBuffer
.Length; } samples
= currentBuffer
; return true; } else { samples
= currentBuffer
; return false; } } protected override void OnSeek
(TimeSpan timeOffset
) { mp3file
.Position = (long)timeOffset
.TotalSeconds; } #endregion } I use it this way:
try { stream
= new Mp3StreamSFML
(this.objProgram.getObjCuesheet().getAudiofilePath(true)); stream
.Play(); log
.debug("samplerate = " + stream
.SampleRate); } catch(Exception ex
) { log
.fatal(ex
.ToString()); } Unfortunately, there is not the correct sound played, its just "juttering" and sound really weird. What I'm doing wrong? Seems like a problem between the 2 Frameworks.
NLayer:
https://nlayer.codeplex.com/Thanks for your help
.
Sven