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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2011, 23:37   #1
юрий петрович
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 11
Вопрос звук в делфи

Подскажите как в делфи переменную типа-real воспроизвести звуком или
передать в порт для воспроизведения через ЦАП. Спасибо!
юрий петрович вне форума Ответить с цитированием
Старый 20.09.2011, 06:30   #2
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Сложно комментировать, посмотрите вот тут описание формата и работа с wav файлами с примерами на Delphi.
igh0st вне форума Ответить с цитированием
Старый 20.09.2011, 23:27   #3
юрий петрович
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 11
Восклицание звук в делфи

Нужно в темпе получения переменной типа real преобразовать её в тип wav(или другой звуковой тип).Затем послать на воспроизведение звука или в порт? Поскольку самоучка то желательно подробнее и с примером. Спасибо.

Последний раз редактировалось юрий петрович; 20.09.2011 в 23:30.
юрий петрович вне форума Ответить с цитированием
Старый 21.09.2011, 10:40   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Юрий, а давайте максимально подробнее опишите свою задачу. Про темп получения переменной - это частности и ни о чем лично мне не говорит. Вы работаете с сетью, считываете с файла, с буфера, устройства ?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.09.2011, 19:53   #5
юрий петрович
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 11
Вопрос звук в делфи

Уважаемый raxp в делфи7 интегрирую дифференциальное уравнение с запаздывагием. Получаю интересное решение Х типа real. Решение хаотическое его фазовый портрет - странный атрактор. Вывожу на дисплей графики. По задумке практического применения надо услышать как оно звучит и как вывести решение или звук в какой -то порт ПК. Спасибо.
p.s. В перспективе хотелось бы всё это реализовать на программируемом контроллере .

Последний раз редактировалось юрий петрович; 21.09.2011 в 19:58.
юрий петрович вне форума Ответить с цитированием
Старый 21.09.2011, 20:56   #6
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от юрий петрович Посмотреть сообщение
Уважаемый raxp в делфи7 интегрирую дифференциальное уравнение с запаздывагием.
Так вы математику сами реализовываете?
Цитата:
Сообщение от юрий петрович Посмотреть сообщение
Получаю интересное решение Х типа real. Решение хаотическое его фазовый портрет - странный атрактор. Вывожу на дисплей графики. По задумке практического применения надо услышать как оно звучит и как вывести решение или звук в какой -то порт ПК. Спасибо.
p.s. В перспективе хотелось бы всё это реализовать на программируемом контроллере .
Решение какого уравнения? Насколько помню для нелинейного процесса высчитываются более-менее стандартные показатели - функция Ляпунова, размерность аттрактора, что-то еще. Эти величины характеризуют нелинейный процесс который представлен множеством/набором значений измеряемой величины в течении исследуемого промежутка времени. Не совсем понимаю что у вас за значение такое динамическое, т.к. перечисленные параметры для данного набора чисел/замеров одинаковы при заданной задержке/сдвиге/лаге.
Что именно вы собираетесь "озвучивать"? Исходный массив данных? Новые значения характеристик(см.выше) при новом значении сдвига?
Плюс к тому аттрактор - описание системы в многомерных координатах.
И какова практическая значимость такой фишки? Новизна, это да, это бесспорно. Кто будет вслушиваться во фрактальную музыку? Кто сможет и главное зачем отличить "мелодию" одного процесса от другого? Вы сравните два сходных фрактальных рисунка и найдите 10 отличий, и это при том что картинка постоянно перед глазами, а "мелодия" ушла.
P.S. надеетесь получить мелодию из "Контактов третьего уровня" ? :)))
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 22.09.2011, 22:09   #7
юрий петрович
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 11
Восклицание звук в делфи

Бог с ними с фракталами это отдельный вопрос. Помогите соображениями , а лучше програмкой в делфи .Мне надо вот что? Пусть в дельфи на интервале времени t от 0 до T переменной х типа real присваиваем значение x:=2*sin(wt).ВОПРОС? Как програмно сделать так чтобы услышать х в динамиках и как передать х в какой либо порт. Спасибо за рекомендованную литературу.

Последний раз редактировалось юрий петрович; 22.09.2011 в 22:12.
юрий петрович вне форума Ответить с цитированием
Старый 22.09.2011, 22:42   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

см. воспроизведение звука http://programmersforum.ru/showthread.php?t=51472 и внизу список похожих тем
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.12.2011, 01:29   #9
юрий петрович
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 11
Вопрос

Я наверно виноват неправильно выразил смысл, того что мне надо.Видел много программ записи в WAV файл либо с СД диска либо после звуковой карты. Как я понял, оттуда на запись идут уже как то отсортированные данные. Мне хочется на место звуковых данных записать полученный в программе Дельфи изменяющийся во времени сигнал. Во что? его поеобразовать и в какое место в программе записи WAV файла его засунуть?, чтобы затем послушать.Ведь тактовая частота ПК на много больше частоты выборок в звуковых устройствах ПК.Огромное спасибо.
Я самоучка - ответ желательно с примером или ссылкой.Огромное спасибо!
юрий петрович вне форума Ответить с цитированием
Старый 18.12.2011, 07:45   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...TC, задача сродни переносу спектра ультразвуковой эхолокации мышей в область звука.

