![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выковырять инфу из wav-ки [D6, WinXP]
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]
> он может выковыривать инфу про частоты и тепе
Он ее не "выковыривает", он ее расчитывает, на основании совсем другой инфы)