Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.30;
Скачать: CL | DM;

Вниз

Выковырять инфу из wav-ки   Найти похожие ветки 

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


 
Сергей М. ©   (2008-02-18 13:37) [1]


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


Нет там такой инфы.


 
AL2002_   (2008-02-18 18:05) [2]

>Нет там такой инфы.

Угу, угу, совсем нету. Только в досе через спикер играет.


 
AL2002_   (2008-02-18 21:34) [3]

Чо, нихто не знает? 8)


 
antonn ©   (2008-02-18 22:19) [4]

длительность можно узнать узнав частоту, кол-во каналов и размер данных


 
Сергей М. ©   (2008-02-19 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_   (2008-02-19 15:56) [6]

>Глаза-то разуй - где ты тут видишь "инфу о .. длительности, громкости и тэпэ" ?)

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

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

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

Так што.... получается, никто не шарит? В этом есть и свой позтив - значит, я в дельфи не так уж плохо разбираюсь. 8)))))


 
Сергей М. ©   (2008-02-19 16:02) [7]


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


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

Гы.


 
Сергей М. ©   (2008-02-19 16:09) [8]


> AL2002


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

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

Дрова после инсталляции представляют в системе соотвествующий "виртуальный" аудиодивайс, и все что требуется - указать этот дивайс обычному дельфийскому TMediaPlayer"у, который без тебя разберется, где у waw-файла "инфа о частоте, длительности, громкости и тэпэ", и воспроизведет его без каких-либо ощутимых потуг с твоей стороны)


 
AL2002_   (2008-02-19 16:23) [9]

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

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

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


 
Сергей М. ©   (2008-02-19 16:27) [10]


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


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


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


Нет там таких "данных". И быть не может.


 
Сергей М. ©   (2008-02-19 16:31) [11]

Коль приспичило, займись лучше конверсией PCM/ADPCM в ШИМ.
До asm"а и портов контроллера таймера тебе еще как до Китая раком)


 
AL2002_   (2008-02-19 16:39) [12]

>конверсией PCM/ADPCM в ШИМ.

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

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


 
Сергей М. ©   (2008-02-19 16:41) [13]


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


Пиков чего ?


 
Сергей М. ©   (2008-02-19 16:45) [14]


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


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

Мда ..


 
AL2002_   (2008-02-19 16:46) [15]

>Пиков чего ?
Звука.

Тот же саундфордж выдает же кардиограмму звукового файла? Обрабатывает звук фильтрами? Значит, он может выковыривать инфу про частоты и тепе.


 
Сергей М. ©   (2008-02-19 16:55) [16]


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


??!!!

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

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


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


Эта "кардиограмма" никак не связана с ШИМ.


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


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


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


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

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

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


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


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


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


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


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

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


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

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

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

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

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


 
Jeer ©   (2008-02-19 17:53) [21]


> AL2002_   (19.02.08 17:00) [18]


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


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

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

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


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

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

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

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


 
AL2002_   (2008-02-19 19:10) [24]

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


 
@!!ex ©   (2008-02-19 19:48) [25]

> [23] AL2002_   (19.02.08 18:20)

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


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

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


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


 
@!!ex ©   (2008-02-19 20:21) [27]

> [26] AL2002_   (19.02.08 20:11)

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


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


> AL2002_   (19.02.08 18:11) [22]


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


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


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

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


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

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


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

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


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

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

Вам виднее.

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


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

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

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


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

> [31] AL2002_   (19.02.08 23:58)

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


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


> рассказывая мне при этом, что в 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 здесь ни причем : вывод в порты управления спикером готовой инф-ции (т.е. результата работы этого самого конвертера) - последнее и самое простое дело.


 
wicked ©   (2008-02-21 03:05) [34]

в порядке оффтопа
----
> Сергей М. ©   (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-21 08:23) [35]


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


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


 
Jeer ©   (2008-02-21 15:58) [36]


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


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

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

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

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


 
Сергей М. ©   (2008-02-21 16:39) [37]


> Jeer ©   (21.02.08 15:58) [36]


))

Так точно, сэр !
Ваша поддержка, как и всегда, как нельзя кстати)

Кашу ту, изрядно пересоленную "эквалайзерами", СайндФоржами и прочей не имеющей отношения к делу лабудой, будет действительно трудновато превратить в шашлык)


 
Jeer ©   (2008-02-21 17:43) [38]


> Сергей М. ©   (21.02.08 16:39) [37]


"Если не мы, то кто ? " (С)
"В любое время, в любом месте - любая задача" (С)


 
AL2002_   (2008-02-21 19:29) [39]

Вопщем, никто ничо не смог. На том и закончим.


 
Сергей М. ©   (2008-02-21 20:39) [40]


> никто ничо не смог


ну а как тут чо смочь, если ты фригидный ?)



Страницы: 1 2 вся ветка

Текущий архив: 2011.01.30;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.01 c
2-1289650085
istok
2010-11-13 15:08
2011.01.30
мониторинг принтеров на delphi..


2-1289455404
lehich
2010-11-11 09:03
2011.01.30
заголовок окна


2-1289530925
Gu
2010-11-12 06:02
2011.01.30
Win 7 и запуск от имени администратора


2-1289652658
12
2010-11-13 15:50
2011.01.30
Напомните о контрлах. InsertControl vs Parent


2-1288961946
stenfit
2010-11-05 15:59
2011.01.30
move