soundmanager2 onid3()発火しない
-
11-10-2019 - |
質問
ローカルMP3ファイルがソースであるため、最新のsoundmanager2を使用してシンプルなJavaScript Jukeboxを構築しています。ファイルの読み込みと再生がソートされており、現時点ではこれらのMP3ファイルのID3情報にアクセスしようとしていますが、ONID3()コールバックは発生していません。 Flashを使用しており、ID3情報がファイルに存在することを確認しています。以下は、onid3()の実装です。
function playNextSongInQueue()
{
// Get the first element of the songQueue array
var nextSongInQueue = songQueue.shift();
// Start playback from the queue
var jukeboxTune = soundManager.createSound({
id: 'currentTune',
url: 'audio/' + nextSongInQueue.name,
onload: function() {
this.play();
},
onid3: function() {
alert('ID3 present!');
},
onfinish: function() {
this.destruct(); // Destroy this sound on finish
songFinish(); // Run the songFinish() function, so decide what to do next
}
});
jukeboxTune.load();
//jukeboxTune.play(); // The jukebox running!
songPlaying = true; // Set songPlaying flag
updateSongQueueDisplay(); // Refresh the song queue display (for debug)
return nextSongInQueue.name;
}
他のコールバックは正常に動作しますが、ONID3()アラートは発生しません。オーディオ再生の負荷を分離し、それが役立ったかどうかを確認しました。 soundmanagerは、onid3()がusepolicyfileをtrueに切り替えるためにそこにあることを見つけます - mp3がローカルであるため、クロスドメインXMLファイルについて心配する必要がないと思います。
なぜこれが機能していないのかを誰かが光を当てることができますか?私はGoogleを探して、機能するが、何も役に立たない実装を探しています。 Jacob Seidelinの純粋なJavaScriptの回避策を見てきましたが、可能であればSoundManagerに固執したいと思っていますが、PHPソリューションは使用しません。
ありがとう、
アダム
解決
この問題は、おそらく堅実な答えには難解すぎるので、SM2ライブラリの外で可能なJavaScriptソリューションを調査することにしました。
id3v1タグを読むためにnihilogicのライブラリから始めました(で http://blog.nihilogic.dk/2008/08/reading-id3-tags-with-javascript.html)、しかし、antimatter15のJS-ID3v2ライブラリに移動しました(https://github.com/antimatter15/js-id3v2)ID3v2タグを読むことができるため。提供された例からコードを適応することは、mp3を介してロードされたときに必要なメインタグを正常に解析することができました <input>
コントロール。
他のヒント
ローカルファイルについては、「ユーザーローカルファイル」(「サーバー」のローカルファイルではない)について話します。ID3v2.jsで成功します
ID3を取得するには、SM2が別のドメインである場合、MP3ホストにクロスドメインが必要です。さらに、SoundCloudが動的なAmazon S3ストレージにMP3をリダイレクトするため、SoundCloudで困難に遭遇しました。したがって、最終URLにPHPスクリプトを実行する必要があり、SM2は適切なCrossDomain.xmlを取得できます(チェック https://getsatisfaction.com/schillmania/topics/displaying_waveformdata_of_soundcloud_hosted_track_prompts_securityerror_error_2122 )
問題は、S3リンクとローカルユーザーファイル(BLOB)の両方の有効期限が短いことです。
幸運を !