几个月前,我使用 Android ICS (4.0) 开发了一个 android 内核模块,它拦截“pcmC0D0p”模块以获取所有系统音频。
我的目标是通过 AirPlay 将所有音频(或至少播放的音乐)流式传输到远程扬声器。
内核模块可以工作,但是有几个问题(内核版本、root 权限等),所以我停止了这个工作。
现在,我们有了 Android 4.1 和 4.2,我有了新的希望!
谁知道如何在 Android 中捕获音频?
我有以下想法:
Connect via bluetooth到同一部手机,将路由设置为 BT 并在“另一端”获取音频:这不应该工作
像以前一样使用内核模块拦截音频:硬核,让它工作但不适用
JACK Audio Connection Kit : 遗憾的是,Android 使用“tinyALSA”而不是“ALSA”。 TinyALSA 不支持任何像 JACK 这样的过滤器(但这带来了内核模块的想法)
使用 PulseAudio 作为 AudioFlinger 的替代品,但这也不适用
编辑(忘记它们):
我从 tinyALSA 编译了“tinymix”(ALSA 混音器的婴儿版)。 (Android 上的 ALSA)并尝试将音频输出路由到麦克风输入 - 但没有成功( not understandable for me )。这也需要root:不适用
我测试了OpenSL ES ,但我不是C-crack,它以“我可以录制麦克风,但没有更多”结尾(也许我错了?)
我刚刚找到 ROUTE_TYPE_LIVE_AUDIO :
A device that supports live audio routing will allow the media audio stream to be routed to supported destinations. This can include internal speakers or audio jacks on the device itself, A2DP devices, and more.
Once initiated this routing is transparent to the application. All audio played on the media stream will be routed to the selected destination.
也许这有什么帮助?
我的想法不多了,但想“解决这个问题”,也许有人可以帮助我?
编辑:
我真的是 C 和内核编码的新手(但我成功地创建了一个交叉编译的音频拦截模块) - 但是在 PCM 数据的来源处以任何方式收听都不是可能的吗用户空间(JAVA、C 层?)到内核空间(tinyALSA、内核模块),无需破解和生根?
最佳答案
您必须通过本地套接字服务器传递音频流量:
创建本地套接字服务器
将音频http流地址修改为通过本地套接字服务器的路径,例如地址
http://example.com/stream.mp3 ->
http://127.0.0.1:8888/http://example.com/stream.mp3
8888 是您的套接字端口。
播放
http://127.0.0.1:8888/http://example.com/stream.mp3
使用默认媒体播放器
在本地套接字服务器中读取所有传入端口 8888 的请求,对其进行分析并传递给 example.com 服务器。
从 example.com 读取响应并将其传递给本地客户端(媒体播放器)。在这里您可以捕获音频流!
关于安卓 > 4.0 : Ideas how to record/capture internal audio (e. g。 STREAM_MUSIC)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14055272/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我已经看到了一些其他的问题,尝试了他们的建议,但没有一个对我有用。我已经使用Rails大约一年了,刚刚开始一个新的Rails项目,突然遇到了问题。我卸载并尝试重新安装所有Ruby和Rails。Ruby很好,但Rails不行。当我输入railss时,我得到了can'tfindgemrailties。我当前的Ruby版本是ruby2.2.2p95(2015-04-13修订版50295)[x86_64-darwin15],尽管我一直在尝试通过rbenv设置ruby2.3.0。如果我尝试rails-v查看我正在运行的版本,我会得到同样的错误。我使用的是MacOSXElCapitan版本10
考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://
我正在处理http://prepwork.appacademy.io/mini-curriculum/array/中概述的数组问题我正在尝试创建函数my_transpose,它接受一个矩阵并返回其转置。我对写入二维数组感到很困惑!这是一个代码片段,突出了我的困惑。rows=[[0,1,2],[3,4,5],[6,7,8]]columns=Array.new(3,Array.new(3))putscolumns.to_s#Outputisa3x3arrayfilledwithnilcolumns[0][0]=0putscolumns.to_s#Outputis[[0,nil,nil],[
考虑这个,它工作正常::>.to_proc.curry(2)[9][8]#=>true,because9>8然而,即使>是一个二元运算符,如果没有指定的元数,上面的代码将无法工作::>.to_proc.curry[9][8]#=>ArgumentError:wrongnumberofarguments(0for1)为什么两者不等价?注意:我特别想用提供的一个参数创建中间柯里化(Currying)函数,然后然后调用然后用第二个参数调用它。 最佳答案 curry必须知道传入的过程的数量,对吧?:-1来自arity的负值令人困惑,但基本上
在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para