PDA

Просмотр полной версии : импорт Wav


Al_Polonski
28.07.2005, 14:43
Возможно, вопрос покажется глупым, но больши спецом во Flash я не являюсь? а проблема есть :)

Нужно программно импортировать wav-файлы. Я нашел функцию loadSound(), но, как я понял, она позволяет импортировать только MP3.

Есть ли что-нибудь для WAV?

iNils
28.07.2005, 14:53
Нет.
А чем mp3 не подходит?

TechGiG
28.07.2005, 14:55
Зачем тебе wav?
Оптимизируй в mp3. Легче и лучше.

Al_Polonski
28.07.2005, 14:58
да так тоже можно.

просто есть набор WAV-файлов, которые без особого труда имользуются в версии программки, написанной на Macromedia Director. Мне нужно тот же набор файлов использовать во Flash.

Конвертировать в MP3, конечно, можно.

DeadMorozz
29.07.2005, 14:15
Эээ.... Все бы хорошо, но флеша пока не умеет забирать в себя внешние файлы не mp3-формата.
Так что... как это ни прискорбно, но конвертация wav-файликов в mp3 неизбежна. Зато есть в это своя прелесть - файлы меньше, и в них есть ID-тэги ;)

Muharadga
29.07.2005, 14:23
У меня тож короче трабл с wav, есть нон-стоп презентация, в каждом кадре фотка с текстом, есть несколько файлов wav с голосом диктора который начитывает этот текст, надо синхронизировать голос с текстом в кадрах... если просто вставлять звуки в кадры то почемуто каждый раз звук идет по разному... надо как-то сделать это програмно но как сделать это в ActionScript я не в курсе, прошу Вашей помощи :confused:

iNils
29.07.2005, 14:30
Когда ставишь в звук кадр, то в панели Properties для Sync ставишь значение Stream. Теперь звук синхронизируется с таймлайн.

Но не забудь потом в Publish Settings для Audio Stream поставить нормальное качество.

Muharadga
29.07.2005, 14:56
Ну и поставил :( теперь вообще звука нету. кадры не распределены по длине звука. В каждом кадре скрипт который переходит на следующий кадр, если щетчик уже равен определенному значению Tics, короче работа счетчика

stop();
_root.onEnterFrame = function() {
if (start_ == 1) {
if (i == 75) {
_root.nextFrame();
} else {
_root.stop();
}
i<75 ? i++ : i=0;
}
};


мне нужно сделать чтоб при переходе на новый кадр флэш восвроизводил wav находящийся в библиотеке(Library).Звук называется "cong1". help me pls

iNils
29.07.2005, 14:59
а счетчик что считает?

Muharadga
29.07.2005, 15:09
счетчик считает через сколько времени перейти на следующи кадр

iNils
29.07.2005, 15:25
Так конечно ошибка будет. Звук играет ровно без задержек. А любая тормознутось машины сразу вызовит смешения кадров.
Нужно подсчитать количество миллисекунд (можно и просто секунд *1000) и забить в массив.

Теперь удаляешь звук с тамлайн и создаешь экзепляр класса Sound.
К ним делаешь attachSound звука из библиотеки. И запускаешь звук start(0,0). Теперь внутри onEnterFrame проверяшешь у звука значение position и сравниваешь его с значением в массиве для n-го текста. Если position равен или больше, то меняешь текст и сравниваешь уже со следущим значеним в массиве.

Muharadga
29.07.2005, 15:34
Эт я и сам знаю, саму процедуру на словах, но я не знаю actionScript, потому и обратился сюда, я Director'щик на лино это сделал бы в два счета, но надо во флэше.... можешь отредактировать код? просто в action'e мой познания ограничиваются навигацией по таймлайну...

stop();
_root.my_sound = new Sound();
_root.my_sound.attachSound("cong1");

_root.onEnterFrame = function() {
_root.my_sound.start(0,1000)
if (start_ == 1) {
if (i == 75) {
_root.nextFrame();
} else {
_root.stop();
}
i<75 ? i++ : i=0;
}
};



так?

iNils
29.07.2005, 15:42
stop ();
_root.my_sound = new Sound ();
_root.my_sound.attachSound ("cong1");
_root.my_sound.start ();
// массив с времене окончанием каждого куска текста. в примере всего 5 кусков и каждый длится равно 1,5 секунды
_root.arraySound = new Array (1500, 3000, 4500, 6000);
_root.frame = 0;
_root.onEnterFrame = function () {
if (_root.my_sound.position > _root.arraySound[_root.frame]) {
_root.nextFrame ();
_root.frame++;
}
if (_root.frame > _root.arraySound.length) {
trace ("значения в массиве или звук закончились");
}
};

DeadMorozz
29.07.2005, 15:42
проще всего переходить по кадрам, отслеживая конец звука.
например, в первой строке кадра ты каждый раз инициализируешь новый рассказ. А потом, отсдеживая его завершение, переходишь дальше. Вот в таком ключе:

speech.onSoundComplete = function() {
gotoAndPlay(nextFrame);
}

iNils
29.07.2005, 15:43
я так понял там звук одним куском

Muharadga
29.07.2005, 15:46
Нет... несколько звуковых файлов cong1. cong2, cong3, cong4 .... и тд

iNils
29.07.2005, 15:49
Нет... несколько звуковых файлов cong1. cong2, cong3, cong4 .... и тд
Эх... Тогда воспользуейся новогодним предложением Деда Мороза :)

