Запись потока с линейного входа
, Разделить поток линейного входа на 2 разных в первом только левое моно, а во втором только правое моно
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.50] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
| Страницы: (4) « Первая ... 2 3 [4] все ( Перейти к последнему сообщению ) |
Запись потока с линейного входа
, Разделить поток линейного входа на 2 разных в первом только левое моно, а во втором только правое моно
|
Сообщ.
#46
,
|
|
|
|
Цитата может из-за того что у меня win8 x64? Да кто бы знал бы. Цитата если можно взгляни пожалуйста по teamviewer Извините, .Цитата Безымянный.jpg ![]() Цитата закоментировать rchan := BASS_RecordStart(44100, 2, 10 shl 16, @RecordingCallback, nil); ошибок нет Логично. Запись не выполняется, в кэлбек входа нет. По сути, программа ничего не выполняет. Побробуйте увеличить интервал вызова кэлбек функции в BASS_RecordStart: вместо 10 поставьте 20, 30, 40, 50, 100 наконец. Это примерный интервал в мс между входами в RecordingCallback. ![]() ![]() p:=allocmem(16384); Bass_StreamPutData(chan_L,P,16384); Bass_StreamPutData(chan_R,P,16384); Заодно и в поток воспроизведения записать побольше данных в начале процесса, допустим, не меньше, чем length, возвращаемый в RecordingCallback(т.е., можно подсмотреть, а потом подкорректировать в StartRecording). Гонял программу 2 часа, с прослушиванием и записью в файл, никаких вылетов. Единственная проблема, вылезла вновь рассинхронизация между потоками записи и воспроизведения. Как с этим бороться, сказать не могу, особоенно с учётом возможной передискретизации в ядре винды, или в недрах басс. Пока не знаю, что с этим делать. За 2 часа накопилось 12 кБайт "хвостов" в очереди воспроизведения. Цитата у тебя в примере при отладке если нажимать быстро на checkbox listen, та же выходила... У меня ничего такого не выходит. Отчего так может быть, без понятия. Значение listen копируется в локальную переменную при входе в RecordingCallback(во всяком случае, в архиве было так). До выхода из RecordingCallback изменения(даже если возникнут) никак не сказываются на результате работы RecordingCallback. Сам флаг лишь указывает, записывать в поток воспроизведения пустой буфер или с записанными данными. С выделением памяти(и её освобождением) флаг никак не связан. Не исключено, что в примере есть ошибка или я недочитал справку к басс, но это пример, для понимания принципов(записи, организации сквозного канала, манипуляций с семплами). Там много чего можно и нужно изменить и допилить. А какие изменения вы внесли, я даже не хочу разбираться. Это был лишь пример. когда пишите ответ, вверху формы есть выпадающий списк "code". Выделяеете ваш код, нажимаете на список, выбираете delphi/pascal. Читать сообщения будет удобней. |
|
Сообщ.
#47
,
|
|
|
|
fTR:double
в RecordingCallback: Цитата pRecState(user).fTR := r.fTR; в VisualUpdate: Цитата cxTimeR.Caption := timetostr(recstate.fTR); Если производить запись примерно час, то вылетает ошибка access violation. Возможен вариант что в одном случае VisualUpdate пытается считать переменную fTR,а во втором RecordingCallback пытается записать, и из-за этого вылетает ошибка? |
|
Сообщ.
#48
,
|
|
|
|
Исходный код(без bass.dll)
Прикреплённый файл без_cx.part01.rar (100 Кбайт, скачиваний: 211)
Прикреплённый файл без_cx.part02.rar (100 Кбайт, скачиваний: 193)
Прикреплённый файл без_cx.part03.rar (20.07 Кбайт, скачиваний: 193)
|
|
Сообщ.
#49
,
|
|
|
|
Нет никаких предложений?
|
|
Сообщ.
#50
,
|
|
|
|
Все... закончил. Ошибка возникала из-за использования postMessage... если visualupdate выполняется дольше 100мс, либо если форме будет послано сообщение, которое будет перекрывать все остальные(например вызов контекстного меню или когда выбираешь дату в dateTimePiker или например когда нажимаешь на рамку окна чтобы его перенести) очередь растет и потом может дать сбой... в твоем примере тоже если разрешить разворачивать окно и долго играться сворачивать и разворачивать можно получить исключение типа access violation.
В общем перевел все на потоки и все работает как часики. Спасибо большое еще раз за помощь! |