2011-01-16 2 views
3

Я создаю простой Javascript jukebox, используя новейший SoundManager2 для воспроизведения звука, причем локальными файлами MP3 являются источник. У меня загружена загрузка файлов и сортировка файлов, и на данный момент я пытаюсь получить доступ к ID3-данным этих файлов MP3, но обратный вызов onid3() не срабатывает. Я использую Flash и проверил, что информация ID3 присутствует в файлах. Ниже моя реализация onID3():SoundManager2 onid3() not firing

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-решение.

Спасибо,

Адам

+0

У меня нет ответа, но +1 для того, что кажется потрясающим звуковым фреймворком - я не слышал о SoundManager, и это именно то, что мне нужно для проекта, над которым я работаю. –

ответ

1

Эта проблема, вероятно, слишком эзотерическая для любых твердых ответов, так что я решил исследовать возможные 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

Для локальных файлов, я говорю о «локальных пользовательских файлов» (не «сервер» локальные файлы) я получить некоторый успех с id3v2.js

Чтобы получить ID3, SM2 нужно междоменное на mp3 хозяина, если это другой домен. Плюс я столкнулся с трудностями Soundcloud, поскольку они перенаправлять MP3 в динамической памяти Amazon S3 ... так что я должен сделать PHP скрипт для гостя конечного URL, а затем SM2 может получить надлежащую crossdomain.xml (Check https://getsatisfaction.com/schillmania/topics/displaying_waveformdata_of_soundcloud_hosted_track_prompts_securityerror_error_2122)

Проблема заключается в том, что S3-ссылки и локальные пользовательские файлы (blob) имеют небольшую задержку истечения срока действия.

Удачи вам!