在Silverlight 5中新增了一个SoundEffect类和SoundEffectInstance类用以加载wav格式的音乐,这样可以很及时的为动画添加音效。

        现在我们看如何使用这两个类来控制播放wav音乐,首先引入mav音乐格式的文件(音频采样大小必须为16或者8位不能是24位,采用PCM编码,22.5, 44.1 or 48khz的采样率)如下图属性:

        其次将引入的wav格式音乐文件在项目中右键点击其属性设置其“生成操作”为“内容”,如下图所示:

        现在我们准备XAML代码以控制SoundEffectInstance类的属性,调节音乐播放效果:

 

  1. <Grid x:Name="LayoutRoot" Background="White"
  2. <!--准备3个Silder控件以控制音乐效果--> 
  3. <Slider Height="135" HorizontalAlignment="Left" Margin="62,38,0,0" 
  4. Name="SlVolume" VerticalAlignment="Top" Width="62" 
  5. Orientation="Vertical" Maximum="1" Value="0.5" /> 
  6. <Slider Height="135" HorizontalAlignment="Left" Margin="162,38,0,0" 
  7. Name="SlPitch" VerticalAlignment="Top" Width="62" 
  8. Orientation="Vertical" Value="0" Maximum="1" Minimum="-1" /> 
  9. <Slider Height="135" HorizontalAlignment="Left" Margin="262,38,0,0" 
  10. Name="SlPan" VerticalAlignment="Top" Width="62" 
  11. Orientation="Vertical" Value="0" Maximum="1" Minimum="-1" /> 
  12. <!--显示名称--> 
  13. <TextBlock Height="23" HorizontalAlignment="Left" Margin="71,179,0,0" 
  14. Name="textBlock1" Text="音量调节" VerticalAlignment="Top" /> 
  15. <TextBlock Height="23" HorizontalAlignment="Left" Margin="166,179,0,0" 
  16. Name="textBlock2" Text="高低音调节" VerticalAlignment="Top" /> 
  17. <TextBlock Height="23" HorizontalAlignment="Left" Margin="271,179,0,0" 
  18. Name="textBlock3" Text="声道平衡" VerticalAlignment="Top" /> 
  19. </Grid> 

        第一步:加载相应的事件

 

  1. public MainPage() 
  2. InitializeComponent(); 
  3. //第一步:加载相应的事件 
  4. Loaded += new RoutedEventHandler(MainPage_Loaded); 
  5. this.SlVolume.ValueChanged+= 
  6. new RoutedPropertyChangedEventHandler<double>(SlVolume_ValueChanged); 
  7. this.SlPitch.ValueChanged+= 
  8. new RoutedPropertyChangedEventHandler<double>(SlPitch_ValueChanged); 
  9. this.SlPan.ValueChanged+= 
  10. new RoutedPropertyChangedEventHandler<double>(SlPan_ValueChanged); 

        第二步:加载声音WAV文件

        第三步:设置声音文件初始化播放属性

 

  1. void MainPage_Loaded(object sender, RoutedEventArgs e) 
  2. GetSound(); 
  3. SoundEffect _soundEffect; 
  4. SoundEffectInstance instance; 
  5. public void GetSound() 
  6. //第二步:加载声音WAV文件 
  7. var laserStream = 
  8. Application.GetResourceStream(new Uri("zhizu.wav", UriKind.RelativeOrAbsolute)); 
  9. _soundEffect = SoundEffect.FromStream(laserStream.Stream); 
  10.  
  11. //第三步:设置声音文件初始化播放属性 
  12. instance = _soundEffect.CreateInstance(); 
  13.  
  14. //Pitch变调效果属性,是高低音平衡调节,该值在-1到1之间设置 
  15. instance.Pitch = 0.0f; 
  16.  
  17. //Pan声像调节属性,它用于调节该路声源在空间的分布图像。 
  18. instance.Pan = 0.0f; 
  19.  
  20. //Volume属性是音量大小调节,该值范围是0-1 
  21. instance.Volume = 0.5f; 
  22. instance.Play(); 

        第四步:根据Silder控件值的变化动态调节声音属性

 

  1. private void SlVolume_ValueChanged(object sender, 
  2. RoutedPropertyChangedEventArgs<double> e) 
  3. //第四步:调节声音属性 
  4. instance.Volume = float.Parse(e.NewValue.ToString()); 
  5. this.textBlock1.Text = "音量调节" + e.NewValue.ToString(); 
  6.  
  7. private void SlPitch_ValueChanged(object sender, 
  8. RoutedPropertyChangedEventArgs<double> e) 
  9. //第四步:调节声音属性 
  10. instance.Pitch = float.Parse(e.NewValue.ToString()); 
  11. this.textBlock2.Text = "高低音调节" + e.NewValue.ToString(); 
  12.  
  13. private void SlPan_ValueChanged(object sender, 
  14. RoutedPropertyChangedEventArgs<double> e) 
  15. //第四步:调节声音属性 
  16. instance.Pan = float.Parse(e.NewValue.ToString()); 
  17. this.textBlock3.Text = "声像调节" + e.NewValue.ToString(); 

        注意SoundEffectInstance类的3个音乐效果属性Volume,Pitch,Pan如下:

 

  1. SoundEffectInstance.Pitch 
  2. //Pitch变调效果属性,是高低音平衡调节,该值在-1到1之间设置 
  3. //当往-1调节时,即往低音调调节 
  4. //当往+1调节时,即往高音调调节 
  5. //如果是0则正常音高 
  6.   
  7.   
  8.  
  9. SoundEffectInstance.Volume 
  10. //Volume属性是音量大小调节,该值范围是0-1 
  11.  
  12. SoundEffectInstance.Pan 
  13. //Pan声像调节属性,它用于调节该路声源在空间的分布图像。 
  14. //当往-1调节时,相当于把该路声源放在听音的左边。 
  15. //当往+1调节时,相当于把该路声源放在听音的右边。 
  16. //若把它置于中间位置0时,相当于把该路声源放在听音的正中。 
  17. //Pan属性是左右声道平衡,该值在-1到1之间设置 

        最后我们来看运行效果如下图,如果要听试听效果请点击 SL5SoundEffect.zip 下载源码。