2010-09-26 49 views
0

我想非常精確地控制聲音的開始,但它似乎在開始聲音之前要等待一些東西。這就好像播放器中有一個內部時鐘以大約43 fps的速度運行,並且聲音只能在該時鐘的節拍處開始播放。
無論項目的幀率或它支配的計算機的幀率如何,始終爲43 fps(至少對我而言)。SoundChannel何時實際開始播放聲音?

爲了測試這個,開始一個聲音,然後每個幀比較channel.position與期望的位置,例如, getTimer() - startTime。差別總是(對我來說)23或46 mS。

我發現了一個問題here,它討論了位置屬性,並且以它自己的速率進行了更新,在我的情況下它恰好是每秒23幀,速度爲43幀/秒。

有沒有辦法控制聲音的播放開始並知道位置屬性何時更新?如果有人能夠解釋什麼時候Flash真的在做什麼,那會很棒!

我真的很感激所有的輸入,這太奇怪了。

編輯:我注意到position屬性只包含23.219954648526077的倍數,例如, 46.439909297052154,69.65986394557822?如果您在創建頻道後直接詢問,它包含我剛剛設置的號碼,但在下一幀中只有這些特定號碼。任何想法的人?

回答

1

23.219954648526077 ms間隔來自閃存內部使用1024個採樣作爲緩衝區大小和44100 hz採樣率。

23.219954648526077毫秒=(1024個樣本/每秒44100個採樣)*(每秒1000毫秒)

如果需要樣品的準確性,可以嘗試使用SampleDataEvent直接和Sound.extract輸出樣本訪問加載的聲音樣本。如果您希望將多個聲音互相同步,但如果您將音頻與顯示幀或視頻進行同步,則會有所幫助。

+0

感謝您的回覆,它解釋了神祕的一部分。但這並不能解釋爲什麼聲音似乎被推遲了。可能是因爲soundchannels不是直接創建,而是暫停,直到下一個soundchannel更新週期,位置屬性也更新了嗎?如果有這樣一個循環,是否有任何事件可以用來知道這是什麼時候發生的? – Bob 2010-09-28 19:44:05