Halo Seri artikel pertama saya akan ditujukan untuk mempelajari metode mengompresi dan menyimpan gambar / suara, seperti JPEG (gambar) dan WAVE (suara), dan mereka juga akan memasukkan contoh program menggunakan format ini (.jpg, .wav) dalam praktiknya. Pada bagian ini kami akan mempertimbangkan WAVE.
Ceritanya
WAVE (Waveform Audio File Format) adalah format file kontainer untuk menyimpan rekaman stream audio. Wadah ini biasanya digunakan untuk menyimpan suara yang tidak dikompresi dalam modulasi kode pulsa. (Diadaptasi dari Wikipedia)
Itu diciptakan dan diterbitkan pada tahun 1991 bersama dengan RIFF oleh Microsoft dan IBM (Perusahaan IT terkemuka saat itu).
Struktur file
File memiliki bagian header, data itu sendiri, tetapi tidak ada footer. Header memiliki berat total 44 byte.
Header berisi pengaturan untuk jumlah bit dalam sampel, frekuensi descritization, kedalaman suara, dll. informasi yang diperlukan untuk kartu suara. (Semua nilai tabel numerik harus ditulis dalam urutan Little-Endian)
WAVE contohnya
Tabel sebelumnya dapat dengan mudah diterjemahkan ke dalam struktur C, tapi hari ini bahasa kita adalah Python. Hal termudah untuk dilakukan menggunakan gelombang adalah generator kebisingan. Untuk tugas ini, kita tidak perlu byteRate dan kompresi tinggi.
Untuk memulai, kami mengimpor modul yang diperlukan:
Selanjutnya, kita perlu membuat semua variabel yang diperlukan dari tabel sesuai dengan ukurannya. Nilai variabel di dalamnya hanya bergantung pada numSamples (jumlah sampel). Semakin banyak, semakin lama kebisingan kita pergi.
numSamples = int(argv[1]) output_path = argv[2] chunkId = b'RIFF' Format = b'WAVE' subchunk1ID = b'fmt ' subchunk1Size = b'\x10\x00\x00\x00'
Tinggal menuliskannya dalam urutan yang diperlukan (seperti pada tabel):
with open(output_path, 'wb') as fh: fh.write(chunkId + chunkSize + Format + subchunk1ID + subchunk1Size + audioFormat + numChannels + sampleRate + byteRate + blockAlign + bitsPerSample + subchunk2ID + subchunk2Size + data)
Dan, selesai. Untuk menggunakan skrip, kita perlu menambahkan argumen baris perintah yang diperlukan:
python3 WAV.py [num of samples] [output]
jumlah sampel - hitung sampel
output - path ke file output
Berikut ini tautan ke file audio uji dengan noise, tetapi untuk menghemat memori, saya menurunkan BPS ke 1b / s dan menurunkan jumlah saluran menjadi 1 (dengan streaming audio stereo 32-bit tanpa kompresi di 64kbs, kami mendapat file bersih .wav 80M, dan hanya 10): https: / /instaud.io/3Dcy
Seluruh kode (WAV.py) (kode memiliki banyak nilai duplikat variabel, ini hanya sketsa):
from struct import pack
Ringkasan
Jadi Anda belajar lebih banyak tentang suara digital dan bagaimana cara menyimpannya. Dalam posting ini kami tidak menggunakan kompresi (audioFormat), tetapi untuk meninjau setiap artikel populer Anda akan membutuhkan artikel 10. Saya harap Anda mempelajari sesuatu yang baru untuk diri Anda sendiri dan ini akan membantu Anda dalam pengembangan di masa depan.
Terima kasih
Sumber
Struktur file WAV
WAV - Wikipedia