Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2012, 20:09   #1
IgoRek125
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 47
По умолчанию Как создать звук?

Здравствуйте!
У меня есть такой вопрос. Подскажите пожалуйста ответ на него.
Дело в том, что я звук раньше не пытался создать в Delphi. и поэтому не знаю ни процедур, ни функций для этого...
У меня имеется обычный массив. Мне из него надо создать звуковую дорожку по герцево. Т. е. massiv[i]= 1 герц звука. и все это соответственно циклом заполняется и получается звуковая дорожка.
Абсолютно не важно что это будет за звук, что там играть будет, фактически там ничего играть и не будет в итоге, должен получиться просто набор быстрых пиков. Мне не важна высота звука. в общем должно получиться простое заполнение звука, где-то есть 1 пик длинною в 1 герц, а дальше допустим его нет, потом снова есть и тд.
Сможет ли мне кто-то подсказать какими командами этого добиться?
Повторюсь, что я раньше не пытался создавать звук в делфи, поэтому не знаю ни одной подобной команды и обращаюсь за помощью...
IgoRek125 вне форума Ответить с цитированием
Старый 04.04.2012, 08:42   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 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.
astecenko вне форума Ответить с цитированием
Старый 04.04.2012, 09:35   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

WaveForm Audio/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 04.04.2012, 09:59   #4
IgoRek125
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 47
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
Beep - функция API Windows, синхронно воспроизводит звук простого тона через динамик и не возвращается до окончания звука.
..........
..........
..........
WindowsBeep(100,1000);
Спасибо, приятель, огромное. , но мне нужно звук построить по Каждому Одному герцу, а здесь аж целый диапазон...
Вопрос был такой: "должно получиться простое заполнение звука, где-то есть 1 пик длинною в 1 герц, а дальше допустим его нет, потом снова есть и тд" и так по 90 герц в секунду допустим.

Последний раз редактировалось IgoRek125; 04.04.2012 в 11:55.
IgoRek125 вне форума Ответить с цитированием
Старый 04.04.2012, 10:01   #5
IgoRek125
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 47
По умолчанию

поэксперементировал с функцией Beep ничего не вышло, не хочет работать с описанием параметров(( , но он мне в принцепи не особо и поможет, видимо

Последний раз редактировалось IgoRek125; 04.04.2012 в 12:22.
IgoRek125 вне форума Ответить с цитированием
Старый 04.04.2012, 10:58   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от IgoRek125 Посмотреть сообщение
Жаль только, что dwDuration - параметр длительности звука в миллисекундах, а не в герцах ...
Чего? Как это длительность может измерять в ГЕРЦАХ - единицах частоты?
Вадим Мошев вне форума Ответить с цитированием
Старый 04.04.2012, 12:03   #7
IgoRek125
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 47
По умолчанию

Допустим программа создаст wav дорожку. Как заполнить ее, имея данные программы ???
IgoRek125 вне форума Ответить с цитированием
Старый 04.04.2012, 12:04   #8
IgoRek125
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 47
По умолчанию

Вадим Мошев, уже исправил)))
IgoRek125 вне форума Ответить с цитированием
Старый 04.04.2012, 13:08   #9
IgoRek125
Пользователь
 
Регистрация: 20.03.2012
Сообщений: 47
По умолчанию

raxp, можно поподробнее?
IgoRek125 вне форума Ответить с цитированием
Старый 04.04.2012, 15:48   #10
IgoRek125
Пользователь
 
Регистрация: 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;
IgoRek125 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Звук Звууууук Звук ... не рабоает звук.. 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