2014-03-26 52 views
0

我想在我的iOS应用SpriteKit播放声音,就像这样:SpriteKit声音不玩

var action = SKAction.PlaySoundFileNamed("filename.wav", false); 
SKAction.RunAction(action, "action-name"); 

它证实了声音文件不存在,因为PlaySoundFileNamed否则会抛出异常。
我也可以确认它正在做当应用程序第一次执行动作时(我知道如何解决这个问题,它只是为了确认它做了什么)而略微抖动。

的事情,我曾尝试:
- 在PlaySoundFileName动作设置waitForCompletiontrue而不是false
- 调用AVAudioSession.SharedInstance().SetActive(true, out error)
- 在.WAV的.m4a格式使用声音。
- 在设备和模拟器上进行测试。

但没有声音播放...
任何想法?

+0

检查声音文件为单声道,没有立体声,以兼容的格式(即未压缩的wav) – LearnCocos2D

+0

它不是未压缩的。更新为未压缩的wav,但仍然没有声音。这是一个单声道文件。 –

回答

1

仍然没有得到它与Sprite Kit,但我解决了它通过使用AVAudioPlayer。

public class SoundFile 
{ 
    private AVAudioPlayer audioPlayer; 

    public SoundFile(string fileName) 
    { 
     this.FileName = fileName; 
    } 

    public string FileName { get; set; } 

    public bool PreLoaded { get; set; } 

    public void PreLoad() 
    { 
     this.audioPlayer = AVAudioPlayer.FromUrl(new NSUrl(this.FileName)); 
     this.audioPlayer.CurrentTime = 0; 
     this.audioPlayer.NumberOfLoops = 0; 
     this.audioPlayer.Volume = 1.0f; 
     this.audioPlayer.PrepareToPlay(); 

     this.PreLoaded = true; 
    } 

    public void Play() 
    { 
     if (!this.PreLoaded) 
     { 
      this.PreLoad(); 
     } 

     Task.Run(() => 
     { 
      this.audioPlayer.CurrentTime = 0; 
      this.audioPlayer.Play(); 
     }); 
    } 
} 

然后播放这样的:

var sound = new SoundFile("my-filename.wav"); 
sound.Play(); 

(显然预加载首先,所有的声音)