2014-05-19 88 views
0

我有一個AS3音樂播放器內置到一個應用程序,我放在一起。它幾乎適用於我使用過的每個文件,但有一個文件可以提前停止。該文件大約56秒長,玩家停在大約44秒。我使用跟蹤來顯示長度,而對於其他每首歌曲,長度都是正確的。在這種情況下,跟蹤顯示大致44秒而不是56.這是我用來加載文件的代碼:Flash/AS3播放器如何讀取mp3文件的長度?

length = 0; 
request = new URLRequest(fileAddress); 
track = new Sound(); 
track.load(request); 
track.addEventListener(Event.COMPLETE, TrackLoaded); 

而這裏的TrackLoaded功能:

private function TrackLoaded(e:Event):void{ 
    length = track.length; 
    if (playWhenLoaded == true){ 
    trackChannel = track.play(0); 
    trackChannel.addEventListener(Event.SOUND_COMPLETE, TrackFinishedPlaying); 
    playWhenLoaded = false; 
    } 

完美的作品與所有其他文件。我錯過了什麼?

+0

從來沒有聽說過,但這些傢伙說,這是正常的(不知道,值得一試):http://www.kirupa.com/forum/showthread.php?332063-Incorrect-sound-length-物業價值 –

+0

啊,我很擔心。這是在一個應用程序運行,將不得不看看我們可以做些什麼來消除長度。謝謝。 – TomJeffries

回答

0

你願意承擔這個56秒MP3的地方下載&分析?或者,如果你可以通過Hexeditor檢查標題信息。我懷疑以下兩種情況之一:

1)標題的嵌入時間長度不正確,Flash將其作爲最終持續時間並在此停止。畢竟爲什麼要讀剩下的字節?他們可能只是元數據而不是音頻樣本除了編碼器會對真實持續時間說謊嗎?所以即使你的耳朵知道它的不正確,它也被認爲是最後的持續時間。

2)MP3採樣率/比特率問題:考慮採樣率是這一個問題MP3?檢查工作MP3的採樣率。這些各種發現的聲音也是你自己做的嗎?我要求確認你爲每個文件放置了相同的設置,但這個不起作用?

在任何情況下,我認爲你可以通過重新編碼來解決這個特定的MP3。也許保存爲WAV或AIFF第一然後採取新的未壓縮的音頻並轉換回用的44100千赫+立體聲音響+恆定比特率採樣率的MP3一個(避免可變B.Rate像地獄,如果你不想的問題)

檢查和修復上面的任一應該讓你正確解析MP3。希望它有幫助

+0

看看http://www.kirupa.com/forum/showthread.php?332063-Incorrect-sound-length-property-value。我沒有檢查過標題,但是其他所有程序都能正確播放--Blaze Audio的RipEditBurn Plus,Windows Media Player,Audacity。這似乎是一個AS3問題。 – TomJeffries

+0

確實,但是既然你說Flash除了這個文件以外的所有其他文件都可以,那麼你必須推斷出它與其他文件相比有什麼「特殊」。 Flash優選44100 kHz 2聲道音效作爲最佳輸入(CD品質)。考慮一下'Sound.load()'將音頻格式解碼爲44100無壓縮PCM,無論如何,我的體驗都帶有128kb比特率。無論如何,我已經看到了Kirupa鏈接。沒有冒犯,但我沒有看到它的價值,除了「...等到聲音結束正確的時間」。 PHP會爲你做什麼?你會得到一個號碼,但Flash仍然停在44秒。使用免費軟件重新編碼將有助於解決這個99.99%的問題。 –

+0

如果你可以在'.totalbytes'共享文件大小以及比特率和採樣率,我可以試着弄清這44秒VS 56秒來自哪裏。如果您無法顯示文件(W-I-P限制等),這很酷,但它會使診斷更容易。 –