Конференция "Media" » Синтез звука [D7, WinXP]
 
  • Dem_v © (19.12.09 23:12) [0]
    Как в Delphi синтезировать звуковой файл Sin(f*t), f=10 кГц
  • Германн © (20.12.09 03:38) [1]
    А что значит "синтезировать"? И что есть "звуковой файл"?
  • Вариант (20.12.09 07:34) [2]

    > Dem_v ©   (19.12.09 23:12)

    Если коротко и быстро - найти библиотеки типа bass.dll например или AudioLab (ссылки на этом форуме уже давали, поищи тут или в интернете) - там есть и генераторы тона и средства записи в аудио файл (или примеры как это сделать).
    А если хочется самому например в wav файл формата PCM (и возможно используя АПИ), то -
    если правильно понял, нужен синус 10 кгЦ. Тогда формула будет
    Sin((F*2.0 *PI *I)/T)  - где F собственно частота, I - шаг итерации (счетчик цикла напрмер для for), T - частота дискретизации, PI =3,14...... По Котельникову для 10 кГц частоту дискретизации надо брать не менее 20 000 Гц (ближайшая "стандартная" для аудио 22 050). А что бы точек на период было поболее двух, то частоту дискретизации надо увеличить (например взять 44 100).
    Далее, функция Sin у нас дает не целочисленный результат. В wav файл PCM  формата надо писать целочисленные значения 8 бит или 16 бит на канал. Соответственно  результат синуса надо умножить на коэффциент ( для 16 бит например на 32767 для получения полного размаха амплитуды ) и привести к Smallint знаковое (целое  16 бит)  (Trunc или Round). Полученный массив значений надо привязать к заголовку типа

    WAVHDR = packed record
       riff:   array[0..3] of Char;
       len:   DWord;
       cWavFmt:  array[0..7] of Char;
       dwHdrLen:  DWord;
       wFormat:  Word;
       wNumChannels: Word;
       dwSampleRate: DWord;
       dwBytesPerSec: DWord;
       wBlockAlign: Word;
       wBitsPerSample: Word;
       cData:   array[0..3] of Char;
       dwDataLen:  DWord;
     end;


    Значения полей можешь почитать например в https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ или http://www.sonicspot.com/guide/wavefiles.html

    Естественно поля заголовка должны быть заполнены. Потом записываешь в файл (например myaudio.wav) заголовок, а следом свои данные. Или если есть желание  использовать АПИ -  используй функции mmioOpen,mmioCreateChunk, mmioWrite и прочие mmIOXXX (не мой взгляд довольно муторно, по крайней мере в первый раз)
 
Конференция "Media" » Синтез звука [D7, WinXP]
Есть новые Нет новых   [120345   +11][b:0][p:0.001]