WAVE рдФрд░ JPEG рдореЗрдВ рдореАрдбрд┐рдпрд╛ рдХреЗ рд╕рдВрдкреАрдбрд╝рди / рднрдВрдбрд╛рд░рдг рдХреЗ рддрд░реАрдХреЗ, рднрд╛рдЧ 1

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рд▓реЗрдЦреЛрдВ рдХреА рдореЗрд░реА рдкрд╣рд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЪрд┐рддреНрд░реЛрдВ / рдзреНрд╡рдирд┐ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ JPEG (рдЫрд╡рд┐) рдФрд░ WAVE (рдзреНрд╡рдирд┐), рдФрд░ рд╡реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЗрди рдкреНрд░рд╛рд░реВрдкреЛрдВ (.jpg, .wav) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рднреА рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо WAVE рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред


рдХрд╣рд╛рдиреА


WAVE (рд╡реЗрд╡рдлреЙрд░реНрдо рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдлреЙрд░реНрдореЗрдЯ) рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рд╣реИред рдпрд╣ рдХрдВрдЯреЗрдирд░ рдЖрдорддреМрд░ рдкрд░ рдкрд▓реНрд╕-рдХреЛрдб рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдореЗрдВ рдЕрд╕рдореНрдкреАрдбрд┐рдд рдзреНрд╡рдирд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд)

рдпрд╣ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдФрд░ рдЖрдИрдмреАрдПрдо (рдЙрд╕ рд╕рдордп рдХреА рдЕрдЧреНрд░рдгреА рдЖрдИрдЯреА рдХрдВрдкрдирд┐рдпреЛрдВ) рджреНрд╡рд╛рд░рд╛ рдЖрд░рдЖрдИрдПрдлрдПрдл рдХреЗ рд╕рд╛рде 1991 рдореЗрдВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛


рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╣реЗрдбрд░ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдбреЗрдЯрд╛ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдкрд╛рдж рдирд╣реАрдВ рд╣реИред рд╣реЗрдбрд░ рдХрд╛ рд╡рдЬрди рдХреБрд▓ 44 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
рд╣реЗрдбрд░ рдореЗрдВ рдирдореВрдиреЗ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛, рдбрд┐рд╕рдХреНрд░рд┐рдЯрд╛рдЗрдЬреЗрд╢рди рдХреА рдЖрд╡реГрддреНрддрд┐, рдзреНрд╡рдирд┐ рдХреА рдЧрд╣рд░рд╛рдИ, рдЖрджрд┐ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрддреА рд╣реИрдВред рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реАред (рд╕рднреА рд╕рд╛рдВрдЦреНрдпрд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдорд╛рди рд▓рд┐рдЯрд┐рд▓-рдПрдВрдбрд┐рдпрди рдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП)


