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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
#1

Непрерывная генерация сигнала - Программирование Android

18.04.2016, 11:47. Просмотров 794. Ответов 2
Метки нет (Все метки)

Нужно сделать генератор сигналов, нашел код рабочий:
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
// originally from [url]http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html[/url]
    // and modified by Steve Pomeroy <steve@staticfree.info>
    private final int duration = 3; // seconds
    private final int sampleRate = 8000;
    private final int numSamples = duration * sampleRate;
    private final double sample[] = new double[numSamples];
    private final double freqOfTone = 440; // hz
 
    private final byte generatedSnd[] = new byte[2 * numSamples];
 
    Handler handler = new Handler();
 
 
 
    @Override
    protected void onResume() {
        super.onResume();
 
        // Use a new tread as this can take a while
        final Thread thread = new Thread(new Runnable() {
            public void run() {
                genTone();
                handler.post(new Runnable() {
 
                    public void run() {
                        playSound();
                    }
                });
            }
        });
        thread.start();
    }
 
    void genTone(){
 
            // fill out the array
            for (int i = 0; i < numSamples; ++i) {
                sample[i] = Math.sin(2 * Math.PI * i / (sampleRate / freqOfTone));
            }
 
            // convert to 16 bit pcm sound array
            // assumes the sample buffer is normalised.
            int idx = 0;
            for (final double dVal : sample) {
                // scale to maximum amplitude
                final short val = (short) ((dVal * 32767));
                // in 16 bit wav PCM, first byte is the low order byte
                generatedSnd[idx++] = (byte) (val & 0x00ff);
                generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
 
            }
 
    }
 
    void playSound(){
        final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
                sampleRate, AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length,
                AudioTrack.MODE_STATIC);
            audioTrack.write(generatedSnd, 0, generatedSnd.length);
            audioTrack.play();
 
    }
Вопрос - как сделать звук непрерывно звучащим? Я сам баловался с бесконечным циклом,но не помогает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2016, 11:47     Непрерывная генерация сигнала
Посмотрите здесь:

Генератор звукового сигнала - Программирование Android
Здравствуйте, кто может помочь написать простенький генератор сигнала, синус. Важна любая помощь. По интернетам смотрел информации мало....

Запись сигнала с антенны телефона - Программирование Android
Я сам не разбираюсь, но мне нужно знать. Можно ли создать прогу которая записывает принимаемый антенной сигнал(не входящий звонок) и потом...

Генерация приложения-визитки - Программирование Android
Здравствуйте!!)) А можно вопрос? для вас он глупый наверное)) А есть ли какие то способы без программирования сделать мааааленькое...

Генерация случайных чисел - Программирование Android
Здравствуйте! Может вопрос нубский, но как сгенерировать случайное число (пусть PRN)? Только, чтобы оно не повторялось при перезапуске...

Генерация Color Palette - Программирование Android
Есть ли инструмент который генерирует все остальные цвета (http://www.google.com/design/spec/style/color.html#) при указании лишь...

Генерация цветовых экранов - Программирование Android
Добрый день! Необходимо реализовать мигание экрана смартфона в соответствии с определенным алгоритмом (что то на подобии милицейской...

Запустить приложение при поступлении сигнала - Программирование Android
Добрый вечер. Например, есть смарт, на котором установлено стандартное приложение. На нем же установлено самописное приложение для...

Генерация R.java в андроид приложениях - Программирование Android
Нужна помощь чайнику, решился научиться писать приложения для андроида. Для обкатки попытался скомпилировать проект готовой простенькой...

Сбросить координаты GPS при потере сигнала - Программирование Android
Получаю текущие координаты с GPS и отображаю их в textView если произошла потеря сигнала то в textView остаются устаревшие данные , как их...

Visualizer.getWaveForm() что возвращает при остутствии сигнала? - Программирование Android
Там беззнаковый байт, но не написано что соответствует тишине - 0 или 128. Иначе говоря - полный размах амплитуды сигнала имеет 256 уровней...

Генерация rtf/doc файла из имеющейся информации, хранящейся в БД - Программирование Android
Есть инфа которую необходимо сгенерировать в документ .rtf или .doc мыслей как это сделать пока нет, может подскажете способы, мб...

Генерация Треугольного Сигнала - Matlab
Привет всем! Кто-то можешь помочь написать код программы для такого вот сигнала?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2016, 10:12  [ТС]     Непрерывная генерация сигнала #2
Решил свою проблему сам, нашел функцию в стерео формате, которая с заданной частотой и временем в миллисекундах воспроизводит синусоиду
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Usage:
//    AudioTrack tone = generateTone(440, 250);
//    tone.play();
//
private AudioTrack generateTone(double freqHz, int durationMs)
{
    int count = (int)(44100.0 * 2.0 * (durationMs / 1000.0)) & ~1;
    short[] samples = new short[count];
    for(int i = 0; i < count; i += 2){
        short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
        samples[i + 0] = sample;
        samples[i + 1] = sample;
    }
    AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
        AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
        count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);
    track.write(samples, 0, count);
    return track;
}
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 42
29.05.2016, 21:54     Непрерывная генерация сигнала #3
А как сделать,чтобы звук играл с частотой дискретизации 48000 hz. Замена с 44100 на 48000 не помогает,т.е звук начинает играть на более высокой частоте,хоть так быть не должно,поскольку частота моего сигнала не меняется. Я понимаю,что 44100 и 48000 не сильно отличаются по качеству,но всё-таки хотелось бы понять,как генерировать звуковой сигнал,используя частоту дискретизации 48000 hz. Также подскажите пожалуйста,как заставить играть звук столько миллисекунд,сколько я захочу. Просто я ввожу в параметры 200 и 1 sound(200,1);,но звуковой сигнал начинает играть бесконечно долго. Ниже будет код метода,который я реализовал на основе Вашего метода. объект Audiotrack я объявил в начале класса. Заранее благодарю Вас за помощь.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[JAVA]public void sound(double frequency,double durationMs) {
int count = (int)(48000.0 * 2.0 * (durationMs / 1000.0)) & ~1;
short[] samples = new short[count];
for(int i = 0; i < count; i += 2){
short sample = (short)(Math.sin(2 * Math.PI * i / (48000.0 / frequency)) * 0x7FFF);
samples[i] = sample;
samples[i + 1] = sample;
}
if (audioTrack == null) {
audioTrack= new AudioTrack(AudioManager.STREAM_MUSIC, 48000, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);
audioTrack.write(samples, 0, count);
audioTrack.setLoopPoints(0, samples.length/2, -1);
audioTrack.play();
audioTrack=null;
}
}
[/JAVA]
Ответ Создать тему
Опции темы

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