Треугольники:
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)