Mã hóa của tệp âm thanh thô (không tiêu đề) là gì và như thế nào?


8

Tôi đã làm điều này:

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

trong đó tạo ra một tập tin âm thanh không tiêu đề. Điều tuyệt vời về tệp này là nó có thể được nối (sử dụng cat, như văn bản) với một tệp âm thanh thô khác.

Tất nhiên, tôi có một vấn đề. Vấn đề là tôi chưa thể chơi nó.

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

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

và ngoài ra, khi chỉ định tỷ lệ mẫu

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

Khi tôi tra cứu một số thông tin 'mã hóa' tôi có cảm giác rằng nó có liên quan nhiều đến kiến ​​trúc bộ xử lý của bạn, nhưng có lẽ tôi đã sai. Dù sao, tôi không thể tìm thấy bất kỳ tài liệu nào về cách 'hỏi' máy tính mã hóa dữ liệu của tệp âm thanh thô là gì. Và tôi cũng biết tỷ lệ mẫu là bao nhiêu, do tự đặt nó, nhưng đó là tất cả những gì tôi có thể có được.


2
Không có định dạng thô tiêu chuẩn. Bạn cần tìm ra những thông số mà ứng dụng đã tạo ra nó sử dụng. Thật không may, điều đó không phải lúc nào cũng được ghi chép lại.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


8

Nó có thể khác nhau nhưng ít nhất là đối với tôi, text2wave tạo ra PCM số nguyên 1 kênh, 16 bit, có chữ ký. Đây là những trò chơi khá bình thường và sẽ rất rõ ràng khi bạn có chúng đúng (ví dụ: nếu bạn không xác định số nguyên do nhầm lẫn, bạn sẽ nhận được âm thanh cực kỳ méo)

Với chơi, nó trông giống như:

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

Những thông số này được cấu hình trong Festival ở đâu đó, tôi nghi ngờ. Một số trong số họ có thể được mã hóa là tốt.

Điều duy nhất phụ thuộc vào kiến ​​trúc mà bạn có thể gặp là lớn so với endian nhỏ; trên Liên hoan máy móc nhỏ bé của tôi đang viết một chút về cuối; nếu tôi chuyển tập tin đó sang một máy cuối lớn, tôi có thể cần phải thêm -L. Nếu text2wavđược chạy trên một máy endian lớn, tôi không chắc nó sẽ ghi dữ liệu lớn hay nhỏ.


cảm ơn bạn. tất cả những phản hồi này đều tuyệt vời, nhưng đây là giải pháp tôi đã sử dụng.
ixtmixilix

2

Bạn có thể có thể tạo tiêu đề RIFF của riêng bạn. Một chút bash nên làm điều đó .. và chỉ cần đưa tiêu đề vào (các) phần khác của bạn ...

Liên kết này hiển thị bố cục tiêu đề: Định dạng tệp Canonical WAVE

Ngoài ra còn có một liên kết liên quan trên SO: Chuyển đổi dữ liệu âm thanh RAW sang WAV bằng cách viết kịch bản , nhưng các câu trả lời của mplayer / mencoder có số lượng không được đánh dấu. Tuy nhiên, có vẻ như SoX hoạt động.

SoX được đề cập trong cả hai liên kết trên và có sẵn trong repo của Ubuntu; Tôi cho rằng nó cũng ở người khác.

Tái bút ... Tôi vừa thử sử dụng play(không biết nó tồn tại) và phát hiện ra nó là SoX! ... Liên kết SO đưa ra một ví dụ, được sao chép ở đây:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

Nếu bạn không thể làm cho nó hoạt động với sox , có thể mplayer / mencoder hoặc tiêu đề RIFF sẽ giúp bạn làm điều đó.


2

Sử dụng aplaythay vì playphát tệp thô, bằng cách này, bạn có thể chỉ định rằng đó là âm thanh thô bằng công tắc -t:

aplay -q -c 2 -t raw -f s16 test.raw
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.