Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.09.2012, 21:36
themir вне форума Посмотреть профиль Отправить личное сообщение для themir Найти все сообщения от themir
  № 1  
Ответить с цитированием
themir

Регистрация: Aug 2012
Сообщений: 9
По умолчанию 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);
}
Слышен непонятный шум. Пожалуйста, помогите решить проблему.

Старый 07.09.2012, 22:36
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 2  
Ответить с цитированием
Krusty

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

Старый 07.09.2012, 22:49
themir вне форума Посмотреть профиль Отправить личное сообщение для themir Найти все сообщения от themir
  № 3  
Ответить с цитированием
themir

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

Старый 07.09.2012, 23:26
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 4  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Тогда попробуйте.
Код AS3:
sound_buff.position=0;
или
Код AS3:
sound_buff.clear();
Короче, у меня в таких случаях обычно проблема, что позиция не скинута куда надо.
Где определен sound_buff? Это что, ByteArray, вы туда данные скидываете, а потом в буфер воспроизведения?

Старый 07.09.2012, 23:36
themir вне форума Посмотреть профиль Отправить личное сообщение для themir Найти все сообщения от themir
  № 5  
Ответить с цитированием
themir

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

Старый 07.09.2012, 23:39
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 6  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Ну так звук вы потом же в буфер воспроизведения кидаете? Покажите как. Вы сняли данные с микрофона, записали их в sound_buff(успешно), пытаетесь воспроизвести. Так?

Старый 07.09.2012, 23:58
themir вне форума Посмотреть профиль Отправить личное сообщение для themir Найти все сообщения от themir
  № 7  
Ответить с цитированием
themir

Регистрация: Aug 2012
Сообщений: 9
Все верно. Способ я описал в 1ом посте. Звук помещаю в буфер по событию SampleDataEvent.SAMPLE_DATA методом writeBytes.

Старый 08.09.2012, 00:12
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 8  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Ничего не понимаю.
Код AS3:
e.data.writeBytes(sound_buff, 0, sound_buff.length);
пишет sound_buff в ByteArray массив события, или у меня голова не варит так поздно.
Код AS3:
sound_buff.writeBytes(e.data);
же должно быть.

Старый 08.09.2012, 00:23
themir вне форума Посмотреть профиль Отправить личное сообщение для themir Найти все сообщения от themir
  № 9  
Ответить с цитированием
themir

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

Старый 08.09.2012, 00:43
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 10  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Окей, вижу. Все верно, sound запрашивает данные, через событие SampleDataEvent.SAMPLE_DATA. Типа сокет.
Тогда, раз у вас sound_buff-завершенный массив со звуком, и он корректен, то
Код AS3:
sound_buff.position=0;
e.data.writeBytes(sound_buff);
Вроде правильный код. Но вы сразу должны отписаться-больше данных же не ожидается, первый запрос выдал все доступные данные.
Если не заработает-покажите, как у вас sound_buff формируется из микрофона, потестим.

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
microphone , sound
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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