Форум: "Media";
Текущий архив: 2011.01.30;
Скачать: [xml.tar.bz2];
ВнизВыковырять инфу из 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 вся ветка
Форум: "Media";
Текущий архив: 2011.01.30;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.006 c