如何在Silverlight中压缩语音流

时间:2010-12-09 14:10:04

标签: silverlight-4.0 compression

我使用silverligh4录制了音频并试图通过服务器上的服务保存它。 记录问题.WAV文件有十万字节的数据作为流。但是当此流传递给服务时,它仅以1526字节的最大值传输。我在web.config中设置了max属性。我认为我们需要在客户端上对流进行编码并传递此编码流并在服务器上对其进行解码。如何在sileverlight上编码音频流 应用程序并在服务器上解码?请指教。谢谢你的时间。 Nspeex或CSpeex对我不起作用。如果有人实施了同样的建议,请建议怎么做?

2 个答案:

答案 0 :(得分:1)

将WAV压缩到任何合理大小(没有交易质量)的唯一方法是将其转换为另一种格式。

我不知道这是否适合您,但在发送到服务器之前使用lame.exe转换为MP3非常容易。当然,您需要确保许可允许您随应用程序一起分发。

这是一个将MP3转换为WAV的开源程序: http://www.codeproject.com/KB/audio-video/madlldlib.aspx

要转换为MP3这样的东西,你也许可以使用--decompress选项将MP3转换为WVA并使用lame。

using System.Diagnostics;

public string WAV2MP3(string fileName, bool waitFlag) {

    string newFileName = fullpathDir + fileName.Replace(".wav",".mp3");
    string lameArgs = "-b 32 --resample 22.05 -m m \"" + 
        fullpathDir + fileName + "\" \"" + 
        newFileName + "\"";

    ProcessStartInfo processInfo = new ProcessStartInfo();

    Arguments = lameArgs;
    WindowStyle = ProcessWindowStyle.Hidden;
    WorkingDirectory = Application.StartupPath;

    Process startedProcess = new Process.Start(processInfo);

    if (waitFlag) {
      startedProcess.WaitForExit();
    }
    return newFileName;

};

答案 1 :(得分:0)

我可能只是采用原始音频流,以低速率对其进行采样,然后通过压缩流将其发送出去。如果你想获得想象力,可以将压缩变为像LAME这样的MP3编码器(在一个单独的线程/进程中!)。