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

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

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

Генератор звукового сигнала - Программирование Android

11.08.2016, 12:38. Просмотров 2706. Ответов 73
Метки нет (Все метки)

Здравствуйте, кто может помочь написать простенький генератор сигнала, синус. Важна любая помощь. По интернетам смотрел информации мало. Если у кого-то есть желание, может в личку написать, может договоримся.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2016, 12:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генератор звукового сигнала (Программирование Android):

Передача звукового потока в микрофон - Программирование Android
Здравствуйте все форумчане! Хотел бы узнать в какую мне сторону двигаться. Задача такова: Есть сгенерированный звуковой поток. Необходимо...

Отображение содержимого звукового буфера в логах - Программирование Android
while(!stopped) { short buffer = buffers; //short buffer = new short; ...

Как заполнить заголовок звукового файла? - Программирование Android
public class AudioRecord { byte header = new byte; byte channels ; void run() { channels = 1;

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

Генератор кубиков - Программирование Android
Всем привет) Помогите новичку... Познания нулевые и вот решил попробовать сделать что-то похожее на игральные кости (кубики). Кодить...

Сделать звуковой генератор - Программирование Android
Всем привет. Ребят, как выдать в наушник звук импульсами примерно прямоугольной формы? Нужно сделать звуковой генератор от ~10 до...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,501
11.08.2016, 14:05 #2
tip42, для начала определитесь что будет делать программа. просто бесконечно рассчитывать синус от непонятного аргумента? рассчитывать синус от введенного числа? рассчитывать синус и показывать таблицу? график? посылать расчет в космос в виде гравитационных волн?
BOGG ART
563 / 431 / 123
Регистрация: 09.12.2013
Сообщений: 2,276
Записей в блоге: 2
11.08.2016, 14:07 #3
Цитата Сообщение от tip42 Посмотреть сообщение
генератор сигнала
В каком виде? Числа? Картинка/анимация? Звук?
tip42
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 17
11.08.2016, 16:49  [ТС] #4
vxg, согласен. извиняюсь. Речь идет о звуковом генераторе сигнала. Который воспроизводит звуковую волну в форме синуса, при чем частоту надо задавать в ручную. Т.е. как я вижу это: поле в котором отображается текущая частота, поле ввода частоты уставки и кнопка старт-стоп, при нажатии на которую начинается воспроизводится звук заданной частоты.
BOGG ART, звука.
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
16.08.2016, 12:43 #5
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private AudioTrack generateTone(double freqHz, int durationMs)
    {
        int sampleRate = 48000;  // 44100 Hz
 
        int count = (int)( sampleRate * 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 / (sampleRate / freqHz)) * 0x7FFF);
            samples[i + 0] = sample;
            samples[i + 1] = sample;
        }
 
        AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
                AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
                count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);
 
        track.write(samples, 0, count);
 
        return track;
    }
tip42
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 17
20.08.2016, 17:58  [ТС] #6
Цитата Сообщение от REALIST07 Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private AudioTrack generateTone(double freqHz, int durationMs)
    {
        int sampleRate = 48000;  // 44100 Hz
 
        int count = (int)( sampleRate * 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 / (sampleRate / freqHz)) * 0x7FFF);
            samples[i + 0] = sample;
            samples[i + 1] = sample;
        }
 
        AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
                AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
                count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);
 
        track.write(samples, 0, count);
 
        return track;
    }
а в Layout > MainActivity что писать?
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
21.08.2016, 06:40 #7
2REALIST07 Спасибо! В коллекцию...

Цитата Сообщение от tip42 Посмотреть сообщение
а в Layout > MainActivity что писать?
JSON
1
2
        AudioTrack at = generateTone(5000, 1000);
        at.play();
Vladimir93
36 / 36 / 4
Регистрация: 28.06.2015
Сообщений: 153
21.08.2016, 12:45 #8
Цитата Сообщение от tip42 Посмотреть сообщение
а в Layout > MainActivity что писать?
Сделайте 2 окошка что бы задать (double freqHz, int durationMs). Или "крутилочку" частоту например задавать.

