Конференция "Прочее" » Звуки для PC-спикера
 
  • Petr V. Abramov © (24.11.08 19:10) [20]

    > @!!ex ©   (24.11.08 18:57) [19]

    вот только Delphi на девайсе не предусмотрено, интеловского асма он не понимает, проблема заполнения массива HappyBirthday осталась (она и есть сабж)
  • @!!ex © (24.11.08 19:52) [21]
    > [20] Petr V. Abramov ©   (24.11.08 19:10)

    сорри, неправильно вопрос понял.
  • Andy BitOff © (24.11.08 20:35) [22]
    > Petr V. Abramov ©   (23.11.08 03:18) [0]

    Я думаю, можно посмотреть этот код (привожу весь, но на covex можно не обращать внимания):
    (с) Alex Dedusenko - 2:462/37.23 - 10.08.97

    program tst;

    uses crt;

    var
    f : file;
    b : array [1..64500] of byte;
    i : word;
    i1: word;
    t : byte;
    b1: byte;
    covox: word;
    c : string[2];
    spd : word;

    begin
    if paramcount = 0 then
     begin
     writeln('Test program for *.WAV (Windows)  files.');
     writeln;
     writeln('Usage:');
     writeln(' TST <filename> [C#]');
     writeln;
     writeln(' <filename> - .WAV File Name,');
     writeln(' C#         - Covox port number.');
     writeln;
     writeln('If C# parameter is not specified Internal PC Speaker will be use.');
     halt;
     end;
    if (paramcount > 1) and ((copy(paramstr(2),1,1) = 'C') or (copy(paramstr(2),1,1) = 'c')) then
     begin
     c:=copy(paramstr(2),2,1);
     if c[1] in ['1'..'4'] then
       begin
       covox:=memw[0:$408+((byte(c[1]) and $f)-1)*2];
       end
     else
       covox:=0;
     end
    else
     covox:=0;
    sound(20000); nosound;
    t:=port[$61];
    assign(f,paramstr(1));
    {$I+}
    reset(f,1);
    blockread(f,b,64500,i);
    close(f);
    spd:=b[25]+(word(b[26]) shl 8);
    spd:=$fffffff div longint(spd);
    if covox = 0 then
     begin
     spd:=spd shr 7;
     port[$43]:=0;
     for i1:=44 to i do
       begin
       b1:=b[i1];
       asm
        mov al,b1
        shr al,6
        and al,2
        out 61h,al
        in al,40h
        xchg al,ah
        in al,40h
        xchg al,ah
        mov dx,ax
        @m1:
        xor al,al
        out 43h,al
        in al,40h
        xchg al,ah
        in al,40h
        xchg al,ah
        push dx
        sub dx,ax
        cmp dx,spd
        pop dx
        jb @m1
        end;
       end;
     end
    else
     begin
     spd:=spd shr 7;
     port[$43]:=0;
     for i1:=44 to i do
       asm
        lea bx,b
        mov dx,covox
        add bx,i1
        dec bx
        mov al,[bx]
        out dx,al
        in al,40h
        xchg al,ah
        in al,40h
        xchg al,ah
        mov dx,ax
        @m1:
        xor al,al
        out 43h,al
        in al,40h
        xchg al,ah
        in al,40h
        xchg al,ah
        push dx
        sub dx,ax
        cmp dx,spd
        pop dx
        jb @m1
        end;
     end;
    port[$61]:=t;
    end.


    Я полагаю, что если перенаправить данные передаваемые на спикер в файл (первый asm блок), то Вы, Петр, получите именно то, что и хотели, собственно массив "частота-длительность".

    P.S.
    В код я не особо вникал ;)
  • AndreyV © (24.11.08 21:00) [23]
    > [13] Anatoly Podgoretsky ©   (24.11.08 12:19)

    Насчёт нот оно так. Я говорю о произвольном спектре. Если автору нужет кошачий крик, надо ШИМ.

    > [17] Труп Васи Доброго ©   (24.11.08 16:31)

    А зачем спектр знать? Он же в звуке не собирается ничего менять.

    > [18] Petr V. Abramov ©   (24.11.08 18:33)

    А что там писать. Вот у тебя есть оцифрованный звук из WAV файла например, он представлен в Импулсно-кодовой модуляции (ИКМ), т.е. замерянными через рвные интервалы времени уровнями сигнала. Спектр такого сигнала будет в полосе 1/(T*2) Гц T - длительность интервала, для кота много не надо. Для вывода на спикер, тебе его надо преобразовать в ШИМ. Для кождого отсчёта делаешь очередную выборку из массива, ставишь 1 на порте спикера ждёшь некоторое время пропорциональное уровню, ставишь 0. для полосы 10000 Гц и разрядности 8 бит получится 10000*2^8=25600000 Гц это для оценки быстродействия процессора.

    А может на контроллере ЦАП имеется?
  • AndreyV © (24.11.08 23:30) [24]

    > [8] AndreyV ©   (23.11.08 22:49)
    > Был драйвер под Win3

    > [14] iZEN ©   (24.11.08 14:22)
    > Был драйвер под Win95, который эмулировал звуковую карту
    > и пускал все звуки на спикер.

    А может и Win95.
    Ещё был эмулятор Sound Blaster под DOS. И даже работал с некоторыми играми. Он эмулировал только ЦАП, а не ФМ синтезатор.

    > для полосы 10000 Гц

    Имелось ввиду для частоты квантования 10000 Гц, полоса будет до 5000 Гц, что для кота может даже и лишнее.
  • AndreyV © (25.11.08 00:01) [25]
    > [24] AndreyV ©   (24.11.08 23:30)
    > до 5000 Гц, что для кота может даже и лишнее.

    Прочитал о вокальных данных одомашненых представителей семейства кошачих, оказывается слух 10-80000 Гц и голос может быть за пределами человеческого восприятия. Вот так-то.
    http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%88%D0%BA%D0%B0
  • Petr V. Abramov © (25.11.08 00:24) [26]

    > AndreyV ©   (24.11.08 21:00) [23]
    > А может на контроллере ЦАП имеется?

    а хрен его знает, что там имеется, есть Device Basic, в нем есть ф-ции "пищать на такой-то частоте", "заткнуться", и есть что-то типа OnTimer


    > Andy BitOff ©   (24.11.08 20:35) [22]

    я правильно понимаю, что приведенный код проигрывает wav через спикер?
    тогда это интереснее.
  • Petr V. Abramov © (25.11.08 00:25) [27]

    > Прочитал о вокальных данных одомашненых представителей семейства
    > кошачих, оказывается слух 10-80000 Гц

    слушать будут не кошки, а люди :)
  • Petr V. Abramov © (25.11.08 01:06) [28]

    > Если автору нужет кошачий крик, надо ШИМ.

    автору пофиг, ШИМ или ХАИМ, нужны исходные данные для паршивого качества мяукания в виде "частота-длительность"
  • AndreyV © (25.11.08 01:31) [29]
    > [28] Petr V. Abramov ©   (25.11.08 01:06)

    Ну тогда действительно прийдётся сдвигать спектр, это посложнее самого вывода, а вывод остаётся как я описал. Но судя по
    > [28] Petr V. Abramov ©   (25.11.08 01:06)
    > в нем есть ф-ции "пищать на такой-то частоте", "заткнуться",
    > и есть что-то типа OnTimer

    есть ли там такая возможность. Что за девайс такой?
  • Petr V. Abramov © (25.11.08 01:42) [30]

    > AndreyV ©   (25.11.08 01:31) [29]
    > есть ли там такая возможность.

    есть. пищит-не-пищит в соответствии с программой, проверено :)

    > Что за девайс такой?

    терминал сбора данных. сканер штрих-кода с сауной и видеозалом :)
    девайс достался по наследству, других нет, поэтому про WinCE не травмируйте душу, господа, нет ее там, и линуха там нет, и дос нет. Есть Terminal Basic, для своих задач совсем недурно сделанный :)
  • AndreyV © (25.11.08 02:01) [31]
    > [30] Petr V. Abramov ©   (25.11.08 01:42)
    > есть. пищит-не-пищит в соответствии с программой, проверено

    Ну это может генератр включается/выключается, надо чтобы был доступ к динамику, как на PC сделано.
  • Petr V. Abramov © (25.11.08 02:07) [32]

    > как на PC сделано.

    сделано на Тайване, как на PC не сделано, надо частота-длительность
  • тимохов (25.11.08 02:12) [33]
    мож ту и спрашивал, вот спрошу в твоем стиле (почти)

    а нахрена?
  • Petr V. Abramov © (25.11.08 02:24) [34]
    а на того, что у терминала счас вырисовывается типы сигналов:
    -ты молодец, после сканирования того, что надо
    -ты молодец, но сканируешь не то
    -оповещение
    это ессно, можно разрулить на уровне 1-2-3 писка, но: в цехе шумно, считать до трех умеют не все :)
    ессно, если ниче не нарою, на уровне на уровне "1-2-3 писка" и сделаю, уже готово, но хочется как лучше :))))
  • AlexKniga © (25.11.08 12:20) [35]
    Возми нотные записи. На молодец - играешь веселую мелодию. Плохиш - траурную. Оповещение - третью.
    Как от нот перейти к частотам-длительностям написано выше.
  • Andy BitOff (PPC) (25.11.08 12:30) [36]
    Petr V. Abramov © (25.11.08 00:24) [26]
    Да. Так написано, но я не пробовал.
  • Ega23 © (25.11.08 12:37) [37]

    > Возми нотные записи. На молодец - играешь веселую мелодию.
    >  Плохиш - траурную. Оповещение - третью.


    Procedure BadSound;
    begin  
     Windows.Beep(100,200);
    end;

    Procedure GoodSound;
    begin  
     WinProcs.Beep(500,200);
    end;



    Практика показывает, что этого достаточно.
  • Petr V. Abramov © (25.11.08 17:18) [38]

    > Ega23 ©   (25.11.08 12:37) [37]


    > Windows.Beep(100,200);

    НЕТУ WINDOWS У ДЕВАЙСА
  • Ega23 © (25.11.08 17:27) [39]

    > НЕТУ WINDOWS У ДЕВАЙСА


    А что есть? Управление динамиком есть? Просто ещё на старом добром Turbo Pascal 5.5 я, помнится, "Кан-кан" в заставку программы бипами вставлял.
 
Конференция "Прочее" » Звуки для PC-спикера
Есть новые Нет новых   [134448   +1][b:0][p:0.002]