SoundManager2 onid3 () не запускается - PullRequest
3 голосов
/ 16 января 2011

Я создаю простой музыкальный автомат Javascript с использованием новейшего SoundManager2 для воспроизведения аудио, источником которого являются локальные файлы MP3. У меня загрузка файлов и воспроизведение отсортированы, и в данный момент я пытаюсь получить доступ к информации ID3 этих файлов MP3, но обратный вызов 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 в поисках реализаций, которые работают, но не нашли ничего полезного. Я видел чистый обходной путь Javascript от Jacob Seidelin, но предпочел бы придерживаться SoundManager, если это возможно, и предпочел бы не использовать решение PHP.

Спасибо

Адам

Ответы [ 2 ]

1 голос
/ 23 января 2011

Эта проблема, вероятно, слишком эзотерична для любых убедительных ответов, поэтому я решил исследовать возможные решения Javascript вне библиотеки SM2.

Я начал с библиотеки Nihilogic для чтения тегов ID3v1 (на http://blog.nihilogic.dk/2008/08/reading-id3-tags-with-javascript.html),но перешел в библиотеку antimatter15 js-id3v2 (https://github.com/antimatter15/js-id3v2), поскольку он может читать теги ID3v2. Адаптация кода из предоставленного примера Мне удалось успешно проанализировать основные теги, необходимые при загрузке MP3 через элемент управления <input>.

0 голосов
/ 14 мая 2012

Для локальных файлов, я говорю о «пользовательских локальных файлах» (не «локальных файлах сервера»), я получаю некоторый успех с 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-объекты) имеют небольшую задержку истечения.

Удачи!

...