Конференция "Media" » Выковырять инфу из wav-ки [D6, WinXP]
 
  • AL2002_ (17.02.08 16:39) [0]
    Просьба подсказать, как или чем можно извлечь инфу о частоте, длительности, громкости и тэпэ из звукового файла.

    Задача: проиграть звуковой файл спукером.

    Вот я отрыл код для турбопаскаля, но он работает или под досом или под 98-й. ХР посылаетъ.

    Соответственно задача состоит в том, чтобы адаптировать этот код под дельфи и пропищать все это дело через какой-нить компонент, типа Ttone.

    А вот код. Если бы я хоть немного шарил в асме, мож чо и понял. 8(

    procedure TForm1.Button1Click(Sender: TObject);
    Var
    f : file;
    b1: byte;
    spd : word;
    b : array [1..64500] of byte;
    I, I1:Integer;
    begin
    RichEdit1.Lines.Clear;
    assignFile(f,'Chimes8.wav');
    {$I+}
    reset(f,1);
    blockread(f,b,64500,i);
    closefile(f);
    spd:=b[25]+(word(b[26]) shl 8);
    spd:=$fffffff div longint(spd);
    spd:=spd shr 7;
    ToneGen1.Frequency:=300;
    ToneGen1.Duration:=1;
    ToneGen1.Play;
    for i1:=44 to i do
           Begin
                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;


    Под 98-й, по идее, работает. ХР все потуги на прямое управление железо через int обрубает на корню.
    Просьба, адаптировать этот код под дельфи, чтобы можно было все это дело пропищать под ХР-виндой.
  • Сергей М. © (18.02.08 13:37) [1]

    > как или чем можно извлечь инфу о .. длительности,
    > громкости и тэпэ из звукового файла


    Нет там такой инфы.
  • AL2002_ (18.02.08 18:05) [2]
    >Нет там такой инфы.

    Угу, угу, совсем нету. Только в досе через спикер играет.
  • AL2002_ (18.02.08 21:34) [3]
    Чо, нихто не знает? 8)
  • antonn © (18.02.08 22:19) [4]
    длительность можно узнать узнав частоту, кол-во каналов и размер данных
  • Сергей М. © (19.02.08 10:12) [5]

    > AL2002_   (18.02.08 18:05) [2]


    > совсем нету


    Конечно нет)

    Вот структура заголовка wav-файла:

    TWaveHeader = record
    Marker1:        Array[0..3] of Char;
    BytesFollowing: LongInt;
    Marker2:        Array[0..3] of Char;
    Marker3:        Array[0..3] of Char;
    Fixed1:         LongInt;
    FormatTag:      Word;
    Channels:       Word;
    SampleRate:     LongInt;
    BytesPerSecond: LongInt;
    BytesPerSample: Word;
    BitsPerSample:  Word;
    Marker4:        Array[0..3] of Char;
    DataBytes:      LongInt;

    Глаза-то разуй - где ты тут видишь "инфу о .. длительности, громкости и тэпэ" ?)
  • AL2002_ (19.02.08 15:56) [6]
    >Глаза-то разуй - где ты тут видишь "инфу о .. длительности, громкости и тэпэ" ?)

    Куды уж мне. 8)))))

    Гы. А при чом тут заголовок? Заголовок - это 44 байта. Дальше - сабж.

    В коде так и написано: for i1:=44 to i do

    Так што.... получается, никто не шарит? В этом есть и свой позтив - значит, я в дельфи не так уж плохо разбираюсь. 8)))))
  • Сергей М. © (19.02.08 16:02) [7]

    > при чом тут заголовок?


    При том что если такая инфа и существовала бы, то она фигурировала бы не иначе как в заголовке.

    Гы.
  • Сергей М. © (19.02.08 16:09) [8]

    > AL2002


    И вообще ты занялся откровенной хнёй)

    И под NT и под Маздай существуют готовые wdm- и ks-дрова (написанные энтуазистами-идиотами), реализующие то что тебе не дает покоя.

    Дрова после инсталляции представляют в системе соотвествующий "виртуальный" аудиодивайс, и все что требуется - указать этот дивайс обычному дельфийскому TMediaPlayer'у, который без тебя разберется, где у waw-файла "инфа о частоте, длительности, громкости и тэпэ", и воспроизведет его без каких-либо ощутимых потуг с твоей стороны)
  • AL2002_ (19.02.08 16:23) [9]
    >При том что если такая инфа и существовала бы, то она фигурировала бы
    >не иначе как в заголовке.

    Давайте разберемся. Звук представляет собой очередность частот (от 22 до 44000 герц кажется), которые, попискивая в динамике разными частотами, громкостями и длительностями, создают слышимость обычного звука.

    Вот мне данные этих частот и попискиваний и нужны.
    А залоговок - он и есть заголовок. В нем инфа о скорости, битрейте и теде.
  • Сергей М. © (19.02.08 16:27) [10]

    > Звук представляет собой очередность частот (от 22 до 44000
    > герц кажется), которые, попискивая в динамике разными частотами,
    >  громкостями и длительностями, создают слышимость обычного
    > звука.


    Абракадабра жуткая.


    > данные этих частот и попискиваний и нужны


    Нет там таких "данных". И быть не может.
  • Сергей М. © (19.02.08 16:31) [11]
    Коль приспичило, займись лучше конверсией PCM/ADPCM в ШИМ.
    До asm'а и портов контроллера таймера тебе еще как до Китая раком)
  • AL2002_ (19.02.08 16:39) [12]
    >конверсией PCM/ADPCM в ШИМ.

    Конверсия для меня то же самое, что и порты контроллера таймера.

    Блин, есть же компоненты, которые, конвертируя звуковые файлы, выдают диаграммы пиков (deAudio например). Неужто нету такого компонента, которые это по-человечески мог вместо диаграммы вывести в обычных цыфрах?
  • Сергей М. © (19.02.08 16:41) [13]

    > диаграммы пиков


    Пиков чего ?
  • Сергей М. © (19.02.08 16:45) [14]

    > Конверсия для меня то же самое, что и порты контроллера
    > таймера


    И ты с такими вот "познаниями" решил взяться за эту далеко не тривиальную задачу ?

    Мда ..
  • AL2002_ (19.02.08 16:46) [15]
    >Пиков чего ?
    Звука.

    Тот же саундфордж выдает же кардиограмму звукового файла? Обрабатывает звук фильтрами? Значит, он может выковыривать инфу про частоты и тепе.
  • Сергей М. © (19.02.08 16:55) [16]

    > кардиограмму звукового файла


    ??!!!

    Какую такую "кардиограмму" ?)

    Может все же спектрограмму ?


    > он может выковыривать инфу про частоты и тепе


    Эта "кардиограмма" никак не связана с ШИМ.
  • Сергей М. © (19.02.08 16:57) [17]

    > он может выковыривать инфу про частоты и тепе


    Он ее не "выковыривает", он ее расчитывает, на основании совсем другой инфы)
  • AL2002_ (19.02.08 17:00) [18]
    Уууууууууу...... блин как все сложно. 8(

    Т.е.  выдрать очередность частот с их громкостью, длительностью и чередностью не получится? А эквалайзеры что делают?
  • Сергей М. © (19.02.08 17:07) [19]

    > выдрать очередность частот с их громкостью, длительностью
    > и чередностью не получится?


    Как можно определить частоты, громкости и длительности хрюканья борова, оцифрованного и записанного в wav-файл ?)


    > эквалайзеры что делают?


    Они делают Фурье-преобразования.

    А причем здесь таймер ?)
 
Конференция "Media" » Выковырять инфу из wav-ки [D6, WinXP]
Есть новые Нет новых   [133929   +473][b:0][p:0.002]