Muharadga
29.07.2005, 15:53
значит просто вставить код:

_root.my_sound = new Sound ();
_root.my_sound.attachSound ("cong1");
_root.my_sound.start ();
_root.my_sound.onSoundComplete = function() {
gotoAndPlay(nextFrame);
}

во фрэйм, вместо моего счетчика?

iNils
29.07.2005, 15:57
Почти:
_root.my_sound = new Sound ();
_root.my_sound.attachSound ("cong1");
_root.my_sound.start ();
// количество звуков всего
len = 5;
// счетчик звуков
cx = 1;
_root.my_sound.onSoundComplete = function () {
if (cx < len) {
cx++;
_root.my_sound.attachSound ("cong" + cx);
_root.my_sound.start ();
gotoAndPlay (nextFrame);
} else {
trace ("конец");
}
};

Muharadga
29.07.2005, 16:03
существует еще один ньюанс, за время проигрывания звука и показа текста должно смениться по очередно несколько кадров с фотографиями... это все усожняет?

iNils
29.07.2005, 16:09
Зависит от количества фотографий и частотой их смены.
Есть такой вариант. При загрузке очередного звука делишь длину звука на количесвто фоток для этого звука и полученный интервал используешь в setInterval, который вызвает функцию для смены фоток. И так для каждого звука.

Аспекты:
- у каждого звука разный период появления фоток
- нельзя задать различные интервалы для одного звука

Muharadga
29.07.2005, 16:29
вот что мне надо озвучить, только вместо рисованных цифр фотографии, а вместо Техt 1 .. 2 ... 3. .. нормальный текст - который диктует диктор.

www.geos.hut1.ru

Может сделать чтоб переходил не на следующий фрэйм, а на следующий маркер? Во флэш есть такая возможность?

iNils
29.07.2005, 16:50
_root.my_sound = new Sound ();
_root.my_sound.onSoundComplete = function () {
clearInterval (_root.id);
if (cx < len) {
cx++;
_root.newImage ();
//gotoAndPlay (nextFrame);
} else {
trace ("конец");
}
};
_root.newImage = function () {
trace (cx);
_root.my_sound.attachSound ("cong" + cx);
_root.my_sound.start ();
_root.id = setInterval (_root.changeImage, _root.my_sound.duration / arrayCountImage[cx - 1]);
_root.changeImage ();
};
_root.changeImage = function () {
// тут меняем фотки
trace ("новое фото");
};
// количество звуков всего
len = 5;
// счетчик звуков
cx = 1;
// массив количества фоток для звука
arrayCountImage = [2, 5, 3, 6, 7];
_root.newImage ();

DeadMorozz
29.07.2005, 17:02
не особенно.
просто вариант -- сделать клип с фиксированной или рассчитанной длинной показа, совпадающей с длинной звука.
второй - сделать флажок и внешнюю проверку для перехода дальше.