Например, если я прохожу (1,0F, 0,0F), то пользователи могут слышать звук только по левому уху. (1,0F, 1,0F) будет нормальным (в центре). Паннирование не было проблемой ... пока я не столкнулся с обработкой стерео звуков. Я знаю, что делать для выполнения панорамирования с помощью данных стерео PCM, но я не знаю, как выполнить естественный панорамирование. Напротив, если я попытаюсь изменить все звук на правую сторону, то левый канал звука должен быть воспроизведен в правой стороне. Я также заметил, что есть что -то, называемое правилом панорамирования , что означает, что звук должен быть немного громче, когда он смещен в сторону (около +3DB). Я попытался найти способ выполнить естественный эффект панорамирования, но я действительно не мог найти алгоритм или его ссылку.
Код: Выделить всё
[left_channel_sample_0, right_channel_sample_0, left_channel_sample_1, right_channel_sample_1,
...,
left_channel_sample_n, right_channel_sample_n]
< /code>
И я должен передать этот массив PCM к аудио -потоку, например, C ++ Код ниже < /p>
void PlayerQueue::renderStereo(float * audioData, int32_t numFrames) {
for(int i = 0; i < numFrames; i++) {
//When audio file is stereo...
if(player->isStereo) {
if((offset + i) * 2 + 1 < player->data.size()) {
audioData[i * 2] += player->data.at((offset + i) * 2);
audioData[i * 2 + 1] += player->data.at((offset + i) * 2 + 1);
} else {
//PCM data reached end
break;
}
} else {
//When audio file is mono...
if(offset + i < player->data.size()) {
audioData[i * 2] += player->data.at(offset + i);
audioData[i * 2 + 1] += player->data.at(offset + i);
} else {
//PCM data reached end
break;
}
}
//Prevent overflow
if(audioData[i * 2] > 1.0)
audioData[i * 2] = 1.0;
else if(audioData[i * 2] < -1.0)
audioData[i * 2] = -1.0;
if(audioData[i * 2 + 1] > 1.0)
audioData[i * 2 + 1] = 1.0;
else if(audioData[i * 2 + 1] < -1.0)
audioData[i * 2 + 1] = -1.0;
}
//Add numFrames to offset, so it can continue playing PCM data in next session
offset += numFrames;
if(offset >= player->data.size()) {
offset = 0;
queueEnded = true;
}
}
< /code>
Я исключил расчет воспроизведения, манипулирующего манипулированием для упрощения кода. Как видите, я должен вручную передавать данные PCM в Audiodata < /li>
[*] При применении правила панорамирования, какова взаимосвязь между PCM и Decibel? Я знаю, как изготовить звук громче, но я не знаю, как изготовить звук громче с точным децибелом. Есть ли формула для этого?
Подробнее здесь: https://stackoverflow.com/questions/670 ... -naturally
Мобильная версия