Java - файл Wav - нулевой байт? - PullRequest
0 голосов
/ 26 марта 2012

У меня странный вопрос.Прямо сейчас я могу читать образцы wav-файлов и после их обработки сохранять их снова в файл.Но для моего проекта я должен изменить некоторые байты с нулевым значением.Я имею в виду, если я вставлю какое-то целое число в файл wav (например, двоичную форму 25), это означает, что звуковая карта выдаст нам электрический сигнал, который питается от 25 (у меня может быть некоторое недопонимание относительно концепции звуковых карт и файлов wav).

Но в моем проекте мне нужно поместить значения null в файл wav.Например, когда звуковая карта читает двоичную форму 25, она подает сигнал, но после этого будет нулевой байт, и звуковая карта не будет давать электрический сигнал, поскольку приходит другое значение.

Я знаю, я не мог правильно выразить свой вопрос.Чтобы сделать его более понятным;

Предположим, что существует файл, который хранится таким образом

data[] = {10,12,13,14,15,14,13,12,11,10};

Я хочу сделать его

data[]= {10,12,13,14,null,null,null,12,11,10}

и когда звуковая карта прочитанаэти данные, это даст нам, например,

10 voltage,12 voltage,13 voltage,14 voltage,no any signal,no any signal,no any signal,12 voltage, 11 voltage, 10 voltage}

Ответы [ 3 ]

0 голосов
/ 26 марта 2012

Вы не можете поместить null в файл, когда имеете дело с байтами - каждый байт должен быть одной из 256 комбинаций битов.

Что именно вы имеете в виду, когда звуковая карта возвращает no any signal? Разве это не эквивалентно нулевому напряжению (т. Е. Использовать целое значение 0 в файле)? Или вы используете null в качестве заполнителя для представления "unknown"?

Возможно, вы по-прежнему не выражаете свой вопрос полностью - похоже, вы решили, что вам нужно поместить пустые значения в файл, и не похоже, что вы это оправдываете. Чего вы на самом деле пытаетесь достичь (не «помещать нули в WAV») - и будет ли это работать с нулями?

0 голосов
/ 26 марта 2012

Нет "нулевого сигнала".Если вы имеете в виду, что не хотите выводить, просто отправьте 0 (если вы используете подписанные значения).Если вы используете значения без знака (которые не поддерживаются Java), отправьте 128 для 8-битных выборок и 32768 для 16-битных выборок.

Так что просто скажите

data[]= {10,12,13,14,0,0,0,12,11,10};

, а затемчто-то вроде

yourSoundCardObject.write(data); //The method write is hypothetical

Какова ваша частота дискретизации?

0 голосов
/ 26 марта 2012

Я сомневаюсь, что WAV-файл имеет особый способ представления «нет сигнала» в середине сигнала. (Беглое чтение этого описания , кажется, подтверждает это.)

Я думаю, что вам лучше всего использовать нули там, где у вас нет сигнала. (Очевидно, что нули необходимо будет кодировать с использованием выбранного кодека.)


Кстати, даже если бы в файле WAV был способ представления «без сигнала», он не включал бы помещение значений null в массив байтов Java. Массив байтов Java не может содержать null s ... никогда. Спецификация языка Java запрещает это.

...