gpt4 book ai didi

c# - NLayer MpegFile转SFML(.NET)音乐

转载 作者:行者123 更新时间:2023-12-03 02:10:58 29 4
gpt4 key购买 nike

我目前正在寻找某种方式来扩展SFML.Net以使用MP3。因此,ioctllr推荐了NLayer,我想尝试一下。这是我的方法:

namespace AudioCuesheetEditor.AudioBackend
{
public class SFMLMp3Stream : Stream
{
private static readonly Logfile log = Logfile.getLogfile(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

private MpegFile file;

public SFMLMp3Stream(String _filename)
{
//TODO:Check file existence
file = new MpegFile(_filename);
log.debug("file = " + file.ToString());
}

#region implemented abstract members of Stream

public override void Flush()
{
file.Position = 0;
}

public override long Seek(long offset, SeekOrigin origin)
{
switch (origin)
{
case SeekOrigin.Begin:
file.Position = offset;
break;
case SeekOrigin.Current:
file.Position = file.Position + offset;
break;
case SeekOrigin.End:
break;
}
return file.Position;
}

public override void SetLength(long value)
{
//TODO?
int i = 1;
}

public override int Read(byte[] buffer, int offset, int count)
{
return file.ReadSamples(buffer, offset, count);
}

public override void Write(byte[] buffer, int offset, int count)
{
throw new NotImplementedException();
}

public override bool CanRead
{
get
{
return true;
}
}

public override bool CanSeek
{
get
{
return file.CanSeek;
}
}

public override bool CanWrite
{
get
{
//Writing to stream is prohibited
return false;
}
}

public override long Length
{
get
{
return file.Length;
}
}

public override long Position
{
get
{
return file.Position;
}
set
{
file.Position = value;
}
}

#endregion
}

}

使用这种方式:
musicStream = new SFMLMp3Stream(this.objProgram.getObjCuesheet().getAudiofilePath(true));
try
{
music = new Music(musicStream);
}
catch(Exception ex)
{
log.fatal(ex.ToString());
}

我从SFML获得异常:
05.06.2014 10:34:28 AudioCuesheetEditor.AudioBackend.AudioManagerSFML: FATAL |    SFML.LoadingFailedException: Failed to load music from memory
bei SFML.Audio.Music..ctor(Stream stream)
bei AudioCuesheetEditor.AudioBackend.AudioManagerSFML.setMusic() in d:\tmp\AudioCuesheetEditor\src\AudioCuesheetEditor\AudioBackend\AudioManagerSFML.cs:Zeile 50.

我在SFML中读到,它需要PCM 16位带符号整数( http://en.sfml-dev.org/forums/index.php?topic=1406.0)。 NLayer支持吗?我该如何更改代码,使其有效?

谢谢你的帮助。
斯文

最佳答案

Unhappiliy Music类不提供阅读mp3流的功能。

关于c# - NLayer MpegFile转SFML(.NET)音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056847/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com