常规播放加密的mp3播放文件,然后锁定应用程序

时间:2014-02-15 17:48:20

标签: encryption mp3 infinite-loop naudio

我有一个打开加密mp3的程序,将其解密为内存流,然后使用NAudio播放它。加密的mp3文件播放正常,但随后应用程序锁定。

我是NAudio的新手,这是我正在开发的第一个应用程序。这是我得到的代码。

public void PlayEncMP3(String sourceFile)
{
    FileInfo info = new FileInfo(sourceFile);
    FileStream input = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);
    DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
    cryptic.Key = ASCIIEncoding.ASCII.GetBytes("64BITKEY");
    cryptic.IV = ASCIIEncoding.ASCII.GetBytes("64BIT_IV");

    CryptoStream crStream = new CryptoStream(input, cryptic.CreateDecryptor(), CryptoStreamMode.Read);

    BinaryReader rdr = new BinaryReader(crStream);
    byte[] dta = new byte[info.Length];
    rdr.Read(dta, 0, (int)info.Length);
    Stream stream = new MemoryStream(dta);

    using (WaveStream waveStream = new Mp3FileReader(stream))
    {
        using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
        {
            waveOut.Init(waveStream);
            waveOut.Play();
            while (waveOut.PlaybackState == PlaybackState.Playing)
            {
                System.Threading.Thread.Sleep(100);
            }
            waveOut.Stop();
        }
    }
}

似乎正在发生的事情是waveOut.PlaybackState永远不会被设置为停止。调试语句显示循环持续只要我在意等待,但mp3文件的长度只有5秒。知道为什么会这样吗?

在PlaybackState上删除while循环会导致mp3文件根本无法播放。

我尝试按如下方式简化播放代码,但是使用此版本的mp3文件永远不会播放。 (从此链接获得此“解决方案”:How to play a MP3 file using NAudio

public void PlayEncMP3(String sourceFile)
{
    // Get the encrypted file and setup the decryption engine
    FileInfo info = new FileInfo(sourceFile);
    FileStream input = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);
    DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider();
    cryptic.Key = ASCIIEncoding.ASCII.GetBytes("64BITKEY");
    cryptic.IV = ASCIIEncoding.ASCII.GetBytes("64BIT_IV");

    // Implement the decryptor
    CryptoStream crStream = new CryptoStream(input, cryptic.CreateDecryptor(), CryptoStreamMode.Read);

    // Read the decrypted file into memory and convert to a memory stream
    BinaryReader rdr = new BinaryReader(crStream);
    byte[] dta = new byte[info.Length];
    rdr.Read(dta, 0, (int)info.Length);
    Stream stream = new MemoryStream(dta);

    // Open the waveStream for NAudio
    using (WaveStream waveStream = new Mp3FileReader(stream))
    {
        // Open the waveOut
        using (WaveOut waveOut = new WaveOut())
        {
            // Play the file
            waveOut.Init(waveStream);
            waveOut.Play();
        }
    }
}
顺便说一句,我有两个我正在测试的声音文件(第二个是6秒长),两者的行为方式相同。当我使用.NET SoundPlayer时,两个声音文件都完全正常。

我正在使用最新版本的NAudio ...今天早上从网站上下载了它。

任何想法如何解决这个问题?

0 个答案:

没有答案