Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выковырять инфу из wav-ки [D6, WinXP]


Страницы:   1 2 3 4

AL2002_ ©   (2008-02-17 16:39:00) 

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

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

Вот я отрыл код для турбопаскаля, но он работает или под досом или под 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 обрубает на корню.
Просьба, адаптировать этот код под дельфи, чтобы можно было все это дело пропищать под ХР-виндой.


Jeer   (2008-02-21 15:58:00) [41]


> wicked ©   (21.02.08 03:05) [34]


Я, что-то, тоже не понял - при чем тут плохая или хорошая структура заголовка ?

Сергей привел ее только лишь для уточнения факта, что в header не содержится желаемой автору сабжа информации.

Все, что нужно автору содержится в "теле" wave-файла, а, поскольку, желаемым источником звука является системный speaker, то нет другого способа ( без hardware-переделок) "пропищать" wave-файл через speaker, кроме как преобразования амплитудно-модулированного сигнала из wave-файла (PCM) в ШИМ-сигнал для подачи на speaker через системный таймер.

Именно эти и предлагалось неоднократно заняться автору сабжа, но - каша в голове.
А вот когда научится готовить бастурму, тогда и шашлык может выйти.
А может и не выйти из-за несварения:)


Сергей М.   (2008-02-21 08:23:00) [42]


> wav файлы являются составными


Мне это хорошо известно.
Простой файл или составной - по барабану.
Ни в одном заголовке ни одной из частей нет той инф-ции, которую автор страстно желает иметь)


wicked   (2008-02-21 03:05:00) [43]

в порядке оффтопа
----
> Сергей М. ©   (19.02.08 10:12) [5]

> 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;

это плохая структура заголовка wav, не приводи её никогда, чтобы не позориться и не вводить никого в заблуждение

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

> Compiler ©   (19.02.08 23:47) [30]

> А по-моему где-то были компоненты для чтения тегов. Сам
> не использовал, но имеются.

20 минут работы и никаких компонентов


Сергей М.   (2008-02-20 09:56:00) [44]


> рассказывая мне при этом, что в wav-файле нету сведений
> о частоте, громкости и прочей инфе о звуке?


SampleRate - это частота дискретизации.

BytesPerSecond - кол-во байт, которыми представлен оцифрованный звук длительностью в секунду.


> Хрюканье и прочее в звуке и есть совокупность частот


Угу. А куст есть совокупность веток, произрастающих из одного корня)

Вот тебе ликбез:

http://www.google.ru/search?q=%D0%BF%D0%BE%D1%80%D1%82%D1%8B+%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D0%B0+8253&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a
http://forum.sources.ru/index.php?showtopic=94967&hl=
http://www.progiblog.ru/cgi-bin/content.pl?id=665
http://pascal.sources.ru/sound/index.htm

Вот как только разберешься в необходимости реализации конвертераИКМ/АДИКМ -> ШИМ (хоть на Паскале, хоть на чем угодно), так и милости просим)

А asm здесь ни причем : вывод в порты управления спикером готовойинф-ции (т.е. результата работы этого самого конвертера) - последнее и самое простое дело.


@!!ex   (2008-02-20 00:22:00) [45]

> [31] AL2002_   (19.02.08 23:58)

Пока поулчается, что вы сами не можете решить простейшую задачу(перевод асм кода в дельфи), которая школьник с 1 месяцем информатики решает без проблем, тупо смотря в справочник по асму.


AL2002_   (2008-02-19 23:58:00) [46]

Сергей М. ©   (19.02.08 20:34) [28]
>А спикер, по-твоему, куда воткнут - в задницу ?)

Вам виднее.

>Классически он управляется каналом таймер-чипа 8253, к этой "классике"
>как раз и относится тот код, который ты тут привел, ничерта не понимая
>происходящего в нем)


Ну я и этому рад, конечно.
Но это не дает решения вопроса.

Значит, вы, нафлудив здесь кучу сообщений, отняв у себя и у меня немерено времени, не можете перевести код управления таймер-чипа, который в свою очередь управляет системным динамикомъ, з асма на дельфи, рассказывая мне при этом, что в wav-файле нету сведений о частоте, громкости и прочей инфе о звуке?

Так, получается?


Compiler   (2008-02-19 23:47:00) [47]

А по-моему где-то были компоненты для чтения тегов. Сам не использовал, но имеются.


Сергей М.   (2008-02-19 20:37:00) [48]

Удалено модератором


Сергей М.   (2008-02-19 20:34:00) [49]


> AL2002_   (19.02.08 18:11) [22]


Но случай, поверь уж, действительно тяжелый.


> Не таймер, а спикер.


А спикер, по-твоему, куда воткнут - в задницу ?)

Классически он управляется каналом таймер-чипа 8253, к этой "классике" как раз и относится тот код, который ты тут привел, ничерта не понимая происходящего в нем)


@!!ex   (2008-02-19 20:21:00) [50]

> [26] AL2002_   (19.02.08 20:11)

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


AL2002_   (2008-02-19 20:11:00) [51]

@!!ex ©   (19.02.08 19:48) [25]
>Я чего то не понимаю, или в асмовском коде как раз и делается
>преобразование Фурье...


Ну, если     shr al,6 и and al,2 это фурье, то я, конечно, рад.
Но мне надо это на нормальный дельфийский код, без asmа, перевести.


@!!ex   (2008-02-19 19:48:00) [52]

> [23] AL2002_   (19.02.08 18:20)

Я чего то не понимаю, или в асмовском коде как раз и делается преобразование Фурье...


AL2002_   (2008-02-19 19:10:00) [53]

А белый шум изобрел я:
for i:=0 to 10000 do windows.Beep(random(10000)+500,1);
(с) easy из чата


AL2002_   (2008-02-19 18:20:00) [54]

А вопрос-то очень прост.

Код відергивает инфу из wav-файла, обрабатывает ее и отсылает на спикер в виде череды частот и длительностей. Мне они и нужны.
Если бы я в асме шарил, я бы здесь темы не создавал.

Неужели никто не может сделать перевод из асма в паскаль?


AL2002_   (2008-02-19 18:11:00) [55]

>Случай с тобой тяжелый, однако.
>С такой кашей в голове шашлык нэ вийдет:)

Если ответить нечего, то обычно переходят на личности.


Jeer   (2008-02-19 17:53:00) [56]


> AL2002_   (19.02.08 17:00) [18]


Случай с тобой тяжелый, однако.
С такой кашей в голове шашлык нэ вийдет:)


AL2002_   (2008-02-19 17:40:00) [57]

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

Хрюканье и прочее в звуке и есть совокупность частот распределенных в соответствии звучания, которое разбирает наше ухо. 8))

>Они делают Фурье-преобразования.
Угу. На основе частот.

>А причем здесь таймер ?)
Не таймер, а спикер.


Сергей М.   (2008-02-19 17:07:00) [58]


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


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


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


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

А причем здесь таймер ?)


AL2002_   (2008-02-19 17:00:00) [59]

Уууууууууу...... блин как все сложно. 8(

Т.е.  выдрать очередность частот с их громкостью, длительностью и чередностью не получится? А эквалайзеры что делают?


Сергей М.   (2008-02-19 16:57:00) [60]


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


Он ее не "выковыривает", он ее расчитывает, на основании совсем другой инфы)


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо