Форум Программирование Как создать звук? |
Страницы: «1» «2» | |||||||
|
Здравствуйте! У меня есть такой вопрос. Подскажите пожалуйста ответ на него. Дело в том, что я звук раньше не пытался создать в Delphi. и поэтому не знаю ни процедур, ни функций для этого... У меня имеется обычный массив. Мне из него надо создать звуковую дорожку по герцево. Т. е. massiv[i]= 1 герц звука. и все это соответственно циклом заполняется и получается звуковая дорожка. Абсолютно не важно что это будет за звук, что там играть будет, фактически там ничего играть и не будет в итоге, должен получиться просто набор быстрых пиков или его еще называют белым шумом. Мне не важна высота звука. в общем должно получиться простое заполнение звука, где-то есть 1 пик длинною в 1 герц, а дальше допустим его нет, потом снова есть и тд. Сможет ли мне кто-то подсказать какими командами этого добиться? Повторюсь, что я раньше не пытался создавать звук в делфи, поэтому не знаю ни одной подобной команды и обращаюсь за помощью... | ||||||
|
Миди подойдёт? Правда там погерцово вроде нельзя, но точно можно нотами. Чисти код! Чисти код! Чисти код! | ||||||
|
нет, нотами не нужно... только по каждому герцу... | ||||||
|
Буду благодарен, если для начала расскажите, как хотя бы создать wav самый простой, заголовок его и прочее или ссылку на литерату напишете. | ||||||
|
Синусоидой заполни массив и будет звук. виконання програми розпочинається з того самого мiсця, де призупинилося. | ||||||
|
bugmenot, я знаю, что нужно сдеать, я не знаю как... | ||||||
|
какой параметр отвечает за высоту звука? | ||||||
|
bugmenot: человека интересует как массив перевести в wav-файл. IgoRek125: по самому вопросу я ответить не могу - не знаю. Но для чего это нужно? Может можно обойтись без генерации шума? Чисти код! Чисти код! Чисти код! | ||||||
|
Gooddy в общем-то я могу рассказать, но лучше б наверное показать)).. когда сумею сделать, но я кое-чего и добился) Ну в принцепи вот, что у меня получилось. только понять не могу, почему у меня в конечном файле скорость, с которой проигрывается звук, эмм... как бы сказать.. секунды вдвое , если даже не втрое, быстрее тикают??? [PHP] ZvukData = Record wSamplesPerSec : Cardinal; wAvgBytesPerSec: Cardinal; wBitsPerSample : WORD; wChannels : WORD; Data : TMemoryStream; end; TWaveHeaderChank = packed record wFormatTag : Smallint; wChannels : WORD; wSamplesPerSec : Cardinal; wAvgBytesPerSec: Cardinal; wBlockAlign : WORD; wBitsPerSample : WORD; wcbSize : WORD; end; .......................................................................... Function WriteWave(FileName : AnsiString; data : ZvukData) : WORD; var f : TFileStream; wFileSize : Cardinal; wChankSize : Cardinal; ID : array[0..3] of Char; Header : TWaveHeaderChank; Begin f:=nil; Try f := TFileStream.Create(FileName, fmCreate); f.Seek(0, soFromBeginning); Header.wFormatTag := 1; Header.wChannels := data.wChannels; Header.wSamplesPerSec := data.wSamplesPerSec; Header.wBlockAlign := data.wChannels * (data.wBitsPerSample div 8); Header.wAvgBytesPerSec:= data.wSamplesPerSec * Header.wBlockAlign; Header.wBitsPerSample := data.wBitsPerSample; Header.wcbSize := 0; //iao aiiieieoaeuiiai aeiea ID := 'RIFF'; f.WriteBuffer(ID, 4); wFileSize := 0; f.WriteBuffer(wFileSize, 4); ID := 'WAVE'; f.WriteBuffer(ID, 4); ID := 'fmt '; f.WriteBuffer(ID, 4); wChankSize := SizeOf(Header); f.WriteBuffer(wChankSize, 4); f.WriteBuffer(Header, SizeOf(Header)); ID := 'data'; f.WriteBuffer(ID, 4); wChankSize := data.Data.Size; f.WriteBuffer(wChankSize, 4); data.Data.Seek(0, soFromBeginning); f.CopyFrom(data.Data, data.Data.Size); f.Seek(SizeOf(ID), soFromBeginning); wFileSize := f.Size - SizeOf(ID) - SizeOf(wFileSize); f.Write(wFileSize, 4); except f.Free; end; end; procedure TForm1.Button7Click(Sender: TObject); var x,y,liniya: integer; r: ZvukData; d: SmallInt; begin try with r do begin wSamplesPerSec:=Chastota; wBitsPerSample:=8; wChannels:=1; Data:=TMemoryStream.Create; Data.Seek(0,soFromBeginning); end; liniya:=-1; For y:=0 to Image1.Height-1 do begin For x:=0 to Image1.Width-1 do begin If massiv[x,y]=True then begin liniya:=liniya+1; d:=500; ///aeaeii yoi aunioa caoea a aaoeaaeao r.Data.WriteBuffer(d, 1); end else begin d:=-128; r.Data.WriteBuffer(d, 1); end; end; end; WriteWave(FileName, r); finally r.Data.Free; end; ShowMessage('..... Oaee aeaaiiieo?ii nicaai! .....'); end; [/PHP] | ||||||
|
Цитата (IgoRek125): я знаю, что нужно сдеать, я не знаю как... Я думаю, надо писать код для этого... Цитата (Gooddy): как массив перевести в wav-файл Тащемта это многоформатный контейнер, если что. виконання програми розпочинається з того самого мiсця, де призупинилося. | ||||||
Перейти в раздел:
© 2004 - 2024, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.02 сек. |