PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Помогите с триангулятором.


Помогите с триангулятором.

Сообщений 1 страница 6 из 6

1

Треугольники:

Код:
DataSection
  WaveString:
    IncludeBinary "Data.txt"
EndDataSection

Structure WAVEHEADER
  RIFF.l
  FileSize.l
  RIFFType.l
  FmtChunkId.l
  FmtChunkSize.l
  FormatTag.w
  Channels.w
  SampleRate.l
  BytesPerSecond.l
  BlockAlign.w
  BitsPerSample.w
  DataChunkId.l
  DataSize.l
EndStructure

Global  WaveHeader.WAVEHEADER,  File
With WaveHeader
  CopyMemory(?WaveString,   @\RIFF,         4)
  CopyMemory(?WaveString+4, @\RIFFType,     4)
  CopyMemory(?WaveString+8, @\FmtChunkId,   4)
  CopyMemory(?WaveString+12,@\DataChunkId,  4)
  \FileSize = SizeOf(WAVEHEADER)  + (2  * 65536 -1) * SizeOf(Word)  - 8
  \FmtChunkSize   = 16
  \FormatTag      = 1
  \Channels       = 1
  \SampleRate     = 44100
  \BitsPerSample  = 16
  \BytesPerSecond = \SampleRate * \BitsPerSample  / 8   * \Channels
  \BlockAlign     = \BitsPerSample  / 8 *\Channels
  \DataSize       = ((2  * 65536  -1) * SizeOf(Word))
EndWith

CreateFile(0, "Волна.wav")
WriteData(0,  @WaveHeader,  SizeOf(WaveHeader))

For a = 0 To  32767
  WriteWord(0,  a)
Next

For a = 32766 To  -32768  Step  -1
  WriteWord(0,  a)
Next

For a = -32768  To  -1
  WriteWord(0,  a)
Next

CloseFile(0)

Прямоугольники:

Код:
DataSection
  WaveString:
    IncludeBinary "Data.txt"
EndDataSection

Structure WAVEHEADER
  RIFF.l
  FileSize.l
  RIFFType.l
  FmtChunkId.l
  FmtChunkSize.l
  FormatTag.w
  Channels.w
  SampleRate.l
  BytesPerSecond.l
  BlockAlign.w
  BitsPerSample.w
  DataChunkId.l
  DataSize.l
EndStructure

Global  WaveHeader.WAVEHEADER,  File
With WaveHeader
  CopyMemory(?WaveString,   @\RIFF,         4)
  CopyMemory(?WaveString+4, @\RIFFType,     4)
  CopyMemory(?WaveString+8, @\FmtChunkId,   4)
  CopyMemory(?WaveString+12,@\DataChunkId,  4)
  \FileSize = SizeOf(WAVEHEADER)  + (2  * 65536 -1) * SizeOf(Word)  - 8
  \FmtChunkSize   = 16
  \FormatTag      = 1
  \Channels       = 1
  \SampleRate     = 44100
  \BitsPerSample  = 16
  \BytesPerSecond = \SampleRate * \BitsPerSample  / 8   * \Channels
  \BlockAlign     = \BitsPerSample  / 8 *\Channels
  \DataSize       = ((2  * 65536  -1) * SizeOf(Word))
EndWith

CreateFile(0, "Волна.wav")
WriteData(0,  @WaveHeader,  SizeOf(WaveHeader))

For a = 1 To  65535
  WriteWord(0,  32767)
Next

For a = 1 To  65536
  WriteWord(0,  -32768)
Next

CloseFile(0)

Синус:

Код:
S.d = 360 / (65536 + 65536)
Debug S.d

DataSection
  WaveString:
    IncludeBinary "Data.txt"
EndDataSection

Structure WAVEHEADER
  RIFF.l
  FileSize.l
  RIFFType.l
  FmtChunkId.l
  FmtChunkSize.l
  FormatTag.w
  Channels.w
  SampleRate.l
  BytesPerSecond.l
  BlockAlign.w
  BitsPerSample.w
  DataChunkId.l
  DataSize.l
EndStructure

Global  WaveHeader.WAVEHEADER,  File
With WaveHeader
  CopyMemory(?WaveString,   @\RIFF,         4)
  CopyMemory(?WaveString+4, @\RIFFType,     4)
  CopyMemory(?WaveString+8, @\FmtChunkId,   4)
  CopyMemory(?WaveString+12,@\DataChunkId,  4)
  \FileSize = SizeOf(WAVEHEADER)  + (2  * 65536 -1) * SizeOf(Word)  - 8
  \FmtChunkSize   = 16
  \FormatTag      = 1
  \Channels       = 1
  \SampleRate     = 44100
  \BitsPerSample  = 16
  \BytesPerSecond = \SampleRate * \BitsPerSample  / 8   * \Channels
  \BlockAlign     = \BitsPerSample  / 8 *\Channels
  \DataSize       = ((2  * 65536  -1) * SizeOf(Word))
