#android #c #audio #oboe
#Android #c #Аудио #oboe
Вопрос:
Иногда я хочу, чтобы мой аудиовыход в Oboe ничего не воспроизводил, но я не хочу, чтобы он останавливался, я просто хочу, чтобы он был тихим, пока данные не поступают. Я пытался:
static void writeBlankData(float* pointer, int numFrames) {
std::fill_n(pointer, numFrames, 0);
}
oboe::DataCallbackResult PlayRecordingCallback::onAudioReady(
oboe::AudioStream *audioStream,
void *audioData,
int numFrames) {
float *floatData = (float *) audioData;
writeBlankData(floatData, numFrames);
return oboe::DataCallbackResult::Continue;
}
но я слышу жужжание на аудиовыходе вместо тишины. Разве массив 0
s не должен быть silence? Я также пробовал -1.0f
, что дает другое жужжание.
Ответ №1:
Наиболее вероятной причиной является то, что поток в стерео, поэтому имеет 2 сэмпла на кадр. Ваш текущий код предполагает монофонический поток.
Попробуйте изменить:
writeBlankData(floatData, numFrames);
Для:
writeBlankData(floatData, numFrames * audioStream->getChannelCount());
Комментарии:
1. Привет, Дон, запись пустых данных вызывает какие-либо накладные расходы? Например, расход батареи и т.д. В моем приложении я хочу воспроизводить звук только тогда, когда пользователь нажимает кнопку, чтобы получить минимальную задержку, должен ли я держать поток открытым и записывать непустые данные только тогда, когда пользователь нажимает кнопку?
2. Будет некоторое дополнительное энергопотребление, связанное с сохранением потока открытым. У меня нет никаких данных о том, сколько дополнительной мощности используется, но я не думаю, что это существенно по сравнению с сохранением экрана включенным.