Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 24.12.2013, 16:09
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
должно, по идее...

За основу: http://www.delphisources.ru/pages/so...generator.html

Мой вариант:

Код:
mass := [1000, -1000, 2000];

for i := 0 to Length(mass)-1 do begin

if mass[i] > 0 then begin
  ServiceThread := TServiceThread.Create(False);
  sleep(mass[i]);
  ServiceThread.Terminate;
                    end;

if mass[i] < 0 then sleep(mass[i]);


                                 end;

но использовать sleep нельзя!
Ответить с цитированием
  #17  
Старый 24.12.2013, 16:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

тебе нужно модифицировать процедуру Generator, последовательно генерируя синусоиду и тишину. при этом увеличить буферы для общего сигнала.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #18  
Старый 24.12.2013, 19:28
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

В процедуре Generator:


Код:
    j: integer;
const  mass: array [0..2] of integer = (1000, -1000, 2000);


Код:
for j := 0 to Length(mass)-1 do begin

if mass[j] > 0 then begin
 OmegaC := 2*PI*Freq;
        for I := 0 to Size div 2 do begin
          t := I/44100 + tPred;
          PSmallInt(buf)^ := Round(Lev*sin(OmegaC*t));// ВОЗНИКАЕТ ОШИБКА
          Inc(PSmallInt(buf));
        end;
        tPred := t;
                    end;

if mass[j] < 0 then begin
       for I := 0 to Size-2 do begin
         PSmallInt(buf)^ := 0;
         Inc(PSmallInt(buf));
       end;
       tPred := 0;
       end;

if j = Length(mass)-1 then ServiceThread.Terminate;

                                 end;

Возникает ошибка
И как делать "задержки", которые в массиве?

Последний раз редактировалось lkz_07, 24.12.2013 в 19:35.
Ответить с цитированием
  #19  
Старый 27.12.2013, 13:31
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

Что в этой строчке не так???? вдоль поперек уже исходил:

Код:
PSmallInt(buf)^ := Round(Lev*sin(OmegaC*t));// ВОЗНИКАЕТ ОШИБКА
Ответить с цитированием
  #20  
Старый 27.12.2013, 13:41
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от lkz_07
Что в этой строчке не так???? вдоль поперек уже исходил:

Код:
PSmallInt(buf)^ := Round(Lev*sin(OmegaC*t));// ВОЗНИКАЕТ ОШИБКА
Наверное буфер не создан?
Ответить с цитированием
  #21  
Старый 27.12.2013, 15:17
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Наверное буфер не создан?

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

Код:
procedure Generator(buf : PChar;  Typ, Freq,  Lev, Size : LongInt; var tPred : Double);
Ответить с цитированием
  #22  
Старый 27.12.2013, 15:28
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от lkz_07
Его создавать не нужно, он ссылается на переменную из процедуры:

Код:
procedure Generator(buf : PChar;  Typ, Freq,  Lev, Size : LongInt; var tPred : Double);
Это не переменная, а формальный параметр функции. buf является указателем на некий буфер. Перед вызовом процедуры Generator нужно создать буфер (зарезервировать кусок памяти) и адрес этого буфера указать в параметре buf.
Перед вызовом процедуры Generator создаётся буфер?

p.s. И какая вообще ошибка появляется в той строке?
Ответить с цитированием
  #23  
Старый 28.12.2013, 10:24
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Это не переменная, а формальный параметр функции. buf является указателем на некий буфер. Перед вызовом процедуры Generator нужно создать буфер (зарезервировать кусок памяти) и адрес этого буфера указать в параметре buf.
Перед вызовом процедуры Generator создаётся буфер?
p.s. И какая вообще ошибка появляется в той строке?


Естественно создается. Из выше примера - я изменить - добавил только свой массив...



Вложение 4162
Ответить с цитированием
  #24  
Старый 13.01.2014, 17:11
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
Печаль

Видимо мне никто не поможет...
Ответить с цитированием
  #25  
Старый 17.06.2014, 00:41
Jura_71 Jura_71 вне форума
Прохожий
 
Регистрация: 17.06.2014
Сообщения: 1
Версия Delphi: delphi 6
Репутация: 10
По умолчанию

может ещё актуально - подобный генератор рабочий где-то скачал, но только если нет полностью всего блока - трудно что-либо сказать
Вложения
Тип файла: rar Генератор_сигнала.rar (184.3 Кбайт, 3 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter