2012-01-09 114 views
6

我正在製作音樂遊戲,當用戶按下音符時,它會發出聲音。當用戶按下時,聲音自然需要立即播放,所以他們可以判斷他們是否及時聽到了音樂。但是,感覺好像聲音是滯後的,尤其是當音符按鍵變得更快時。Cocos Denshion:與音樂同步播放音效

我的背景.m4a音樂文件與AVAudioPlayer一起播放。我選擇使用Cocos Denshion,因爲我可以訪問currentTime屬性。我可能是錯的,但我不認爲我可以通過CocosDenshion訪問它。

我做了一個非常短(不到一秒)的.wav文件。我對預裝初始化我的聲音效果:

[[SimpleAudioEngine sharedEngine] preloadEffect:@"Assist.wav"]; 

然後播放聲音效果,在CCTouchesBegan我打電話:那

[[SimpleAudioEngine sharedEngine] playEffect:@"Assist.wav"]; 

後,它會調用我的代碼,以確定用戶定時和獎勵積分。任何想法,爲什麼它可能會滯後,或者更好的方式與音樂及時播放音效?

編輯:我最近嘗試了幾件事情,沒有結果。首先,我試着在歌曲的適當時間自動播放聲音。仍然有滯後,所以我不認爲這是觸摸事件緩慢。我也嘗試了3個不同的聲音庫。

但是,當我在模擬器中運行時,它似乎不是滯後的。有人有想法嗎?我無能爲力,它的一個主要特點我不能真正拿出...

+0

請提供哪些設備的信息,你跑步,和X-碼文書CPU負載和GPU負載信息,以及有多少聲音在同一時間玩也是一種理念,以及以何種格式爲您背景音樂(猜測有一個)。 – 2013-10-09 20:58:58

回答

1

你應該避免這樣的代碼: - [[SimpleAudioEngine sharedEngine] preloadEffect:@「Assist.wav」];

與應用的開始,你應該通過編寫這些代碼加載的框架SimpleAudioEngine: -

// SimpleAudioEngine * palySound;在.h文件中創建對象。 palySound = [SimpleAudioEngine sharedEngine];

只要你想播放聲音,你可以寫:[palySound playEffect:@「Assist.wav」];

+0

感謝您的回覆。我試過這個,但它似乎沒有任何不同。聲音依然落後。 – Arbel 2012-01-10 11:43:37

+0

您是否將SimpleAudioEngine加載到了didFinishLaunchingWithOptions的appdelegate中... – 2012-01-10 12:59:09

+0

是的,似乎沒有什麼區別。也許觸摸事件很慢? – Arbel 2012-01-19 08:35:23

0

我不確定你在做什麼SoundEngine,但根據我自己的經驗,最好的方法是不要讓聲音滯後播放聲音,那就是爲每個聲音文件分配一個AVAudioPlayer(除非你想開始搞亂與AudioQueues周圍)。

這是一個例子:

讓我們假設你在當前視圖控制器有一個AVAudioPlayer *assistPlayer;

在你viewDidLoad與您的聲音將其初始化:

NSURL *wavURL = [[NSBundle mainBundle] URLForResource:@"Assist" withExtension:@"wav"]; 
assistPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:wavURL error:nil]; 

然後,在你IBAction要播放的文件,只是做:

[assistPlayer play]; 

你不應該得到任何滯後。

+0

嘗試過,但它似乎沒有區別。其實得到的表現較差。 Denshion是openAL的一個很薄的包裝器。 – Arbel 2012-02-19 07:21:29

+0

什麼是你的wav文件的採樣頻率和位深度?你有沒有嘗試重新取樣,只用16位? – 2012-02-21 23:15:14

0

你試過Finch?它聲稱以低延遲播放聲音,它也僅僅是OpenAL的包裝。

除此之外,我真的不能與OpenAL的經歷,但能想到的你的滯後兩個可能的原因:

  1. 主線程是太忙 - 嘗試從中分流工作等 線程。

  2. 也許OpenAL定義了一個過大的緩衝區,所以流水線會將整個聲音加載到緩衝區(或其中的一大塊區域),並且只有在此之後纔開始播放。

+0

是的,我給了芬奇一個嘗試,但與Denshion有相同的結果。我也能夠在一個非常簡單的示例項目中複製它https://github.com/so3arbelnox/soundtest – Arbel 2012-02-20 00:29:05