Форум программистов, компьютерный форум CyberForum.ru

Basic4Android

Войти
Регистрация
Восстановить пароль
 
lesobrod
0 / 0 / 0
Регистрация: 16.05.2015
Сообщений: 1
#1

Непрерывное воспроизведение звука из массива - Basic4Android

20.05.2015, 09:06. Просмотров 934. Ответов 0
Метки нет (Все метки)

Привет всем! Долго подступался к программированию для Андроид и наконец решился.
Мне нравится синтезировать звук, всякие шумы, бинауралы и т.п.
Есть классная програмка: ChromaDoze
Мне в ней не хватает возможности стохастичного, немного случайного изменения амплитуды шума (т.н. Slow Random).
Чтобы было реально как дождь, ветер или море.
Прога свободная; я предложил автору свой алгоритм для рандомизации амплитуды,
но он сказал, что недосуг.

ОК, скачал Андроид СДК, открыл Eclipse и... чётприуныл.

Через пару дней вспомнил, что в своё время программил для КПК на Basic4PPC.
Проверил, а Erel молодец! Раскрутил и для Adroid и iOS. Дороговато, правда..
Ну, нашел что надо и вперёд. За день фактически всё получилось. Проще, конечно, чем в ChromaDoze
(вместо точного спектра - фильтр с двумя движками),
но шумит правда как море =)

Однако есть вопросы. Очень надеюсь, что кто-то заинтересуется, т.к. идея довольно общая
и может быть многим полезна.

Итак, как и описано в гайде, я завёл Activity для движков и кнопок и Service для проигрывания звука в фоне.

Вопрос 1. Не знаю, куда и зачем втыкать Start/StopForeground. Я просто вызываю Service из Activity при нажатии Play.
А для восстановления Activity после ухода с неё - нотификатор.

Шум синтезируется по особому (но не очень сложному) алгоритму и попадает в массив
(скажем Record). Для воспроизведения использую библиотеку AudioTrack. Если кто с ней знаком, очень прошу откликнуться.
Т.к. даже на форуме обсуждение довольно путанное.

Вопрос 2. Как лучше организовать работу с буфером?
Пусть Sample_Rate = 22050. Звук стерео, поэтому Buffer_Size = Array_Size = 2 * 22050.
То есть в буфер пишется одна секунда звука. Соответственно, генерация массива и запись в
буфер вызывается по таймеру 1 сек. Но что-то в этом есть неправильное...
Лучше бы проверять, доигрался ли буфер и тогда сразу писать новую порцию.
Как в AudioTrack это сделать? PlayState возвращает Play всегда, пока работает аудиопоток.

Вопрос 3. Моя главная задача - получить работающий шум при том, чтобы можно было лазить по другим приложениям и даже включать другие звуковые программы.
К счастью, в принципе это возможно! Прога может играть параллельно с плеером или другой моей прогой, как и родная ChromaDoze. Но... звук прерывается. Пробовал разные размеры буфера, не помогает. Может, ОС как-то тормозит мой сервис? Возможно ли назначать приоритет процесса в Андроид?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2015, 09:06     Непрерывное воспроизведение звука из массива
Посмотрите здесь:
Непрерывное воспроизведение аудио Matlab
Delphi Воспроизведение звука
C (СИ) Воспроизведение звука в С
Delphi Воспроизведение звука
Воспроизведение звука C# WPF
Воспроизведение звука Delphi
Воспроизведение звука C#
Воспроизведение звука C++/CLI
Воспроизведение звука Assembler
C# Воспроизведение звука
C++ Qt Qt 5.1.1 воспроизведение звука
Воспроизведение звука C# .NET 4.x

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru