Как найти длину аудиоклипа с помощью JSFL

Я надеюсь, что кто-то может помочь мне с этим. У меня есть ситуация, когда мне нужно добавить аудио файлы в уже разработанные файлы FLA. Чтобы сделать это, мне нужно открыть файл fla, создать новый слой, перетащить аудиоклип на этот слой, расширить все слои до конца аудиоклипа и добавить стоп.

Я надеялся использовать JSFL, чтобы сделать это для меня. В настоящее время у меня есть его, где я могу выбрать аудиоклип в библиотеке и запустить свой JSFL-скрипт. Я взял этот аудиоклип и добавил его в новый слой. Это создает другой слой и добавляет остановку в последнем кадре. Я также могу расширить все слои, сколько угодно. Моя проблема в том, что я не могу понять, как определить длину звукового клипа, поэтому я знаю, как долго можно расширять все слои.

Любая помощь будет отличной.

Спасибо

2 ответа

Решение

Изучив документацию по JSFL (pdf-ссылку), вы получите лишь несколько доступных свойств:

Property Description
soundItem.bitRate                   A string that specifies the bit rate of a sound in the library. Available only for the MP3 compression type. 
soundItem.bits                      A string that specifies the bits value for a sound in the library that has ADPCM compression.
soundItem.compressionType           A string that specifies the compression type for a sound in the library. 
soundItem.convertStereoToMono       A Boolean value available only for MP3 and Raw compression types. 
soundItem.fileLastModifiedDate      Read-only; a string containing a hexadecimal number that represents the number of seconds that have elapsed between January 1, 1970, and the modification date of the original file (on disk) at the time the file was imported to the library. 
soundItem.originalCompressionType   Read-only; a string that specifies whether the specified item was imported as an MP3 file.
soundItem.quality                   A string that specifies the playback quality of a sound in the library. Available only for the MP3 compression type. 
soundItem.sampleRate                A string that specifies the sample rate for the audio clip.
soundItem.sourceFileExists          Read-only; a Boolean value that specifies whether the file that was imported to the Library still exists in the location from where it was imported.
soundItem.sourceFileIsCurrent       Read-only; a Boolean value that specifies whether the file modification date of the Library item is the same as the modification date on disk of the file that was imported.
soundItem.sourceFilePath            Read-only; a string, expressed as a file:/// URI, that represents the path and name of the file that was imported into the Library.
soundItem.useImportedMP3Quality     A Boolean value; if true, all other properties are ignored, and the imported MP3 quality is used

На данный момент я могу думать только о нескольких хакерских обходных путях... ну, одна из двух версий:

  • пусть человек, экспортирующий звуки, также экспортирует.txt с тем же именем, что и звук, который содержит длину звука. Вы можете загрузить и прочитать этот файл, используя FLfile, затем, используя частоту кадров документа, рассчитать количество необходимых кадров.
  • аналогично описанному выше методу, вы можете извлечь инструмент командной строки, единственная цель которого - вывести длину аудиофайла (используя свойство sourceFilePath звука) или использовать существующий инструмент (*). Вы можете вызвать приложение командной строки, используя недокументированное FLfile.runCommandLine(),

Вот несколько примеров инструментов командной строки: ffmpeg (например, ffmpeg -i yourAudioFile) или MediaInfo. Я уверен, что есть и другие. Это зависит от того, какую операционную систему вам нужно использовать и насколько легко установить инструмент. В идеале вы должны использовать что-то, что выводит только длительность, но если вы получите больше данных, вы сможете проанализировать выходные данные и получить длительность. Также обратите внимание, что функция вернет 1 для успешного выполнения или 0 в противном случае, поэтому вам понадобится команда, которая также запишет вывод в текстовый файл, который вы можете прочитать с помощью jsfl.

Если ваши аудиофайлы кодируются с постоянным битрейтом, вы можете в конечном итоге получить длину ваших файлов и рассчитать их длительность, используя FLfile.getSize() метод.

Вот фрагмент jsfl, который вычисляет и показывает длительность кадров каждого звука из вашей библиотеки:

var dom = fl.getDocumentDOM();
var lib = dom.library;

var soundsBitRate = 705;//specify here the bitrate of your files in Kbits/s

for (i = 0; i < lib.items.length; i++) {
    if (lib.items[i].itemType == "sound") {
        alert ("Duration of "+ lib.items[i].name + " : " + Math.ceil(FLfile.getSize(lib.items[i].sourceFilePath) / (soundsBitRate/8) / 1000 * dom.frameRate)+ " frames");
    }
}
Другие вопросы по тегам