Có một chút rắc rối trong vài ngày qua để cố gắng thực hiện điều này. Nhưng điều tôi muốn là chúng tôi có một ứng dụng gửi dữ liệu thô qua mạng. Sau đó tôi đọc dữ liệu nhị phân này và muốn lưu nó vào tệp wav (bất kỳ âm thanh) nào. Có thể xem xét nén sau.Lưu byte âm thanh [] vào tập tin wav
Vì vậy, các mã có vấn đề:
byte[] allBytes = ...
InputStream b_in = new ByteArrayInputStream(allBytes);
try
{
AudioFormat format = new AudioFormat(8000f, 16, 1, true, true);
AudioInputStream stream = new AudioInputStream(b_in, format, allBytes.length);
//AudioInputStream stream = AudioSystem.getAudioInputStream(b_in);
đã cố gắng sử dụng các tuyên bố trên cũng nhưng tôi có được ngoại lệ: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream
. Vì vậy, những gì tôi nghĩ là xảy ra là bởi vì dòng của tôi là dữ liệu âm thanh thô và không có một tiêu đề sóng này là ném một ngoại lệ?
File newPath = new File(SystemConfiguration.getLatest().voiceNetworkPathDirectory + currentPhoneCall.fileName);
if (!AudioSystem.isFileTypeSupported(Type.WAVE, stream))
{
Logger.error("Audio System file type not supported");
}
AudioSystem.write(stream, Type.WAVE, newPath);
Các tập tin không viết thành công nhưng đó là tất cả tĩnh, Tôi có cần phải tạo ra một tiêu đề sóng trên đầu ra bằng cách sử dụng một cái gì đó giống như this. Khi tôi nhìn vào tập tin wav outputted trong notepad và nó dường như có một tiêu đề khi nó bắt đầu với 'RIFF'.
Tôi có cần thêm tiêu đề giả vào luồng nhập liệu của mình không? Tôi có nên tạo tiêu đề đầu ra của riêng mình và chỉ lưu nó với một trình ghi nhị phân không?
Đã xảy ra sự cố với bài đăng của bạn. Bạn đang thiếu dữ liệu/định dạng. – user845279
Cách so sánh với các tệp WAVE hợp lệ khác? Khi bạn chọn một trong số chúng, sao chép dữ liệu sau tiêu đề và sau đó đặt dữ liệu thô lên mã vào mảng allBytes của bạn. Sau khi chạy mã của bạn, bạn có thể chỉ cần so sánh 2 tệp sóng. Nếu nó không giống nhau, thì một trong hai mã là xấu hoặc bạn cần phải hiểu định dạng sóng. –
đối số 'length' trong hàm tạo của' AudioInputStream' phải là giá trị độ dài khung thay vì độ dài dữ liệu. 'frame-length = data-length/channel/sample-size-in-byte' –