Добавлено через 8 минут
А можно??... Еще окошко/монитор, сделать что бы там форму сигнала выводить на экран? Хотя бы как график. (тут глаза как у кота из Шрека )
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
21.08.2016, 16:04 #9
Немного пояснений по коду, 1 параметр частота дискретизации, измеряемая в Гц, 2 продолжительность "проигрывания" в миллисекундах, обратите внимание на :
Java
1
2
samples[i + 0] = sample;
samples[i + 1] = sample;
Вы пишите в правую и левую сторону одинаковые данные и этот звук будет в стерео формате, если вам нужен моно, уберите 2 операнд и измените строчку:
Java
1
2
3
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
                AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,
                count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);
tip42
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 17
22.08.2016, 06:09  [ТС] #10
Цитата Сообщение от Vladimir93 Посмотреть сообщение
Сделайте 2 окошка что бы задать (double freqHz, int durationMs).
Чет не работает.
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.08.2016, 07:42 #11
Может кто знает, как подобный AudioTrack записать в файл??? Wav или в mp3???
vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,501
22.08.2016, 09:19 #12
Цитата Сообщение от Tester64 Посмотреть сообщение
Может кто знает, как подобный AudioTrack записать в файл??? Wav или в mp3???
Отображение содержимого звукового буфера в логах
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.08.2016, 10:50 #13
Цитата Сообщение от vxg Посмотреть сообщение
Отображение содержимого звукового буфера в логах.
Это почти побайтово играться!
Надеялся на метод/либу вида
Java
1
saveWav(AudioTrack at)

Не по теме:

Немного поигрался с генерацией сигнала через generateTone.
Попробовал сгенерировать сигналы по https://ru.wikipedia.org/wiki/DTMF
А проверить нечем! Есть проигрыватель foobar2000 который отображает частоты на ленте.
Проверил образцы OGG c wiki - красиво видны 2 полосы.
Теперь хочу сверить с тем что сам нагенерировал в андроиде...
Похоже простого метода создать аудиофайл кроме как "записать с микрофона" нет!
Прийдется побайтово Wav писать...(целая наука о форматах аудио-файлах)

vxg
Модератор
3158 / 1960 / 219
Регистрация: 13.01.2012
Сообщений: 7,501
22.08.2016, 10:52 #14
Цитата Сообщение от Tester64 Посмотреть сообщение
Это почти побайтово играться!
в теме за вас уже написан метод пишущий заголовок. кроме заголовка и ваших данных ничего не нужно
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.08.2016, 10:59 #15
Последнее время я добрый, решил дать вам исходники моего проекта небольшого, меня на него все равно кинули,так что пользуйтесь, так как проект большой я заархивировал уровень main,создайте новый проект и скопируйте папки и все будет ок.
Вложения
Тип файла: rar main.rar (63.3 Кб, 16 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2016, 10:59
Привет! Вот еще темы с ответами:

Генератор / сборник иконок - Программирование Android
Может кто знает что то типа https://design.google.com/icons/? - но чтобы в разные цвета можно было генерировать - Что там не так? - То...

Непрерывная генерация сигнала - Программирование Android
Нужно сделать генератор сигналов, нашел код рабочий: // originally from...

Распознавание звукового сигнала - Искусственный интеллект
Здравствуйте, прошу прощения если немного не в тот раздел. Изучаю Data Science, заинтересовался такой вещью - как, имея записанный звуковой...

ВЧ фильтрация звукового сигнала - Цифровая обработка сигналов
Добрый день! Подскажите, пожалуйста, какой фильтр лучше использовать для ВЧ фильтрации звукового сигнала. FFT, IIR, FIR ? ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.08.2016, 10:59
Ответ Создать тему
Опции темы

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