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

Генерация нескольких звуковых сигналов в цикле. Не доходит до конца - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android TabHost http://www.cyberforum.ru/android-dev/thread1379515.html
Как можно сделать список табов в табе? Возможно это решается без TabHost?
Android Запрос longblob из mySql Как можно получить данные типа longblob из mySql ? Текстовые и числовые данные гружу через GET/POST запрос, и далее вытаскиваю из JSON объекта. А longblob как получать ? потом нужно из этих данных создать Bitmap. Видел вариант создавать InputStream из URL, что-то типа такого: InputStream is = new URL(url).openStream(); Bitmap bmp = BitmapFactory.decodeStream(is); но хочется тоже через... http://www.cyberforum.ru/android-dev/thread1379318.html
Android Название песни транслирующейся на онлайн радио
Ребят, хочу создать программу на андроид которая будет воспроизводить поток онлайн радио и показывать название песни которая проигрывается. С воспроизведением проблем нет,а вот как реализовать показ транслирующейся песни? кто знает? подскажите, пожалуйста:):scratch:
Android ANDROID_STUDIO_Beta3
установил Android studio через терминал в Ubuntu.. как оказалось поставилась версия 1.1 Beta 3. Подскажите, в чем будет недостаток использования ее, и можно ли сделать откат на версию 1.0.1??
Android Http запрос в локальной сети http://www.cyberforum.ru/android-dev/thread1379298.html
Здравствуйте! Подскажите как получить код странички находящийся, например, по адресу http://192.168.1.101 Пробовал так, соединение есть, а код странички не получает class DownloadWebPageTask extends AsyncTask<String, Void, String> { String results; @Override protected String doInBackground(String... urls) { String response = ""; for (String url : urls) {
Android UUID. Bluetooth connect Вопрос достаточно банальный. Какое UUID мне нужно установить при подключении к серверу через Bluetooth? Для начала объясните плиз, для чего он используется (именно "для чего", а не "что это такое" - это можно и википедии найти). То есть я пробовал через BluetoothDevice.getUuids(), но (если вы не в курсе) на андроид 4 он не работает и возвращает null. подробнее

Показать сообщение отдельно
YK
0 / 0 / 0
Регистрация: 13.09.2014
Сообщений: 7

Генерация нескольких звуковых сигналов в цикле. Не доходит до конца - Android

21.02.2015, 12:27. Просмотров 309. Ответов 0
Метки (Все метки)

Всем доброго времени суток

Вот столкнулся с проблемой

Класс который генерирует сигналы
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
public class Beeper {
 
    private static Beeper instance;
    public static Beeper getInstance(){
        if(instance == null){
            instance = new Beeper();
        }
        return instance;
    }
    
    private Beeper(){
        player = new AudioTrackPlayer();
    }
    
    AudioTrackPlayer player; 
    
    public void generateLongBeep() {
        byte[] buffer = makeSinWave(44000, 440, 1000, TimeUnit.MILLISECONDS);
        AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                44000, AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_8BIT, buffer.length,
                AudioTrack.MODE_STREAM);
        audioTrack.setNotificationMarkerPosition((int)(1000 * 44000 / 1000));
        audioTrack.write(buffer, 0, buffer.length);
        while(player.state == AudioTrackPlayer.PLAYER_BUSY);
        audioTrack.setPlaybackPositionUpdateListener(player);
        player.state = AudioTrackPlayer.PLAYER_BUSY;
        audioTrack.play();
    }
 
    public void generateMiddleBeep() {
        byte[] buffer = makeSinWave(44000, 440, 500, TimeUnit.MILLISECONDS);
        AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                44000, AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_8BIT, buffer.length,
                AudioTrack.MODE_STREAM);
        audioTrack.setNotificationMarkerPosition((int)(500 * 44000 / 1000));
        audioTrack.write(buffer, 0, buffer.length);
        while(player.state == AudioTrackPlayer.PLAYER_BUSY);
        audioTrack.setPlaybackPositionUpdateListener(player);
        player.state = AudioTrackPlayer.PLAYER_BUSY;
        audioTrack.play();
    }
 
    public void generateShortBeep() {
        byte[] buffer = makeSinWave(44000, 440, 130, TimeUnit.MILLISECONDS);
        AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                44000, AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_8BIT, buffer.length,
                AudioTrack.MODE_STREAM);
        audioTrack.setNotificationMarkerPosition((int)(130 * 44000 / 1000));
        audioTrack.write(buffer, 0, buffer.length);
        while(player.state == AudioTrackPlayer.PLAYER_BUSY);
        audioTrack.setPlaybackPositionUpdateListener(player);
        player.state = AudioTrackPlayer.PLAYER_BUSY;
        audioTrack.play();
    }
    
    private byte[] makeSinWave (double sampleRate, double frequency, long duration, TimeUnit timeUnit){
        byte[] buffer = new byte[(int) (timeUnit.toMillis(duration) * sampleRate/1000)];
        double period = sampleRate / frequency;
        for (int i = 0; i < buffer.length; i++) {
        double angle = 2d * Math.PI * i / period;
        buffer[i] = (byte) (Math.sin(angle) * 127d);
        }
        return buffer;
    }
    
    public static final int BEEPER_FREE = 0;
    public static final int BEEPER_BUSY = 1;
    
    public int getState(){
        return player.state;
    }
    
    public void setState(int state){
        player.state = state;
    }
    
    class AudioTrackPlayer implements OnPlaybackPositionUpdateListener {
 
        public static final int PLAYER_FREE = 0;
        public static final int PLAYER_BUSY = 1;
        int state;
        
        @Override
        public void onMarkerReached(AudioTrack track) {
            if(track.getPlayState() == AudioTrack.PLAYSTATE_PLAYING){
                
            state = PLAYER_FREE;
            track.stop();
            track.flush();
            track.release();
            }
        }
 
        @Override
        public void onPeriodicNotification(AudioTrack track) {
 
        }
        
    }
}
Обработчик нажатия кнопки
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    @Override
    public void onClick(View arg0) {
        Thread thread = new Thread(new Runnable() {
            public void run() { 
                Beeper.getInstance().setState(Beeper.BEEPER_FREE);
                for(int i = 0; i < 8; i++){
                    try {                           
                            Thread.sleep(10000);
                            Beeper.getInstance().generateShortBeep();
                            Beeper.getInstance().generateShortBeep();
                            Beeper.getInstance().generateShortBeep();
                            
                            Thread.sleep(15000);
                            Beeper.getInstance().generateShortBeep();
                            Beeper.getInstance().generateMiddleBeep();
                            Beeper.getInstance().generateShortBeep();
                    
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }  
        });
        thread.start();
    }
Проблема в том, что после нескольких итераций останавливается после первого или второго сигнала.
Иногда при первом нажатии все проходит нормально и сбой происходит при повторном нажатии.
Пробовал в начале метода run вызывать System.gc() однако это не принесло желаемого результата.
Оговорюсь, что тестировал только на одном устройстве. Когда произошел бы сбой на какам дибо другом устройстве (да и произошел ли бы вообще) сказать не могу.
В режиме отладки кода вызываю все методы шаг за шагом все проходит нормально

Зараннее благодарен за советы
С уважением
YK
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru