Articles of opensl

使用Android上的OpenSL ES通过套接字通信流式传输MP3音频

我正在尝试使用WiFi通过接入点将MP3从Android手机流式传输到另一部Android手机。 问题是OpenSL ES似乎只支持PCM音频缓冲区作为源(除非使用URI)。 而不是在发送之前解码“主”侧的潜在巨大文件,我宁愿让“客户端”将MP3解码为PCM。 请记住,这必须作为文件流发生,而不是简单地发送整个文件然后解码。 有没有办法使用OpenSL ES来实现这一目标? AudioTrack? 这似乎是一个相当普遍的要求。

什么原因在Android中使用OpenSL ES而不是AudioTrack?

目前我正在使用AudioTrack传递来自本机层的音频数据来播放。 我似乎可以在本机层使用OpenSL ES而不是Java中的AudioTrack。 与AudioTrack相比,OpenSL ES提供了哪些优势?

是否可以在Android上访问扬声器信号?

将音频发送到扬声器以便在Android上播放很容易,但是是否可以获得实际最终数字信号的副本? 假设我有两个运行“MyApp”和“SomeOtherApp”的应用程序。 我的应用程序向扬声器发送音频,但“SomeOtherApp”也是如此。 “SomeOtherApp”不是我的应用程序 – 它是第三方应用程序。 是否有可能获得操作系统播放到扬声器的混合音频信号的副本? 也就是说,音频信号是来自我的app的扬声器信号和来自“SomeOtherApp”的扬声器信号的混合。 总结一下:我正在寻找一种方法来连接低级音频路径(HAL音频流输出 – 混音后!)所以我可以获得“最终”扬声器信号的副本(实时)。 最理想的情况是,我还想加入低级麦克风路径,但现在这不是一个问题。

重定向音频/在Android中创建备用声音路径

有没有人有经验(使用OpenSL ES,ALSA等)在Android中重定向音频或创建新的声音路径? 最终目标是创建一个虚拟麦克风来替换外部麦克风,在那里可以播放音频文件,就好像他们正在对着麦克风讲话一样。 使用AudioSource.MIC访问麦克风的应用程序应使用此备用流。 它没有必要使用语音呼叫,我相信实现这种function更难,因为它都是在无线电中完成的。 关于从哪里开始的任何想法? 我已经用OpenSL和ALSA做了一些研究,但看起来我需要打包新固件(ROM)才能定义自定义音频路径。 如果可以避免,我想创建一个应用程序级解决方案。 这些手机是“扎根”的(有su二进制文件)。 目标设备是三星Galaxy S4谷歌版(GT-i9505G)。 具体来说,我正在寻找音频驱动程序配置/源代码或i9505G的任何参考。 提前致谢! 编辑 – 我已经检查了CyanogenMod 10.2源代码树,以及jfltexx驱动程序和内核。 以下是kernel / samsung / jf / sound的内容: http : //pastebin.com/7vK8THcZ 。 这在任何地方记录?

在Android上使用OpenSL ES通过套接字通信stream式传输MP3audio

我试图通过接入点将Android手机中的MP3stream式传输到另一款使用WiFi的Android手机。 问题是,OpenSL ES似乎只支持PCMaudio缓冲区作为源(除非使用URI)。 在发送之前,我并不是在“主”端解码一个潜在的巨大文件,而是希望让“客户端”将MP3解码成PCM。 请记住,这必须发生在文件stream,而不是简单地发送整个文件,然后解码。 有什么办法可以使用OpenSL ES来完成这个任务吗? AudioTrack? 这似乎是一个相当普遍的要求。

在Android中使用OpenSL ES而不是AudioTrack应该是什么原因?

目前我正在使用AudioTrack传递来自本地层的audio数据进行播放。 看来我可以在本地层使用OpenSL ES,而不是Java中的AudioTrack。 与AudioTrack相比,OpenSL ES提供的优势是什么?

是否可以直接从OpenSL ES中的audio资产(Android)获取字节缓冲区?

我想从使用OpenSL ES FileDescriptor对象的audio资产中获得一个字节缓冲区,所以我可以将它重复排入SimpleBufferQueue,而不是使用SL接口来播放/停止/查找文件。 有三个主要原因,我想直接pipe理示例字节: OpenSL使用AudioTrack层来播放/停止播放器对象等。 这不仅会引入不必要的开销,而且还会有一些错误,玩家的快速启动/停止会带来很多问题。 我需要直接操作字节缓冲区来定制DSP效果。 我要播放的片段很小,可以全部加载到内存中以避免文件I / O开销。 另外,排队我自己的缓冲区将允许我通过写入0到输出接收器来减less延迟,并且当他们正在播放时简单地切换到采样字节,而不是停止,暂停和播放audio轨道。 好吧,理由完成 – 这是我已经尝试过 – 我有一个示例结构,其中本质上包含一个input和输出轨道,和一个字节数组来保存样本。 input是我的FileDescriptor播放器,输出是一个SimpleBufferQueue对象。 这是我的结构: typedef struct Sample_ { // buffer to hold all samples short *buffer; int totalSamples; SLObjectItf fdPlayerObject; // file descriptor player interfaces SLPlayItf fdPlayerPlay; SLSeekItf fdPlayerSeek; SLMuteSoloItf fdPlayerMuteSolo; SLVolumeItf fdPlayerVolume; SLAndroidSimpleBufferQueueItf fdBufferQueue; SLObjectItf outputPlayerObject; SLPlayItf outputPlayerPlay; // output […]