Apa dan bagaimana pengodean file audio mentah (tanpa header)?


8

Saya telah melakukan ini:

me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw

yang menghasilkan file audio tanpa header. Hal yang luar biasa tentang file ini adalah dapat digabungkan (menggunakan cat, seperti teks) dengan file audio mentah lainnya.

Tentu saja, saya punya masalah. Masalahnya adalah saya belum bisa memainkannya.

me@riverbrain:~/sgf$ play test.raw 

play FAIL formats: bad input format for file `test.raw': sampling rate was not specified

dan juga, ketika menentukan tingkat sampel

me@riverbrain:~/sgf$ play -r 16000 test.raw 
play FAIL formats: bad input format for file `test.raw': data encoding was not specified

Ketika saya mencari beberapa informasi 'penyandian', saya merasa itu ada hubungannya dengan arsitektur prosesor Anda, tapi mungkin saya salah. Lagi pula, saya tidak dapat menemukan dokumentasi tentang cara 'bertanya' pada komputer apa data encoding file audio mentah itu. Dan saya juga tahu berapa sample rate, karena mengaturnya sendiri, tapi sejauh yang saya bisa dapatkan.


2
Tidak ada format baku baku. Anda perlu mengetahui parameter apa yang digunakan oleh aplikasi yang menghasilkannya. Sayangnya, itu tidak selalu didokumentasikan dengan baik.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:


8

Dapat bervariasi — tetapi setidaknya bagi saya, text2wave menghasilkan 1-channel, 16-bit, integer PCM yang ditandatangani. Ini cukup normal — dan itu akan menjadi sangat jelas ketika Anda memilikinya dengan benar (misalnya, jika Anda unsigned-integer karena kesalahan, Anda akan mendapatkan suara yang sangat terdistorsi)

Dengan bermain, itu terlihat seperti:

play -r 16000 -b 16 -c 1 -e signed-integer /tmp/foo.raw
play -r 16000 -2 -s -c 1 /tmp/foo.raw # obsolete way for older versions of Sox

Parameter ini dikonfigurasi di Festival di suatu tempat, saya kira. Beberapa dari mereka mungkin juga hardcoded.

Satu-satunya hal yang bergantung pada arsitektur yang mungkin Anda temui adalah big vs little endian; pada mesin little-endian saya Festival menulis little-endian; jika saya memindahkan file itu ke mesin big-endian saya mungkin perlu menambahkan -L. Jika text2wavdijalankan pada mesin big-endian, saya tidak yakin apakah itu akan menulis data big-atau-endian.


Terima kasih. semua tanggapan ini luar biasa, tetapi inilah solusi yang akhirnya saya gunakan.
ixtmixilix

2

Anda mungkin dapat membuat tajuk RIFF Anda sendiri. Sedikit bashing harus melakukannya .. dan taruh saja header ke bagian Anda yang lain ...

Tautan ini menunjukkan tata letak tajuk: Format file Canonical WAVE

Ada juga tautan terkait pada SO: Konversi data audio RAW ke WAV dengan scripting , tetapi jawaban mplayer / mencoder memiliki angka nol yang ditandai. Namun, semoga SoX berfungsi.

SoX disebutkan di kedua tautan di atas, dan tersedia di repo Ubuntu; Saya kira itu pada orang lain juga.

PS ... Saya baru saja mencoba menggunakan play(tidak tahu itu ada) dan menemukan itu adalah SoX! ... Tautan SO memberikan contoh, disalin di sini:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

Jika Anda tidak dapat membuatnya bekerja dengan sox , mungkin mplayer / mencoder atau header RIFF akan membuatnya sesuai untuk Anda.


2

Gunakan aplayalih-alih playmemainkan file mentah, dengan cara ini Anda dapat menentukan bahwa itu adalah audio mentah dengan -t switch:

aplay -q -c 2 -t raw -f s16 test.raw
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.