Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ByteArray to Sound (http://www.flasher.ru/forum/showthread.php?t=184015)

themir 07.09.2012 21:36

ByteArray to Sound
 
Здравствуйте!
Столкнулся с такой проблемой: есть wav (или mp3, не важно) в ByteArray. Нужно воспроизвести. Делал так:
Код AS3:

...
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
sound.play();
...
 
function onSampleData(e:SampleDataEvent):void
{
    // в sound_buff находится wav файл
    e.data.writeBytes(sound_buff, 0, sound_buff.length);
}

Слышен непонятный шум. Пожалуйста, помогите решить проблему.

Krusty 07.09.2012 22:36

Цитата:

"Дорогие ученые! У меня в подвале уже который год слышен какой-то стук".
Файл, полный код, позволяющий воспроизвести проблему.

themir 07.09.2012 22:49

Файла нет, звук с микрофона. ByteArray корректный - это я узнал просто сохранив на диск и прослушав. Собственно там весь код, касательно вопроса. Проблема только в том, как воспроизвести ByteArray. У меня подозрение что проблема в 3ем параметре writeBytes, т.к. на сколько я понимаю, надо отправлять частями звук, а не весь

Krusty 07.09.2012 23:26

Тогда попробуйте.
Код AS3:

sound_buff.position=0;

или
Код AS3:

sound_buff.clear();

Короче, у меня в таких случаях обычно проблема, что позиция не скинута куда надо.
Где определен sound_buff? Это что, ByteArray, вы туда данные скидываете, а потом в буфер воспроизведения?

themir 07.09.2012 23:36

sound_buff - это декодированная в wav запись с микрофона. После начала воспроизведения байты не дописываются.
На ноль скидывал, не помогло.
Очищать не вижу смысла. Там ведь звук.

Krusty 07.09.2012 23:39

Ну так звук вы потом же в буфер воспроизведения кидаете? Покажите как. Вы сняли данные с микрофона, записали их в sound_buff(успешно), пытаетесь воспроизвести. Так?

themir 07.09.2012 23:58

Все верно. Способ я описал в 1ом посте. Звук помещаю в буфер по событию SampleDataEvent.SAMPLE_DATA методом writeBytes.

Krusty 08.09.2012 00:12

Ничего не понимаю.
Код AS3:

e.data.writeBytes(sound_buff, 0, sound_buff.length);

пишет sound_buff в ByteArray массив события, или у меня голова не варит так поздно.
Код AS3:

sound_buff.writeBytes(e.data);

же должно быть.

themir 08.09.2012 00:23

Если использовать ваш метод, то тишина, нет даже шума.
e.data - это и есть буфер, в который будет воспроизводиться в ближайшее время. Туда надо поместить то, что должно проиграть. Я этого добиваюсь методом writeBytes. Когда оно проиграет, вызывается опять событие, для загрузки следующей порции. Это мое понимание, я могу ошибаться. Я думаю, что я помещаю много за раз, поэтому шум.
sound_buff - это завершенный массив со звуком, в него ничего дописывать не надо.

Krusty 08.09.2012 00:43

Окей, вижу. Все верно, sound запрашивает данные, через событие SampleDataEvent.SAMPLE_DATA. Типа сокет.
Тогда, раз у вас sound_buff-завершенный массив со звуком, и он корректен, то
Код AS3:

sound_buff.position=0;
e.data.writeBytes(sound_buff);

Вроде правильный код. Но вы сразу должны отписаться-больше данных же не ожидается, первый запрос выдал все доступные данные.
Если не заработает-покажите, как у вас sound_buff формируется из микрофона, потестим.


Часовой пояс GMT +4, время: 22:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.