|
3 / 3 / 0
Регистрация: 02.03.2015
Сообщений: 21
|
|
Генератор звукового сигнала11.08.2016, 12:38. Показов 12196. Ответов 73
Метки нет (Все метки)
Здравствуйте, кто может помочь написать простенький генератор сигнала, синус. Важна любая помощь. По интернетам смотрел информации мало. Если у кого-то есть желание, может в личку написать, может договоримся.
1
|
|
| 11.08.2016, 12:38 | |
|
Ответы с готовыми решениями:
73
ВЧ фильтрация звукового сигнала Фильтрация звукового сигнала Отсчёты звукового сигнала |
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 25.11.2016, 10:51 | |
|
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 25.11.2016, 10:53 | |
|
КАВ, как вы экстраординарно извращаете терминологию. это не задержка. это продолжительность, длительность, время звучания. все что угодно, но не задержка. D может быть разным и зависит лишь от того какого размера блок вы готовы хранить в памяти.
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 25.11.2016, 10:59 | |
|
Ну хорошо. Я был не прав,но всё же как подобрать нужную продолжительность звука и нужную задержку между звуками,чтобы они состыковались,учитывая,что продолжительность моего звука 200 мс?
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
||||||
| 25.11.2016, 13:27 | ||||||
|
КАВ, пример в архиве.
-при нажатии на start создается поток в котором начинает воспроизводится звук (синус) -продолжительность звука 201 мс -частота 250 Гц -после окончания звука сразу же начинается следующий звук -за генерацию блока данных отвечает функция generate, за коррекцию фазы - функция getNextP -следующий звук имеет частоту больше частоты предыдущего звука на 2 Гц (если вы закомментируете строку f += 2 звук будет иметь постоянную частоту 250 Гц) -продолжительность звука специально выбрана равной 201 мс для того что бы на этом интервале размещалось нецелое количество периодов звуковой волны начальной частоты (250 Гц, период волны 1 / 250 = 4 мс) и стыковка соседних звуков проходила не при начальных условиях (если вы закомментируете строку p = getNextP(f, p) для того что бы коррекция фазы нового звука не производилась вы услышите щелчки - это артефакты стыковки звуков со скачком амплитуды) -если поменять продолжительность звука на 200 мс, то звук постоянной частоты 250 Гц не будет содержать щелчков даже без коррекции фазы так как на интервале 200 мс размещается целое количество периодов звуковой волны и стыковка звуков проходит при начальных условиях -если вы увеличите ступень на которую меняется частота (вместо 2 Гц поставите большее значение, например, 5 или 10 Гц) вы услышите звук напоминающий уу-уу-уу - я думаю это не артефакт стыковки - это так наше ухо воспринимает существенные изменения частоты
1
|
||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 25.11.2016, 21:48 | |
|
Огромное Вам спасибо за код. Я адаптировал Ваш генератор под свой код и щелчки почти исчезли. Единственное что,когда я разбираю математическую функцию,которую ввёл пользователь с шагом 0.1,чтобы построить звуковой график,щелчки всё же иногда проявляются,но я думаю,что хоть я и привёл значения типа double,которые возвращает метод,к типу float,происходят ошибки вычисления и соответственно,нестыковка сигналов. Также если очень сильно прислушаться,можно услышать щелчки на очень высоких частотах в Вашем генераторе звука и в моём коде. Но я думаю что это проблема происходит по той же причине. Огромное Вам спасибо за код,ведь Вы мне помогли написать одну из важных частей моей программы. Кстати может можно так преобразовать блок данных,который используется для генерации звука,чтобы можно было воспроизводить несколько звуков одновременно? Я понимаю,что можно,к примеру,пройтись по массиву,и в энный элемент записать первую частоту,а в н+первый - вторую,т е в каждом канале играть свою частоту,при этом массив будет в два раза больше,т.к у нас будет 2 канала. Но что делать,если я хочу воспроизвести 3 и более частот?
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 26.11.2016, 07:26 | |
|
КАВ, сложный звук это сумма нескольких волн. Разделять их на треки не нужно
Добавлено через 4 минуты Что касается щелчков на высоких частотах - скажите значение частоты, проверим
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 26.11.2016, 13:47 | |
|
ели слышимые щелчки наблюдаются на частотах от 660 до примерно 700 гц. По поводу сложного звука,правильно ли я понял,что звук на нескольких частотах для конкретного бита будет рассчитываться как-то так: 32767*(Math.sin(2* Math.PI*(f1*dt*i+p1)+(Math.sin(2* Math.PI*(f2*dt*i+p2)+:+(Math.sin(2* Math.PI*(fn*dt*i+pn)),где f1,f2,fn частоты,а p1,p2,pn - их фазы,i - номер бита,а dt - период колебаний на частоте 48000 =1/48000/
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 26.11.2016, 14:06 | |
|
КАВ, да, только у каждого может быть своя амплитуда не обязательно единица и все это дело потом впихивается в 0x7FFF
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 26.11.2016, 14:52 | |
|
А я думал что 0x7fff это и есть амплитуда.
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 26.11.2016, 15:05 | |
|
КАВ, есть синусы. Каждый со своей амплитудой. Мы их сложили и у сложного сигнала тоже будет максимальное и минимальное значение. Мы хотим его нормализовать. Для этого сделаем так что бы максимум и минимум не выходили за диапазон +/-x7FFF. Это можно сделать смасштабировав сигнал
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 26.11.2016, 15:27 | |
|
Я Вас не совсем понял,как смаштабировать сигнал? Может быть Вы имейте ввиду,что нужно подобрать такие значения амплитуд для каждой частоты,чтобы в сумме они давали 32767?
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 26.11.2016, 15:40 | |
|
КАВ, грустно товарищи... как масштабировать? Умножить его на такое число и прибавить к произведению такое число чтобы значение сигнала всегда было в заданном интервале.
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 26.11.2016, 17:54 | |
|
Спасибо. Я почти всё понял,только что Вы имейте ввиду под интервалом: от 0 до 1,или от 0 до 32767? Ещё у меня есть вопрос,как регулировать баланс звука? Ведь в моём случае звук не обязательно должен быть посередине. Просто я это привёл как пример,чтобы было понятно,о чём я говорю. Сложность ещё в том,что с пятого андроида можно управлять только общей громкостью каналов в аудиотреке.
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 26.11.2016, 18:03 | |
|
КАВ, обычно диапазон 0x7FFF если это 16 бит, как менять мнимое положение источника звука я вам писал выше
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 27.11.2016, 23:17 | |
|
Хотелось бы ещё уточнить,Ваш генератор звука работает для любой продолжительности звука,или для продолжительности звука 200 мс? Просто при продолжительности звука 200 мс и даже 100 мс генератор работает практически нормально,а вот если я к примеру хочу задать функцию x*x к примеру от 0 до 100 с продолжительностью звука 5 мс,иногда можно услышать "солидные" щелчки. Конечно,пока что меня вполне устраивает звук с шагом 0.1,но не все функции нормально звучат на этом шаге,а на шаге 0.01 они звучат более плавно,но,как я уже писал ранее,иногда возникают щелчки.
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|||
| 28.11.2016, 11:53 | |||
|
КАВ, звук продолжительностью 5 мс? На таком интервале поместится 1 период для 250 Гц например - на кой вам такой "звук"? 201 мс - это размер порции данных которые будет воспроизводить устройство. К звуку это число не имеет никакого отношения и может влиять на него чисто технически если вы будете задавать полоумно малые значения.
Добавлено через 5 часов 30 минут Добавлено через 1 минуту
1
|
|||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 01.12.2016, 22:11 | |
|
По поводу положения звука,Вы писали только,как сделать,чтобы он был посередине. А вот как сделать,чтобы он был ближе к правому каналу,или ближе к левому,но не прямо в левом или правом канале,я такого у Вас не нашёл.
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 02.12.2016, 08:18 | |
|
КАВ, если задано 1:1 это центр, если 1:0 это лево, а если 1:0.56 к примеру это где-то между центром и лево
1
|
|
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 02.12.2016, 19:18 | |
|
Но начиная с пятого андроида этот метод класса audiotrack устарел и теперь можно ставить громкость только для 2-х каналов одновременно.
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,458
|
|
| 02.12.2016, 19:57 | |
|
КАВ, выход только один - прыгнуть в окно
1
|
|
| 02.12.2016, 19:57 | |
|
Помогаю со студенческими работами здесь
60
Воспроизведение звукового сигнала
Визуализация спектра звукового сигнала Спектр цифрового звукового сигнала Считывание частоты звукового сигнала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|