рдмреНрд▓реЙрдХ рдХрд╛ рдирд╛рдордмреНрд▓реЙрдХ рдЖрдХрд╛рд░ (B)рд╡рд┐рд╡рд░рдг / рдкреНрд░рдпреЛрдЬрдирдорд╛рди (рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ)
chunkId4рдПрдХ рдлрд╛рдЗрд▓ рдХреЛ рдореАрдбрд┐рдпрд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛рдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди рдореЗрдВ 0x52494646 ("RIFF")
chunkSize4ChunkId рдФрд░ chunkSize рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░FILE_SIZE - 8
рдкреНрд░рд╛рд░реВрдк4RIFF рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдЯрд╛рдЗрдк рдХрд░реЗрдВрдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди рдореЗрдВ 0x57415645 ("WAVE")
subchunk1Id4рдЕрдзрд┐рдХ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдкреНрд░рд╛рд░реВрдкрдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди рдореЗрдВ 0x666d7420 ("fmt")
subchunk1Size4рд╢реЗрд╖ рд╣реЗрдбрд░ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ)16 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ (рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП)
audioFormat2рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рд░реВрдк (рд╕рдВрдкреАрдбрд╝рди рд╡рд┐рдзрд┐ рдФрд░ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)1 (рдкреАрд╕реАрдПрдо рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
numChannels2рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛1/2, рд╣рдо 1 рдЪреИрдирд▓ рд▓реЗрддреЗ рд╣реИрдВ (3/4/5/6/7 ... - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 4 рдПрдХ рдХреНрд╡рд╛рдб рд╕рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП, рдЖрджрд┐)
sampleRate4рдзреНрд╡рдирд┐ рдирдореВрдирд╛рдХрд░рдг рдЖрд╡реГрддреНрддрд┐ (рд╣рд░реНрдЯреНрдЬ рдореЗрдВ)рдмрдбрд╝рд╛, рдмреЗрд╣рддрд░ рдзреНрд╡рдирд┐ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд▓рдВрдмрд╛рдИ рдХрд╛ рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЕрдиреБрд╢рдВрд╕рд┐рдд рдореВрд▓реНрдп 48000 (рд╕рдмрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдзреНрд╡рдирд┐ рдХреА рдЧреБрдгрд╡рддреНрддрд╛) рд╣реИ
byteRate41 рд╕реЗрдХрдВрдб рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛рд╕реИрдВрдкрд▓ рд░реЗрдЯ рдЕрдВрдХрди рдмрд┐рдЯреНрд╕рдкреИрд░ рдирдореВрдирд╛ (рдЗрд╕рдХреЗ рдмрд╛рдж)
blockAlign21 рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛numChannels * рдмрд┐рдЯрд╕рдкрд░реНрд╕рди: 8
bitsPerSample21 рдирдореВрдирд╛ рдкреНрд░рддрд┐ рдмрд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЧрд╣рд░рд╛рдИ)рдХреЛрдИ рднреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рдХрд┐ 8 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред 32 рдмрд┐рдЯреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рдФрд░ рдХрдард┐рди рдСрдбрд┐рдпреЛ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ
subchunk2Id4рдбреЗрдЯрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╕рдВрджрд░реНрдн рдЪрд┐рд╣реНрди (рдЪреВрдВрдХрд┐ рдСрдбрд┐рдпреЛрдлреЙрд░реНрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп рд╣реЗрдбрд░ рддрддреНрд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)рдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди рдореЗрдВ 0x64617461 ("рдбреЗрдЯрд╛")
subchunk2Size4рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрдХрд╛рд░рдЗрдВрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░
рдбреЗрдЯрд╛рдмрд╛рдЗрдЯ рдХрд░реЗрдВ * рдСрдбрд┐рдпреЛ рдЕрд╡рдзрд┐рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛?

рдЙрджрд╛рд╣рд░рдг рд╣реИ


рдкрд┐рдЫрд▓реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЬ рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдкрд╛рдпрдерди рд╣реИред рд▓рд╣рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд╛рдо рдПрдХ рд╢реЛрд░ рдЬрдирд░реЗрдЯрд░ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ рдФрд░ рд╕рдВрдкреАрдбрд╝рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:


# WAV.py from struct import pack #  py-     C from os import urandom #    /dev/urandom,  windows: # from random import randint # urandom = lambda sz: bytes([randint(0, 255) for _ in range(sz)]) #   windows, .. urandom'    from sys import argv, exit #      if len(argv) != 3: # +1   (-1,   ) print('Usage: python3 WAV.py [num of samples] [output]') exit(1) 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЙрдирдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЪрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдп рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ (рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд╣реЛрдВрдЧреЗ, рд╣рдорд╛рд░рд╛ рд╢реЛрд░ рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред


 numSamples = int(argv[1]) output_path = argv[2] chunkId = b'RIFF' Format = b'WAVE' subchunk1ID = b'fmt ' subchunk1Size = b'\x10\x00\x00\x00' # 0d16 audioFormat = b'\x01\x00' numChannels = b'\x02\x00' # 2-    () sampleRate = pack('<L', 1000) # 1000 ,    ,     .  1000-  ,   bitsPerSample = b'\x20\x00' # 0d32 byteRate = pack('<L', 1000 * 2 * 4) # sampleRate * numChannels * bitsPerSample / 8 (32 bit sound) blockAlign = b'\x08\x00' # numChannels * BPS / 8 subchunk2ID = b'data' subchunk2Size = pack('<L', numSamples * 2 * 4) # * numChannels * BPS / 8 chunkSize = pack('<L', 36 + numSamples * 2 * 4) # 36 + subchunk2Size data = urandom(1000 * 2 * 4 * numSamples) #   

