繁体   English   中英

Android oboe c ++有些声音在播放时失真

[英]Android oboe c++ Some sounds distorted on playback

我在音乐游戏中使用Android双簧管库来获得高性能音频。

在assets文件夹中,我有2个.raw文件(48000Hz 16位PCM wavs和大约60kB)std_kit_sn.raw std_kit_ht.raw

它们作为SoundRecordings加载到内存中并添加到混音器中。 kSampleRateHz是48000:

stdSN= SoundRecording::loadFromAssets(mAssetManager, "std_kit_sn.raw");
stdHT= SoundRecording::loadFromAssets(mAssetManager, "std_kit_ht.raw");
mMixer.addTrack(stdSN);
mMixer.addTrack(stdFT);

// Create a builder
AudioStreamBuilder builder;
builder.setFormat(AudioFormat::I16);
builder.setChannelCount(1);
builder.setSampleRate(kSampleRateHz);
builder.setCallback(this);
builder.setPerformanceMode(PerformanceMode::LowLatency);
builder.setSharingMode(SharingMode::Exclusive);
LOGD("After creating a builder");

// Open stream
Result result = builder.openStream(&mAudioStream);
if (result != Result::OK){
    LOGE("Failed to open stream. Error: %s", convertToText(result));
}
LOGD("After openstream");

// Reduce stream latency by setting the buffer size to a multiple of the burst size
mAudioStream->setBufferSizeInFrames(mAudioStream->getFramesPerBurst() * 2);

// Start the stream
result = mAudioStream->requestStart();
if (result != Result::OK){
    LOGE("Failed to start stream. Error: %s", convertToText(result));
}
LOGD("After starting stream");

在适当的时间调用它们以使用标准代码(根据Google教程):

stdSN->setPlaying(true);
stdHT->setPlaying(true); //Nasty Sound

音频回调是标准的(根据Google教程):

DataCallbackResult SoundFunctions::onAudioReady(AudioStream *mAudioStream, void *audioData, int32_t numFrames) {

    // Play the stream
    mMixer.renderAudio(static_cast<int16_t*>(audioData), numFrames);
    return DataCallbackResult::Continue;

}

std_kit_sn.raw播放正常。 但是std_kit_ht.raw有一个令人讨厌的失真。 两者都具有低延迟。 为什么一个人打得好,另一个人有一个令人讨厌的失真?

我加载了您的示例项目,我相信您听到的失真是由于混合声音时的剪切/环绕造成的。

样品中的Mixer对象是求和混合器。 它只是将每个轨道的值加在一起并输出总和

您需要添加一些代码来减少每个轨道的音量以避免超出int16_t的限制(尽管欢迎您在oboe项目中提交错误,我将尝试在即将发布的版本中添加此错误)。 如果超过此限制,您将获得导致失真的环绕。

此外,您的应用程序硬编码为22050帧/秒。 这将导致大多数移动设备的次优延迟,因为流被迫上采样到音频设备的本机帧速率。 更好的方法是在打开流时保持采样率未定义 - 这将为您提供当前音频设备的最佳帧速率 - 然后在源文件上使用重新采样器以此帧速率提供音频。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM