Android воспроизводит звук до явной остановки

Кто-то уже написал код для генерации тона с определенной частотой в заданное время. Ссылка SO приведена здесь: Как создать определенную звуковую частоту?.

Мне нужно, чтобы звук проигрывался бесконечно, а не 3 секунды. Я хочу, чтобы звук перестал воспроизводиться при нажатии кнопки или что-то в этом роде. Я подумал, может быть, я могу использовать функцию таймера, чтобы повторять один и тот же цикл снова и снова. Когда пользователь нажимает кнопку «Стоп», я хочу вызвать audiotrack.pause или остановить. Это хороший способ сделать это или есть лучшая логика для этого?


person Susheel    schedule 11.06.2014    source источник


Ответы (2)


Обратитесь к этому. http://developer.android.com/reference/android/media/MediaPlayer.html

//Declare a new object

MediaPlayer Mp3=new MediaPlayer();

//Then set path of file
Mp3.setDataSource(“sdcard/filename.mp3”);

//Before playing audio, call prepare
Mp3.prepare();

//For Looping (true = looping; false = no looping)
Mp3.setLooping(true);

//To play audio ,call
Mp3.start();

//To pause, call
Mp3.pause

//To stop audio, call
Mp3.stop(); 

Готово!

person Parth Sane    schedule 11.06.2014
comment
Спасибо, но я не хочу воспроизводить файлы. Я хочу генерировать тон с определенной частотой. Я не уверен, что могу использовать медиаплеер. - person Susheel; 11.06.2014
comment
@Sushiel Хорошо объедини их. Передайте аргументы MediaPlayer из другого класса. Другой класс будет выступать в качестве источника для MediaPlayer. - person Parth Sane; 11.06.2014
comment
Я попробую это и дам вам знать. - person Susheel; 11.06.2014
comment
Конечно, нет проблем. Пожалуйста, проголосуйте и примите мой ответ, если он работает для вас! - person Parth Sane; 11.06.2014
comment
Единственный метод, который устанавливает источник в медиаплеере, кажется, это setdatasource. Я не уверен, как установить сгенерированные данные выборки (в байтах) в качестве входных данных для медиаплеера. есть идеи? - person Susheel; 11.06.2014
comment
Запишите данные во временный файл mp3. Затем передайте этот файл в MediaPlayer. - person Parth Sane; 11.06.2014
comment
Кроме того, я не могу установить источник данных, так как получаю исключение: setDatasourcefd не удалось, статус-0x80000000. Спасибо за вашу помощь. Я проголосовал за ваш ответ, но нашел гораздо более простое решение. - person Susheel; 11.06.2014

Спасибо Boggartfly, но я нашел гораздо более простое решение. Я могу просто зациклить объект audiotrack.

Я использовал следующий код.

         audioTrack.setLoopPoints(0, generatedSnd.length/4, -1);

Начальный кадр равен нулю. Конечный кадр имеет длину / 4 для 16-битного PCM. Отрицательная 1 здесь означает цикл бесконечное количество раз.

person Susheel    schedule 11.06.2014