Можно поступить так: у вас на выходе функции есть некоторое фиксированное значение на один текущий момент. Оно, значение, может занимать некоторые экстремумы, вот от них нужно отталкиваться.

Для чего? Диапазон человеческого слуха 20...20000 Гц, условно (в серой массе гораздо уже воспримчивость). Если у вас значение функции перейдет в область ультразвука или инфразвука, вы его не услышите. Кроме того, нужно учитывать возможности самой аудиокарты (не всякая интегрированная потянет, ограниченная частота дискретизации). Вот тут и понадобятся максимумы и минимумы. Условно примем максимум результата функции за 20 кГц, минимум за 20 кГц. Т.е. провести нормирование результата вашей функции для звукого диапазона. Смысл ясен?

В итоге, достаточно воспользоваться Waveform Audio Win32 API для генерации заданного тона в текущий момент времени и вы его услышите. Как пример генерации заданной частоты:
Код:
program variant1;
uses
  Windows, mmsystem,classes;

type
TVolumeLevel = 0..127;
var MS,ms2: TMemoryStream;

procedure MakeSound(Frequency{Hz}, Duration{mSec}: Integer; Volume: TVolumeLevel);
var
 WaveFormatEx: TWaveFormatEx;
 i, TempInt, DataCount, RiffCount: integer;
 SoundValue: byte;
 w: double; // omega ( 2 * pi * frequency)
 const
 Mono: Word = $0001;
 SampleRate: Integer = 22050;
 RiffId: string = 'RIFF';
 WaveId: string = 'WAVE';
 FmtId: string = 'fmt ';
 DataId: string = 'data';
begin
 if Frequency > (0.6 * SampleRate) then Exit;

 with WaveFormatEx do begin
  wFormatTag := WAVE_FORMAT_PCM;
  nChannels := Mono;
  nSamplesPerSec := SampleRate;
  wBitsPerSample := $0008;
  nBlockAlign := (nChannels * wBitsPerSample) div 8;
  nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
  cbSize := 0;
 end;

 MS := TMemoryStream.Create;
 with MS do begin
  {Calculate length of sound data and of file data}
  DataCount := (Duration * SampleRate) div 1000; // sound data
  RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
  SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // file data
  {write out the wave header}
  Write(RiffId[1], 4); // 'RIFF'
  Write(RiffCount, SizeOf(DWORD)); // file data size
  Write(WaveId[1], Length(WaveId)); // 'WAVE'
  Write(FmtId[1], Length(FmtId)); // 'fmt '
  TempInt := SizeOf(TWaveFormatEx);
  Write(TempInt, SizeOf(DWORD)); // TWaveFormat data size
  Write(WaveFormatEx, SizeOf(TWaveFormatEx)); // WaveFormatEx record
  Write(DataId[1], Length(DataId)); // 'data'
  Write(DataCount, SizeOf(DWORD)); // sound data size
  {calculate and write out the tone signal} // now the data values
  w := 2 * Pi * Frequency; // omega
  for i := 0 to DataCount - 1 do begin
   SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate)); // wt = w * i / SampleRate
   Write(SoundValue, SizeOf(Byte));
  end;
 end
end;



begin
 MakeSound(728,30000,90);

 sndPlaySound(MS.Memory, SND_MEMORY or SND_aSYNC);
 messagebox(0,'','',0);

 MS.Free
end.
Еще можно построить сонограмму в 3D, это изменение спектра во времени.

Цитата:
Видел много программ записи в WAV файл либо с СД диска либо после звуковой карты. Как я понял, оттуда на запись идут уже как то отсортированные данные. Мне хочется на место звуковых данных записать полученный в программе Дельфи изменяющийся во времени сигнал.
Теперь по поводу последнего. Не вижу смысла! Зачем? Если у вас есть некие результаты, реальные результаты - не звуковые данные, то зачем их искажать, чтобы прослушать? Кто мешает их записать просто в файл в том виде, каком они есть? В конце концов в собственном формате файла.

Если бы задача касалась звуковой визуализации алгоритмов, как на вот этом видео, то понять можно было бы:

Компьютерные программы могут звучать, как музыка
!
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Звук Звууууук Звук ... не рабоает звук.. Zvuuuuk Компьютерное железо 2 22.01.2011 17:53
Тюнер для гитары в делфи. (Считывать с микрофона звук и выводить какой частоты этот звук). Серего Мультимедиа в Delphi 8 12.01.2011 14:39
Звук xakkkkker Мультимедиа в Delphi 4 05.05.2008 08:13
звук и делфи, левый правый звук snusmumric Win Api 2 29.10.2007 11:10