Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024

Непрерывная генерация сигнала

18.04.2016, 11:47. Показов 2022. Ответов 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();
 
    }
Вопрос - как сделать звук непрерывно звучащим? Я сам баловался с бесконечным циклом,но не помогает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2016, 11:47
Ответы с готовыми решениями:

Непрерывная генерация объектов в Web Application
Здравствуйте! Для выполнения работы мне нужно генерировать объекты в &quot;реальном времени&quot;. Скажем так, в SE это могло выглядеть так: ...

Генерация сигнала
Добрый день, имеется отладочная плата с контроллером stm32l100rc. Нужно генерировать сигнал определенной частоты и формы (форма плавная),...

Генерация 3G сигнала в MathCAD
Как сгенерировать 3G сигнал в Mathcad'e? может у кого есть алгоритм или часть программы? Добавлено через 18 минут Может хотя бы...

2
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
22.04.2016, 10:12  [ТС]
Решил свою проблему сам, нашел функцию в стерео формате, которая с заданной частотой и временем в миллисекундах воспроизводит синусоиду
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;
}
1
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
29.05.2016, 21:54
А как сделать,чтобы звук играл с частотой дискретизации 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]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2016, 21:54
Помогаю со студенческими работами здесь

Генерация сигнала в матлабе
Помогите пожалуйста сгенерировать сигнал такого рода в матлабе: Y(t)=α1X(t) + α2*X(t-Δt)...

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

Генерация треугольного сигнала
Ребят,подскажите,пожалуйста,верно ли я генерирую данный сигнал? в частности интересуют две строчки ...

Генерация сигнала с STM32F4
Мне нужно сгенерировать последовательность прямоугольных импульсов нужной мне длительности и амплитуды. Я посмотрел эту и эту статьи. На...

Генерация квадратурного сигнала.
ЕСть у нас, значиться промышленный сервопривод, коим очень хочеться поуправлять В прочлой части нашей эпопеи я научитлся подключать к нему...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru