3

ローカル MP3 ファイルをソースとして、最新の SoundManager2 を使用してオーディオ再生用のシンプルな Javascript ジュークボックスを構築しています。ファイルのロードと再生をソートしました。現在、これらの 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 は、usePolicyFile を true に切り替えるため、onid3() が存在することを検出します。MP3 がローカルであることを確認すると、クロスドメイン XML ファイルについて心配する必要はないと思います。

これが機能しない理由を誰かが明らかにできますか? 機能する実装を探して Google を精査しましたが、何も役に立ちませんでした。Jacob Seidelin の純粋な Javascript の回避策を見たことがありますが、可能であれば SoundManager に固執し、PHP ソリューションは使用したくありません。

ありがとう、

アダム

4

2 に答える 2

1

この問題はおそらく難解すぎて確実な答えが得られないため、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>

于 2011-01-23T19:28:15.547 に答える
0

ローカルファイルについては、「ユーザーローカルファイル」(「サーバー」ローカルファイルではない)について話します。id3v2.jsである程度成功します

ID3 を取得するには、SM2 は mp3 ホスト上にクロス ドメインが必要です (別のドメインの場合)。さらに、Soundcloud は MP3 を動的な Amazon S3 ストレージにリダイレクトするため、問題が発生しました...そのため、PHP スクリプトをゲストの最終 URL に実行する必要があり、SM2 は適切な crossdomain.xml を取得できます ( https://getsatisfaction.com/を確認してください)。 schillmania/topics/displaying_waveformdata_of_soundcloud_hosted_track_prompts_securityerror_error_2122 )

問題は、S3 リンクとローカル ユーザー ファイル (BLOB) の両方に短い有効期限の遅延があることです。

幸運を !

于 2012-05-14T16:43:49.620 に答える