Я читаю звук с помощью звука JAVA API, и я бы хотел восстановить уровень сигнала. У меня нет никаких проблем, чтобы прочитать файл и вот код я использую, чтобы попытаться получить уровень сигнала:Получить уровень сигнала в звуке API Java
for (byte bit:bytes) {
if (i<2) {
signalLevelLeft=signalLevelLeft+Math.abs(bit);
System.out.println("Left : "+i+" - "+bit);
i++;
} else if (2<=i && i<3) {
signalLevelRight=signalLevelRight+Math.abs(bit);
//System.out.println("Right : "+i+" - "+bit);
i++;
} else if (i==3) {
signalLevelRight=signalLevelRight+Math.abs(bit);
//System.out.println("Right : "+i+" - "+bit);
i=0;
}
if (signalLevelLeft>maxLeft) {
maxLeft= signalLevelLeft;
System.out.println("Max left : " + maxLeft);
}
После того как я получаю audioInputStream, формат, линия, открыта линия (..), вот код, я использую, чтобы прочитать звук и кормить метод видели чуть выше:
try {
byte bytes[] = new byte[1024];
int bytesRead=0;
while (((bytesRead = audioInputStream.read(bytes, 0, bytes.length)) != -1) && !stop) {
line.write(bytes, 0, bytesRead);
}
} catch (IOException io) {
io.printStackTrace();
return;
}
чтобы проверить уровень сигнала, я сгенерировал квадратичный сигнал только на левый канал с дерзостью, и я прочитал его с моим кодом (будьте осторожны, если вы это сделаете, этот звук действительно уродлив). Вот результаты: На правом канале он идеально подходит, сигнал 0 везде:
Справа: 2 - 0
Справа: 3 - 0
Справа: 2 - 2
справа: 3 - 0 (...)
на левом канале, у меня есть этот странный результат:
слева: 0 - 0
Слева: 1 - -128
Слева: 0 - 1
Слева: 1 - -128 (...)
Слева: 0 - -1
Слева: 1 - 127
слева: 0 - -1
слева: 1 - 127
Почему у меня есть эти 0 на левом канале? Поскольку у меня есть квадратичный сигнал, я думал, что ВАВЭ такой результат:
Слева: 0 - -128
Слева: 1 - -128
Слева: 0 - -128
слева: 1 - -128 (...)
слева: 0 - 127
слева: 1 - 127
Слева: 0 - 127
Слева: 1 - 127
Конечно, у меня есть такой же странный результат с правым только сигналом и даже с стереосигнала: Кажется, что только одна информация по 2 нести сигнал. Я также проверил с максимальным увеличением на Audacity, и это действительно квадрат с любыми 0 ...
Благодарим вас за ответы и прекрасный день.
ли вы собрать байты в PCM, прежде чем квадратуры? Каков формат звуковой кодировки? –
Когда я создаю звуковой файл в Audacity, я просто перехожу в меню Generate, затем Sound, затем выбираю «squarred wave» с частотой 440 Гц с максимальным диапазоном 1 (от 0 до 1). Когда это будет сделано, я сохраню звук в виде WAV-файла PCM, подписанного 16 бит. –
Это означает, что для каждого значения PCM требуется два байта. Возможно, вы сможете лучше понять результаты, если собрать байты в значения PCM, которые они представляют. –