рдпрд╣ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ (рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ):


 with open(output_path, 'wb') as fh: fh.write(chunkId + chunkSize + Format + subchunk1ID + subchunk1Size + audioFormat + numChannels + sampleRate + byteRate + blockAlign + bitsPerSample + subchunk2ID + subchunk2Size + data) #  

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдХрд┐рдпрд╛ред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
python3 WAV.py [num of samples] [output]
рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ - рдЧрд┐рдирддреА рдирдореВрдиреЗ
рдЖрдЙрдЯрдкреБрдЯ - рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдХрд╛ рдкрде


рдпрд╣рд╛рдБ рд╢реЛрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ BPS рдХреЛ 1b / s рдкрд░ рдЙрддрд╛рд░рд╛ рдФрд░ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 1 рддрдХ рдЧрд┐рд░рд╛ рджреА (64kbs рдкрд░ 32k рдЕрд╕рдореНрдкреАрдбрд┐рдд рд╕реНрдЯреАрд░рд┐рдпреЛ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХ рд╕рд╛рдл .avav рдлрд╝рд╛рдЗрд▓ рдХрд╛ 80M рдирд┐рдХрд▓рд╛, рдФрд░ рдХреЗрд╡рд▓ 10): https: /ред /instaud.io/3Dcy


рдкреВрд░реЗ рдХреЛрдб (WAV.py) (рдХреЛрдб рдореЗрдВ рдХрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡реИрд▓реНрдпреВрдЬрд╝ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдХреЗрдЪ рд╣реИ):


 from struct import pack #  py-     C from os import urandom #    /dev/urandom,  windows: # from random import randint # urandom = lambda sz: bytes([randint(0, 255) for _ in range(sz)]) #   windows, .. urandom'    from sys import argv, exit #      if len(argv) != 3: # +1   (-1,   ) print('Usage: python3 WAV.py [num of samples] [output]') exit(1) numSamples = int(argv[1]) output_path = argv[2] chunkId = b'RIFF' Format = b'WAVE' subchunk1ID = b'fmt ' subchunk1Size = b'\x10\x00\x00\x00' # 0d16 audioFormat = b'\x01\x00' numChannels = b'\x02\x00' # 2-    () sampleRate = pack('<L', 1000) # 1000 ,    . bitsPerSample = b'\x20\x00' # 0d32 byteRate = pack('<L', 1000 * 2 * 4) # sampleRate * numChannels * bitsPerSample / 8 (32 bit sound) blockAlign = b'\x08\x00' # numChannels * BPS / 8 subchunk2ID = b'data' subchunk2Size = pack('<L', numSamples * 2 * 4) # * numChannels * BPS / 8 chunkSize = pack('<L', 36 + numSamples * 2 * 4) # 36 + subchunk2Size data = urandom(1000 * 2 * 4 * numSamples) #   with open(output_path, 'wb') as fh: fh.write(chunkId + chunkSize + Format + subchunk1ID + subchunk1Size + audioFormat + numChannels + sampleRate + byteRate + blockAlign + bitsPerSample + subchunk2ID + subchunk2Size + data) #     

рдкрд░рд┐рдгрд╛рдо


рддреЛ рдЖрдкрдиреЗ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд╛рдЙрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реАрдЦрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдордиреЗ рдХрдореНрдкреНрд░реЗрд╢рди (рдСрдбрд┐рдпреЛрдлрд╝реЙрд░реНрдореИрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЗрдЦ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓реЗрдЦреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред 10. рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдзрдиреНрдпрд╡рд╛рдж!


рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ

WAV рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛
WAV - рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛

Source: https://habr.com/ru/post/hi450774/


All Articles