Tag: alsa

Android> 4.0:想法如何logging/捕获内部audio(例如STREAM_MUSIC)?

几个月前,我用Android ICS(4.0)开发了一个android内核模块,它拦截了“pcmC0D0p”模块来获取所有的系统audio。 我的目标是通过AirPlay将所有audio(或至less播放的音乐)stream式传输到远程扬声器。 内核模块工作,但有几个问题(内核版本,根特权等),所以我停止了这个工作。 现在,我们有Android 4.1和4.2,我有了新的希望! 谁有一个想法如何捕捉在Android的audio? 我有以下想法: 通过蓝牙连接到相同的手机,设置路由到BT,并抓住“另一端”的audio:这不应该工作 拦截与之前做的内核模块的audio:硬核,得到它的工作,但不适用 杰克audio连接套件 :可悲的Android使用“tinyALSA”,而不是“ALSA”。 TinyALSA不支持像JACK这样的filter(但是这带来了内核模块的想法) 使用PulseAudio作为AudioFlinger的替代品,但这也不适用 编辑(忘记他们): 我从tinyALSA (Android上的ALSA)编译了“tinymix”(ALSA混音器的婴儿版本),并尝试将audio输出路由到麦克风input,但没有成功( 对我来说是不可理解的 )。 这也需要生根:不适用 我testing了OpenSL ES ,但是我不是C-crack,它以“我可以录制麦克风,但是没有更多”结束(也许我错了?) 我刚刚findROUTE_TYPE_LIVE_AUDIO : 支持实时audio路由的设备将允许媒体audiostream路由到支持的目的地。 这可以包括设备本身的内置扬声器或audio插孔,A2DP设备等等。 启动后,此路由对应用程序是透明的。 媒体stream上播放的所有audio将被路由到选定的目的地。 也许这有助于任何方面? 我正在用尽想法,但想“破解这个坚果”,也许有人可以帮助我? 编辑: 我在C和内核编码方面真的很新颖(但是我成功地创build了一个交叉编译的audio拦截模块),但是不能以任何方式监听PCM数据从用户空间(JAVA ,C层?)到内核空间(tinyALSA,内核模块),而不是黑客和生根?

适用于Android的OpenSL ES教程

我一直在尝试使用OpenSL ES库来提供用于使用android 2.3进行原生audio的工作,但是看起来头文件和规范的600页pdf是唯一可用的文档。 我应该在哪里查找示例,教程或function的简要概述?

使用TargetDataLine从Wine中捕获声音

我写了一个小型Java应用程序用于testing目的,从Ubuntu 12.04上的混音器捕获声音。 代码工作正常,我可以捕获所有应用程序的声音,除了在Wine下运行的任何应用程序。 每当我启动我的程序,启动Wine后,对targetDataLine.read()的调用将永远阻塞 当Wine不在后台运行时,如果没有input,则正确地输出0 ,或者如果有input,则正确地输出读取的字节数。 如果我在开始Wine之前开始我的程序,声音驱动程序将无法在酒中使用。 我曾尝试使用由Alsa提供的混音器以及默认设备,相同的结果。 我可以想象,葡萄酒以某种方式lockingAlsa(无论出于何种原因),但为什么简单地调用TargetDataLine.read()会导致Wine在Wine中失败? mixerInfo[0]在我的系统btw上是默认的,并且应用程序当然总是使用oracle最新的JRE(7)在Wine之外运行。 private void readSound () { byte tempBuffer[] = new byte[10000]; int cnt = 0; Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo(); System.out.println("Available mixers:"); for (int p = 0; p < mixerInfo.length; p++) System.out.println(mixerInfo[p].getName()); format = getAudioFormat(); DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, format); Mixer mixer = AudioSystem.getMixer(mixerInfo[0]); try { […]

在Android自定义ROM中修改通话中的语音播放

我想修改Android操作系统(AOSP官方图片),将预处理添加到正常的电话播放声音。 我已经实现了应用程序audio播放的过滤(通过修改HAL和audioflinger)。 只要定位到特定设备(Nexus 5X),我就行了。 另外,我只需要过滤回放 – 我不关心logging(上行链路)。 更新:要清楚 – 我可以修改Qualcomm特定的驱动程序,或Nexus 5X上运行的任何部分都可以帮助我修改通话播放。 更新#2: 我正在尝试创build一个Java层应用程序,实时将手机播放路由到音乐stream。 我已经成功地将其安装为系统应用程序,获取AudioRecord初始化AudioRecord权限。 但是,录音会给出空白样本,不会录制语音通话。 我的工作线程内的代码: // Start recording int recBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT); mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_DOWNLINK, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, recBufferSize); // Start playback int playBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT); mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, playBufferSize, AudioTrack.MODE_STREAM); mRecord.startRecording();; mTrack.play(); int bufSize […]

PyAudio工作,但每次都吐出错误信息

我正在使用PyAudio来录制来自麦克风的input。 由于audio对我来说录音很好,我应该试着简单地压制它的错误信息吗? 或者有没有办法解决呢? ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib […]