FreeBasic
Главная
Вход
Регистрация
Четверг, 18.04.2024, 10:02Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » как Записать 10 Секунд звука в массив
как Записать 10 Секунд звука в массив
12valera12Дата: Четверг, 13.08.2020, 09:20 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Подскажите как Записать 10 Секунд звука в массив

Тут Wav  и  оочень много лишнего   ..глаза разбегаются https://www.freebasic.net/forum/viewtopic.php?t=20033

Это  работает но много   много лишнего.. двойной  буффер  и почему то 16 бит не работает

https://www.freebasic.net/forum....p275019

Нужен  только 1 формат  44100 16 бит  моно

по итогу  хочется вызвать  функцию Save_sound()

и 10  звука   в массиве  определенном      dim as   Short     Sound_16(441000)

Во время записи звука  ничего  делать не нужно  Просто ждать когда запишется


Сообщение отредактировал 12valera12 - Четверг, 13.08.2020, 09:33
 
sashasoldДата: Среда, 19.08.2020, 08:57 | Сообщение # 2
Лейтенант
Группа: Пользователи
Сообщений: 41
Репутация: 0
Статус: Offline
Ну, раз никто не отвечает поробую Я

1. Написать с использованием winmm, windows multimedia, упростив тот пример что выше привел
2. Использование спец. Библиотек для работы со звуком. Список указан в справке к FB. Так будет правильнее, хоть задача и проста. Да и на будущее пригодится;), рекомендую этот вариант
 
12valera12Дата: Суббота, 21.11.2020, 22:36 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Новый  вопрос ..как получить  мгновеннное значение с минимальной задержкой   со звуковой карты ?
 
armagidon1Дата: Вторник, 24.11.2020, 10:46 | Сообщение # 4
Сержант
Группа: Пользователи
Сообщений: 25
Репутация: 0
Статус: Offline
Никак, подача и ввод осуществляется в потоковом режиме.
Можно получить текущий промежуток и программно обрезать его до нужно значения.
 
DarkDemonДата: Четверг, 03.12.2020, 14:38 | Сообщение # 5
Полковник
Группа: Друзья
Сообщений: 188
Репутация: -2
Статус: Offline
Мгновенное значение можно было получать на SoundBlaster-ах через функции DSP и только под DOS-ом,
работало это мало где. В винде всё буферизируется. Коллбек сообщает нам когда данные пришли,
соответственно можно таймером отмерить необходимое. И да задержка равна размеру буфера.
 
12valera12Дата: Суббота, 26.12.2020, 19:16 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
DarkDemon
при размере буфера в 1 сампл какая задержка ?
 
DarkDemonДата: Воскресенье, 27.12.2020, 00:09 | Сообщение # 7
Полковник
Группа: Друзья
Сообщений: 188
Репутация: -2
Статус: Offline
Цитата 12valera12 ()
при размере буфера в 1 сампл

Через MME не запустишь кольцевой буфер(3 шт минимум) размером в 1 семпл. Там значения каждого буфера в самом лучшем
случае от 700 начинаются, в зависимости от звуковой карты. Ниже начинается треск, ОС долго паркует буферы в очередь.
На интерфейсе ASIO задержки многократно ниже, но под него на FB ещё попробуй найди хедеры, примеры и внятную документацию,
с этим можно очень долго возиться(например с форматами отсчётов). По MME же полно примеров в инете на обычном WinAPI,
что через коллбеки, что через потоки. По твоей первой ссылке это есть, например в функции Sound.Rec().

Про задержку писал исходя из конвеерного процесса получения записанного буфера и отдачи его на воспроизведение
с учётом того, что воспроизведение и запись начались примерно в одно время(воспр. нужно запускать позже, чтобы выделить
время ЦП на копирование).
Для понимания этого нужно нарисовать таймлайн, временные отрезки и нанести отсечки когда буфер был запущен,
когда пришло оповещение о его завершении, когда стартовал таймер, если он есть и т.п..

В целом это время(задержка сквозного ввода-вывода) примерно равно:
Tобщ = (BuffSize / SampleRate) + (BuffOffset / SampleRate) + DeviceOverheads

Где
SampleRate - частота дискретизации
BuffSize - размер буфера( в отсчётах )
BuffOffset - смещение буфера( в отсчётах ) воспроизведения относительно старта таймлайна
DeviceOverheads - задержка устройства от подачи запроса, до запуска буфера( в секундах )

В принципе, сам по себе это довольно бесполезный параметр, он выводится чисто для пользователя, чтобы видно было задержку.
10 секунд звука можно получать одним буфером, без мониторинга, а можно организовать кольцевой буфер(3 буфера)
и заполнять с них 10-ти секундный имея мониторинг с частотой допустим SampleRate / BuffSize, например, при ЧД = 44100 и размере
буфера 1024(довольно стандартное значение) это будет равно 44100 / 1024, т.е. 43 раза в секунду будет приходить буфер.


Сообщение отредактировал DarkDemon - Воскресенье, 27.12.2020, 00:11
 
Форум » Freebasic » Вопросы по языку FreeBasic » как Записать 10 Секунд звука в массив
  • Страница 1 из 1
  • 1
Поиск: