0

私は現在、SFML.Net に取り組んでおり、mp3 サポートを拡張しています。したがって、MP3 をデコードするために NLayer MpegFile を使用する 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());
                }

残念ながら、正しいサウンドが再生されるわけではありません。単に「ジャタリング」するだけで、非常に奇妙に聞こえます。私が間違っていることは何ですか?2 つのフレームワーク間の問題のようです。

ご協力いただきありがとうございます。スヴェン

4

1 に答える 1