WAVE, JPEG เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เดณเดฟเตฝ เดฎเต€เดกเดฟเดฏ เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดธเตเดธเตเดšเต†เดฏเตเดฏเตเดจเตเดจ/เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฐเต€เดคเดฟเด•เตพ, เดญเดพเด—เด‚ 1

เดนเดฒเต‡เดพ! เดŽเดจเตเดฑเต† เด†เดฆเตเดฏ เดฒเต‡เด–เดจ เดชเดฐเดฎเตเดชเดฐเด•เตพ เด‡เดฎเต‡เดœเต/เด“เดกเดฟเดฏเต‹ เด•เด‚เดชเตเดฐเดทเตป, JPEG (เด‡เดฎเต‡เดœเต), WAVE (เดถเดฌเตโ€Œเดฆเด‚) เดชเต‹เดฒเตเดณเตเดณ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต เดฐเต€เดคเดฟเด•เตพ เดชเด เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดˆ เดซเต‹เตผเดฎเดพเดฑเตเดฑเตเด•เตพ (.jpg, .wav) เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚. เดˆ เดญเดพเด—เดคเตเดคเต เดจเดฎเตเดฎเตพ WAVE เดจเต‹เด•เตเด•เตเด‚.

เด•เดฅ

เด’เดฐเต เด“เดกเดฟเดฏเต‹ เดธเตเดŸเตเดฐเต€เดฎเดฟเดจเตเดฑเต† เดฑเต†เด•เตเด•เต‹เตผเดกเดฟเด‚เด—เต เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดซเดฏเตฝ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดพเดฃเต WAVE (Waveform Audio File Format). เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดฏเดพเดคเตเดค เดชเตพเดธเต เด•เต‹เดกเต เดฎเต‹เดกเตเดฒเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดค เด“เดกเดฟเดฏเต‹ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเดจเดพเดฃเต เดˆ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต. (เดตเดฟเด•เตเด•เดฟเดชเต€เดกเดฟเดฏเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดŸเตเดคเตเดคเดคเต)

เดฎเตˆเด•เตเดฐเต‹เดธเต‹เดซเตเดฑเตเดฑเตเด‚ เดเดฌเดฟเดŽเดฎเตเดฎเตเด‚ (เด…เด•เตเด•เดพเดฒเดคเตเดคเต† เดชเตเดฐเดฎเตเด– เดเดŸเดฟ เด•เดฎเตเดชเดจเดฟเด•เตพ) RIFF-เดจเตŠเดชเตเดชเด‚ 1991-เตฝ เด‡เดคเต เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

เดซเดฏเตฝ เด˜เดŸเดจ

เดซเดฏเดฒเดฟเดจเต เด’เดฐเต เดนเต†เดกเตผ เดญเดพเด—เดฎเตเดฃเตเดŸเต, เดกเดพเดฑเตเดฑ เดคเดจเตเดจเต†, เดชเด•เตเดทเต‡ เด…เดŸเดฟเด•เตเด•เตเดฑเดฟเดชเตเดชเดฟเดฒเตเดฒ. เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเดจเต เด†เด•เต† 44 เดฌเตˆเดฑเตเดฑเตเด•เตพ เดญเดพเดฐเดฎเตเดฃเตเดŸเต.
เดธเดพเดฎเตเดชเดฟเดณเดฟเดฒเต† เดฌเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚, เดธเดพเดฎเตเดชเดฟเตพ เดจเดฟเดฐเด•เตเด•เต, เดถเดฌเตโ€Œเดฆ เดกเต†เดชเตเดคเต เดฎเตเดคเดฒเดพเดฏเดตเดฏเตเด•เตเด•เตเดณเตเดณ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดนเต†เดกเดฑเดฟเตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดธเต—เดฃเตเดŸเต เด•เดพเตผเดกเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ. (เดŽเดฒเตเดฒเดพ เดธเด‚เด–เตเดฏเดพ เดชเดŸเตเดŸเดฟเด• เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เดฒเดฟเดฑเตเดฑเดฟเตฝ-เดŽเตปเดกเดฟเดฏเตป เด•เตเดฐเดฎเดคเตเดคเดฟเตฝ เดŽเดดเตเดคเดฃเด‚)

