Код:
;АудиоДеформатор в2.0 ;©2023 Федин Максим Александрович 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 WaveHeader.WAVEHEADER InputFile$ = OpenFileRequester("Выберите PCM Wave 44100Гц 16-бит стерео файл без дополнительной информации.", "", "Microsoft PCM Wave (*.wav)|*.wav|", 0) If FileSize(inputFile$) < SizeOf(WAVEHEADER) End EndIf If ReadFile(0, InputFile$) = 0 MessageRequester("Деформатор.", "Невозможно открыть файл для чтения.", #PB_MessageRequester_Error) End EndIf ReadData(0, @WaveHeader, SizeOf(WAVEHEADER)) With WaveHeader If \BitsPerSample <> 16 And \Channels <> 2 And \SampleRate <> 44100 MessageRequester("Деформатор", "Неподдерживаемый формат файла.", #PB_MessageRequester_Error) CloseFile(0) End EndIf EndWith *Buffer = AllocateMemory(WaveHeader\DataSize) If *Buffer = 0 MessageRequester("Деформатор", "Невозможно выделить память для данных.", #PB_MessageRequester_Error) CloseFile(0) End EndIf *Byte.Ascii = *Buffer *Overflow = *Buffer + WaveHeader\DataSize While *Byte < *Overflow *Byte\a = ReadAsciiCharacter(0) *Byte + SizeOf(Ascii) Wend If CreateFile(1, InputFile$+" (деформатор).wav") = 0 MessageRequester("Деформатор", "Невозможно создать обработанный файл.", #PB_MessageRequester_Error) FreeMemory(*Buffer) CloseFile(0) End EndIf WriteData(1, @WaveHeader, SizeOf(WAVEHEADER)) *Short.Word = *Buffer While *Short < *Overflow Select Random(2) Case 1 *Short\w + Random(Random(3,2),1) If *Short\w > 32767 Select Random(1) Case 0 *Short\w = 32767 Case 1 *Short\w = 32766 EndSelect EndIf Case 2 Case 1 *Short\w - Random(Random(3,2),1) If *Short\w < -32769 Select Random(1) Case 0 *Short\w = -32768 Case 1 *Short\w = -32767 EndSelect EndIf EndSelect WriteWord(1, *Short\w) *Short + SizeOf(Word) Wend FreeMemory(*Buffer) MessageRequester("Деформатор", "Готово.", #PB_MessageRequester_Info)
а этот почему то делает тишину вместо звука.
Код:
;©2024 Федин Максим Александрович ;Смазыватель 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 WaveHeader.WAVEHEADER InputFile$ = OpenFileRequester("Выберите PCM Wave 44100Гц 16-бит стерео файл без дополнительной информации.", "", "Microsoft PCM Wave (*.wav)|*.wav|", 0) If FileSize(inputFile$) < SizeOf(WAVEHEADER) End EndIf If ReadFile(0, InputFile$) = 0 MessageRequester("Смазыватель", "Невозможно открыть файл для чтения.", #PB_MessageRequester_Error) End EndIf ReadData(0, @WaveHeader, SizeOf(WAVEHEADER)) With WaveHeader If \BitsPerSample <> 16 And \Channels <> 2 And \SampleRate <> 44100 MessageRequester("Смазыватель", "Неподдерживаемый формат файла.", #PB_MessageRequester_Error) CloseFile(0) End EndIf EndWith *Buffer = AllocateMemory(WaveHeader\DataSize) If *Buffer = 0 MessageRequester("Смазыватель", "Невозможно выделить память для данных.", #PB_MessageRequester_Error) CloseFile(0) End EndIf *Byte.Ascii = *Buffer *Overflow = *Buffer + WaveHeader\DataSize While *Byte < *Overflow *Byte\a = ReadAsciiCharacter(0) *Byte + SizeOf(Ascii) Wend If CreateFile(1, InputFile$+" (смазыватель).wav") = 0 MessageRequester("Смазыватель", "Невозможно создать обработанный файл.", #PB_MessageRequester_Error) FreeMemory(*Buffer) CloseFile(0) End EndIf WriteData(1, @WaveHeader, SizeOf(WAVEHEADER)) *Short.Word = *Buffer While *Short < *Overflow If (*Short < (*Overflow - SizeOf(Word))) *Short2.Word = *Short + SizeOf(Word) *Short2\w = PeekW(*Short+SizeOf(Word)) Else *Short2\w = *Short\w EndIf Select Random(1,0) Case 0 Select Random(3,0) Case 0 *Short\w = Int((*Short\w + *Short2\w)*0.5) Case 1 *Short\w = Int(Round((*Short\w + *Short2\w)*0.5, #PB_Round_Nearest)) Case 2 *Short\w = Int(Round((*Short\w + *Short2\w)*0.5, #PB_Round_Down)) Case 3 *Short\w = Int(Round((*Short\w + *Short2\w)*0.5, #PB_Round_Up)) EndSelect Case 1 If (*Short < (*Overflow - SizeOf(Word) - SizeOf(Word))) *Short3.Word = *Short2 + SizeOf(Word) *Short3\w = PeekW(*Short2 + SizeOf(Word)) Else *Short3\w = *Short2\w EndIf Select Random(3,0) Case 0 *Short\w = Int((*Short\w + *Short2\w + *Short3\w) / 3) Case 1 *Short\w = Int(Round((*Short\w + *Short2\w + *Short3\w) / 3, #PB_Round_Nearest)) Case 2 *Short\w = Int(Round((*Short\w + *Short2\w + *Short3\w) / 3, #PB_Round_Down)) Case 3 *Short\w = Int(Round((*Short\w + *Short2\w + *Short3\w) / 3, #PB_Round_Up)) EndSelect EndSelect WriteWord(1, *Short\w) *Short + SizeOf(Word) Wend FreeMemory(*Buffer) MessageRequester("Смазыватель", "Готово.", #PB_MessageRequester_Info)
У кого какие предложения?
Ещё напишу ревербератор и линию задержки. Но сейчас никак не могу понять почему не работает второй код.