EndWith

CreateFile(0, "Волна.wav")
WriteData(0,  @WaveHeader,  SizeOf(WaveHeader))

b.d = 30
For a = 1 To  (65536 + 65535)
  WriteWord(0,  Int((Sin(Radian(b))  * 65536))  - 32768)
  b + S
Next

CloseFile(0)

Содержимое Data.txt в ASCII:

Код:
RIFFWAVEfmt data

Проблема с синусом. Не генерирует ~, а делает чёрт-те что. Поправьте меня с синусом. Начало с 30 градусов (0 в wav файле) и до нуля в wav файле не включительно, как ~.

Я потом соединю все три волны и пропущу через усилитель.

Отредактировано PSY (17.11.2023 09:53:01)

0

2

Вот это "Содержимое Data.txt в ASCII:",первая проблема,так как что там однуму вам известно и

Код:
DataSection
  WaveString:
    IncludeBinary "Data.txt"
EndDataSection

без него не работает и соответственно ваш выложенный код.

0

3

я же привёл его содержимое. там лишь тэги секций wav файла.

Отредактировано PSY (17.11.2023 19:25:33)

0

4

Вообщем решил задачу через костыль.
Синус:

Код:
S.d = 240 / (65536 + 65536)

DataSection
  WaveString:
    IncludeBinary "Data.txt"
EndDataSection

Structure WAVEHEADER
  RIFF.l
  FileSize.l
  RIFFType.l
  FmtChunkId.l
  FmtChunkSize.l
  FormatTag.w
  Channels.w
  SampleRate.l
  BytesPerSecond.l
  BlockAlign.w
  BitsPerSample.w
  DataChunkId.l
  DataSize.l
EndStructure

Global  WaveHeader.WAVEHEADER,  File
With WaveHeader
  CopyMemory(?WaveString,   @\RIFF,         4)
  CopyMemory(?WaveString+4, @\RIFFType,     4)
  CopyMemory(?WaveString+8, @\FmtChunkId,   4)
  CopyMemory(?WaveString+12,@\DataChunkId,  4)
  \FileSize = SizeOf(WAVEHEADER)  + (2  * 65536 -1) * SizeOf(Word)  - 8
  \FmtChunkSize   = 16
  \FormatTag      = 1
  \Channels       = 1
  \SampleRate     = 44100
  \BitsPerSample  = 16
  \BytesPerSecond = \SampleRate * \BitsPerSample  / 8   * \Channels
  \BlockAlign     = \BitsPerSample  / 8 *\Channels
  \DataSize       = ((2  * 65536  -1) * SizeOf(Word))
EndWith

CreateFile(0, "Волна.wav")
WriteData(0,  @WaveHeader,  SizeOf(WaveHeader))

b.d = 30
For a = 1 To  65536
  c.w = Int((Sin(Radian(b))  * 65536))  - 32768
  If  (c  < -1)
    c = 32767
  EndIf
  WriteWord(0,  c)
  b + S
Next

b.d = 30  - S
For a = 1 To  65535
  WriteWord(0,  -Int((Sin(Radian(b))  * 65536))  - 32768)
  b + S
Next

CloseFile(0)

И результирующая программа выглядит так:

Код:
InitSound()

DataSection
  Triangle:
    IncludeBinary "Triangle.wav"
  Rectangle:
    IncludeBinary "Rectangle.wav"
  Circle:
    IncludeBinary "Circle.wav"
EndDataSection

CatchSound(1, ?Circle)
CatchSound(2, ?Rectangle)
CatchSound(3, ?Triangle)

PlaySound(1,  #PB_Sound_Loop)
PlaySound(2,  #PB_Sound_Loop)
PlaySound(3,  #PB_Sound_Loop)

MessageRequester("Волна.",  "Закрыть.")

0

5

PSY
DataMaker - преобразует файл в бинарные данные для секции "Data" в теме Bin2Data.
Тогда код будет интересен для теста, так как его можно запустить и получить результат.

0

6

Я просто написал текстовый файл с тэгами для понятности что там лежит, можно конечно и Long записать, как делали в других примерах на сях. Но так понятнее, что там лежит. Хотя насчёт понятности - тут копирование памяти по смещениям.
Circle - синус
Rectangle - прямоугольники
Triangle - треугольники.

Отредактировано PSY (25.11.2023 20:03:17)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Помогите с триангулятором.