Просветите меня. Как работает воспроизведение в той схеме?
1) Получаем очередную порцию данных из UDP и записываем её в SoundBuffer (кстати, что, в SoundBuffer нельзя добавить прием данных из строки, чтобы не делать StrToStream?)
2) С помощью BASS_StreamCreate назначаем callback, который будет читать данные из SoundBuffer
3) Запускаем воспроизведение с помощью BASS_ChannelPlay. Что в этом случае происходит? Библиотека BASS запускает параллельный поток, который с нужной частотой обращается к выше упомянутой callback из BASS_StreamCreate, которая и возвращает очередную порцию данных из SoundBuffer?
Если да, то спрашивается: каким это образом можно одновременно записывать данные в поток (MemoryStream) в SoundBuffer (при этом, судя по коду, перемещать часть данных с конца в начало по превышению размера) и в это же время параллельным потоком читать из этого же MemoryStream?
Как минимум, в коде SoundBuffer должна стоять критическая секция в THISoundBuffer._work_doAdd, а в BASS_StreamCreate та же критическая секция в function MakeSine. А более правильно - сделать свой TMemoryStream, уже содержащий критическую секцию на чтение/запись, выполняющий внутри весь тот круговорот данных, и использовать его в SoundBuffer.
Этот топик читают: Гость
Ответов: 4631
Рейтинг: 749
|
|||
карма: 26 |
|
Ответов: 2059
Рейтинг: 132
|
|||
А более правильно - сделать свой TMemoryStream, уже содержащий критическую секцию на чтение/запись, Я сейчас похожей темой занимаюсь (поток-MP3). Именно так свой компонент и сделал. Пробую все варианты, на данный момент это самый лучший. |
|||
карма: 6 |
|
Ответов: 15
Рейтинг: 1
|
|||
И...программа при прием/трансляция виснет?
|
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
И...программа при прием/трансляция виснет? Если ко мне, то я потоковое радио в mp3 запихиваю. Ничего не виснет. C BASSом беда. 1. На win7 и драйвер Realtek - не определяет устройство по умолчанию. 2. Не со всех устройств пишет. 3. Если пишет, то уровень записи в 4-8 раз занижен. Собственно, чего и Stream-ами занялся. |
|||
карма: 6 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-19 17:51:32 |
|||
карма: 0 |
|
Ответов: 4631
Рейтинг: 749
|
|||
В данном случае это проблема не BASS, а нашей реализации.
А вообще я не совсем понял, в чем там проблема. Схема большая, разбираться неохота. Например, в UDP используется параллельный поток, мало ли ещё в каких компонентах по этому поводу возникнут глюки. Может и в самом UDP. Вот, например, такая схема: code_35209.txt Вроде же нет никаких зависаний. |
|||
карма: 26 |
| ||
файлы: 1 | code_35209.txt [3.1KB] [609] |
Ответов: 2059
Рейтинг: 132
|
|||
Net2Com
flint2, такая петрушка на стоковом басе или на свежем аналогично ? где-то читал что а настройках аудио есть опция коррекции громкости системы при работе с voip она же регулируется виндой там. Тогда я не могу понять почему, когда я делаю не в HiAsm всё нормально работает с любой версией BASS и Lame-ENC в любых сочетаниях. https://yadi.sk/d/pf6O299TeqKMv В чём дело? Хотя-бы в какую сторону рыть. Netspirit Сообщение было позже, чем я написал. В данном случае это проблема не BASS, а нашей реализации. Наверное ответ в этом. 16.00 Начал немного разбираться. Похоже дело не в BASS_RecordStart, а в BASS_RecordCenter. Попробовал на другом компьютере с XP, тоже немного тише записывает (терпимо), но правильно определяет устройство по умолчанию. На семёрке, хоть ты тресни, берёт только с микшера (с микрофоном не возился). Похоже чего-то с интерфейсом к системе напутано. Так как BASS_Record не буду переделывать, то и копать дальше нет смысла. Буду свои компоненты делать. |
|||
карма: 6 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-19 17:51:40 |
|||
карма: 0 |
|
Ответов: 15
Рейтинг: 1
|
|||
Может и в самом UDP Глюк одинаков при использовании UDP или TCP. Единственно, что в локальной сети прога реже зависает чем при коннекте через Интернет по VPN на скорости 2048 Кбит/с ADSL. При трансляции "видео" т.е. jpeg картинки, прога на UDP или TCP работает стабильно. Правда UDP не "любит" 100% качества, в общем, только очень маленькие картинки пропускает. UDP code_35211.txt TCP code_35212.txt Может кто нибудь подскажет как подготовить аудио трансляцию для приема клиентом на другом компе с использованием компонента hiBASS_StreamCreateURL ? Да вообще хоть что ниботь стабильно транслирующее звук. ------------ Дoбавленo в 17.24: и принимающее |
|||
карма: 0 |
| ||
файлы: 2 | code_35211.txt [6.3KB] [482], code_35212.txt [5.4KB] [496] |
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-19 17:51:48 |
|||
карма: 0 |
|
Ответов: 15
Рейтинг: 1
|
|||
вот это кстати не проверял, но мысль через урл прогнать его возникала. надо попробовать проверить. Мысли какие нибудь есть? Просто не хочется ждать сложа руки и выпрашивать помощь |
|||
карма: 0 |
|
Ответов: 4631
Рейтинг: 749
|
|||
krastydent писал(а): Мысли какие нибудь есть?Потестируй это: bass test tcp.7z Порядок использования: 1) Запустить сервер 2) В сервере жмешь Start server, Generate pattern, Start translation. На ползунки внимания не обращаем. 3) Запускаешь клиент 4) В клиенте вводишь адрес сервера, жмешь Connect, потом Play Сервер генерирует математикой фрагмент звука, который затем в цикле рассылается всем клиентам. В клиенте частота воспроизведения выставлена в 10000, при малой скорости сети вероятно будут паузы в воспроизведении. Схемы пока не выкладываю, так как в них использованы альтернативные TCP-компоненты (dev-версии), а также модифицированные BASS_StreamCreate и SoundBuffer (у меня даже и Thread модифицированный - всюду успел поковыряться). Но, схемы работают и на стандартных BASS_StreamCreate, SoundBuffer, да и TCP сервере и клиенте. |
|||
карма: 26 |
|
Ответов: 15
Рейтинг: 1
|
|||
Потестируй это: bass test tcp.7z Хорошо пищит |
|||
карма: 0 |
|
Ответов: 4631
Рейтинг: 749
|
|||
И что, не падает?
|
|||
карма: 26 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-19 17:52:00 |
|||
карма: 0 |
|