Zapisywanie bajtu audio [] do pliku wav
W ciągu ostatnich kilku dni miałem trochę kłopotów, próbując doprowadzić to do skutku. Ale chcę, żebyśmy mieli aplikację, która wysyła surowe dane przez sieć. Następnie czytam te dane binarne i chcę je zapisać w pliku wav (dowolnym audio). Może wyglądać na kompresję później.
Więc problematyczny kod:
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);
Próbowałem również użyć powyższej instrukcji, ale otrzymuję wyjątek:javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream
. Tak więc myślę, że dzieje się tak, ponieważ mój strumień jest surowymi danymi audio i nie ma nagłówka fali, co powoduje wyjątek?
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);
Plik pomyślnie zapisuje, ale wszystko jest statyczne. Czy muszę utworzyć nagłówek wave na wyjściu, używając czegoś podobnegoto. Kiedy patrzę na wyprowadzony plik wav w notatniku i wydaje się, że ma nagłówek, ponieważ zaczyna się od „RIFF”.
Czy muszę dodać fałszywy nagłówek do mojego strumienia wejściowego? Czy powinienem po prostu utworzyć własny nagłówek wyjściowy i po prostu zapisać go za pomocą programu do zapisu binarnego?