Конференция "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-файл ?)


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


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

    А причем здесь таймер ?)
  • AL2002_ (19.02.08 17:40) [20]
    >Как можно определить частоты, громкости и длительности хрюканья
    >борова, оцифрованного и записанного в wav-файл ?)

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

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

    >А причем здесь таймер ?)
    Не таймер, а спикер.
  • Jeer © (19.02.08 17:53) [21]

    > AL2002_   (19.02.08 17:00) [18]


    Случай с тобой тяжелый, однако.
    С такой кашей в голове шашлык нэ вийдет:)
  • AL2002_ (19.02.08 18:11) [22]
    >Случай с тобой тяжелый, однако.
    >С такой кашей в голове шашлык нэ вийдет:)

    Если ответить нечего, то обычно переходят на личности.
  • AL2002_ (19.02.08 18:20) [23]
    А вопрос-то очень прост.

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

    Неужели никто не может сделать перевод из асма в паскаль?
  • AL2002_ (19.02.08 19:10) [24]
    А белый шум изобрел я:
    for i:=0 to 10000 do windows.Beep(random(10000)+500,1);
    (с) easy из чата
  • @!!ex © (19.02.08 19:48) [25]
    > [23] AL2002_   (19.02.08 18:20)

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


    Ну, если     shr al,6 и and al,2 это фурье, то я, конечно, рад.
    Но мне надо это на нормальный дельфийский код, без asmа, перевести.
  • @!!ex © (19.02.08 20:21) [27]
    > [26] AL2002_   (19.02.08 20:11)

    ну так переведи. команды - элементарные. Если не знаешь асма - идешь в гугль и смотришь значение каждой команды. и переводишь на дельфи.
  • Сергей М. © (19.02.08 20:34) [28]

    > AL2002_   (19.02.08 18:11) [22]


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


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


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

    Классически он управляется каналом таймер-чипа 8253, к этой "классике" как раз и относится тот код, который ты тут привел, ничерта не понимая происходящего в нем)
  • Сергей М. © (19.02.08 20:37) [29]
    Удалено модератором
  • Compiler © (19.02.08 23:47) [30]
    А по-моему где-то были компоненты для чтения тегов. Сам не использовал, но имеются.
  • AL2002_ (19.02.08 23:58) [31]
    Сергей М. ©   (19.02.08 20:34) [28]
    >А спикер, по-твоему, куда воткнут - в задницу ?)

    Вам виднее.

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


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

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

    Так, получается?
  • @!!ex © (20.02.08 00:22) [32]
    > [31] AL2002_   (19.02.08 23:58)

    Пока поулчается, что вы сами не можете решить простейшую задачу(перевод асм кода в дельфи), которая школьник с 1 месяцем информатики решает без проблем, тупо смотря в справочник по асму.
  • Сергей М. © (20.02.08 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 © (21.02.08 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 минут работы и никаких компонентов
  • Сергей М. © (21.02.08 08:23) [35]

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


    Мне это хорошо известно.
    Простой файл или составной - по барабану.
    Ни в одном заголовке ни одной из частей нет той инф-ции, которую автор страстно желает иметь)
  • Jeer © (21.02.08 15:58) [36]

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


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

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

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

    Именно эти и предлагалось неоднократно заняться автору сабжа, но - каша в голове.
    А вот когда научится готовить бастурму, тогда и шашлык может выйти.
    А может и не выйти из-за несварения:)
  • Сергей М. © (21.02.08 16:39) [37]

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


    ))

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

    Кашу ту, изрядно пересоленную "эквалайзерами", СайндФоржами и прочей не имеющей отношения к делу лабудой, будет действительно трудновато превратить в шашлык)
  • Jeer © (21.02.08 17:43) [38]

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


    "Если не мы, то кто ? " (С)
    "В любое время, в любом месте - любая задача" (С)
  • AL2002_ (21.02.08 19:29) [39]
    Вопщем, никто ничо не смог. На том и закончим.
  • Сергей М. © (21.02.08 20:39) [40]

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


    ну а как тут чо смочь, если ты фригидный ?)
  • wicked © (22.02.08 00:16) [41]
    > Jeer ©   (21.02.08 15:58) [36]

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

    аргументация должна быть безупречной - только и всего
  • Jeer © (22.02.08 09:52) [42]

    > wicked ©   (22.02.08 00:16) [41]
    > аргументация должна быть безупречной - только и всего


    В рамках озвученного заголовка она безупречна.
  • AL2002_ (22.02.08 15:41) [43]
    >Сергей М. ©   (21.02.08 20:39) [40]
    >ну а как тут чо смочь, если ты фригидный ?)

    Ну если я фригидный, то вы импотент от программирования.
    А чтобы снова не начинать переходить на личности, рекомендую перечитать вопрос (скорее даже просьбу) и закрыть это окно в браузере, особенно если причина в том, о  чом я выше написал.
  • Сергей М. © (23.02.08 12:58) [44]
    Судя по приведенному коду, в упомянутом Chimes8.wav нет никакого PCM, т.е. это не классический wav-формат, а хрень, заточенная под одноголосую меандровую пищалку.

    Продолжай париться, идиот)
  • AL2002_ (23.02.08 19:28) [45]
    >Судя по приведенному коду, в упомянутом Chimes8.wav нет никакого PCM

    Во маразм. 8))))))

    >Продолжай париться, идиот)

    Здесь еще есть модераторы? Просьба удалить №44.
  • Сергей М. © (23.02.08 19:42) [46]

    > Во маразм


    Угу.

    Такие ламеры как ты вообще редкость)

    Тут

    http://www.vmgames.com/ru/3/pc-sound.txt

    еще один ликбез.

    Хотя , пожалуй, и он будет что мертвому припарка)
  • DeBUGger13 (23.02.08 20:57) [47]
    Мистер AL2002_,
    главный вопрос на самом деле в том, зачем вам с вашими познаниями в области звуковых форматов и обработки звука понадобилось проигрывать
    "хрюканье и прочее в звуке" с помощью "спукера" воткнутого хЗ куда, которым как верно подметил уважаемый
    > Сергей М.

    управляет таймер на микросхеме 8253, которой и управляет кусок asmовского кода(например, 61h - выбор источника звука, переключение на спикер). Но я думаю и в паскалевском, что-то выпущено, тк значение  b1 всегда не определено.Для ЭТОГО КОДА файл данных не PCM полюбому, там наверняка должно быть инфа о (длительности и частоте сигнала)..()().
    К
    > AL2002_

    если чо этот код WAV не играет.


    > > Во маразм
    >
    >
    > Угу.
    >
    > Такие ламеры как ты вообще редкость)

    Сomplitly
    Agree
    with you.
  • AL2002_ (26.02.08 19:44) [48]
    >DeBUGger13  (23.02.08 20:57) [47]
    >Мистер AL2002_,
    >главный вопрос на самом деле в том, зачем вам с вашими познаниями в
    >области звуковых форматов и обработки звука понадобилось проигрывать


    Ламер тут не один, а двое. Один вы, а второй тот кто идиотами бросается. 8))

    Причом ламеры - агрессивные. Вместо того чтоб помалкивать, когда правильного ответа нетути, начинают обзываться и флудить. Худшая разновидность. 8))

    > http://www.vmgames.com/ru/3/pc-sound.txt
    >еще один ликбез.


    Весьма отдаленное отношение к теме.

    Вы задачу хоть поняли?
    Мне нужно проиграть звук из wav ЧЕРЕЗ КОМПОНЕНТ ТИПА Ttonegen или TSound, аналогично выводу его на спикер, судя по вышеприведенному образцу кода.

    ЭТО - ВОЗМОЖНО?! 8)

    ЗЫ
    сергею и дебугеру:
    если не знаете - не отвечайте. В дебильных сообщениях надобности нет. Их здесь и так хватает.
  • @!!ex © (26.02.08 20:02) [49]
    > [48] AL2002_   (26.02.08 19:44)

    Вы еще 10 сообщений назад предложили закончить.
    Может стоит закончить и свалить отсюда на форум, где будут более "умные" люди, которые вам помогут?

    P.S>
    Хотя есть основания полагать, что на другом форуме тоже не помогут, в силу специфики мышления автора.
  • Jeer © (27.02.08 09:34) [50]

    > AL2002_   (26.02.08 19:44) [48]


    Cрочно на http://torry.net  и купить компонент TMozg.
    Там распродажа.
  • Сергей М. © (27.02.08 10:34) [51]

    > Мне нужно проиграть звук из wav ЧЕРЕЗ КОМПОНЕНТ ТИПА Ttonegen
    > или TSound


    Ну и проигрывай себе "ЧЕРЕЗ КОМПОНЕНТ ТИПА", в чем проблема-то ?)
    К чему ты тычешь сюда asm-код ? Какое отношение он имеет к каким-то там компонентам ?


    > Весьма отдаленное отношение к теме


    А это что по-твоему ?
    (цитата оттуда)

    3.3. Таймер и методы вывода звука на спикер PC.
    П.2. Программирование таймера и логика спикера PC.
    Рис. 2  Вывод звука на спикер PC методом ШИМ-ЦАП.


    Мда ...Тупость, достойная кунсткамеры)
  • Сергей М. © (27.02.08 11:05) [52]

    > AL2002_


    Еще раз для особо одаренных: эти компоненты генерируют волновую форму звукового сигнала в формате ИКМ (или PCM, если угодно). "Звуковая карта", на работу c которой ориентированы эти самые компоненты, имеет полноценный ИКМ ЦАП.

    PC-спикер же не имеет никаких ЦАП, это простейший электродинамический преобразователь, напрямую подключенный к одному из каналов генератора прямоугольных импульсов на базе стандартного PC-таймера.

    Программный конвертер ИКМ -> ШИМ, упрощенно говоря, как раз и необходим в кач-ве этого самого недостающего звена под названием ЦАП, без него поставленная задача НЕреализуема !

    Вот тебе как раз и предлагается реализовать самостоятельно этот конвертер (хоть на Паскале, хоть на черте лысом - абсолютно фиолетово на чем его реализовывать). А уж как использовать этот результат для управления портами таймера - это последнее дело, здесь уже разговор действительно пойдет о возможной реализациии этого каскада на asm.
  • AL2002_ (05.03.08 20:33) [53]
    2 Jeer, СерГейМ.

    Вы либо тупите, либо издеваетесь. До сих пор суть не поняли, что мне требуется?

    >Ну и проигрывай себе "ЧЕРЕЗ КОМПОНЕНТ ТИПА", в чем проблема-то ?)
    >К чему ты тычешь сюда asm-код ? Какое отношение он имеет к каким-то
    >там компонентам ?


    Какой фонтан интеллекта однако. 8)))))
    В том коде приведен образец того, как ВЫКОВЫРИВАЕТСЯ инфа из Wav-ки. 8))

    >Программный конвертер ИКМ -> ШИМ, упрощенно говоря, как раз и
    >необходим в кач-ве этого самого недостающего звена под названием ЦАП,
    >без него поставленная задача НЕреализуема !


    Т.е. асм-код отправляет команды таймеру, и тот уже сам справляется с внутренним динамиком, так?

    =======

    @!!ex ©   (26.02.08 20:02) [49]
    «Ну а я-то чего сюда полез? Я ж и читать-то не умею» ® народная мудрость
    Это намекъ.
  • Сергей М. © (06.03.08 08:59) [54]

    > том коде приведен образец того, как ВЫКОВЫРИВАЕТСЯ инфа
    > из Wav-ки


    Ну выковыривается, и что ?
    Получили в результате ИКМ-данные, а где в приведенном коде преобразование ИКМ->ШИМ ? Нет его)


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


    Так.
    Но для осуществления задуманного эти самые "команды" должны быть результатом ИКМ->ШИМ-преобразования. А оно где ? Нет его)

    Ну а раз нет его, то и об "адаптации" не может идти и речи - адаптировать попросту нечего за неимением самого главного)

    Еще вопросы имеются ?)
  • Сергей М. © (06.03.08 11:15) [55]
    Кстати, в

    http://forum.sources.ru/index.php?showtopic=94967&hl=

    такой же как ты страдалец пробегал)
  • Jeer © (06.03.08 11:54) [56]
    Ликбез по DSP ( ЦОС).

    Предположим у нас есть акустическая гитара и мы тронули три струны.
    В воздухе появился композитный акустический сигнал, состоящий из трех частот (упрощенно), соответствующих звучанию каждой из струн.
    Если мы подключим микрофон на вход осциллографа, то увидим красный сигнал.
    Подключим микрофон на вход звуковой карты компьютера и сделаем запись.
    АЦП звуковой карты преобразует аналоговый сигнал от микрофона в амплитудно-кодированный сигнал с использованием АКМ (амплитудно-кодовая модуляций), т.е., с частотой дискретизации по времени аналоговый сигнал преобразуется в код и возникает последовательность цифровых значений. Число их, по другому длина массива, определяется длительностью звучания поделенной на интервал дискретизации ( величина, обратная частоте дискретизации). Именно эта последовательность кодов находится в файле wave формата (упрощаем).
    Если эту последовательность кодов подать на ЦАП и посмотреть его выход осциллографом, то мы увидим синий сигнал.
    В данном случае, для наглядности, виртуальный АЦП выбран 4-х разрядным и мы хорошо видим ступеньки дискретности по амплитуде.
    Наша задача, однако, другая.
    Нам надо с'имитировать исходный аналоговый сигнал на внутреннем динамике.
    В чем отличие воспроизведения звука на динамике и на выходе звуковой карты ?
    Дело в том, что на выходе звуковой карты стоит многоразрядный ЦАП и последовательность цифровых кодов довольно точно преобразуется в синтезированный аналоговый сигнал.
    Однако на динамик сигнал может быть подан в виде одноразрядного потока импульсных данных одной амплитуды.
    Т.е. мы не можем управлять амплитудой сигнала непосредственно, т.к. выход таймера может быть только в двух состояниях: высоком или низком.
    Поскольку динамик не предназначался для качественного воспроизведения звука, такой способ вполне пригоден для оповещения
    звуковыми сигналами и т.п.
    Однако ведь хочется же ! Ну, если хочется, то - можно.
    С этой целью необходимо преобразовать цифровой поток данных из многоразрядного вида в одноразрядный путем использования широтно-импульсной модуляции, т.е. текущее значение цифрового сигнала кодируется длительностью одноразрядного импульса.
    Почему же мы можем рассчитывать, что услышим звук с качеством близким к исходному ?
    Ведь такой однобитный поток явно приводит к появлению широкого спектра гармоник.
    Дело в том, что динамик, как электромеханическая система, обладает определенной инерционностью и результирующее колебание диффузора будет сглаженным. Кроме того, выбирая частоту преобразования достаточно высокой, можно увести побочные продукты за пределы звукового диапазона.
    Как же сделать пребразователь с ШИМ ?
    С функционально точки зрения - все элементарно.
    На один вход компаратора (элемента сравнения) подается исходный сигнал ( последовательность кодов), а на другой - пилообразный сигнал с частотой в десятки раз превышающую максимально интересующую нас частоту в исходном сигнале.
    На выходе компаратора образуется однобитный поток с широтной модуляцией (голубой сигнал).
    Если подать такой сигнал на простейший апериодический фильтр (RC-цепочка), то на его выходе получим приближенный к исходному сигнал. (оранжевый сигнал).
    Поскольку цель этого примера учебная, то параметры дискретизаций выбирались исходя из получения наглядной картины.
    Для реальной системы качество можно повысить до желаемого уровня.

    Так, что теперь дело осталось за малым - реализовать эти идеи на программном уровне.
    Это автору сабжа домашнее задание.

    Snap:
    http://slil.ru/25551426
  • Сергей М. © (06.03.08 12:25) [57]

    > Jeer ©   (06.03.08 11:54) [56]


    Сдается мне, что совместные усилия по ликбезу в очер.раз окажутся там же где и прежде - у кота под хвостом).. Как это ни печально ..
  • Jeer © (06.03.08 12:38) [58]

    > Сергей М. ©   (06.03.08 12:25) [57]


    Тогда мы честно скажем, что сделали все, что могли и хотели.
    А чего не хотели, того и не сделали:)
  • AL2002_ (07.03.08 01:24) [59]
    2СергМ.
    >Но для осуществления задуманного эти самые "команды" должны быть
    >результатом ИКМ->ШИМ-преобразования. А оно где ? Нет его)

    Т.е. преобразование данных (тех, что в блоке байтов из wav) идет на аппаратном уровне. Так?
  • Сергей М. © (07.03.08 09:49) [60]

    > преобразование данных (тех, что в блоке байтов из wav) идет
    > на аппаратном уровне. Так?
    >


    Если речь идет о ЦАП, то да. Практически любая, даже самая задрипаная бытовая аудиокарта имеет на своем борту аппаратный ЦАП, "умеющий" работать с АКМ-данными (см. [56]). Нет карты  - нет и ИКМ ЦАП. А раз нет ИКМ ЦАП, но есть спикер (считай что это ШИМ ЦАП), то без преобразования ИКМ->ШИМ никак не обойтись.
  • AL2002_ (08.03.08 22:14) [61]
    >то без преобразования ИКМ->ШИМ никак не обойтись
    ...и программно преобразовать волну в герцы?....... не?.....
  • Сергей М. © (09.03.08 12:28) [62]

    > и программно преобразовать волну в герцы?....... не?


    Тебе уже все разжевано.
  • AL2002_ (13.03.08 01:08) [63]
    >Сергей М. ©   (09.03.08 12:28) [62]
    >Тебе уже все разжевано.

    Знаетее, что меня больше всего бесит?
    Vahmurka ©   (16.08.02 11:32)


    А то, что ответы на вопросы Великие Мастера Дельфи присылают таким образом, что понять их можно только перевернув сотни книг по программированию, и научившись программировать гараздо лучше чем, отвечающий на этот вопрос человек. Тогда уже и нафиг мне не нужно задавать свой вопрос. Люди думаю так: "Ну раз я понимаю значит и ты поймешь". А простому начинающему программисту остаётся только репу чесать. Один мне на вопрос "Как соединить два компа по LPT?" выдал тераду какихто бесполезных для меня комманд на ассемблере. Блин как буддто я его про ассемблер спрашивал. А другой мне прислал файл с описанием работы портов на железном уровне... Ну не идиоты?

    ==========

    ЗЫ

    а действительно, где И. Шевченко, А. Подгорецкий?
    Почему молчите? Мне помощь нужна. 8)
  • Jeer © (13.03.08 10:08) [64]

    > простому начинающему программисту

    надо начинать с простых вещей, при этом постепенно

    > перевернув сотни книг по программированию, и научившись
    > программировать

    отвечать на форумах за Мастера:)
  • Сергей М. © (13.03.08 10:22) [65]

    > Знаетее, что меня больше всего бесит?
    > Vahmurka


    Вахмурка многих "бесит", не только тебя)
  • AL2002_ (13.03.08 18:22) [66]
    №№64, 65

    Вы не шарите.
    Это - классика.
  • Сергей М. © (13.03.08 19:21) [67]

    > Вы не шарите


    Куды ж нам, крестьянам, в лаптях по асфальту
  • AL2002_ (26.03.08 21:43) [68]
    Up

    тема конвертации звуковых волн в очередность герцов не раскрыта.
  • Сергей М. © (27.03.08 08:57) [69]
    Возьми да "раскрой" сам.
    Бесплатный ликбез давно окончен.
  • AL2002_ (07.04.08 22:30) [70]
    > Сергей М. ©   (27.03.08 08:57) [69]
    >Возьми да "раскрой" сам.
    >Бесплатный ликбез давно окончен.


    Вообще-то вопрос этот не к вам. Да и тема не для вас.
    Вы ее только зафлудили напрасно. :(
  • Сергей М. © (08.04.08 08:30) [71]
    Ба, да вы все еще кипятите ?!)))
  • AL2002_ (09.04.08 18:05) [72]

    > Сергей М. ©   (08.04.08 08:30) [71]
    > Ба, да вы все еще кипятите ?!)))


    Хватит флудить.
  • Pavia © (09.04.08 18:22) [73]
    AL2002_   Помойму вам на все дали ответ чего вы еще хотите? Чего неясного?
  • Сергей М, (09.04.08 20:48) [74]

    > чего вы еще хотите?


    Что хочет идиот ?)

    Он хочет


    > адаптировать этот код под дельфи, чтобы можно было все это
    > дело пропищать под ХР-виндой


    При этом он еще и туп.
  • AL2002_ (26.04.08 14:35) [75]
    Сергей М, зачем вы тут флудите?

    Я вопрос нормальным людям задавал, а не психам и хамам.

    ЗЫ
    Вопрос, хстате, закрыт.
    Уже давно разобрался.
  • Сергей М, (26.04.08 20:27) [76]

    > AL2002_   (26.04.08 14:35) [75]


    > зачем вы тут флудите?


    За надом)


    > вопрос нормальным людям задавал


    Ликбез тоже нормальным людям был адресован, а не ламерам)


    > разобрался


    Ну так сподобся уж, расскажи покажи психохамоватым флудерам, как ты его Нрешил) .. страсть как любопытно ж)
 
Конференция "Media" » Выковырять инфу из wav-ки [D6, WinXP]
Есть новые Нет новых   [134431   +15][b:0.001][p:0.002]