เดฌเตเดฒเต‹เด•เตเด•เต เดชเต‡เดฐเต
เดฌเตเดฒเต‹เด•เตเด•เต เดตเดฒเดฟเดชเตเดชเด‚ (B)
เดตเดฟเดตเดฐเดฃเด‚/เด‰เดฆเตเดฆเต‡เดถเตเดฏเด‚
เดฎเต‚เดฒเตเดฏเด‚ (เดšเดฟเดฒเตผเด•เตเด•เต เด‡เดคเต เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดšเด™เตเด•เต เดเดกเดฟ
4
เด’เดฐเต เดซเดฏเดฒเดฟเดจเต† เดฎเต€เดกเดฟเดฏ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดพเดฏเดฟ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเต
เดฌเดฟเด—เต-เดŽเตปเดกเดฟเดฏเดจเดฟเตฝ ("RIFF") 0x52494646

เดšเด™เตเด•เต เดตเดฒเดฟเดชเตเดชเด‚
4
chunkId เด•เต‚เดŸเดพเดคเต† chunkSize เด‡เดฒเตเดฒเดพเดคเต† เดฎเตเดดเตเดตเตป เดซเดฏเดฒเดฟเดจเตเดฑเต†เดฏเตเด‚ เดตเดฒเตเดชเตเดชเด‚
FILE_SIZE - 8

เดซเต‡เดพเตผเดฎเดพเดฑเตเดฑเต
4
RIFF-เตฝ เดจเดฟเดจเตเดจเต เดคเดฐเด‚ เดจเดฟเตผเดตเดšเดจเด‚
เดฌเดฟเด—เต-เดŽเตปเดกเดฟเดฏเดจเดฟเตฝ 0x57415645 (โ€œWAVEโ€)

เด‰เดชเดšเด™เตเด•เต1เดเดกเดฟ
4
เด…เดคเดฟเดจเดพเตฝ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดจเตเดฑเต† เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ เดซเดฏเตฝ เด•เต‚เดŸเตเดคเตฝ เด‡เดŸเด‚ เดŽเดŸเตเด•เตเด•เตเดจเตเดจเต
เดฌเดฟเด—เต-เดŽเตปเดกเดฟเดฏเดจเดฟเตฝ ("fmt") 0x666d7420

เด‰เดชเดญเดพเด—เด‚1 เดตเดฒเดฟเดชเตเดชเด‚
4
เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต (เดฌเตˆเดฑเตเดฑเตเด•เดณเดฟเตฝ)
16 เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ (เด“เดกเดฟเดฏเต‹ เดธเตเดŸเตเดฐเต€เด‚ เด•เด‚เดชเตเดฐเดทเตป เด‡เดฒเตเดฒเดพเดคเตเดค เด•เต‡เดธเดฟเตฝ)

เด“เดกเดฟเดฏเต‹ เดซเต‹เตผเดฎเดพเดฑเตเดฑเต
2
เด“เดกเดฟเดฏเต‹ เดซเต‹เตผเดฎเดพเดฑเตเดฑเต (เด•เด‚เดชเตเดฐเดทเตป เดฐเต€เดคเดฟเดฏเต†เดฏเตเด‚ เด“เดกเดฟเดฏเต‹ เดกเดพเดฑเตเดฑ เด˜เดŸเดจเดฏเต†เดฏเตเด‚ เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต)
1 (เดชเดฟโ€Œเดธเดฟโ€ŒเดŽเดฎเตเดฎเดฟเดจเดพเดฏเดฟ, เด…เดคเดพเดฃเต เดžเด™เตเด™เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเดคเต)

numChannels
2
เดšเดพเดจเดฒเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚
1/2, เดžเด™เตเด™เตพ 1 เดšเดพเดจเตฝ เดŽเดŸเตเด•เตเด•เตเด‚ (3/4/5/6/7... - เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโ€ŒเดŸ เด“เดกเดฟเดฏเต‹ เดŸเตเดฐเดพเด•เตเด•เต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต 4 เด•เตเดตเดพเดกเต เดธเต—เดฃเตเดŸเต เดฎเตเดคเดฒเดพเดฏเดต)

เดฎเดพเดคเตƒเด•เดพ เดจเดฟเดฐเด•เตเด•เต
4
เด“เดกเดฟเดฏเต‹ เดธเดพเดฎเตเดชเดฟเตพ เดจเดฟเดฐเด•เตเด•เต (เดนเต†เตผเดŸเตเดŸเตเดธเดฟเตฝ)
เด‰เดฏเตผเดจเตเดจเดคเต, เดถเดฌเตโ€Œเดฆเด‚ เดฎเดฟเด•เดšเตเดšเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เด…เดคเต‡ เดฆเตˆเตผเด˜เตเดฏเดฎเตเดณเตเดณ เด’เดฐเต เด“เดกเดฟเดฏเต‹ เดŸเตเดฐเดพเด•เตเด•เต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด•เต‚เดŸเตเดคเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด‚, เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดฎเต‚เดฒเตเดฏเด‚ 48000 เด†เดฃเต (เดเดฑเตเดฑเดตเตเด‚ เดธเตเดตเต€เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดถเดฌเตโ€Œเดฆ เดจเดฟเดฒเดตเดพเดฐเด‚)

เดฌเตˆเดฑเตเดฑเต เดฑเต‡เดฑเตเดฑเต
4
เดธเต†เด•เตเด•เตปเดกเดฟเตฝ เดฌเตˆเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚
เดฎเดพเดคเตƒเด•เดพ เดจเดฟเดฐเด•เตเด•เต numChannels bitsPerSample (เด•เต‚เดŸเตเดคเตฝ)

เดฌเตเดฒเต‹เด•เตเด•เตเด…เดฒเตˆเตป
2
เด’เดฐเต เดธเดพเดฎเตเดชเดฟเดณเดฟเดจเตเดณเตเดณ เดฌเตˆเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚
numChannels * bitsPerSample: 8

เดฌเดฟเดฑเตเดฑเตเดธเตเดชเต†เตผเดธเดพเดฎเตเดชเดฟเตพ
2
เด’เดฐเต เดธเดพเดฎเตเดชเดฟเดณเดฟเดฒเต† เดฌเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ (เด†เดดเด‚)
8 เดจเตเดฑเต† เด—เตเดฃเดฟเดคเดฎเดพเดฏ เดเดคเต เดธเด‚เด–เตเดฏเดฏเตเด‚. เด‰เดฏเตผเดจเตเดจ เดธเด‚เด–เตเดฏ, เดฎเดฟเด•เดšเตเดšเดคเตเด‚ เดญเดพเดฐเดฎเตเดณเตเดณเดคเตเดฎเดพเดฏ เด“เดกเดฟเดฏเต‹ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚; 32 เดฌเดฟเดฑเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดจเตเดทเตเดฏเตผเด•เตเด•เต เดตเตเดฏเดคเตเดฏเดพเดธเดฎเดฟเดฒเตเดฒ

เด‰เดชเดšเด™เตเด•เต2เดเดกเดฟ
4
เดกเดพเดฑเตเดฑ เดฑเดซเดฑเตปเดธเต เดฎเดพเตผเด•เตเด•เต (เด“เดกเดฟเดฏเต‹ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต เดฎเดฑเตเดฑเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเต เด˜เดŸเด•เด™เตเด™เตพ เด‰เดฃเตเดŸเดพเด•เดพเดฎเต†เดจเตเดจเดคเดฟเดจเดพเตฝ)
เดฌเดฟเด—เต-เดŽเตปเดกเดฟเดฏเดจเดฟเตฝ ("เดกเดพเดฑเตเดฑ") 0x64617461

เด‰เดชเดญเดพเด—เด‚2 เดตเดฒเดฟเดชเตเดชเด‚
4
เดกเดพเดฑเตเดฑ เดเดฐเดฟเดฏ เดตเดฒเดฟเดชเตเดชเด‚
int เดฒเต† เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดตเดฒเตเดชเตเดชเด‚

เดกเดพเดฑเตเดฑ
byteRate * เด“เดกเดฟเดฏเต‹ เดฆเตˆเตผเด˜เตเดฏเด‚
เด“เดกเดฟเดฏเต‹ เดกเดพเดฑเตเดฑ
?

เดตเต‡เดตเต เด‰เดฆเดพเดนเดฐเดฃเด‚

เดฎเตเดฎเตเดชเดคเตเดคเต† เดชเดŸเตเดŸเดฟเด• เดธเดฟเดฏเดฟเดฒเต† เด’เดฐเต เด˜เดŸเดจเดฏเดฟเดฒเต‡เด•เตเด•เต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เด‡เดจเตเดจเดคเตเดคเต† เดจเดฎเตเดฎเตเดŸเต† เดญเดพเดท เดชเตˆเดคเตเดคเตบ เด†เดฃเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดเดฑเตเดฑเดตเตเด‚ เดŽเดณเตเดชเตเดชเดฎเตเดณเตเดณ เด•เดพเดฐเตเดฏเด‚ เด’เดฐเต "เดคเดฐเด‚เด—เด‚" เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต - เด’เดฐเต เดถเดฌเตเดฆ เดœเดจเดฑเต‡เดฑเตเดฑเตผ. เดˆ เดŸเดพเดธเตเด•เตเด•เดฟเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดฏเตผเดจเตเดจ เดฌเตˆเดฑเตเดฑเตเดฑเต‡เดฑเตเดฑเตเด‚ เด•เด‚เดชเตเดฐเดทเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.
เด†เดฆเตเดฏเด‚, เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเดพเด‚:

# 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 (เดธเดพเดฎเตเดชเดฟเดณเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚) เดฎเดพเดคเตเดฐเด‚ เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดต เด•เต‚เดŸเตเดจเตเดคเต‹เดฑเตเด‚ เดจเดฎเตเดฎเตเดŸเต† เดฌเดนเดณเด‚ เดจเต€เดณเตเด‚.

numSamples = int(argv[1])
output_path = argv[2]

chunkId = b'RIFF'
Format = b'WAVE'
subchunk1ID = b'fmt '
subchunk1Size = b'x10x00x00x00'  # 0d16
audioFormat = b'x01x00'
numChannels = b'x02x00'  # 2-ั… ะบะฐะฝะฐะปะพะฒ ะฑัƒะดะตั‚ ะดะพัั‚ะฐั‚ะพั‡ะฝะพ (ัั‚ะตั€ะตะพ)
sampleRate = pack('<L', 1000)  # 1000 ั…ะฒะฐั‚ะธั‚, ะฝะพ ะตัะปะธ ะฟะพัั‚ะฐะฒะธั‚ัŒ ะฑะพะปัŒัˆะต, ั‚ะพ ัˆัƒะผ ะฑัƒะดะตั‚ ัะปั‹ัˆะตะฝ ะปัƒั‡ัˆะต. ะก 1000-ัŽ ะพะฝ ะทะฒัƒั‡ะธั‚, ะบะฐะบ ะฒะตั‚ะตั€
bitsPerSample = b'x20x00'  # 0d32
byteRate = pack('<L', 1000 * 2 * 4)  # sampleRate * numChannels * bitsPerSample / 8  (32 bit sound)
blockAlign = b'x08x00'  # 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]
เดธเดพเดฎเตเดชเดฟเดณเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ - เดŽเดฃเตเดฃเด‚. เดธเดพเดฎเตเดชเดฟเดณเตเด•เตพ
output โ€” เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค

เดถเดฌเตโ€Œเดฆเดฎเตเดณเตเดณ เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เด“เดกเดฟเดฏเต‹ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เดฒเดฟเด™เตเด•เต เด‡เดคเดพ, เดŽเดจเตเดจเดพเตฝ เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเดพเดญเดฟเด•เตเด•เดพเตป เดžเดพเตป BPS 1b/s เด†เดฏเดฟ เดคเดพเดดเตเดคเตเดคเดฟ เดšเดพเดจเดฒเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ 1 เด†เดฏเดฟ เดคเดพเดดเตเดคเตเดคเดฟ (32kbs-เตฝ 64-เดฌเดฟเดฑเตเดฑเต เด…เตบ เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดฏเดพเดคเตเดค เดธเตเดฑเตเดฑเต€เดฐเดฟเดฏเต‹ เด“เดกเดฟเดฏเต‹ เดธเตเดŸเตเดฐเต€เด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด…เดคเต เดฎเดพเดฑเดฟ 80M เดถเตเดฆเตเดงเดฎเดพเดฏ .wav เดซเดฏเตฝ, เด•เต‚เดŸเดพเดคเต† 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'x10x00x00x00'  # 0d16
audioFormat = b'x01x00'
numChannels = b'x02x00'  # 2-ั… ะบะฐะฝะฐะปะพะฒ ะฑัƒะดะตั‚ ะดะพัั‚ะฐั‚ะพั‡ะฝะพ (ัั‚ะตั€ะตะพ) 
sampleRate = pack('<L', 1000)  # 1000 ั…ะฒะฐั‚ะธั‚, ะฝะพ ะผะพะถะฝะพ ะธ ะฑะพะปัŒัˆะต.
bitsPerSample = b'x20x00'  # 0d32
byteRate = pack('<L', 1000 * 2 * 4)  # sampleRate * numChannels * bitsPerSample / 8  (32 bit sound)
blockAlign = b'x08x00'  # 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 - เดตเดฟเด•เตเด•เดฟเดชเต€เดกเดฟเดฏ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•