Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #138


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 138.  24 мая 2012 г.

Здравствуйте, уважаемые читатели!



После долгого перерыва предлагаем вам ознакомиться с изменениями на нашем форуме.

Сборник «Книжная полка разработчика систем со встроенными микропроцессорами» разделился на две части: на самого себя и «Публикации на тему встроенных систем». Мы восстанавливаем традицию периодического освещения динамики этих сборников в нашей рассылке.


На «книжную полку» добавлено:



Публикаций добавлено:




Приятного чтения! Прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


  • Программирование :: Неотложка
  • Здравствуйте, необходима помощь в построении диметрической проекции фигуры вместо изометрической. Что исправить в коде (Pascal). Заранее благодарю всех откликнувшихся!(постаралась, как можно более полно написать комментарии)

    Код: (pascal)
    uses Graph,crt;
    const                              {объявляю константы}
    coord: array[0..6,0..2] of real =  {матрица координат вершин гексаэдра}
     ((60,0,60),
     (85.98,0,45),
     (85.98,0,15),
     (60,0,0),
     (34.02,0,15),
     (34.02,0,45),
     (60,150,30));

    side: array[0..11,0..1] of integer = {матрица ребер гексаэдра}  
    ((0,1),(0,5),(1,2),(2,3),(3,4),(4,5),(0,6),(1,6),(2,6),(3,6),(4,6),(5,6));

    pl:array[0..5,0..2] of integer =      {матрица граней гексаэдра}
    ((0,1,6),(1,2,6),(2,3,6),(3,4,6),(4,5,6),(0,5,6));

    MatrOb: array[0..3,0..3] of real =     {обратная матрица видового преобразования}
     ((0.631,0.078,0.784,0),
     (0.452,0.772,-0.452,0),
     (-0.64,0.64,0.64,0),
     (0,0,0,1));

    E:array[0..3] of integer = (0,0,-1,0); {вектор с координатами пробной точки}
    f:real=45*Pi/180;                      {угол поворота вокруг оси OY}
    q:real=35.26*Pi/180;                   {угол поворота вокруг оси OX}

    Type st =set of 1..9;                  {объявляю тип множество целых чисел}

    {объявляю переменные}
    var corner :real;                      {угол поворота вокруг оси OY}
        s: real;                           {вспомогательные переменные}
        sx,sy,sx1,sy1,gd,gm,i,j,p: integer; {вспомогательные переменные}
        coordIz: array[0..6,0..2] of real; {матрица изометрических координат}
        V,V1: array[0..3,0..5] of real;    {матрицы коэффициентов уравнений плоскостей граней гексаэдра – матрица тела}
        N: array[0..1,0..2] of real;       {матрица вектора нормали к плоскости}
        o: array[0..3] of real;            {вектор координат точки, лежащей внутри гексаэдра}
        L: array[0..7] of integer;         {матрица координат вершин изометрических плоскостей гексаэдра – используется в функции Паскаля FillPoly}
        Hidden : st;                       {множество для хранения номеров невидимых вершин гексаэдра}
        Zn:array[0..6] of integer;         {вектор хранения знаков плоскостей граней}
        tX,tZ:real;                        {вспомогательные переменные}
        flag: Boolean;                     {переменная логического типа, определяет как проходит гексаэдр – за или перед осью OY}

    {процедура нахождения изометрических координат гексаэдра}
    Procedure Izometr;
    Begin
       tX:=coordIz[0,0];             {запоминаем координату нулевой точки предыдущего местоположения гексаэдра}
       for p:=0 to 6 do              {в цикле от 0 до 6 находим изометрические координаты}
       begin
            coordIz[p,0]:=coord[p,0]*cos(f)+coord[p,2]*sin(f);
            coordIz[p,2]:=0;
            coordIz[p,1]:=coord[p,0]*sin(f)*sin(q)+coord[p,1]*cos(q)-coord[p,2]*cos(f)*sin(q);
       end;
    {если координаты нулевой точки предыдущего хода меньше, чем текущего, то
    переменной флаг присваиваем значение false, иначе - true}    if tX<coordIz[0,0] then flag:=false else flag:=true;
    End;

    {процедура рисования контура гексаэдра} procedure draw(color:byte);
    begin
        for p:=0 to 11 do         {в цикле от 0 до 11 соединяем точки вершин гексаэдра по номерам ребер. Точки строим относительно середины экрана}
        begin
           {если вершина не принадлежит множеству Hidden, т.е. если она видимая}        if (not (side[p,0] in Hidden)) and (not (side[p,1] in Hidden)) then
           begin
              sx:=round(coordIz[side[p,0],0]+getmaxx div 2);
              sx1:=round(coordIz[side[p,1],0]+getmaxx div 2);
              sy:=round(getmaxy div 2-coordIz[side[p,0],1]);
              sy1:=round(getmaxy div 2-coordIz[side[p,1],1]);
              setcolor(color);               {задаем цвет рисования ребер}
              line(SX,SY,sx1,sy1);           {проводим линии ребер}
         end;
    end;
    end;

    {процедура поворота вокруг оси OY} procedure rotateOY;
    begin
       for i:=0 to 6 do    {в цикле от 0 до 6 находим новые координаты гексаэдра}
       begin
         tX:= coord[i,0] * COS(corner) + coord[i,2] * SIN(corner);
         tZ:=-coord[i,0] * SIN(corner) + coord[i,2] * COS(corner);
         coord[i,0]:=tX;
         coord[i,2] :=tZ;
      end;
    end;

    {процедура, реализующая алгоритм Робертса} procedure Roberts;
    begin
       o[0]:=0;
       o[1]:=0;
       o[2]:=0;
       o[3]:=1;
     {путем усреднения координат вершин находим координаты точки, лежащей внутри
     гексаэдра}   for i:=0 to 2 do  
       begin
          for j:=0 to 6 do o[i]:=o[i]+coord[j,i];
          o[i]:=o[i]/7;
       end;

       for p:=0 to 5 do {в цикле от 0 до 5 ищем уравнения плоскостей граней гексаэдра}
       begin
          {поиск нормали к плоскости}   for i:=0 to 1 do
             for j:=0 to 2 do
                N[i,j]:=coord[pl[p,i+1],j]-coord[pl[p,i],j];
          {находим коэффициенты a,b,c,d уравнения плоскости}       V[0,p]:=N[0,1]*N[1,2]-N[0,2]*N[1,1];  
          V[1,p]:=-(N[0,0]*N[1,2]-N[0,2]*N[1,0]);
          V[2,p]:=N[0,0]*N[1,1]-N[0,1]*N[1,0];
          V[3,p]:=-V[0,p]*coord[p,0]-V[1,p]*coord[p,1]-V[2,p]*coord[p,2];
          s:=0;
    {проверяем знак уравнения плоскости умножением уравнения плоскости на точку О}       for i:=0 to 3 do s:=s+o[i]*V[i,p];
    {если скалярное произведение меньше нуля, то меняем знак уравнения плоскости}       if s<0 then
             for i:=0 to 3 do V[i,p]:=-V[i,p];
       end;
       {перемножаем обратную матрицу видового преобразования на матрицу тела}    for i:=0 to 3 do            
           for j:=0 to 5 do          
           begin                    
             s:=0;                  
             for p:=0 to 3 do
                 s:=s+MatrOb[i,p]*V[p,j];
                 V1[i,j]:=s;       {V1 – итоговая матрица тела}
           end;
        {вычисляем скалярное произведение (s) пробной точки на матрицу тела}
        for p:=0 to 5 do
        begin
          s:=0;
          for i:=0 to 3 do s:=s+V1[i,p]*E[i];
          {заполняем вектор Zn, хранящий знаки s}       if s=0 then Zn[p]:=0;
          if s<0 then Zn[p]:=-1;
          if s>0 then Zn[p]:=1;
       end;
       Hidden:=[];            {обнуляем множество}
    {если два рядом стоящие элемента множества отрицательны, то данная вершина
    невидима – заносим ее номер в множество Hidden}      for p:=0 to 4 do            
            if (Zn[p]<0) and (Zn[p+1]<0) then
                Hidden:=Hidden+[p+1];
         if (Zn[0]<0) and (Zn[5]<0) then Hidden:=Hidden+[0];
    end;

    {процедура закраски граней гексаэдра в разный цвет}
    Procedure color(col:byte);
    Begin
    {в цикле ищем координаты изометрических координат каждой грани гексаэдра. Точки
    строим относительно середины экрана}    for j:=0 to 5 do
       begin
         {если вершина не принадлежит множеству Hidden, т.е. если она видимая}      if (not (pl[j,0] in Hidden)) and (not (pl[j,1] in Hidden)) then
         begin
            i:=0;
            for p:=0 to 2 do
            begin
               L[i]:=round(coordIz[pl[j,p],0]+getmaxx div 2);
               L[i+1]:=round(getmaxy div 2-coordIz[pl[j,p],1]);
               if i=0 then
               begin
                  L[6]:=round(coordIz[pl[j,p],0]+getmaxx div 2);
                  L[7]:=round(getmaxy div 2-coordIz[pl[j,p],1]);
               end;
               i:=i+2;
            end;
    {если входящий параметр col равен 0, то закрашиваем грани в разный цвет, иначе
    закрашиваем грани цветом фона}         if col=0 then SetFillStyle(1,j+1) else SetFillStyle(1,0);
            fillPoly(4,L);        {закрашиваем грань}
        end;
      end;
    end;

    {процедура рисования изометрических осей}
    Procedure Axis;
    var l:integer;
    Begin
       setColor(15);                      {задаем цвет}
       l:=GetMaxY div 2;
       {рисуем ось OY – вертикально вверх}
       line(GetMaxX div 2,GetMaxY div 2,GetMaxX div 2,0);
       {рисуем ось OX – под углом 1200 к оси OY}   line(GetMaxX div 2,GetMaxY div 2,GetMaxX div 2 + round(0.866*l),GetMaxY div 2 + round(0.5*l));
       {рисуем ось OX – под углом -1200 к оси OY}   line(GetMaxX div 2,GetMaxY div 2,GetMaxX div 2 - round(0.866*l),GetMaxY div 2 + round(0.5*l));
       setColor(0);                    
    end;

    {основная программа} begin
    gm:=VgaHi;                      {определяю графический режим}
    gd:=detect;                     {определяю графический драйвер}
    initgraph(gd,gm,'c:\TP7\BGI');  {инициализируем графику}
    corner := 0.05;                 {задаю угол поворота}
    {вывожу надпись "y" около оси OY}
    OutTextXY(getmaxx div 2 + 10,10,'Y');
    {вывожу надпись "x" около оси OX}        
    OutTextXY(GetMaxX div 2 + round(0.866*(GetMaxY div 2)) + 10,GetMaxY div 2 + round(0.5*(GetMaxY div 2))-10,'X');
    {вывожу надпись "z" около оси OZ}
    OutTextXY(GetMaxX div 2 - round(0.866*(GetMaxY div 2))-10,GetMaxY div 2 + round(0.5*(GetMaxY div 2))-10,'Z');

    {цикл с постусловием} repeat
       Roberts;                 {вызываю процедуру Roberts}
       Izometr;                 {вызываю процедуру Izometr}
       draw(15);                {вызываю процедуру draw с параметром 15 (белый цвет)}
       Color(0);                {вызываю процедуру color c параметром 0)}
       {если логическая переменная flag равна true, то вызываем процедуру Axis}    if flag=true then Axis;
       delay(5000);             {задержка 5000 мс}
       draw(0);                 {вызываю процедуру draw с параметром 15 (черный цвет)}
       color(1);                {вызываю процедуру color c параметром 1}
       {если логическая переменная flag равна false, то вызываем процедуру Axis}    if flag=false then Axis;
    rotateOY;                {вызываем процедуру rotateOY}
    until keypressed;           {пока не нажата любая клавиша}
    closegraph;                 {закрываем графический режим}
    end.
  • Программирование :: Общий
  • Доброго всем времени суток. Нужно понять как работает FTP compression. Не могу понять, читал rfc - от прочтения легче не становиться. Можете навести пример как это работает
  • Программирование :: .NET технология от и до
  • Здравствуйте.

    Где я могу почитать что-нубудь по-русски по теме?
    Если нет по-русски, то по-английски.

    И уже совсем в идеале увидеть примеры кодов.

    Гуугл совсем не помог.

    Спасибо.
  • Программирование :: C/C++
  • Я работаю в среде Microsoft Visual C++ 2008 и понадобилось вызвать процедуру, написанную на фортране.

    По ссылке "http://www.neurophys.wisc.edu/comp/docs/no...t017.html#fcall" есть один пример:
    The following sample shows how Fortran routines and functions can be called from a C++ program.

    (1) The C++ file:
    Код: (cpp)
    // This illustrates how a Fortran routine and function may be
    // called from a main program in C++
    #include <iostream.h>
    extern "C"
    {
    void __stdcall FR1(int*,int *);
    int __stdcall FF1(int *);
    }
    int main()
    {
    int n=10,nSq,nCube;
    FR1(&n,&nSq);
    cout << "The square is:" << nSq << endl;
    nCube=FF1(&n);
    cout << "The Cube is:" << nCube << endl;
    return 0;
    }

    (2) The Fortran File:
    Код: (fortran)
    SUBROUTINE FR1(N,M)
    C COMPUTES THE SQUARE OF N, RETURNS IN M
    M=N*N
    RETURN
    END
    C
    INTEGER FUNCTION FF1(N)
    C COMPUTES THE CUBE OF N
    FF1=N*N*N
    RETURN
    END

    Я сделал следующее:

    1: в файл forc.for , который находится в той же директории проекта, что и сам проект, поместил такой текст:
    Код: (fortran)
    SUBROUTINE FR1(N,M)
    C COMPUTES THE SQUARE OF N, RETURNS IN M
    M=N*N
    RETURN
    END
    C
    INTEGER FUNCTION FF1(N)
    C COMPUTES THE CUBE OF N
    FF1=N*N*N
    RETURN
    END
    2: в файл самого проекта поместил несколько видоизменённый вариант:
    Код: (cpp)
    #include <stdio.h>
    #include "stdafx.h"

    extern "C"
    {
    void __stdcall FR1(int*,int *);
    int __stdcall FF1(int *);
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    int n=10,nSq,nCube;
    FR1(&n,&nSq);
    printf("The square is:%d\n",nSq );
    //cout << "The square is:" << nSq << endl;
    nCube=FF1(&n);
    printf("The Cube is:%d\n",nCube );
    //cout << "The Cube is:" << nCube << endl;
    return 0;
    }

    3: после неудачной компиляции на выходе получил :

    1>Linking...
    1>forTOc.obj : error LNK2019: unresolved external symbol _FF1@4 referenced in function _wmain
    1>forTOc.obj : error LNK2019: unresolved external symbol _FR1@8 referenced in function _wmain
    1>C:\Users\admin\Desktop\work\23052012\c_for\forTOc\Debug\forTOc.exe : fatal error LNK1120: 2 unresolved externals
    1>Build log was saved at "file://c:\Users\admin\Desktop\work\23052012\c_for\forTOc\Debug\BuildLog.htm"
    1>forTOc - 3 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    Что здесь нужно исправить?
  • хочу вытащить из скобок текст и цифру - они разделены двоеточием

    Код:
    	std::string str="/ret(текст:22)";

    std::string text;
    int num22=0;

    text.resize(64,0);

    int n=sscanf_s(&str[0],"/ret(%[^:]s:%d)",&text[0],text.size(),&num22);
    text.erase(text.find('\0'));

    в результате
    n==1
    text=="текст"
    num22=0

    что я не так делаю ?

  • Что-то жёстко туплю :

    Код:
    len = (wcslen(L"Test") + 1)*sizeof(WCHAR);
    fulllen = len + 5;
    pinfo = malloc(fulllen);
    if(pinfo)
    {
        memset(pinfo,0,fulllen);

      [b] memcpy(pinfo,L"Test",fulllen); // <-почему здесь не падает?[/b]
    }
    Как вообще работает memcpy ()? - L"Test" - занимает 8 байт в памяти,а я пытаюсь записать 8 + 5 байт,почему не происходит ACCESS_READ VIOLATION при чтении из L"Test"?
  • Программирование :: Ассемблер
  • Чем отличаются эти файлы, и как компилятор может распознавать, что код предназначен именно для соответствующего файла? Объясните, плз. :shuffle:
  • Программирование :: Perl
  • Вот код набросала, вроде для небольших степеней и чисел все считает нормально, но почему -то при больших значения степеней, например 2^150 выдает ересь... Самое обидное, что проверить даже нечем, тупо все числа что ли вбивать в онлайн калькулятор.... Переполнение что ли в нем... Взгляните пожалуйста на код и ткине носом, что не так.

    Код: (perl)
    #!/usr/bin/perl -w
    $| = 1;

    $a = 2;
    $p = 131;
    $d = 2;
    $d1 = 5;
    $d2 = 13;
    open (M, ">> rezultat.txt");

    while ($a < $p) {
      $one = $a ** (($p - 1) / $d);
      $otvet = $one % $p;
      $two = $a ** (($p - 1) / $d1);
      $otvet1 = $two % $p;
      $three = $a ** (($p - 1) / $d2);
      $otvet2 = $three % $p;
      print(M "Проверка числа $a дала результаты $otvet ; $otvet1 ; $otvet2\n\n");
      ++$a;
    }

    close (M);

    Это поиск примитивного элемента в поле Галуа, там надо в степень в возводить число и искать остаток от деления...
  • Программирование :: Программирование 1С :: 1С 7.x
  • а что, на форуме и вправду ничего про него не обсуждалось? мне бы пример кода по выгрузке из 1с 7.7 в xls файлик с форматированием типа данных ячеек. просто под эксель аппликейшн написала, а что нужно добавить, чтобы без экселя одним только йокселем файл форматировался?
     а если точнее, то мне нужно создавать экселевский файлик, в строго определенные ячейки записывать вполне определенные данные и потом в другую базу считывать.
    есть ещё вариант, может в таблице области создать и он с ними как то корректнее работает? про прямую и условную адресацию на ячейки ничего не могу найти.
  • Операционные системы :: Windows
  • Здравствуйте.

    Есть процесс, который постоянно\периодически пишет сообщение в текстовый файл.

    Есть ли возможность выводить на консоль или визуализировать как-нибудь пополнения этого файла?

    При каждой записи файл переоткрывается.  Если очень необходимо, то это можно заменить на разовое открытие.

    Спасибо.
  • Направления программирования :: Drivers
  • Имеется список,который необходимо обойти для поиска/удаления элементов,что в данном случае лучше использовать для блокировки списка - mutex или spin-lock?
    Вроде бы ограничение на спин-лок - это время его "удержания",не более 25мкс...а ведь полный проход списка может занять и больше времени...
  • Здравствуйте Уважаемые знатоки!
    У меня возникла такая проблема! Переписываю драйвер написанный в nuMega и много чего не понятно…
    Есть PCI плата с четырьмя каналами 2 АЦП и 2 ЦАП, для каждого канала есть своя память… доступ к регистрам осуществляется через READ_PORT_ULONG… а данные проецируются в память…
    получаю физические адреса портов и памяти, физический адрес преобразцовую в виртуальный и на этом ступор…
    Читаю регистры
    Код:
    #define MDMAI_IO_READ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
    #define MDMAI_IO_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
    научился ... И в старом драйвере были еще такие строки:
    Код:
    #define MDMAI_MEM_READ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)//работа с памятью 
    #define MDMAI_MEM_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_IN_DIRECT, FILE_ANY_ACCESS)//работа с памятью
    #define MDMAI_DMA_SETUP CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)//???
    #define MDMAI_INOUT_SET CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)//???
    собственно вопрос:
    как правильно создать четыре буфера ДМА и передавать через них данные???
    Подскажите как быть?!
    Спасибо!!!
  • Несколько лет назад написал собственный драйвер для некоего serial устройства.
    С тех пор отошел от написания драйверов, но сейчас стал актуальным вопрос работы этого устройства под Windows 7.
    Попробовал поставить свой драйвер, указал путь к дистрибутиву. После чего система несколько минут пытается инсталлировать драйвер (висит "Installing driver Software").
    В итоге всё это заканчивается плачевно:  Windows found driver but encountered an error while attemtping to install it.
    Не понимаю какого события он ждал всё это время?
    В сам драйвер, как я понимаю, входа не было (DbgView молчит)
    После всего этого смотрю в системных каталогах:
     INF-файл OEMxx.INF в каталоге INF присутствует,
     а сам SYS-файл драйвера не копируется в каталог E:\Windows\System32\drivers\.
    Возможно, нужно что-то изменить в INF-файле (что-то специфичное для Win7)?
    Код: (ini)
    ;;;;;;;;;;;;; INF Fail ;;;;;;;;;;;;;;;;;;;;;;;;;

    [Version]
    Signature   = "$Windows NT$"
    Class=MyClass
    ClassGuid={C4E89B44-B736-45e6-9CCE-963BB01B9044}
    Provider=%String0%
    DriverVer=18/04/2012,3.0.0.0

    [ClassInstall32]
    AddReg=MyClass.AddReg
    CopyFiles=nbsxProp.copy

    [DestinationDirs]
    DefaultDestDir=12
    nbsxProp.copy=11

    [Manufacturer]
    %String1%=ABCTechnology

    [ABCTechnology]
    %String6%=NBS-40_16C950, PCI\VEN_135E&DEV_7107, PCI\VEN_1415&DEV_9505

    [NBS-40_16C950.NT]
    CopyFiles=nbs40.copy
    AddReg=nbs40.addreg

    [nbs40.copy]
    MyDriver.sys,,,2

    [nbsxprop.copy]
    nbsxprop.dll,,,2

    [NBS40.AddReg]
    HKR,,EnumPropPages32,0,"nbsxprop.dll,NbsxPropPage"

    [MyClass.AddReg]
    HKR,,,0,%MyClassClassName%
    HKR,,Icon,,-5            ; same icon as for network cards
    HKR,,Installer32,,"nbsxprop.dll,NbsxClassInstaller"


    [nbs40.LogConfig]
    ConfigPriority=HARDRECONFIG
    IOConfig=8@100-3ff%fff8(3ff::)
    IRQConfig=S:2,3,4,5,6,7

    [NBS-40_16C950.NT.HW]
    AddReg=NBS40_16C950.AddReg

    [NBS40_16C950.AddReg]
    HKR,,CrystalFrequency,1,00,08,07,00  ; 14.7456 MHz (Max=460800*2)
    HKR,,TransmitToggle,1,01             ; RTS(sw)
    HKR,,UartType,1,01                   ; Oxford 16C950 UART

    [NBS-40_16C950.NT.Services]
    AddService = MyDriver, 2 , nbsx_service , nbsx_eventlog

    [nbsx_service]
    DisplayName    = "NbsX Service"
    ServiceType    = 1   ; KERNEL_DRIVER
    StartType      = 3   ; DEMAND_START
    ErrorControl   = 1   ; ERROR_NORMAL
    ServiceBinary  = %12%\MyDriver.sys

    [nbsx_eventlog]
    AddReg = nbsx_eventlog_Addreg

    [nbsx_eventlog_Addreg]
    HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\drivers\MyDriver.sys"
    HKR,,TypesSupported,0x00010001,7


    [SourceDisksNames]
    1="ABC Technology NBS-X Device Driver Disk",disk1,

    [SourceDisksFiles]
    MyDriver.sys=1
    nbsxprop.dll=1

    [Strings]
    String0="ABC Technology"
    String1="ABC Technology"
    String6="NBS-40(16C950 UART)"
    MyClassClassName="ABC Nine-Bit Serial Adapters"
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • Клубное :: Общение
  • Никто не знает, есть ли какие-нибудь типовые (находящиеся в продаже по умеренным ценам) приспособления, которые бы позволили вести синхронную звукозапись с 3-х и более микрофонов на один компьютер (ноутбук)? Синхронность с точностью в пределах интервала дискретизации.

    Дополнительным условием является возможность автономной работы: либо на аккумуляторах, либо питание через USB. В общем, чтобы в поле (на природе) работало. Простота соединения с микрофонами и ноутбуком (без каких-то дополнительных PCI-карточек и т.п.).

    Ну и, естественно, необходимый для этого софт. Звук нужен без обработки и компрессии по каждому каналу отдельной записью (без микширования каналов). Частота дискретизации как можно выше, в идеале 192 кГц. Квантование не так уж важно - достаточно 16 бит, можно и меньше, но не менее 8.

В избранное