简体   繁体   English

Silverlight中的音频播放错误

[英]Audio playing errors in silverlight

Errors are 1)The current chunk is too big 2)Invalid file format 错误是1)当前块太大2)无效的文件格式
3) 3220 3220 An error has occurred** 3)3220 3220发生错误**

Code is this : 代码是这样的:

 private void TestPlaybutton_Click_1(object sender, RoutedEventArgs e)
    {
        Stream stream11 = new MemoryStream();
        try
        {
            WavManager.SavePcmToWav(_stream2, stream11, _sink.CurrentFormat);
            WaveMediaStreamSource wavMss = new WaveMediaStreamSource(stream11);
            SoundClip.SetSource(wavMss);
            SoundClip.Play();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

and SavePcmToWav function: 和SavePcmToWav函数:

                      public static Stream SavePcmToWav(Stream rawData, Stream output,       AudioFormat audioFormat)
    {
        if (audioFormat.WaveFormat != WaveFormatType.Pcm)
            throw new ArgumentException("Only PCM coding is supported.");

        BinaryWriter bwOutput = new BinaryWriter(output);

        bwOutput.Write("RIFF".ToCharArray());

        bwOutput.Write((uint)(rawData.Length + 36));
        bwOutput.Write("WAVE".ToCharArray());
        // -- FORMAT chunk
        bwOutput.Write("fmt ".ToCharArray());
        // Length Of FORMAT Chunk (Binary, always 0x10)
        bwOutput.Write((uint)0x10);
        // Always 0x01
        bwOutput.Write((ushort)0x01);
        // Channel Numbers (Always 0x01=Mono, 0x02=Stereo)
        bwOutput.Write((ushort)audioFormat.Channels);
        // Sample Rate (Binary, in Hz)
        bwOutput.Write((uint)audioFormat.SamplesPerSecond);
        // Bytes Per Second
        bwOutput.Write((uint)(audioFormat.BitsPerSample * audioFormat.SamplesPerSecond * audioFormat.Channels / 8));
        // Bytes Per Sample: 1=8 bit Mono, 2=8 bit Stereo or 16 bit Mono, 4=16 bit Stereo
        bwOutput.Write((ushort)(audioFormat.BitsPerSample * audioFormat.Channels / 8));
        // Bits Per Sample
        bwOutput.Write((ushort)audioFormat.BitsPerSample);
        bwOutput.Write("data".ToCharArray());
        bwOutput.Write((uint)rawData.Length);
        long originalRawDataStreamPosition = rawData.Position;
        rawData.Seek(0, SeekOrigin.Begin);
        byte[] buffer = new byte[rawData.Length];
        int read;       
        while ((read = rawData.Read(buffer, 0, 4096)) > 0)
        {
            bwOutput.Write(buffer, 0, read);
        }
        rawData.Seek(originalRawDataStreamPosition, SeekOrigin.Begin);
        return output;
    }

????? ?????? where is the problem and is there any alternative to play stream with in silverlight i am using these classes, WaveMediaStreamSource, wavparser, waveformatex 问题在哪里,是否有其他选择可以在Silverlight中播放流,我正在使用以下类,WaveMediaStreamSource,wavparser,waveformatex

I have solved my Problem. 我已经解决了我的问题。

<MediaElement x:Name="SoundClip" AutoPlay="True" MediaOpened="SoundClip_MediaOpened_1"  Volume="1" />

I just change AutoPlay from False to True and it worked for me. 我只是将AutoPlay从False更改为True,它对我有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM