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