小编bar*_*que的帖子

如何用 Oboe 正确播放解码的内存 PCM?

我使用oboe来播放 ndk 库中的声音,并使用带有 Android 扩展的 OpenSL将 wav 文件解码为 PCM。解码后的带符号 16 位 PCM 存储在内存中 ( std::forward_list<int16_t>),然后通过回调将它们发送到双簧管流中。我从手机中听到的声音在音量级别上与原始 wav 文件相似,但是这种声音的“质量”却并非如此——它会爆裂和爆裂。

我猜测我以错误的顺序或格式(采样率?)在音频流中发送 PCM。如何使用 OpenSL 解码双簧管音频流?


要将文件解码为 PCM,我使用AndroidSimpleBufferQueue作为接收器,并使用AndroidFD和AAssetManager作为源:

// Loading asset
AAsset* asset = AAssetManager_open(manager, path, AASSET_MODE_UNKNOWN);
off_t start, length;
int fd = AAsset_openFileDescriptor(asset, &start, &length);
AAsset_close(asset);

// Creating audio source
SLDataLocator_AndroidFD loc_fd = { SL_DATALOCATOR_ANDROIDFD, fd, start, length };
SLDataFormat_MIME format_mime = { SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED };
SLDataSource audio_source = { &loc_fd, &format_mime }; …
Run Code Online (Sandbox Code Playgroud)

audio android android-ndk oboe

5
推荐指数
1
解决办法
1803
查看次数

标签 统计

android ×1

android-ndk ×1

audio ×1

oboe ×1