【发布时间】:2014-07-27 19:09:27
【问题描述】:
我目前正在开发 SFML.Net 以扩展对 mp3 的支持。因此,我编写了一个使用 NLayer MpegFile 解码 mp3 的 Stream 类。
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
}
我是这样用的:
try
{
stream = new Mp3StreamSFML(this.objProgram.getObjCuesheet().getAudiofilePath(true));
stream.Play();
log.debug("samplerate = " + stream.SampleRate);
}
catch(Exception ex)
{
log.fatal(ex.ToString());
}
不幸的是,没有播放正确的声音,它只是“断断续续”,听起来很奇怪。我做错了什么?似乎是两个框架之间的问题。
感谢您的帮助。 斯文
【问题讨论】:
-
也许 sfml-dev.org 上的某个人可以在论坛上为您提供帮助..
-
我也在那里问过,也许有人可以给我提示一下,怎么了。
-
NLayer 几乎没有文档,我是新手。以前没有人使用过这个框架吗?
标签: c# audio sfml n-layer sfml.net