На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (4) « Первая ... 2 3 [4]  все  ( Перейти к последнему сообщению )  
> Запись потока с линейного входа , Разделить поток линейного входа на 2 разных в первом только левое моно, а во втором только правое моно
    Цитата
    может из-за того что у меня win8 x64?

    Да кто бы знал бы.

    Цитата
    если можно взгляни пожалуйста по teamviewer

    Извините, :no-sad:.
    Цитата
    Безымянный.jpg

    :-?
    Цитата
    закоментировать rchan := BASS_RecordStart(44100, 2, 10 shl 16, @RecordingCallback, nil); ошибок нет

    Логично. Запись не выполняется, в кэлбек входа нет. По сути, программа ничего не выполняет.
    Побробуйте увеличить интервал вызова кэлбек функции в BASS_RecordStart: вместо 10 поставьте 20, 30, 40, 50, 100 наконец. Это примерный интервал в мс между входами в RecordingCallback.
    ExpandedWrap disabled
      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. Читать сообщения будет удобней.
    Сообщение отредактировано: Prince -
      fTR:double

      в RecordingCallback:
      Цитата
      pRecState(user).fTR := r.fTR;

      в VisualUpdate:
      Цитата
      cxTimeR.Caption := timetostr(recstate.fTR);


      Если производить запись примерно час, то вылетает ошибка access violation. Возможен вариант что в одном случае VisualUpdate пытается считать переменную fTR,а во втором RecordingCallback пытается записать, и из-за этого вылетает ошибка?
        Исходный код(без bass.dll)
        Прикреплённый файлПрикреплённый файлбез_cx.part01.rar (100 Кбайт, скачиваний: 211)
        Прикреплённый файлПрикреплённый файлбез_cx.part02.rar (100 Кбайт, скачиваний: 193)
        Прикреплённый файлПрикреплённый файлбез_cx.part03.rar (20.07 Кбайт, скачиваний: 193)
          Нет никаких предложений? :(
            Все... закончил. Ошибка возникала из-за использования postMessage... если visualupdate выполняется дольше 100мс, либо если форме будет послано сообщение, которое будет перекрывать все остальные(например вызов контекстного меню или когда выбираешь дату в dateTimePiker или например когда нажимаешь на рамку окна чтобы его перенести) очередь растет и потом может дать сбой... в твоем примере тоже если разрешить разворачивать окно и долго играться сворачивать и разворачивать можно получить исключение типа access violation.
            В общем перевел все на потоки и все работает как часики.
            Спасибо большое еще раз за помощь!
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0.0856 ]   [ 18 queries used ]   [ Generated: 12.07.26, 19:03 GMT ]