|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.03.2012, 20:09 | #1 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
Как создать звук?
Здравствуйте!
У меня есть такой вопрос. Подскажите пожалуйста ответ на него. Дело в том, что я звук раньше не пытался создать в Delphi. и поэтому не знаю ни процедур, ни функций для этого... У меня имеется обычный массив. Мне из него надо создать звуковую дорожку по герцево. Т. е. massiv[i]= 1 герц звука. и все это соответственно циклом заполняется и получается звуковая дорожка. Абсолютно не важно что это будет за звук, что там играть будет, фактически там ничего играть и не будет в итоге, должен получиться просто набор быстрых пиков. Мне не важна высота звука. в общем должно получиться простое заполнение звука, где-то есть 1 пик длинною в 1 герц, а дальше допустим его нет, потом снова есть и тд. Сможет ли мне кто-то подсказать какими командами этого добиться? Повторюсь, что я раньше не пытался создавать звук в делфи, поэтому не знаю ни одной подобной команды и обращаюсь за помощью... |
04.04.2012, 08:42 | #2 |
Homo Interneticus
Форумчанин
Регистрация: 04.03.2011
Сообщений: 611
|
Beep - функция API Windows, синхронно воспроизводит звук простого тона через динамик и не возвращается до окончания звука.
Модуль: Windows Объявление: function Beep(dwFreq, dwDuration: cardinal) :boolean; Описание: Функция Beep синхронно воспроизводит звук простого тона через динамик и не возвращается до окончания звука. Если компьютер имеет звуковую карту, то воспроизводится звук, сопровождающий события по умолчанию. При отсутствии звуковой карты воспроизводится стандартный звук через динамик. Параметр dwFreq задает частоту звука в герцах. Он может иметь значение в диапазоне от 37 до 32 767 (от 0x25 до 0x7FFF). Параметр dwDuration устанавливает длительность звука в миллисекундах. При успешном выполнении функция возвращает ненулевое значение. При аварийном завершении возвращается нуль. Тогда более развернутую информацию об ошибке можно получить с помощью вызова функции GetLastError. Параметры функции устанавливаются только для Windows NT\2000 и более старших версий. В Windows 95 и 98 они игнорируются, т.е. этих версиях Цштвщцы данную функцию не имеет смысл использовать. Более удобная функция API Windows - MessageBeep. При компиляции Delphi путает данную функцию с процедурой Beep. так что в вызове функции надо давать ссылку на модуль Windows, например: WindowsBeep(100,1000); Последний раз редактировалось astecenko; 04.04.2012 в 09:19. |
04.04.2012, 09:35 | #3 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
WaveForm Audio/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
04.04.2012, 09:59 | #4 | |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
Цитата:
Вопрос был такой: "должно получиться простое заполнение звука, где-то есть 1 пик длинною в 1 герц, а дальше допустим его нет, потом снова есть и тд" и так по 90 герц в секунду допустим. Последний раз редактировалось IgoRek125; 04.04.2012 в 11:55. |
|
04.04.2012, 10:01 | #5 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
поэксперементировал с функцией Beep ничего не вышло, не хочет работать с описанием параметров(( , но он мне в принцепи не особо и поможет, видимо
Последний раз редактировалось IgoRek125; 04.04.2012 в 12:22. |
04.04.2012, 10:58 | #6 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
|
04.04.2012, 12:03 | #7 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
Допустим программа создаст wav дорожку. Как заполнить ее, имея данные программы ???
|
04.04.2012, 12:04 | #8 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
Вадим Мошев, уже исправил)))
|
04.04.2012, 13:08 | #9 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
raxp, можно поподробнее?
|
04.04.2012, 15:48 | #10 |
Пользователь
Регистрация: 20.03.2012
Сообщений: 47
|
Вот нашел интересный текст программы в интернете. Процедура выполняет создание звукового файла в памяти (то есть в памяти создается заголовок, затем идут данные - все точно так же, как в обычном wav-файле), сохраняет его на диск и одновременно начинает воспроизводить.
Я немного не допонял большую часть вещей. Кто-нибудь может расшифровать что есть что? procedure tform1.button1click(sender: tobject); const fr = 11025; {Частота в герцах} len = 1; {Длина звука в секундах} procedure getdata(ch: smallint; index: integer; var res); var v: smallint absolute res; // конечное значение amp: single; // амплитуда begin if ch = 0 then amp := sin(index * 2 * pi / (fr * len)) else amp := cos(index * 2 * pi / (fr * len)); v := round(amp * (random(60000) - 30000)); end; var m: tmemorystream; // поток для хранения информации в памяти f: tfilestream; // Поток для созранения файла begin m := nil; f := nil; try m := tmemorystream.create; randomize; savesound(m {Куда записывать}, round(fr * len) {len секунд}, fr {частота}, 16 {16 бит}, 2 {2 каналла}, @getdata); // Воспроизведение звука: if not playsound(m.memory, 0, snd_memory or snd_loop or snd_async) then showmessage('can not play the sound'); f := tfilestream.create('ex.wav', fmcreate); m.position := 0; f.copyfrom(m, m.size); finally m.free; f.free; end; end; |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Звук Звууууук Звук ... не рабоает звук.. | Zvuuuuk | Компьютерное железо | 2 | 22.01.2011 17:53 |
Тюнер для гитары в делфи. (Считывать с микрофона звук и выводить какой частоты этот звук). | Серего | Мультимедиа в Delphi | 8 | 12.01.2011 14:39 |
создать стерео звук | FAiver | Мультимедиа в Delphi | 3 | 06.01.2009 11:09 |
звук и делфи, левый правый звук | snusmumric | Win Api | 2 | 29.10.2007 11:10 |
Возможно ли средствами Delphi создать "звук" | V_X | Помощь студентам | 2 | 19.12.2006 18:24 |